はじめに
先日(といっても1週間くらい前のことですが)、
実験で取得したデータをFFTで変換し、その結果得られた周波数領域のデータの各点の「周波数軸」方向の間隔って、どう計算すればよいかわかりますか?
という趣旨の質問を受けたのですが、即答することができず、次の日に回答するようなこととなってしまいました。お恥ずかしい限りです。( ;´・ω・`)
FFT,DFT,DCTなどのフーリエ変換方面は今の仕事では必ずしも専門ではないのですが、道具として使う可能性があるところで仕事をしていることと、質問されて翌日に答えても役に立つレベルであるということは、
「少し勉強(おさらい)しておけば、何かしらの役には立つんじゃね?」
と思ったので、ちょっと勉強してみることにしました。
そういうことなので、間違いとかそこそこあるかもしれませんが、適当に補って読んでいただけると幸いです。
最初の質問に対する回答
まず、最初の質問に対する回答から考えてみます。
FFTの入力とする観測データ(データはすべて実数値であるとします。)を得るために要した時間を
になります。
この観測データに対してFFTを実行した結果得られるデータは(複素共役になっているナイキスト周波数より後の部分は負の周波数のデータであり、対応する正の周波数のデータが存在しているので、ここでは除外して考えると)、
となります。
冷静に考えればそれほど難しい話ではないんですが、きれいさっぱり忘れてましたね。
ちょっと気になったので、計算してみる。
ここでは、具体的なフーリエ変換の計算を行わないまま記事を書いてきましたが、いったん考えたり調べたりし始めると
「そういえば、正弦波のDFTってどうやって求めるんだっけ? ってか、なんで
スポンサーリンク
とか、気になり始めたりして夜も眠れなくなることは以前ほどはなくなった(ベッドをシモンズのやつに交換したので、寝つきが格段に良くなりました。(`・ω・´))のですが、それでも導出方法くらいは思い出しておきたかったので、他のサイトの記事を参考にしつつ、計算してみることにしました。
まず、余弦関数のDFTを計算します。
まず、周波数
(
すると、変換の結果得られるスペクトルデータ
上式の右辺第2項に
と式変形できます。
(
第1項は
と計算できます。
となります。(
となります。正の周波数と負の周波数の成分が出てきますが、
正弦関数のDFT等を計算します。
次に、
を計算してみます。これは、余弦関数の場合と同様に
と表せることを利用して、
と計算できます。2個のデルタ関数っぽい関数の重ね合わせで表現されるのは余弦関数の場合と同様ですが、正の周波数成分は余弦関数の正の周波数成分を複素平面上で
もうちょっと一般に、位相(初期位相)
のDFTは
になります。
まとめ
ここまで超簡単ではありますが、フーリエ変換、特にDFTを中心におさらいしたことを書きました。
最近はfftwみたいな優秀なライブラリがあったりするので、自分でFFTのプログラムを作らなくてもデータを食わせれば計算結果を得ることはできます。ただ、計算結果の見方や計算結果に対する解析の方法くらいは頭に入っていないと、また次に急に質問が来た時に対応できないので、おさらいのタイミングとしては悪くはなかったのではないかと思います。
参考文献
本記事を書くにあたり、以下のサイトの記事を参考にしました。筆者の皆様方には感謝申し上げます。