Windows下FFTW库的安装:
1. 从网站http://www.fftw.org/install/windows.html上下载最新的预编译文件:
32-bit version: fftw-3.2.2.pl1-dll32.zip (1.8MB)
64-bit version: fftw-3.2.2-dll64.zip (2.2MB)
(这里建议下载32位机文件/64位向下兼容)
2. 使用Lib.exe生成相应的Lib文件 :vs2010的安装路径为:D:Program Files (x86)Microsoft Visual Studio 10.0
Lib.exe在VS的安装目录下:
32位版本:D:Program Files (x86)Microsoft Visual Studio 10.0Common7IDE (32位X86)
64位版本:D:Program Files (x86)Microsoft Visual Studio 10.0VCinamd64 (AMD64位CPU)
D:Program Files (x86)Microsoft Visual Studio 10.0VCinx86_ia64(英特尔X86架构和ia64(ia64安腾架构,应用很少很少))
D:Program Files (x86)Microsoft Visual Studio 10.0VCinx86_amd64 (AMD64位和英特尔X86CPU,最常用)
cmd进入到Lib.exe目录下,以64位为例:
进入到D:Program Files (x86)Microsoft Visual Studio 10.0VCinx86_amd64。
将D:Program Files (x86)Microsoft Visual Studio 10.0Common7IDE:mspdb100.dll,mspdbcore.dll,mspdbsrv.exe,msobj100.dll 复制到D:Program Files (x86)Microsoft Visual Studio 10.0VCinx86_amd64里面。
把libfftw3-3.def,libfftw3f-3.def,libfftw3l-3.def也拷到bin目录对应的平台下——x86_amd64里面。
执行Lib命令,生成库文件libfftw3-3.lib libfftw3f-3.lib libfftw3l-3.lib
32位版本:
lib /def:libfftw3f-3.def
lib /def:libfftw3-3.def
lib /def:libfftw3l-3.def
64位版本:
lib /machine:x64 /def:libfftw3f-3.def
lib /machine:x64 /def:libfftw3-3.def
lib /machine:x64 /def:libfftw3l-3.def
3.将libfftw3f-3.dll libfftw3-3.dll libfftw3l-3.dll放入C:WindowsSysWOW64(32位放在windows/system32)中,然后将生成的库文件libfftw3-3.lib libfftw3f-3.lib libfftw3l-3.lib放入vc中的lib文件夹,把fftw3.h放入vc中的include文件夹。
新建工程应用:
头文件:#include”fftw3.h“,
设置参数:”项目“==>"项目属性"==>"配置属性"==>"链接器"==>"输入"==>"附加依赖项",将以下三项添加进去:
libfftw3-3.lib
libfftw3f-3.lib
libfftw3l-3.lib
代码:
1 // test_6.cpp : 定义控制台应用程序的入口点。 2 // 3 #include "stdafx.h" 4 #include "fftw3.h" 5 #include <time.h> 6 int main() 7 { 8 clock_t start,finish; //定义clock()函数返回值保存变量 9 start=clock(); //启动计时,调用clock()开始每过千分之一毫秒start+1 10 fftw_complex *in, *out; //定义两个复数指针,分别存放输入输出 11 fftw_plan p; //定义一个计划,计划名叫p 12 int N= 4096; //fft计算的点数 13 in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); //开辟存放起始数据的内存空间 14 out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); 15 /****打印初始值****/ 16 for( int i=0; i < N; i++) 17 { 18 in[i][0] = i; 19 in[i][1] = 0.0; 20 printf("%6.2f+%6.2fj",in[i][0],in[i][1]); 21 } 22 printf(" "); 23 /***制定计划p**/ 24 p=fftw_plan_dft_1d(N,in,out, FFTW_FORWARD, FFTW_ESTIMATE); 25 /***执行指定的计划p**/ 26 fftw_execute(p); 27 /******打印输出fft变换之后的数据*****/ 28 for(int j = 0;j < N;j++) 29 { 30 printf("%6.9f+%6.9fj ",out[j][0],out[j][1]); 31 } 32 printf(" "); 33 /****完成计划之后,撤销计划******/ 34 fftw_destroy_plan(p); 35 /*****释放内存空间******/ 36 fftw_free(in); 37 fftw_free(out); 38 /***统计执行时间****/ 39 finish=(double)clock(); 40 printf("time=%f ",(double)(finish-start)/CLOCKS_PER_SEC); 41 return 0; 42 }