1.下载FFTW库
根据自己CPU类型需求,编译的架构选择x64(64-bit),或x86(32-bit)。
我以x64为例,将官方下载的压缩包解压
放到一个文件夹下解压得到****.def文件,此文件夹一共有3个表示三种不同精度的FFT。
2.生成链接库lib
windows平台下需要生成链接库lib,需要利用vs studio工具生成
相同的方法生成3个不同精度的**.lib
3.函数调用
然后把**lib文件和***.dll拷贝到qt工程目录下,其中**.dll文件需要拷贝编译完运行的文件夹下
在qt的.pro工程下添加库
在调用函数中包含头文件
一个简单测试样例:参考链接Qt学习心得-FFTW3在Qt5.7下的安装_fftw3 build类型有哪些?-CSDN博客
#define N 5
/**********************一维复数DFT变换,复数到复数**********************/
fftw_complex *in1_c, *out1_c;//声明复数类型的输入数据in1_c和FFT变换的结果out1_c
fftw_plan p;//声明变换策略
in1_c = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)* N);//申请动态内存,这里构造二维数组的方式值得学习
out1_c = (fftw_complex*)fftw_malloc(sizeof(fftw_complex)* N);
p = fftw_plan_dft_1d(N, in1_c, out1_c, FFTW_FORWARD, FFTW_ESTIMATE);//返回变换策略
int n;
for (n = 0; n<N; n++)//构造输入数据
{
in1_c[n][0] = 1;
in1_c[n][1] = 2;
//*(*(in1_c + n) + 0) = 1;
//*(*(in1_c + n) + 1) = 2;
}
fftw_execute(p);//执行变换
fftw_destroy_plan(p);//销毁策略
//以下为打印代码
//printf("data of FFT is:\n");
qDebug("data of FFT is:\n");
for (n = 0; n<N; n++)
{
qDebug("%3.2lf+%3.2lfi ", in1_c[n][0], in1_c[n][1]);
}
qDebug("\n");
qDebug("result of FFT is:\n");
for (n = 0; n<N; n++)
{
qDebug("%3.2lf+%3.2lfi ", out1_c[n][0], out1_c[n][1]);
}
qDebug("\n");
fftw_free(in1_c); fftw_free(out1_c);//释放内存