返回信息流背景大概就是遇到一处用FFT取出频谱数据的地方,之前是自己写代码跑了下,然后跑了来自其他地方的代码,就发现中间结果有点不同,仔细一看是FFT点不同,比如我做5,000,000点FFT,就直接用5,000,000计算了,而别人的代码是先计算出比5,000,000大又正好是2的幂次的最小正数,就是8,388,608(2的23次方),当时也觉得有道理,毕竟一直觉得只要是2的幂次就很FFT,今天无聊测了下时间,结果居然发现……做5,000,000点的FFT时间比做8,388,608点少埃=。=,咦……好像有点和印象不符,小小纠结FFT要不干脆不强行用2的幂次了!?
其实最后结果影响不大,取出的一些频点数值上也没差多少,我猜是倒数1/5,000,000和1/8,388,608没差多少的原因吧,
这是一条镜像帖。来源:北邮人论坛 / matlab / #12963同步于 2019/9/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
FFT点数的一个小纠结
officeysk
2019/9/24镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
fft是快速傅里叶变换,要考虑周期性边界条件,傅里叶变换的时候,如何划分网格,避免截断误差,点数反而不是最重要的。一般来说点数越少,计算越快。
当然最好是2^N, 一些算法的速度对比http://www.fftw.org/speed/Pentium4-2.4GHz-icc/
sorry很迟才回应大神!平时主要是用FFT求频谱和计算OFDM,边界条件是指what一时不太理解,好像没怎么听说,划分网格不知道是不是指给信号加窗?我还是要找找信号与系统以外的书看下……
【 在 dhown 的大作中提到: 】
: fft是快速傅里叶变换,要考虑周期性边界条件,傅里叶变换的时候,如何划分网格,避免截断误差,点数反而不是最重要的。一般来说点数越少,计算越快。
: 当然最好是2^N, 一些算法的速度对比http://www.fftw.org/speed/Pentium4-2.4GHz-icc/
图书馆有讲快速傅里叶变换的书,可以去找找,截断误差是指,对于时域信号,采样率是1GHz,点数是2^16,那么信号傅里叶变换后,得到的频域信息,其实只有1GHz/2^16这个频率整数倍的频率的幅度,其他频率的值得不到,只能取近似。而且fft默认的你的时域信号是周期性的,以你做fft的信号为周期。
点数速度这个,我也不太清楚,MATLAB文档中说是2的幂次比较快,但是实际应该还是和点数大小有关,毕竟两个差60%呢。如果是2^23和2^23-1000,应该是前者比较快。