2016-06-22 60 views
0

我試圖寫在Matlab代碼這需要與噪音徵收sinosudal波的一個或總和,並嘗試使用下面的算法中對其進行過濾正弦波:首先我拿過濾與FFT

  • 輸入和到向量和ABS()將其放置在載體中

  • 然後我申請FFT()到FFT
    - 例如,如果「x」爲在其中波被存儲,則矢量
    - Y = ABS(FFT(X))

  • 現在

    在 'Y' 我讓大於某一閾值0

  • 則所有更少的元件施加IFFT()函數來得到濾波後的信號可以說,「X1」

但最後一波,我得到即使正弦波是出於階段(見圖表)。就是因爲IAM應用ABS()到FFT?
但我得到這個算法的material沒有討論這個。
我是否需要應用任何其他過濾器,以便獲得實際的波形?

這裏是兩個波的情節:一個我從上面的程序得到了和其他實際波是正弦波,無噪音: my graph

看到我的過濾波和實際波如何如何糾正它?

如果你不明白的問題或有任何你想問我請評論我會盡力解釋它。

回答

3

您正在將FFT結果的絕對值賦值給y,因此您將得到REAL值。做ifft()就簡單地假設虛部爲零,因此是相移。

+3

FFT的結果是一個複數,如果使用絕對值,則需要相位和模塊對其進行反轉。 您可以使用絕對值來繪製它,但要小心不要使用IFFT的絕對值。 – Niles

+0

但設置過濾器的限制,我必須使用絕對值。有沒有其他方式我可以使用FFT來過濾,而不必使用絕對值?如果是的話,請給我來源。 –

+0

或者我可以補償相移一些如何(不知道原始波) –