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