2010年9月2日 星期四
Code Blocks 環境使用 FFTW
FFTW(Fastest Fourier Transform in the West), 這是一個計算DFT(Discrete Fourier Transform, 離散傅立葉轉換)的C語言函式庫,而且是目前世界公認執行速度最快的傅立葉轉換軟體。FFTW是由當時為MIT博士班的兩位學生Matteo Frigo 及 Steven G. Johnson 在1997年所發明,並在1999年獲得Wilkinson數值軟體獎(J. H. Wilkinson Prize for Numerical Software)。
使用方法:
1.先到 FFTW官網 Download FFTW檔案(Windows 系統可到這下載)選擇電腦的位元數。
2.將下載完的檔案解壓縮,將檔案 libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll 複製到你想要放置的位置(我是放在C:\WINDOWS\system32)。
3.將檔案 fftw3.h 複製到 Code Blocks 裡的 include 資料夾,(例如:C:\Program Files\CodeBlocks\MinGW\include)。
4.這些動作完成後開啟 CodeBlocks 程式,點選 Settings/Compiler and debugger...
5.點選 Linker settings/Link libraries:/add
6.選擇 libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll 檔案
7.大功告成~~馬上使用下列程式來做測試
#include <iostream>
#include <fftw3.h>
using namespace std;
int main()
{
//資料宣告
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);
//製作輸入資料
for(int i=0; i<N; i++)
{
in[i][0] = i;
in[i][1] = i+1;
}
//產生最佳化的程式碼
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
//執行這個最佳化的程式碼
fftw_execute(p); /* repeat as needed */
//釋放空間
//fftw_destroy_plan(p);
//fftw_free(in); fftw_free(out);
for(int i=0; i<N; i++)
{
if(out[i][1]>=0)
cout << "Resutl[" << i << "]=" << out[i][0] << "+" << out[i][1] << "j\n";
else
cout << "Resutl[" << i << "]=" << out[i][0] << out[i][1] << "j\n";
}
return 0;
}
p.s.另外補充一下
fftw_plan p;
宣告 p 為 fftw 運算
fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
一維 fftw 運算(N點資料(整數),輸入資料,輸出資料,
運算種類(FFTW_FORWARD 為 FFT 運算;
FFTW_BACKWARD 為 IFFT 運算),
運算速度(FFTW_ESTIMATE 為 速度次佳化運算;
FFTW_MEASURE 為 速度最佳化運算))
fftw_plan_dft_2d(height, width, in, out, FFTW_FORWARD,
FFTW_ESTIMATE);
複數的資料型態:
fftw_complex ComplexNum;
ComplexNum[0] = 10.1; //實部
ComplexNum[1] = 20.5; //虛部
多維 DFT:
將fftw_plan_dft_1d改為:
fftw_plan_dft_2d
fftw_plan_dft_3d
"注意"IFFT 運算:
此版本IFFT運算沒有做normalize所以要自己寫迴圈除以N
最後修改:
9/02/2010 01:06:00 上午
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言