在C++中調用FFTW

FFTW是一個能夠進行可變長度一維或多維DFT的開源C程序庫,是目前最快的FFT算法實現。html

本文簡述了在Windows平臺上,如何在C++中調用FFTW,所使用的IDE爲Visual Studio 2017。ios

FFTW的詳細信息可在 http://www.fftw.org 中查看算法

獲取FFTW

http://www.fftw.org/install/windows.html 中下載32位或64位版並解壓shell

生成lib文件

打開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

在C++中調用FFTW

將下列三個文件粘貼到與cpp文件相同的目錄下htm

  • fftw3.h
  • libfftw3-3.dll
  • libfftw3-3.lib

在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...
相關文章
相關標籤/搜索