如何提高fft的运算速度
我按照一般信号处理书上的fft基2蝶型算法编写了一个c++函数,经调试证明结果是对的,和matlab计算结果相符,但速度比较慢,算8192个点大概需要1s时间,实际fft计算中,需要对多段数据fft后进行平均,一般对一个信号进行fft处理,需要计算多次,那么这个运算速度就不能忍受了。而商业软件的计算速度明显快很多。请教有什么方法提高fft的效率? 应该有很多快速fft变换方法吧,分裂基,基4等等... 基4的就要比基2的快,不过要求是4的n次幂,范围要小些回复 楼主 hyl2323 的帖子
你编的程序肯定有问题,比如sin,cos的算法用函数肯定太慢,按现在的电脑速度应在1 ms以内。 同意ls,我再仔细看看程序,里面的pow函数估计很耗时间,还有排序什么的。还有就是缩短每次运算序列的长度,分段平均。但分段的长度受频率分辨率的影响。搞定了来回贴。 FFT有很多标准程序,查书或网上查均可。 本帖最后由 wdhd 于 2016-9-19 11:13 编辑原帖由 hyl2323 于 2009-7-9 15:35 发表
同意ls,我再仔细看看程序,里面的pow函数估计很耗时间,还有排序什么的。还有就是缩短每次运算序列的长度,分段平均。但分段的长度受频率分辨率的影响。搞定了来回贴。
FFT要用到pow函数?如果是2的整数幂,那运算就太容易了,用整数移位(左移)即可。 问题发现了,不是fft函数的运算速度慢,而是读取文件耗用了较长的时间。我读取了一个7M大小的ascii数据文件。我习惯用ascii来存储数据,可以用记事本打开查看,看来要试试二进制存储格式,有人知道通用数据文件uff的数据格式么? 经调试发现,二进制数据读取果然速度比ascii快不少。现在统一输入文件格式为uff58b。不过还是没商业软件快,看来专业软件还是要技高一筹阿。
页:
[1]