MATLAB是一個數據分析和處理功能十分強大的工程實用軟件,它的濾波器設計工具箱為實現聲音信號的數字濾波提供了十分方便的函數和命令,但MAT-LAB的計算速度慢。Visual C++是Windows平臺下主要的應用程序開發環境之一,它能方便實現軟件開發,開發的系統具有執行速度快等優點,故MATLAB與VC的混合編程正好結合了MATLAB強大的工具箱與VC很快的執行速度。本文結合兩者的優勢,基于MATLAB與VC混合編程的方法設計出一種實用的數字均衡器。
1、設計原理分析
根據數字濾波器沖激響應的時域特性的比較, FIR數字濾波器優點是對有限字長效應不敏感,嚴格線性相位;但是實現同樣指標,所需計算量遠大于IIR濾波器。
為了說明兩種濾波器的設計方法,本設計中在數字濾波器部分使用FIR方法,而在均衡器部分使用IIR的方法分別進行設計。
1)用窗函數法設計FIR濾波器
根據過渡帶寬及阻帶衰減要求,選擇窗函數的類型并估計窗口長度N (或階數M=N-1),窗函數類型可根據最小阻帶衰減As獨立選擇, 因為窗口長度N對最小阻帶衰減As沒有影響,在確定窗函數類型以后,可根據過渡帶寬小于給定指標確定所擬用的窗函數的窗口長度N,設待求濾波器的過渡帶寬為△w,它與窗口長度N近似成反比,窗函數類型確定后,其計算公式也確定了,不過這些公式是近似的,得出的窗口長度還要在計算中逐步修正,原則是在保證阻帶衰減滿足要求的情況下,盡量選擇較小的N,在N和窗函數類型確定后,即可調用MATLAB中的窗函數求出窗函數wd (n)。
根據待求濾波器的理想頻率響應求出理想單位脈沖響應hd(n),如果給出待求濾波器頻率應為Hd,則理想的單位脈沖響應可以用下面的傅里葉反變換式求出:
2)用雙線性變換法設計IIR濾波器
式(2)與式(3)是S平面與Z平面之間的單值映射關系,這種變換都是兩個線性函數之比,因此稱為雙線性變換。
對于IIR數字濾波器的設計具體步驟如下:
(1)按照一定的規則將給出的數字濾波器的技術指標轉換為模擬低通濾波器的技術指標。
(2)根據轉換后的技術指標設計模擬低通濾波器G(s)(G(s)是 低通濾波器的傳遞函數)。
(3)再按照一定的規則將G(s)轉換成H(z)(H(z)是數字濾波器的傳遞函數)。若設計的數字濾波器是低通的,上述的過程可以結束,若設計的是高通、帶通或者是帶阻濾波器,那么還需要下面的步驟:
將高通、帶通或帶阻數字濾波器的技術指標轉換為低通模擬濾波器的技術指標, 然后設計出低通G(s),再將G(s)轉換為H(z)。
Matlab信號工具箱提供了幾個直接設計IIR數字濾波器的函數,直接調用這些函數就可以很方便地對濾波器進行設計。這里選取巴特沃斯法、切比雪夫I、切比雪夫II、 橢圓法四種方法進行比較。
2、軟件設計
在模塊劃分時應遵循如下規則:改進軟件結構提高模塊獨立性;模塊規模應該適中;深度、寬度、扇出和扇入都應適當;模塊的作用域應該在控制域之內;力爭降低模塊接口的復雜程度; 設計單入口單出口的模塊;模塊功能應該可以預測。本著上述的啟發式規則,對軟件進行如圖1所示的模塊劃分。
MATLAB提供的GUIDE工具為可視化編程工具,使得軟件的界面設計像VB一樣方便。為了實現預期的功能,設計如圖2所示的界面。
3、VC和MATLAB的混合編程
MATLAB中提供filter 函數,但是在這里我們采用VC實現filter函數,用來提高運算速度。具體步驟為:(1)MATLAB中運行mex -setup將VC選作編譯器;(2)在VC中新建一個DLL工程,添加如下代碼:
(3)保存為qfilter.cpp,放在MATLAB工作目錄,在MAT-LAB中運行mexqfilter.cpp生成qfilter.dll。這樣,只需調用qfilter函數即能實現濾波。
4、誤差分析
理想的濾波器是不存在的,實際中只能盡量地接近理想濾波器,所以只能盡量地去接近理想的濾波器。對于IIR數字濾波器,階數越高,則濾波器的精度越高,即越接近于理想的情況,但計算機運行速度就越慢了,所以實際中應該權衡運行速度與濾波器的精度。另外,計算機本身也有誤差(如截斷誤差),但相對于濾波器的設計誤差,可以忽略不計。故提高精度關鍵在于提高濾波器的設計精度。
另外,每個帶通濾波器之間的過渡也有設計誤差,理論上帶通濾波器間的過濾應該滿足各濾波器的頻率響應曲線疊加起來為一條值為1的水平線,但實際中只能盡量去接近理論的情況。
-
均衡器
+關注
關注
9文章
219瀏覽量
30415
發布評論請先 登錄
相關推薦
評論