FFTW実行サンプル
さてこれらを実行するためにはFFTWをインストールしなければなりません。
http://www.fftw.org/install/windows.html
にいき、Alessio Massaro氏が作成したWindows binaries(fftw-3.0.1-w32-pll.zip)をダウンロードします。
で、
- [fftw3.dll]を[C:\WINDOWS\system32]へ
- [fftw3.lib]を[C:\Program Files\Microsoft Visual Studio 8\VC\lib]へ
- [fftw3.h]を[C:\Program Files\Microsoft Visual Studio 8\VC\include]へ
コピーします。
これでうちの環境ではOKでした。あ、ちなみにうちの環境は
IntelMac上で動くWindowsXP SP2
コンパイラはVisualC++2005
うわさによるとVisualC++2003ではなんかうまく動かない〜みたいなことが本サイトにあったけど、でもうまくいってる例もあるようでよくわからないです。うちにゃ実験環境もないし。
では早速サンプル作成。
#include "stdafx.h" #include <fftw3.h> #include <math.h> #include <fstream> #define pi 3.1415 using namespace std; int _tmain(int argc, _TCHAR* argv[]) { const int N = 256; fftw_complex *in, *out; fftw_plan p; in = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * N); out= (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * N); p = fftw_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_ESTIMATE); for(int i = 0;i<N;i++){ if(i<30||i>200){ in[i][0] = 1; } else{in[i][0] = 0;} in[i][1] = 0; } fftw_execute(p); ofstream fout("output.txt"); for(int i = 0;i<N;i++){ fout<<i<<" "<<out[i][0]<<" "<<out[i][1]<<endl; } fout.close(); fftw_destroy_plan(p); fftw_free(in); fftw_free(out); return 0; }
とすると、フーリエ変換された結果がoutput.txtに出力されます。
結果をgnuplotなどで確認してみると面白いかもです。
グラフ出力を添付するのだるかったんで、今回はこれくらいで。各自やってみてね。