VS2017配置FFTW库及FFTW库lib生成

16 篇文章 0 订阅

是世界范围内最有名的计算fft的库,平时熟悉的Origin及Matlab计算fft采用的也是fftw。fftw库支持计算一维及多维的任意长度数据,反正用就行了,毕竟人家成熟商业软件计算fft用的都是这个库,更多详情请查看其官网fftw库官网

FFTW官网提供了源码及头文件、dll、def文件,一般我们需要根据def文件生成lib文件,也可以用源码+Cmake生成dll和lib文件。网上得到lib文件的方式基本都是根据vs自带的lib.exe将.def文件生成.lib文件。如下图所示(利用vs2017生成64位的fftw lib文件),将ide文件中的4个文件msobj140.dll、mspdb140.dll、mspdbcore.dll、mspdbsrv.exe复制到x64文件夹下,并且还要将三个以def为后缀名的fftw文件拷到该x64文件夹下,最后利用cmd进到x64文件下执行lib.exe,然后分别执行:
lib /machine:x64 /def:libfftw3-3.def
lib /machine:x64 /def:libfftw3f-3.def
lib /machine:x64 /def:libfftw3l-3.def

以生成lib文件,最后还要在VS里配置一下。
在这里插入图片描述
在这里插入图片描述
用这个方法,出现如下错误,提示不能加载mspdcore.dll文件,最后发现可能是版本不一致的问题。于是,后来便在网上找相同版本的dll文件,没找到,放弃。为了得到lib文件,后来又尝试了其他几种方法,例如利用32位的def生成lib+采用64位的dll文件、卸载vs重新安装vs2017,但都无果。今晚,和师兄聊天,得知他那有利用Cmake生成的lib文件,于是便拷了一份,最终结束lib的生成之路,并能成功运行。

最后,给出福利链接:fftw lib文件(提取码:7385)
,里面有32位、64位的bin、lib、include文件,可以直接下载用,不用再自己生成lib文件。
在这里插入图片描述

VS配置:
(1)将文件夹fftw_X64和dll文件拷贝到项目文件夹下
(2)包含目录

./fftw_X64/include

(3)库目录

./fftw_X64/lib

(4)附加依赖项

libfftw3-3.lib
libfftw3f-3.lib

测试代码:

#include <iostream>
#include "fftw3.h"

using namespace std;

#define REAL 0
#define IMAG 1
int main()
{
	const double PI = 3.14159265358979323846;

	const int L = 10000;
	double Fs = 500;
	double T = 1.0 / Fs;

	fftw_complex x[L];
	fftw_complex y[L];

	double time = 0.0;

	for (int i = 0; i < L; i++) {
		time = i * T;		
		x[i][REAL] = 0.7*sin(2 * PI * 50 * time) + sin(2 * PI * 120 * time);
		x[i][IMAG] = 0;		
	}
	fftw_plan plan = fftw_plan_dft_1d(L, x, y, FFTW_FORWARD, FFTW_ESTIMATE);
	fftw_execute(plan);

	double *freq = new double[L];
	double *Amp = new double[L];

	cout<<"Freq"<< "  " << "Amp"<< endl;
	int i = 0;
	freq[0] = 0;
	Amp[0] = sqrt(y[i][REAL] * y[i][REAL] + y[i][IMAG] * y[i][IMAG]) / L;
	cout << freq[0] << "  " << Amp[0] << endl;
	for (int i = 1; i < L/2; i++) {
		freq[i] = i*Fs/L;
		Amp[i] = sqrt(y[i][REAL] * y[i][REAL] + y[i][IMAG] * y[i][IMAG])*2 / L;
		cout << freq[i] << "  " << Amp[i] << endl;
	}
	freq[i] = Fs/2;
	Amp[i] = sqrt(y[L/2][REAL] * y[L/2][REAL] + y[L/2][IMAG] * y[L/2][IMAG]) / L;
	cout << freq[i] << "  " << Amp[i] << endl;


	fftw_destroy_plan(plan);
	delete []freq;
	delete []Amp;

}

测试结果:
在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用fftw3来生成lib文件,首先需要从fftw的官方网站(http://www.fftw.org/)下载最新的fftw3源代码包。下载完成后,解压缩源代码包。 在解压缩的源代码目录下,打开终端或命令提示符,进入文件目录。首先,运行./configure命令来配置编译选项。你可以根据你的需求选择不同的选项,例如使用不同的编译器、指定安装路径等。配置完成后,运行make命令进行编译。这将会花费一些时间,具体时间取决于你的计算机性能。 编译完成后,运行make install命令来安装fftw3。此命令会将编译生成文件、头文件以及其他必要文件复制到指定安装路径下。你可以使用--prefix选项来指定安装路径,例如"./configure --prefix=/usr/local"。 在指定路径下,你将会找到生成lib文件,以及相关的头文件和其他文件。将lib文件复制到你的项目目录中,并在编译器中添加相应的链接选项。例如,在gcc编译器中,使用"-lfftw3"选项来链接fftw3。 完成以上步骤后,你就可以在你的项目中使用fftw3了。记得在编译和链接时加上相应的选项,以确保编译器能够找到fftw3文件。 需要注意的是,以上步骤仅适用于Linux或Unix系统,对于其他操作系统可能会有所不同。在Windows系统中,你可以使用MinGW或Cygwin等工具来编译和生成lib文件。具体步骤可以参考fftw官方网站上的文档或相应的教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值