KissFFT和两个力量

时间:2014-10-28 17:19:53

标签: algorithm fft kissfft

我已经在许多不同的地方读过,FFT算法需要输入数据大小为2的幂,如512或1024.我还发现了许多计算FFT的不同算法,如Cooley- Tuckey和Bluestein(这个也适用于跟随2,3,5,7这样的素数的数字。)

好吧,我正在使用KissFFT并输入一个长度为200的数组。为什么它有效?有人知道这种情况会发生什么吗?是将大小截断为128(2 ^ 7),还是使用其他算法?如果它正在使用另一种算法,它是否仍然给出了正确的答案,但只需要更长的时间来计算? (在这种情况下,时间对我来说实际上并不是问题。)

2 个答案:

答案 0 :(得分:0)

我终于找到了一些有用的信息,在这里:

  • 首先,Cooley和Tukey算法 link

  • 二,MATLAB: “你可以使用nextpow2来填充传递给fft的信号。这样做可以在信号长度不是2的精确功率时加速FFT的计算。” link

谢谢大家

答案 1 :(得分:0)

如果绝对必须使用长度不是2的幂,那么至少有两种方法可以合理有效地进行:

(1)如果你想要的长度是小数的乘积,你可以推广当长度精确为2时使用的方法。

(2)实际上,您可以使用长度超过任意长度的矢量构建具有任意长度的FFT,并且这些较长的矢量可以具有2的幂,这意味着您可以通过卷积进行FFT通过二次幂FFT。请参阅示例http://www.engineeringproductivitytools.com/stuff/T0001/PT11.HTM。这利用了AB =(A-B)^ 2 - A ^ 2 - B ^ 2的同一性。你想得到一些看似有点像f(Xi)exp(ij)的术语。使用卷积,你可以将看起来有点像f(Xi)exp(-i ^ 2)的东西与exp((ij)^ 2)结合起来,这样指数就会给你exp(-2ij + j ^ 2),你可以在后处理中关闭j ^ 2 - 该参考文献向您展示了如何正确地执行此操作,因此指数实际上是正确的。