2010-12-21 541 views
0

我想使用Excel中的(2007)內置的FFT功能,但是,它要求我有2^n個數據點 - 我沒有。EXCEL快速傅里葉變換幫助

我試圖兩兩件事,都給出不同的結果:由零

  1. 墊的數據值以使得N(數據點的數目)達到2
  2. 使用一個分頻的最接近功率(112 = 64 + 32 + 16)

哪一種更好的方法?如果我有112個數據點,然後我做一個64點,然後32,然後16我很喜歡編寫VBA宏,但我正在尋找一種不需要N爲2的冪約束的算法。任何人都可以提供幫助嗎?

+0

請記住,您始終可以計算離散傅立葉變換,即O(n^2) – 2010-12-21 19:31:03

回答

2

填充用零方向是正確的,但要記住,如果你正在做的,爲了估計頻率內容的變換,你需要一個window function,而應適用於短塊(即,如果你有2000點,運用一個2000點的Hann窗口,然後填充到2048並計算變換)。

如果你正在開發一個加載項,你可能會考慮使用其中的一個FFT庫。我是Marc Borgerding的粉絲KISS FFT。它爲許多塊塊提供了快速轉換,基本上可以將其分解爲數字2,3,4和/或5.但它不處理素數大小的塊。它用非常簡單的C語言編寫,所以應該很容易移植到C#。或者,this SO question建議可以在.NET中使用的一些庫。

1

墊出用零

2^n是FFT算法的要求。

也許一個已知時間序列的測試(例如,單一頻率的簡單正弦或餘弦)。當你FFT時,你應該得到一個單一的頻率(狄拉克三角函數)。其他任何事情都是錯誤的。用2的整數冪填充零,等等。

+0

是不是2^n只是一個「很好擁有」屬性?我認爲任何複合數字都會受益於FFT核心的分而治之的方法。 – mtrw 2010-12-21 19:21:35

+0

當我上次閱讀關於FFT時,這是一個要求;我不知道Excel實現的細節,所以我不能發誓它會接受什麼,也不會接受什麼。 – duffymo 2010-12-21 21:58:04

3

將您的數據分割成較小的位將導致錯誤的輸出,特別是對於較小數量的數據點。

用零填充是一個好得多的想法,也是FFT的一般方法。如果您對FFT的另一種方法感興趣,倍頻程會爲您提供幫助,並且大多數Matlab文檔都適用,因此您應該不會遇到任何問題。