• ベストアンサー

MS-EXCELのフーリエ解析について

自分で作成したFFTのプログラムを検証するためにマイクロソフトのエクセルの分析ツールにあるフーリエ解析を用いたところ、結果が合いません。 Microcal OriginというグラフソフトにもFFTの解析機能があるので、これで検証したところ、自分のプログラムと一致しました。 いろいろデータをかえて検証してみたところ、自分及びoriginの解析結果の実数部、虚数部ともに、データ個数/2をかけるとちょうどエクセルの結果と同じ値になることがわかりました(2048個のデータを用いると1024倍、16個のデータを用いると8倍)。 エクセルのフーリエ解析結果はなぜデータ個数/2がかかっているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#221368
noname#221368
回答No.3

 #1です。逆に質問めいた書き込みで申し訳ないのですが・・・。 >(時間/2)=(Δt×データ個数/2)  ファクタ2は、ナイキストあたりが関係しているのでしょうか?。だとすれば、「データ個数/2」という事自体は、けっこう一般的な気がします。  こっからはもろ予想です。じつは自分は現在プログラマーをやってまして、それ以前からMSとの付き合いは長いです(嫌になるくらい)。  その経験から言うと、   「データ個数/2」が一般的なら、必要に応じてΔtくらい自分で掛けろ!。まさにExcelなんだから簡単でしょう?. くらいの事は、MSはやりかねません。  確かにExcelは汎用なので、この態度は正しいのですが、分析ツール(Addin全般)に対する技術文書がほとんどないのが困りものです。  実際自分は、手製その他の市販ツールと結果が合わなかったために(それも大幅に)、ExcelのFFTは信じていませんでした。これには背景がありまして、グラフの近似曲線の最小二乗結果の精度が悪い、という事から、「FFTも最悪?」という偏見を持っていましたが、今回この質問に出会って、「あぁ、そういう事ですか」と了解できました。本当に「正確な技術文書」が欲しいです。  最後は愚痴っぽくなってしまいましたが、もし上記意見で納得頂けるなら、「こんな下らない事で時間を空費する」のはもったいない気がします。というのは、実際にプログラムしていると「こんな下らない仕様で時間を取らせやがって!」、などと激怒する事がけっこうあるからです。  ・・・すいません。また愚痴になっちゃいました・・・。

gogotakken
質問者

お礼

技術文書がないので、詳細はわかならいということですね。 それでは仕方ないですね。 大変参考になりました。回答ありがとうございました。

その他の回答 (2)

回答No.2

ddtddtddt様が記されているように、全ては流儀の違いでしょう。 連続関数のフーリエ変換も離散データのフーリエ変換も、正規化というのか、スケーリングの取り方はいろいろです。離散フーリエですと(FFTに限らず)、Σなんたらの計算のあとそれらをデータ点数で割るのもあるし、データ点数の平方根で割るのもあるし、割らないのもあるというわけで。この流儀の違いにより、フーリエ面の振幅自乗値の総和が元データの振幅自乗値の総和と等しくなったり、フーリエ面の振幅自乗値の平均が元データの振幅自乗値の総和と等しくなったりします。どういうのが好ましいかは分野とかその人の考え方次第というわけでしょう。 ただし、違いが「データ個数/2」であって「データ個数」ということですが、ファクタ2の違いはどこから来たものかは見当が付きません。

gogotakken
質問者

お礼

>全ては流儀の違いでしょう。 >ファクタ2の違いはどこから来たものかは見当が付きません。 ちなみに自分の分野では、一般的に(時間/2)=(Δt×データ個数/2)をかけるのが行われています(よって振幅の単位は実測単位に時間がかかったものとして表示する)。それは自分の分野での流儀であることを知っていたので、今回作ったプログラムは何もかけないものにしましたはずなのですが、エクセルと結果が一致しないので。 エクセルのような広く使われているソフトにある機能なので、どの分野の流儀が使われいるのかわかれば、調べられるのですが。。。 回答ありがとうございました。

noname#221368
noname#221368
回答No.1

 最近FFTをやっていないので、正確な事は忘れましたが、通常のFFTの流儀では、いわばフーリエ係数に、Δt=[時間幅]/[サンプリング数]を掛けてフーリエ振幅とする、のでしたっけ?。  自分は、Δtを掛けない結果の出し方が好きで、そうしていたら、FFTに詳しい後輩からお叱りを受けました。その辺りの流儀の差ではないでしょうか?。

gogotakken
質問者

お礼

>フーリエ係数に、Δt=[時間幅]/[サンプリング数]を掛けて単位周波数当たりで基準化する(サンプリング周波数で割る)というのは、パワースペクトルで行うのはよく行われていますが、フーリエ自体でも行うのですね。 ただし、今回の件はむしろサンプリング数がかかっているので、どのような流儀・分野で行う方法なのかよくわかりませんでした。 回答ありがとうございました。

関連するQ&A