2011-03-07 67 views
0

我已經爲我正在處理的數據集編碼了FFT。我的目的是創建一個結果的瀑布圖,但我遇到的問題是如果我改變我的輸入數據大小,然後我得到不同數量的頻率箱。目前,我只是將我的輸入數據集製作爲我需要映射到的像素數量的兩倍。我試圖找出將任何數據集大小的頻率分區映射到特定數量的像素的方法。例如,將500個值的數組映射到長度爲1250個元素的數組。如果可以選擇對數據映射執行線性和非線性插值,將會很不錯。我也可能需要另闢蹊徑,比如將值映射到300個元素的數組。我不是數學專業,我在這個問題上留下了一個空白。重新映射C#中的FFT頻率倉分佈

回答

2

所有你需要做的就是將你的輸入零填充到你想要顯示的像素數。這可以通過簡單地將零添加到輸入中來使其達到所需的像素長度。 FFT執行時,將在零填充後的長度完成,併爲您提供與像素相同數量的輸出採樣。

當您填零FFT輸入時,FFT會自動在頻域內插。檢查this了。注意,即使頻域樣本的數量增加,但實際上並沒有在頻域中提供任何更多信息(新的頻率內容不會僅通過使用此方法出現)。這只是對現有數據進行過採樣。

我不確定去其他方式的最佳方式(縮減採樣),但我認爲一種方法是轉換您需要的前N個採樣。你會因此丟失數據,但取決於應用程序可能並不重要。

+0

降採樣最好在FFT後完成,降低高頻。 – wnoise 2011-03-07 22:00:30

+0

這對於增加數據點的數量是一個很好的建議。我幾乎有辦法讓樣品完成。 – Davido 2011-03-08 16:22:42

1

離散傅立葉變換(快或不)將總是給你輸入數組相同大小的輸出數組。如果您想擴展它,那麼您需要查看使用sinc函數和適當的窗口。見例如http://en.wikipedia.org/wiki/Lanczos_resampling

+0

我想我可能在我的問題上有點不清楚。基本上我想要輸出數組並插入它的值,以將其映射到具有不同長度的數組,或者更小或更大。如果這就是Lanczos重新採樣所做的那樣,那麼它可能會超出我的頭。它看起來像是沿着正確的路線,但我不知道如何實現它。 – Davido 2011-03-07 20:13:22

+0

@Davido,就是這樣。如果你環顧四周,我希望你能找到一個實現它的圖書館。 – 2011-03-07 22:52:47