フーリエ変換

フーリエ変換とはあるデータ列D=(d1, d2, d3, ... dN)を
様々な周波数F=(f1, f2, f3, ... fN)の波(sinカーブ, cosカーブ)
に分解する方法である。
また様々な周波数の波を元のデータ列に戻すこともできる
(逆フーリエ変換)。
フーリエの基本概念は周期のあるデータ列は様々な周波数の波(sin,cos)
を合成したものとすることで、音楽やスペクトル解析など
幅広い分野で使われている。
でもふとフーリエ変換を使ってみようと思っても、
なかなか自分でプログラムを元から作成するのは敷居が高い(>_<)
そこでGoogle先生でサーチしてみたところ、いいもの発見(^o^)v

FFTW3(http://www.fftw.org/)

フーリエ変換を少ない計算時間で行う高速フーリエ変換(FFT)のC言語ライブラリ。
いろいろなサイトで引用されていて、FFTのライブラリの中では一番いいらしい。
(もちろんフリーですd(^-^))
基本的な使い方は

  1. データ領域の確保
  2. データ列の作成(in:複素数として扱う)
  3. planの作成
  4. FFTの実行
  5. planの破壊
  6. フーリエ変換の結果(out:in同様に複素数)

#include
#include
#include
#include

using namespace std;

fftw_complex *in, *out;
fftw_plan plan;
int i;
int size = 100;

//secure data region
in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * size);
out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * size);

//input data
for(i=0; i

最初自分のVineLinuxマシンに

apt-get install "fftw3"

でインストールして使っていたが、結構簡単で使いやすく、
スピードも速いので、今はSEサンに頼んで大学のスパコン
インストールしてもらって使ってます。