1、下载FFTW动态库文件。链接为http://www.fftw.org/install/windows.html#fftw2,该库是一个跨平台的动态库,由于我们是在Windows下使用,因此只需要下载windows版本即可。该版本又可以分为32bit和64bit版本,使用过程基本类似。这里以64bit版本的使用为例进行说明。下载fftw-3.3.2-dll64.rar,解压后主要文件有:
fftw3.h
libfftw3-3.def
libfftw3f-3.def
libfftw3l-3.def
libfftw3-3.dll
libfftw3f-3.dll
libfftw3l-3.dll
这是我们需要的文件,其他可以不用管。
2、生成引导库文件(.lib)。在调用动态库编译工程时,需要引导库lib文件,可以通过lib.exe(VS环境中已经附带该工具无需下载)将.def文件生成相应的lib文件。打开程序->Microsoft Visual Studio 2008->Visual StudioTools->Visual Studio x64 Win64 Command Prompt命令行工具,分别键入命令:
lib /machine:x64 /def:libfftw3-3.def
lib /machine:x64 /def:libfftw3l-3.deflib /machine:x64 /def:libfftw3f-3.def
执行完毕后,即可生成3个lib文件:libfftw3-3.lib libfftw3f-3.lib libfftw3l-3.lib。由于是编译64位版本,在命令行中添加/machine:x64,在开始时由于漏掉了该参数,导致编译一直失败,这里应特别注意。如果是32bit版本的话,则不需要该参数。
3、利用CMake配置工程。首先建立一个源码目录source,这里存放代码文件。在source目录下建立一个子目录FFT,用于存放FFTW的库文件。将第二步骤完成的FFTW库文件(fftw3.h libfftw3-3.lib libfftw3f-3.lib libfftw3l-3.lib)拷贝至该目录下。在source目录下,建一个工程文件FFTWTest.cpp(可以暂时先不写代码)和CMakeLists.txt文件。 CMake利用CMakeLists.txt文件对工程进行配置,这里给出CMakeLists.txt主要内容。Project ( FFTWTest ) cmake_minimum_required ( VERSION 2.6 ) include_directories(${PROJECT_SOURCE_DIR}/FFT/) link_directories(${PROJECT_SOURCE_DIR}/FFT/) add_executable ( FFTWTest FFTWTest.cpp )完成后保存文件,在source目录同级目录下,建立bin-X64目录用于存储工程文件。打开CMake,选择source为源文件目录,bin-X64为编译目标地址,配置完成后生成相应的工程。target_link_libraries( FFTWTest libfftw3-3 libfftw3f-3 libfftw3l-3)
4、编写工程文件代码,调用FFTW库完成快速傅里叶变换。在bin-X64目录下,打开生成的工程文件FFTWTest.sln,然后打开FFTWTest.cpp文件,添加代码如下:
完成后,编译无错后,即可运行。#include "fftw3.h" int main() { fftw_complex *in, *out; fftw_plan p; int N= 8; 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] = 1.0; in[i][1] = 0.0; printf("%6.2f ",in[i][0]); } printf("\n"); p=fftw_plan_dft_1d(N,in,out, FFTW_FORWARD, FFTW_ESTIMATE); fftw_execute(p); /* repeat as needed*/ for(int j = 0;j < N;j++) { printf("%6.2f ",out[j][0]); } printf("\n"); fftw_destroy_plan(p); fftw_free(in); fftw_free(out); return 0; }