一、FFTW简介
FFTW(Fastest Fourier Transform in the West)是用来计算一维或者多维的离散傅里叶变换,输入可以为实数序列也可以为复数序列的C语言的子函数库,FFTW是免费软件,是作为fft函数库的各种应用的上佳选择。这是MIT两位老爷爷开发的,据说是史上最快FFT变换。
二、安装过程
1.下载安装包
登陆http://www.fftw.org/install/windows.html
下载 32-bit version: fftw-3.3.4-dll32.zip (2.4MB)
2.解压至桌面,并将所有文件复制到对应VS中VC\bin中(因为涉及到后边CMD中各种自己也不清楚的命令,这里完全按照自己尝试很久才成功的方法介绍)
D:\visualstudio\VC\bin
3.生成lib文件
为生成fftw库文件,预先工作:我们需要几个VS的底层文件,才能激活lib.exe,目录与文件如下图寻找:
打开VS的命令提示
按图中逐次输入:
(1)DOS下进入某一个盘用D:,而进入子文件需要加上cd ;
(2)上一步按回车后,出现了对应路径后多了一个>,接着输入lib.exe
(3)依次输入:
lib /def:libfftw3-3.def
lib /def:libfftw3f-3.def
lib /def:libfftw3l-3.def
生成默认的X86架构lib文件,可以看到在VC\bin对应的路径下多了lib和esp文件,胜利在望。
4.配置dll文件
将解压到桌面fftw-3.3.5-dll32文件夹中的libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll复制到C:\Windows\SysWOW64和C:\Windows\System32下(以防万一32位和64位都放)。
5.配置头文件
将解压到桌面fftw-3.3.5-dll32文件夹中的fftw3.h放到D:\Visual Studio 10.0\VC\include下。
6.VS中库目录添加fftw库
在VS中,项目—>属性—>配置属性—>VC++目录中的包含目录,引用目录,库目录加上D:\visualstudio\VC\bin
最后,程序测试(注意:如果程序不能运行可以将D:\visualstudio\VC\bin\中的libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll放到工程目录下,这一步备选,自己注意改为自己的vs路径)
#pragma comment(lib, "D:\\visualstudio\\VC\\bin\\libfftw3-3.lib")
#pragma comment(lib, "D:\\visualstudio\\VC\\bin\\libfftw3f-3.lib")
#pragma comment(lib, "D:\\visualstudio\\VC\\bin\\libfftw3l-3.lib")
#include <stdio.h>
#include <stdlib.h>
#include <fftw3.h>
#define N 5
int main()
{
fftw_complex *in, *out;
fftw_plan p;
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
int n;
for(n=0; n<N; n++)
{
in[n][0] = 1;
in[n][1] = 2;
}
//printf("\n");
fftw_execute(p);
fftw_destroy_plan(p);
for(n=0; n<N; n++)
{
printf("%3.2lf+%3.2lfi ", out[n][0], out[n][1]);
}
printf("\n");
fftw_free(in); fftw_free(out);
return 0;
}
转载一些VS常出现的问题及解决办法:
一、出错:Cannot find or open the PDB file
在网上找到了方法,一次就搞定了:
1、在VS2010中,工具->选项->调试->符号,选择Microsoft符号服务器,选择一个缓存路径,然后确认。
2、编译运行任何一个小程序(可能会有点慢)。
3、在VS2010中,工具->选项->调试->符号,去掉Microsoft符号服务器,确认。
二、运行时,控制台一闪而逝,输出窗口显示“ *.exe 本机已退出,返回值0”
原谅我如此小白的问题,但我是真的不懂,网上查了才知道,原来我把“运行”点成了“编译”,用Ctrl+F5或是调试->开始执行,问题解决!