FFTW入门(1):环境搭建

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);
}

如果不报错的话基本就可以正常使用了。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++中的`fftw_plan_r2r_1d`函数是FFTW中的一个函数,用于创建一个实数到实数的一维傅里叶变换(FFT)计划。 函数原型如下: ```c++ fftw_plan fftw_plan_r2r_1d(int n, double *in, double *out, fftw_r2r_kind kind, unsigned flags); ``` 参数说明: - `n`:实数数组的长度。 - `in`:输入实数数组的指针。 - `out`:输出实数数组的指针。 - `kind`:傅里叶变换的类型,可选值包括: - `FFTW_RODFT00`:离散正弦变换(DST-I)。 - `FFTW_RODFT01`:离散正弦变换(DST-II)。 - `FFTW_RODFT10`:离散正弦变换(DST-III)。 - `FFTW_RODFT11`:离散正弦变换(DST-IV)。 - `FFTW_REDFT00`:离散余弦变换(DCT-I)。 - `FFTW_REDFT01`:离散余弦变换(DCT-II)。 - `FFTW_REDFT10`:离散余弦变换(DCT-III)。 - `FFTW_REDFT11`:离散余弦变换(DCT-IV)。 - `FFTW_ROCKET`:Rocket FFT。 - `FFTW_HC2R`:半复杂到实数的傅里叶变换。 - `FFTW_HC2C`:半复杂到半复杂的傅里叶变换。 - `FFTW_HC2HC`:半复杂到半复杂的傅里叶变换。 - `FFTW_DHT`:离散哈达玛变换。 - `FFTW_REDFT00`:离散余弦变换(DCT-I)。 - `FFTW_REDFT10`:离散余弦变换(DCT-III)。 - `FFTW_REDFT01`:离散余弦变换(DCT-II)。 - `FFTW_REDFT11`:离散余弦变换(DCT-IV)。 - `flags`:计算选项,可选值包括: - `FFTW_ESTIMATE`:由FFTW根据计算量自动选择最佳算法。 - `FFTW_MEASURE`:由FFTW对可选算法进行计时,选择最优算法。 - `FFTW_PATIENT`:由FFTW对可选算法进行计时,并使用更多的算法进行优化。 - `FFTW_EXHAUSTIVE`:由FFTW尝试所有可用的算法,并选择最佳算法。 函数返回值为创建的计划对象的指针,用于后续的傅里叶变换操作。计划对象可以在使用完毕后通过`fftw_destroy_plan`函数进行销毁以释放内存。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值