2011-10-10 104 views
2

對於家庭作業,我必須在Matlab中設計一個簡單的帶通濾波器,濾除250Hz和1000Hz之間的所有信號。我到目前爲止所做的: - 使用'enframe'函數創建每個512個採樣的半重疊窗口。在窗口上,我應用了漢氏窗口函數。 - 在每個窗口上應用fft。在此之後,我用函數ifft重建原始信號,這一切都很順利。在Matlab中設計一個簡單的帶通/帶阻濾波器

但問題是我如何解釋fft函數的結果以及如何濾除頻帶。

+0

我在這裏找到了一個很好的解釋,幫助了我很多:http://www.dspguide.com/ch8/ – Derk

+0

這是一個死鏈接? – Speedy

+0

對不起,http://www.dspguide.com/ch8/1.htm是正確的 – Derk

回答

1

這一切都取決於您使用的採樣率。 如果您根據Nyquist-Shannon sampling theorem正確取樣,則可以使用DFT的定義嘗試解釋您的fft的樣本。

爲了解哪些頻率對應於dft結果中的哪些樣本,我認爲最好查看inverse transformation。你乘以係數k與

exp(i*2*pi*k/N*n) 

它可以被解釋爲一個餘弦Euler's Formula。所以每個係數都乘以一定頻率的正弦。

祝你好運;)

+0

根據奈奎斯特定理,wav文件的採樣率爲16000Hz。問題是我不完全理解DFT的定義 – Derk

3

除非我記錯了,這聽起來像你正在採取錯誤的做法了這一點。

如果您的任務是通過操縱FFT來操縱信號,特別是,那麼請忽略我。否則,請繼續閱讀。

FFT通常用於在頻域中對分析信號。如果您開始擺弄FFT返回的複雜係數,那麼您將陷入複雜的數學情境。尤其是這種情況,因爲您的截止頻率不會很好地落在FFT頻段上。另外,請記住,FFT不是您正在分析的信號的完美變換。由於scalloping error,它會始終引入自己的文物,並與您的窗口進行卷積。

所以..讓我們離開FFT分析,並建立一個過濾器。

如果你正在班上做帶通設計,我會假設你明白他們做了什麼。在Matlab中有許多函數用於爲不同類型的濾波器生成係數,即butter,kaisercheby1。在Matlab中查找他們的幫助頁面以獲取更多信息。插入這些功能的值將取決於您的濾波器規格,即您希望「X」dB滾降和「Y」dB通帶波動。您需要了解這些過濾器的工作原理,並瞭解其過渡功能以瞭解過濾器順序與您的規格相關的方式。

一旦你有係數,它只是通過filter函數運行它們的一個例子(如果你不確定它是如何工作的話,請檢查幫助頁面)。

強大的JOS有一個偉大的帶通濾波器設計演練here

另一個小竅門..在你提到的問題中,你想要你的過濾器「過濾掉」250Hz和1000Hz之間的所有東西。這有點模糊。如果你正在設計一個帶通濾波器,你會想要「通過」250Hz到1000Hz之間的所有信號。如果你事實上是想「過濾掉」在這個範圍內的一切,你想要一個帶阻濾波器。