我正在尝试使用Excel(2007)内置的FFT功能,但是,它要求我有2 ^ n个数据点 - 我没有。
我尝试了两件事,两者都有不同的结果:
哪种方法比较好?我很乐意编写VBA宏,但我正在寻找一种算法,它不需要约束N为2的幂。任何人都可以帮忙吗?
答案 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的整数次幂,用零填充等来执行此操作。