2017-04-09 31 views
2

聲明:我不是信號處理專家。如何下采樣傅立葉複數值?

我正在寫一個函數,它需要一維數組並對其執行快速傅立葉變換。以下是它的工作方式:

  1. 如果陣列的大小不是2的冪,則在末尾填充0以使其大小變爲2的冪。
  2. 在填充陣列上執行FFT並將結果存儲在數組x中。
  3. 降採樣複雜陣列x以匹配原始非填充陣列的長度。
  4. 返回x

我遇到了問題第3步。如果我省略步驟3並對函數調用的結果執行反向FFT,則會得到初始填充數組,這意味着該功能可以成功執行步驟1和步驟2.

我嘗試通過使用線性插值的向下採樣來實現步驟3,但當我使用MatLab對最終結果執行逆傅立葉變換時,我得到的結果與原始數組不相同。我需要使用的編程語言不是 MatLab,我只使用MatLab來驗證結果的正確性。

我可以用什麼技術來執行第3步,同時還能夠在反FFT之後找回原始非填充數組?

回答

1

使用循環Sinc內核插值來計算下采樣點。 Sinc寬度將是一個低通濾波器,其截止點適用於新的較低的下采樣採樣率的抗混疊。

0

如果您需要準確的結果,那麼您可以使用Bluestein的Chirp Z變換算法來計算O(N log N)時間內煩人大小的DFT。

參見:https://en.wikipedia.org/wiki/Chirp_Z-transform

這是不一樣快,功率爲2的FFT的,但它的速度更快(高準確度)比插在了錯誤的長度的FFT。