笔者是C++的初学者,也是VS2015的初学者,最近的编程内容涉及到了傅里叶变换,于是查阅了很多资料,得知有FFTW这个十分强大的库,下面从下载到安装详细介绍。
一、FFTW简介
FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. Johnson 开发。可计算一维或多维实和复数据以及任意规模的DFT。
FFTW 通常比目前其它开源Fourier变换程序都要快,最新版本为fftw-3.3.8。FFTW 受到越来越多的科学研究和工程计算工作者的普遍青睐,并为量子物理、光谱分析、音视频流信号处理、石油勘探、地震预报、天气预报、概率论、编码理论、医学断层诊断等领域提供切实可行的大规模 FFT 计算。
二、FFTW配置过程
(一)、下载
- 登陆http://www.fftw.org/install/windows.html,下载 64-bit version 。
笔者的电脑是64位系统,所以选择的是第二个。 - 解压到自己的盘符(不建议解压在C盘里), 例如:E:\fftw-3.3.5-dll64 .
(二)、安装
- 首先找到你vs2015的安装目录,我的是D:\Microsoft Visual Studio 14.0\VC\bin\amd64,把解压后的fftw-3.3.5-dll64中的libfftw3-3.def、libfftw3f3.def、libfftw3l-3.def复制到上面amd64文件目录下。
- 命令行窗口打开amd64文件夹(lib.exe所在目录)。注意:键入cd D:\Microsoft Visual Studio 14.0\VC\bin\amd64
- 在弹出的命令窗口内依次输入以下指令:
lib /def:libfftw3-3.def
lib /def:libfftw3f-3.def
lib /def:libfftw3l-3.def
此时,amd64目录下生成了这样的lib库文件:
- 将上面生成的文件复制到E:\fftw-3.3.5-dll64文件夹下。
- 这一步遇到的问题,如图所示,这是之前看别人的教程做的,结果出错了,按上述步骤就不会出错。
(三)环境配置
1.新建vs2015工程,使用时要记得#include”fftw3.h“。
2.配置
(1)”项目“——>”项目属性”——>”配置属性”——>”链接器”——>”输入”——>”附加依赖项”,将以下三项添加进去:
(2).”项目“——>”项目属性”——>”配置属性”——>”VC++目录”——>”包含目录”,把 E:\fftw-3.3.5-dll64添加进去:
(3).”项目“——>”项目属性”——>”配置属性”——>”VC++目录”——>”库目录”:
三、测试
1…把生成的libfftw3-3.dll、libfftw3f-3.dll、libfftw3l-3.dll 三个dll文件复制到项目文件夹里(有.vcxproj文件的那个文夹)。
2.设置项目为64位
工具栏->设置平台为X64 (如果你刚才配置的是Release,那就选Release)
3.项目属性——>链接器——>高级——>目标计算机——>MachineX64(/MACHINE:X64)
这样就配置完成了。去加个头文件#include "fftw3.h"试一下会不会报错,如果报错,从头重新来一遍。
4.示例代码
#include "fftw3.h"
int main()
{
fftw_complex *in, *out;
fftw_plan p;
int N = 8;
int i;
int j;
in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
for (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 (j = 0; j < N; j++)
{
printf("%6.2f ", out[j][0]);
}
printf("\n");
fftw_destroy_plan(p);
fftw_free(in);
fftw_free(out);
getchar();
return 0;
}
运行结果:
——EDN——