帮助EXCEL快速傅立叶变换

时间:2010-12-21 18:19:50

标签: excel-vba fft vba excel

我正在尝试使用Excel(2007)内置的FFT功能,但是,它要求我有2 ^ n个数据点 - 我没有。

我尝试了两件事,两者都有不同的结果:

  1. 将数据值填充零,使N(数据点数)达到最接近2的幂
  2. 使用分而治之的方法,即如果我有112个数据点,那么我对64进行FFT,然后是32,然后是16(112 = 64 + 32 + 16)
  3. 哪种方法比较好?我很乐意编写VBA宏,但我正在寻找一种算法,它不需要约束N为2的幂。任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

将数据拆分成较小的位会导致输出错误,尤其是对于较少数量的数据点。

使用零填充是一个更好的主意,也是FFT的一般方法。如果您对使用FFT的另一种方法感兴趣,octave将为您完成,并且大多数Matlab文档都适用,因此您应该没有任何问题。

答案 1 :(得分:2)

使用零填充是正确的方向,但请记住,如果您正在进行变换以估计频率内容,则需要window function,并且应该应用于短块(即,如果你有2000点,应用一个2000点的汉恩窗口,然后填充到2048并计算变换。)

如果您正在开发加载项,可以考虑使用众多FFT库中的一个。我是Marc Borgerding的KISS FFT忠实粉丝。它提供了许多块的快速转换,基本上任何可以计入2,3,4和/或5的块大小。但它不处理素数大小的块。它是用非常简单的C编写的,所以应该很容易移植到C#。或者,this SO question建议可以在.NET中使用的一些库。

答案 2 :(得分:1)

用零填充

2 ^ n是FFT算法的要求。

可能是对已知时间序列的测试(例如,单个频率的简单正弦或余弦)。当您进行FFT时,您应该获得单一频率(Dirac delta函数)。还有别的错误。使用2的整数次幂,用零填充等来执行此操作。