FFTW是一个C子程序库,用于计算一个或多个维度的任意输入大小的离散傅里叶变换(DFT),以及实数和复数数据(以及偶数/奇数数据,即离散余弦/正弦变换或DCT/DST)。
FFTW的最新官方版本是3.3.10版。3.3版引入了对AVX x86扩展、基于MPI的分布式内存实现和Fortran 2003 API的支持。3.3.1版引入了对ARM Neon扩展的支持。有关详细信息,请参阅官网FFTW官方文档
Windows下添加fftw库
首先从官网下载地址中下载dll动态链接库.
本文只介绍得到.lib文件(即静态库)后静态调用的方法。
从dll文件构建lib文件
首先在开始菜单中找到VS的目录(我安装的版本是Visual studio community 2022),在目录下找到Developer Command Prompt for VS 2022.exe并运行。
这里会显示VS的安装路径。将fftw官网下载的压缩包解压到某个位置,建议和项目文件放一起。然后在这里切换到你解压后的目录。我将其解压到了E盘这个目录。
然后切换路径。
输入官网给出的指令:
lib /def:libfftw3-3.def
lib /def:libfftw3f-3.def
lib /def:libfftw3l-3.def
输入指令后就会在目录下生成.lib文件.
可以看到目录下多了几个文件。
接着,我们就可以使用QT或者VS导入库。
QT导入FFTW库
打开QT,在项目文件夹上右键–添加库–外部库–选择文件libfftw3-3.lib。
QT导入完成,可看到.pro文件中添加了几行。
VS导入FFTW库
打开VS,工具栏项目–属性–VC++目录,库目录添加.lib文件路径,包含目录添加.h文件路径。
接着,在链接器–输入–附加依赖项中输入.lib文件名。
测试
简单写个测试函数验证是否成功。
#include<fftw3.h>
using namespace std;
void myfft()
{
fftw_complex* in, * out;
int N = 1024;
in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
for (int i = 0; i < N; i++)
{
in[i][0] = 1;
in[i][1] = 0;
}
fftw_plan p;
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(p); /* repeat as needed */
fftw_destroy_plan(p);
fftw_free(in);
fftw_free(out);
}
如果不报错的话基本就可以正常使用了。