在C++中調用FFTW


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

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

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

獲取FFTW

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

生成lib文件

打開VS自帶的 “x86_x64 Cross Tools Command Prompt” ,cd到之前的解壓文件夾

鍵入命令

lib /machine:x86 /def:libfftw3-3.def

如果是64位則鍵入命令

lib /machine:x64 /def:libfftw3-3.def

以上命令產生了lib文件libfftw3-3.lib,應不同精度要求也可對libfftw3f-3.def及libfftw3l-3.def文件使用相同命令來產生相應lib文件

在C++中調用FFTW

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

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

在cpp文件中加入代碼

#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...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM