OctaveでFFT

超簡単です。問題はどうやってデータをインポートするかなんだけど、普通の形式でデータが与えられていればまあ問題なかろう。
手順は、

  1. データを読み込む
  2. fft()関数でFFT
  3. 結果をプロット

ある変数hogeにデータが入ってたとしたら、それをfft(hoge)とするだけでFFTできるらしい。素晴らしい。そしてよく見るパワースペクトルにしたいときは、絶対位置をとって、それにサンプリングレートを掛ければ良いので、サンプリングレートをDeltaとすると、Delta*abs(fft(hoge))で終わり。詳細は「続きを読む」で。
最初にデータを読み込みます。時間tに対してch1とch2のデータが、

#t  ch1 ch2
0  0.1  0.2
1  0.15 0.25
...

として、hoge.datというファイルに格納されてたとします。
Octaveを起動して、

> load hoge.dat

hogeという変数に行列の形でデータがコピーされます。
このままだとちょっとあれなので、時間tはtという変数に、ch1のデータはch1という変数に、ch2のデータはch2という変数に格納することとします。

> t = hoge (:, 1);
> ch1 = hoge (:, 2);
> ch2 = hoge (:, 3);

これでデータの読み込みは終了。正直この簡単さにちょっとビビる。
そして、次にFourier変換されたものをch1とch2についてそれぞれFch1とFch2として、そこにスペクトルをぶち込みたいときは、サンプリングレートをDeltaとして、

> Fch1 = Delta * abs (fft (ch1));
> Fch2 = Delta * abs (fft (ch2));

になります。
また、周波数Omegaは、Omega(n)=n/Δで与えられてるので、サンプリング数NとサンプリングレートDeltaによって、

> Omega = linspace (0, 0.5, N);

になります。ここでlinspace(0, 1, N)は、0から1までN分割して値のリストを与える関数です。
そして、このOmegaとFch1をプロットすれば終了で、

> gplot Omega, Fch1

で終わり。

http://buran.u-gakugei.ac.jp/~mori/LEARN/Octave/FFT/
http://www.mnet.ne.jp/~tnomura/fft.html