FFTW実行サンプル

さてこれらを実行するためにはFFTWをインストールしなければなりません。
http://www.fftw.org/install/windows.html
にいき、Alessio Massaro氏が作成したWindows binaries(fftw-3.0.1-w32-pll.zip)をダウンロードします。
で、

コピーします。
これでうちの環境では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などで確認してみると面白いかもです。
グラフ出力を添付するのだるかったんで、今回はこれくらいで。各自やってみてね。