我需要一些幫助來理解DFT/FFT計算的輸出。理解FFT輸出
我是一名經驗豐富的軟件工程師,需要解釋一些智能手機加速計讀數,例如查找主要頻率。不幸的是,我十五年前就讀過大部分大學EE課程,但過去幾天我一直在閱讀DFT和FFT(顯然沒有多大用處)。
請不要回答「走EE課」。我實際上打算這樣做,如果我的僱主將支付我。 :)
因此,這裏是我的問題:
我在32赫茲捕獲的信號。這裏是我在Excel中繪製的32分的1秒樣本。
然後我得到了一些FFT code用Java編寫的哥倫比亞大學(以下建議在後的「Reliable and fast FFT in Java」後)。
該程序的輸出如下。我相信它正在運行一個就地FFT,所以它在輸入和輸出上都重複使用相同的緩衝區。
Before:
Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ]
Im: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ]
After:
Re: [37.054 1.774 -1.075 1.451 -0.653 -0.253 -1.686 -3.602 0.226 0.374 -0.194 -0.312 -1.432 0.429 0.709 -0.085 0.0090 -0.085 0.709 0.429 -1.432 -0.312 -0.194 0.374 0.226 -3.602 -1.686 -0.253 -0.653 1.451 -1.075 1.774 ]
Im: [0.0 1.474 -0.238 -2.026 -0.22 -0.24 -5.009 -1.398 0.416 -1.251 -0.708 -0.713 0.851 1.882 0.379 0.021 0.0 -0.021 -0.379 -1.882 -0.851 0.713 0.708 1.251 -0.416 1.398 5.009 0.24 0.22 2.026 0.238 -1.474 ]
所以,在這一點上,我不能做出正面或反面的輸出。我理解DFT概念,例如實部是組件餘弦波的幅度,虛部是組件正弦波的幅度。我也可以按照此圖從偉大的書「The Scientist and Engineer's Guide to Digital Signal Processing」:
所以我的具體問題是:
從FFT的輸出,我怎麼找到‘最發生頻率’ ?這是我對加速度計數據分析的一部分。我應該讀真實(餘弦)還是虛構(正弦)數組?
我在時域有32點輸入。 FFT的輸出不應該是用於實數的16元素陣列和用於虛數的16元素陣列?爲什麼程序會給我32和32的實數和虛數陣列輸出?
與前面的問題相關,我該如何解析輸出數組中的索引?由於我輸入了32個採樣頻率爲32 Hz的樣本,我的理解是,一個16元素的陣列輸出應該使其指數均勻分佈到1/2採樣率(32 Hz),所以我理解每個元素數組表示(32 Hz * 1/2)/ 16 = 1 Hz?
爲什麼FFT輸出值爲負值?我認爲這些值代表了正弦曲線的幅度。例如,對於頻率爲3的餘弦波,Real [3] = -1.075的輸出應該表示-1.075的振幅。對嗎?幅度如何可能爲負數?
您想從加速計讀數中計算什麼:速度,距離?加速度計讀數的噪聲遵循高斯分佈,我看不出正弦波如何適應這種情況。 – Ali
應該刪除java標記,因爲它比通用語言更具通用性 – user3791372