- 締切済み
吸収スペクトルの波形分離方法
分光光度計の測定値(eV-ABS)のデータがあります。 このデータをエクセルで波形分離したいのですが 検索しても詳しい方法がわかりません。 ご存知の方詳しくご教授して頂けないでしょうか。 測定値をガウシアンフィッティングを行い 波形分離したいと考えています。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- c80s3xxx
- ベストアンサー率49% (1634/3294)
> ・広がりを表すσとは半値幅と考えても良いのでしょうか? 違いますが,そんなのはガウス関数の式でx=σ,あるいはσ/2なりを入れてみればわかることではないですか? > ・ピークが何個あるか不明の場合ですが、今回教えて頂いた方法のように > 一度に3個の波形に分離するのではない方法はあるのでしょうか? ここから先は工夫してみたらいいのではないですか. 要は最小二乗法の考えと,ソルバの使い方がわかれば,フィッティングをどういう筋道でやるかどうかは,いろいろと手はあるわけです. 私の示した方法はあくまでもある一例で,いわばもっとも原理的なアプローチです.ここまでの意味がわかったんなら,あとは各自必要に応じて工夫してみたらいいのです. > 1.Aピークのガウス関数を求める (以下略) この方法でうまくいくときもいかないときもあるでしょう. > ピークを自分で決めるので無理な場合も多そうですが、 微分してみるとかいう手もあります. とりあえずわかる分で試してみて,その合成を見て残りいくつあるか推定していくとか,アプローチはいろいろあるでしょう.
- c80s3xxx
- ベストアンサー率49% (1634/3294)
Excel でやらなくてはいけない意味がわかりませんが... Excel 自体に波形分離の機能があるわけではないので,最小二乗法の考えを使ってソルバーを使うってことになるでしょうか. ガウス関数で使うパラメータは,中心を示すμと広がりを表すσ,そして全強度に関係するAの3つで,f=A/exp[(x-μ)^2/(2σ^2)] です.規格化されていれば,1/A=σ×(2π)^(1/2) です. まず,A列にエネルギー,B列に吸光度の元データを入れて,これを散布図で表示します. ピーク数を見て,とりあえず3つに分離できると判断できたとしましょう.はっきりしないピークがあるかもしれませんが,それはとりあえず無視します. それぞれのピークの位置から,ガウス関数のμの値をだいたいでいいので読み取ります.μ1からμ3までが出てきます.H列あたりにこれを書き込んでおきます.その他のAとσに相当する数値も適当なセルに書き込み,これを使って (絶対参照をうまく使うのがポイントです) 3つのガウス関数のデータ列をC,D,E列に作ります.もちろん,A列をxにするわけです.仮定したガウス関数のパラメータが初期値になります. そして,F列にC+D+Eを計算させ,これをA列を横軸にした散布図にします. 仮定したパラメータは適当ですから,まともに実際のスペクトルを再現できていないはずです. そこで最小二乗法の考えを使います.F列(計算されたスペクトル)とB列 (実測スペクトル)の差の二乗をG列に取ります.そして,この合計値をH列のあいているところに計算します(残差二乗和を求める). 求められた残差二乗和を最小にするように,ガウス関数のパラメータ (ここでは全部で9個ある) を調節すればいいのです. 手作業でこれをやるのは大変ですから,ここでソルバーというのを使います.これを使うと,あるセルの値が最小になるように,あるセルの値を修正する,という試行錯誤をコンピュータが組織的にやってくれます.初期値があまり変だとうまく収束しなかったり,めちゃくちゃな値を出してきますので,初期値を適当にうまく取る必要があります.
- c80s3xxx
- ベストアンサー率49% (1634/3294)
前にも紹介したことがありますが,とりあえず試してみてはどうですか. http://www.unipress.waw.pl/fityk/
お礼
回答ありがとうございました。 波形分離の可能なソフトは持っていますが一度試してみたいと思います。 ただエクセルで計算式を入れて波形分離を行いたいと 考えていますので、もしご存知でしたら再度回答して頂けないでしょうか? 宜しくお願いします。
お礼
再度の回答ありがとうございました。 ネットが出来ない環境下だった為、お礼が遅くなり申し訳ありません。 「Excel でやらなくてはいけない意味」は申し訳ないのですが 特に理由はありません。しいて言うなら個人的に出来るように なりたいから・・・ですね。 回答で頂いた画像のようなグラフデータを作成し、実施してみた結果 波形分離出来ました。ありがとうございました。 最後にもう少しだけ教えて頂きたいのですが、 ・広がりを表すσとは半値幅と考えても良いのでしょうか? ・ピークが何個あるか不明の場合ですが、今回教えて頂いた方法のように 一度に3個の波形に分離するのではない方法はあるのでしょうか? 説明し難いのですが、回答で頂いた画像で言えば X軸20のピークA、X軸40のピークB、X軸70のピークCとします。 1.Aピークのガウス関数を求める 2.Aピークガウス関数結果を差し引いた吸光度データを算出 3.2の吸光度データからBピークのガウス関数を求める 以下これを繰り返して吸光度データが平坦になるまで繰り返す この方法が可能ならば何個のピークが重なった波形か判断可能だと 思うのですが・・・ ピークを自分で決めるので無理な場合も多そうですが、もし可能ならば 非常に面白いと思ったので・・・ 申し訳ありませんが宜しくお願いします。