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