FFTW开源库对比耗时

最近使用到DFT,自己编写DFT计算效率极低,故选择使用高效的FFTW库,同时测试自己使用编写C语言DFT,MATLAB脚本DFT与FFTW库耗时对比。(代码太乱,就不贴代码了,有疑问可以留言探讨)

1. FFTW库耗时对比:

在C++中调用FFTW库耗时在6~4ms区间波动(图2),其中统计时间使用time.h中clock()函数。

此方法是借用另外一位网友的博客https://www.cnblogs.com/zillyrex/p/11802833.html

 

图1 使用自己编写的DFT函数,计算10000点DFT耗时

 2. 自己编写DFT耗时测试

在C++中测试手动编写查表法DFT计算10000点耗时7~8s左右(图1),此计算方法就是两个for嵌套循环计算,正余弦是查表;

 

 图2 使用FFTW 32位库double类型,计算10000点DFT耗时

图3 使用MATLAB FFT函数计算结果与调用FFTW库计算结果对比

 3. MATLAB 脚本使用自己编写矩阵计算DFT耗时测试:

在MATLAB脚本中自己编写矩阵运算1000点DFT(注意是1000点,正余弦是查表)耗时160~200ms,当计算10000点时计算时间过长,同时内存爆满,不便测试。

图3

 

4.MATLAB使用FFT()函数耗时测试:

调用matlab的FFT()函数计算10000点DFT耗时不足0.3ms;

图4

 

5.matlab FFT()函数与c++调用FFTW库结果对比

  对比matlab计算结果显示两者输出相差远小于0.0001(两者计算结果均为7.917)。其中MATLAB使用的是FFT()函数,但是数据长度为10000,未指定数据长度时应该是以DFT进行计算的。具体见下图3,其中红色表示MATLAB 计算结果,蓝色表示C语言调用库计算结果。(据matlab介绍,matlab中的FFT也是使用FFTW库计算)。

图5

 6.总结

从耗时来看,matlab中调用fft()函数计算最快,然后是c++中调用FFTW库;自己在C++中写DFT可以使用但运行时间较长,自己写DFT在matlab中耗时最多,甚至点数较多时(10000点)内存爆满,计算时间过长(大于1分钟);测试仅供参考,运行耗时受程序写法,保留精度,包含程序的范围,计算机的性能及当前的处理器负载等等诸多因素影响。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值