2013-04-07 92 views
2

Chris Lomont非常友善,他爲我們提供了一個使用C#的完整FFT實現。來源可以找到hereRealFFT(double[] data, bool forward)函數是一半下來,只是閱讀函數摘要(它是簡短的:))。Chris Lomont的C#FFT - 它是如何工作的

我正在使用RealFFT函數,如函數摘要所示,它接受一個樣本數組,它們都是實值(不含虛構成分)。但是,它也指出在前兩個輸入之後輸出是複數值,存儲在交替的實部和虛部中。

我似乎無法得到這個直。完成FFT之後,您總是可以獲得真實和虛構的組件。那麼如何將它們打包到作爲參數的函數中(這只是實數的一半)呢?

+0

鏈接已損壞;應該是這樣的:http://www.lomont.org/Software/Misc/FFT/LomontFFT.html – 2013-04-07 20:53:32

+0

固定。感謝您的警告! – 2013-04-07 21:02:23

回答

4

Wikipedia

對於純實數輸入,X(K)= X(N-K)*;因此您只需要給出一半的組分(另一半基本相同,但它們的複共軛)。

因此,不計算和存儲它們是有效的;如果您確實需要這些值,則可以使用上述公式來即時計算它們。

,這是真的爲報表(在代碼的註釋您鏈接到以上)的暗示:

// The first two returned entries are the real          
// parts of the first and last value from the conjugate symmetric          
// output, which are necessarily real. The length must be a power          
// of 2.      
0

LomontFFT.RealFFT(double[] data, bool forward)作品是這樣的:

  • forward == true:在data是實際輸入和複雜輸出(FT係數)。
  • forward == false即逆FFT:data是複數輸入(FT係數)和實際輸出。

我同意這個文檔有點混亂。