FFTW是一個能夠進行可變長度一維或多維DFT的開源C程序庫,是目前最快的FFT算法實現。html
本文簡述了在Windows平臺上,如何在C++中調用FFTW,所使用的IDE爲Visual Studio 2017。ios
FFTW的詳細信息可在 http://www.fftw.org 中查看算法
在 http://www.fftw.org/install/windows.html 中下載32位或64位版並解壓shell
打開VS自帶的 「x86_x64 Cross Tools Command Prompt」 ,cd到以前的解壓文件夾windows
鍵入命令測試
lib /machine:x86 /def:libfftw3-3.def
若是是64位則鍵入命令spa
lib /machine:x64 /def:libfftw3-3.def
以上命令產生了lib文件libfftw3-3.lib,應不一樣精度要求也可對libfftw3f-3.def及libfftw3l-3.def文件使用相同命令來產生相應lib文件code
將下列三個文件粘貼到與cpp文件相同的目錄下htm
在cpp文件中加入代碼ci
#include "fftw3.h" #pragma comment(lib, "libfftw3-3.lib")
#include <iostream> #include "fftw3.h" #pragma comment(lib, "libfftw3-3.lib") //實部與虛部 #define REAL 0 #define IMAG 1 using namespace std; int main() { /* *fftw_complex 是FFTW自定義的複數類 *引入<complex>則會使用STL的複數類 */ fftw_complex x[5]; fftw_complex y[5]; for (int i = 0; i < 5; i++) { x[i][REAL] = i; x[i][IMAG] = 0; } //定義plan,包含序列長度、輸入序列、輸出序列、變換方向、變換模式 fftw_plan plan = fftw_plan_dft_1d(5, x, y, FFTW_FORWARD, FFTW_ESTIMATE); //對於每一個plan,應當"一次定義 屢次使用",同一plan的運算速度極快 fftw_execute(plan); for (int i = 0; i < 5; i++) { cout << y[i][REAL] << " " << y[i][IMAG] << endl; } //銷燬plan fftw_destroy_plan(plan); cout << "\nPress Enter to exit..." << endl; cin.get(); return 0; }
輸出結果
10 0 -2.5 3.44095 -2.5 0.812299 -2.5 -0.812299 -2.5 -3.44095 Press Enter to exit...