MATLAB IIR數字濾波器設計
首先我們要明白相關的概念。
數字濾波器設計採用角頻率,如何與實際訊號頻率對應?
角頻率w,採樣頻率fs ,實際訊號頻率f的轉換關係為:
W = 2*pi* f / fs
採樣頻率的角頻率為 2 *pi.
數字濾波器的指標,以低通為例【見】:
當我們設計的濾波器是帶通的時候。其通帶截止頻率有兩個,阻帶截止頻率也有兩個。截止頻率還有另外一個稱謂,即邊沿頻率。
FIR 濾波器可以設計為線性相位,並且總是穩定的。在多數情況下,FIR濾波器的階數 NFIR 顯著大於具有等效幅度響應的IIR濾波器階數NIIR。NFIR/NIIR 通常為10的量級或更高. IIR 濾波器通常計算更簡便。 在很多應用中,並不要求濾波器具有嚴格的線性相位,在這些情況下,通常會因計算簡便而選擇IIR濾波器。例如在很多語音編碼當中的濾波器很多都是IIR濾波器,均衡器一般也用IIR濾波器。也就是說對即時性要求不是很高的場合可以考慮使用FIR濾波器,當FIR濾波器階數較長時,可以考慮用FFT去計算。
在設計IIR濾波器時,通常將數字濾波器的設計指標轉化成類比低通原型濾波器的設計指標,從而確定滿足這些指標的類比低通濾波器的傳輸函數Ha(s),然後再將它變換成所需要的數字濾波器傳輸函數G(z)。
上述濾波器設計的過程只需要瞭解其原理。藉助於MATLAB強大的工具,濾波器的設計變得比較簡單了。
在MATLAB命令視窗中鍵入fdatool, 你將啟動濾波器設計的圖形介面。你可以從simulink中直接選擇數字濾波器控制項而啟動。
本文主要講述IIR數字濾波器設計的方法。
對從麥克風進來的訊號濾波。
假定我們要把50hz的電頻幹擾去掉,同時人說話的頻率一般不會超過3400hz。我們設計一個帶通濾波器,通帶為【80-3200】,採樣率為8k。
根據上面的需求,我們把相關的參數改成下面的介面:
單擊 Design Filter,數秒之後顯示如下:
可以看出:濾波器的階數是36,還有一個 sections: 18. 由於在具體實現時一般是以2階的級聯或並聯去實現的。所以實際上分為18個2階節去實現。
36階是系統計算出的滿足需求的最小階了。我們也可以自己事先制定階數,參數如下:
這時,截止頻率衰減參數已經沒法選了,被固定為3分貝:
最終計算的幅度響應如下:
我們需要把設計的濾波器係數儲存下來,以供其它程式調用。
MATLAB提供了直接匯出係數的方法。
【targets】->【generate C header】
可以修改如下,選擇【Generate】
在MATLAB工作目錄下可以找到你產生的係數檔案,大概是下面這個樣子的:
這個檔案讓人看的不太懂。返回fdatool設計介面選擇【Analysis->Filter coeffcients】:
係數介面與這個檔案裡面的資料是一致的。
認真觀察上面這個介面裡的資料,我們發現,檔案裡面的係數,實際上把它分成兩個2階節相乘的形式,其中還有增益。增益的目的是為了保證計算的精度和系統的穩定性。
選擇【edit】->【convert to single section】,這時候係數變成我們熟悉的形式:
產生的係數C標頭檔如下:
指定階數為2,重複上述步驟產生的IIR濾波器係數檔案如下: