基于MKL的FFT

主要步骤来自官方文档,本人做了一下小结。。。

FFT的五个步骤:

1、创建描述符: DftiCreateDescriptor or DftiCreateDescriptorDM

用来设置维度,尺寸,变换的数量,输入/输出数据的存储器布局以及缩放因子。 许多设置被分配了默认值,您可能需要在应用程序中对其进行修改。

status = DftiCreateDescriptor( desc_handle, precision, forward_domain, dimension, length )

desc_handleFFT描述符

Precision:转换精度,DFTI_SINGLEDFTI_DOUBLE

forward_domain:(转换域DFTI_COMPLEXDFTI_REAL

Dimension变换的维数

length 如果Dimension=1,则是一维变换的变换长度。 不然则是多维变换 的每个维度的长度。

2、设置参数: DftiSetValue or DftiSetValueDM 请小心设置)。通常使用 DftiGetValue 

or DftiGetValueDM来获得默认设置的参数

status = DftiSetValue( desc_handle, config_param, config_val )

3、确认描述符: DftiCommitDescriptor or DftiCommitDescriptorDM 使描述符为计算做好准备。一旦描述被确认,之前所设置的参数将不可修改!!

status = DftiCommitDescriptor( desc_handle )

4、开始计算: 

DftiComputeForward/DftiComputeBackward or DftiComputeForwardDM/DftiComputeBackwardDM 可根据需要多次调用)。因为描述符是单独定义和提交的,所以计算函数所做的就是获取输入和输出数据并按照定义计算变换。要修改另一个调用计算函数的配置参数,请使用

DftiSetValue 后跟DftiCommitDescriptor (DftiSetValueDM 后跟DftiCommitDescriptorDM),或者创建并提交另一个描述符。

 

status = DftiComputeForward( desc_handle, x_inout )

status = DftiComputeForward( desc_handle, x_in, y_out )

status = DftiComputeForward( desc_handle, xre_inout, xim_inout )

status = DftiComputeForward( desc_handle, xre_in, xim_in, yre_out, yim_out )

 

5、释放描述符: DftiFreeDescriptor or DftiFreeDescriptorDM这将描述符内部使用的内存返回给操作系统。释放内存

status = DftiFreeDescriptor( desc_handle )

 

以上所有函数操作成功时,返回0。您可以借助DftiErrorClassDftiErrorMessage函数来解释非零状态。

 官方例程:

/* C99 example */

#include "mkl_dfti.h"

float  _Complex x_in[32], x_out[32];

DFTI_DESCRIPTOR_HANDLE my_desc_handle;

MKL_LONG status;

//...put input data into x_in[j], 0 <= j < 32

status = DftiCreateDescriptor( &my_desc_handle, DFTI_SINGLE,DFTI_COMPLEX, 1, 32);

status = DftiSetValue( my_desc_handle, DFTI_PLACEMENT, DFTI_NOT_INPLACE);

status = DftiCommitDescriptor( my_desc_handle);

status = DftiComputeForward( my_desc_handle, x_in, x_out);

status = DftiFreeDescriptor(&my_desc_handle);

/* result is x_out[0], x_out[1], ..., x_out[31] */

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mkl-fft1.3.0是一个用于高性能傅里叶变换的库。MKL代表英特尔数学核心库(Intel Math Kernel Library),是一套高效的数学函数库。而FFT则代表快速傅里叶变换(Fast Fourier Transform),是一种用于将信号从时域转换到频域的算法。 mkl-fft1.3.0提供了针对傅里叶变换的高性能实现,使得进行复杂的信号分析和对傅里叶变换算法的应用更加高效和方便。这个库使用了英特尔优化的算法和多线程技术,能够充分利用多核处理器的优势,提供快速且高效的傅里叶变换计算能力。 使用mkl-fft1.3.0,开发者可以通过简单的API调用,方便地在应用程序中实现傅里叶变换。这个库支持一维、二维和三维的傅里叶变换,可以处理各种规模的输入数据。除了正向的傅里叶变换,mkl-fft1.3.0还支持反向的傅里叶变换,可以将频域数据转换回原始的时域表示。 mkl-fft1.3.0具有优越的性能和可扩展性。通过多线程技术和并行计算,它可以在较短的时间内完成大规模数据的傅里叶变换。同时,它还针对不同的硬件平台进行了优化,提供了对英特尔处理器的专门支持,以达到最佳性能。 总之,mkl-fft1.3.0是一个用于高性能傅里叶变换的库,它提供了简单易用的API接口,能够在较短的时间内完成复杂的傅里叶变换计算。通过使用mkl-fft1.3.0,开发者可以大大提高傅里叶变换的效率,从而更好地应用于各种科学计算和信号处理任务中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值