当前位置:   article > 正文

C++学习 | VS2015下配置FFTW3库的方法,亲测实用_fftw3.h

fftw3.h

笔者是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配置过程

(一)、下载

  1. 登陆http://www.fftw.org/install/windows.html,下载 64-bit version 。
    网页截图
    笔者的电脑是64位系统,所以选择的是第二个。
  2. 解压到自己的盘符(不建议解压在C盘里), 例如:E:\fftw-3.3.5-dll64 .

(二)、安装

  1. 首先找到你vs2015的安装目录,我的是D:\Microsoft Visual Studio 14.0\VC\bin\amd64,把解压后的fftw-3.3.5-dll64中的libfftw3-3.def、libfftw3f3.def、libfftw3l-3.def复制到上面amd64文件目录下。
    在这里插入图片描述
  2. 命令行窗口打开amd64文件夹(lib.exe所在目录)。注意:键入cd D:\Microsoft Visual Studio 14.0\VC\bin\amd64
    在这里插入图片描述
    在这里插入图片描述
  3. 在弹出的命令窗口内依次输入以下指令:
    lib /def:libfftw3-3.def
    lib /def:libfftw3f-3.def
    lib /def:libfftw3l-3.def
    在这里插入图片描述
    此时,amd64目录下生成了这样的lib库文件:
    在这里插入图片描述
  4. 将上面生成的文件复制到E:\fftw-3.3.5-dll64文件夹下。
  5. 这一步遇到的问题,如图所示,这是之前看别人的教程做的,结果出错了,按上述步骤就不会出错。
    在这里插入图片描述
    (三)环境配置

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

运行结果:
在这里插入图片描述


——EDN——

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号