姜恩華,李素文,周建芳,鄒 鋒,陳東華
(淮北師范大學(xué) 物理與電子信息學(xué)院,安徽 淮北 235000)
IIR(Infinite Impulse Response)數(shù)字濾波器及其網(wǎng)絡(luò)結(jié)構(gòu)是數(shù)字信號(hào)處理的重要內(nèi)容,也是數(shù)字信號(hào)處理綜合實(shí)驗(yàn)的重要組成部分[1-2].如何根據(jù)數(shù)字信號(hào)處理的理論內(nèi)容,有效開(kāi)展IIR數(shù)字濾波器的綜合實(shí)驗(yàn),是一個(gè)值得研究且有意義的課題[3].
本文結(jié)合Matlab軟件和TI公司的CCS(Code Composer Studio) 5.5軟件,探索如何開(kāi)展IIR數(shù)字濾波器綜合實(shí)驗(yàn).借助Matlab軟件生成IIR數(shù)字濾波器的系統(tǒng)函數(shù)H(z),可以通過(guò)Matlab軟件進(jìn)行IIR數(shù)字濾波器及其網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)[4].借助TI公司的CCS 5.5軟件集成開(kāi)發(fā)環(huán)境,采用Texas Instruments Simulator/C55xx Rev3.0 CPU軟件模擬器,通過(guò)C語(yǔ)言編寫IIR數(shù)字濾波程序,完成IIR數(shù)字濾波實(shí)驗(yàn)設(shè)計(jì)[5],借助CCS 5.5軟件的Tools/Graph菜單,觀察濾波前和濾波后的信號(hào)波形,直觀地展現(xiàn)了IIR數(shù)字濾波的效果.
IIR數(shù)字濾波器設(shè)計(jì)通常借助模擬濾波器完成其設(shè)計(jì),由于模擬濾波器設(shè)計(jì)涉及的公式繁多,計(jì)算復(fù)雜,很難采用C語(yǔ)言編程實(shí)現(xiàn).
Matlab軟件提供了巴特沃斯濾波器、切比雪夫?yàn)V波器和橢圓濾波器等模擬濾波器的設(shè)計(jì)函數(shù),借助Matlab軟件,很容易實(shí)現(xiàn)模擬濾波器設(shè)計(jì)[6-7].從而設(shè)計(jì)出符合實(shí)驗(yàn)要求的IIR數(shù)字濾波器.
首先,把IIR數(shù)字濾波器的邊界截止頻率,通過(guò)脈沖響應(yīng)不變法或雙線性變換法的頻率變換公式,把數(shù)字域頻率轉(zhuǎn)換為模擬濾波器的模擬角頻率,調(diào)用模擬濾波器設(shè)計(jì)函數(shù),設(shè)計(jì)出相應(yīng)的模擬濾波器,得到其系統(tǒng)函數(shù)Ha(s);其次,調(diào)用脈沖響應(yīng)不變法或雙線性變換法的設(shè)計(jì)函數(shù),把模擬濾波器的系統(tǒng)函數(shù)Ha(s)轉(zhuǎn)換為IIR數(shù)字濾波器的系統(tǒng)函數(shù)H(z)[8].
根據(jù)系統(tǒng)函數(shù)H(z)的分子多項(xiàng)式和分母多項(xiàng)式的系數(shù),通過(guò)函數(shù)freqz求得幅頻特性,從而觀察IIR數(shù)字濾波器的幅頻特性曲線和相頻特性曲線.
通過(guò)系統(tǒng)函數(shù)H(z)的分子多項(xiàng)式系數(shù)bi和分母多項(xiàng)式系數(shù)ai,可以得到IIR數(shù)字濾波器的直接型網(wǎng)絡(luò)結(jié)構(gòu).
對(duì)系統(tǒng)函數(shù)H(z)的分子多項(xiàng)式求取零點(diǎn)和分母多項(xiàng)式求取極點(diǎn),一階零點(diǎn)和一階極點(diǎn)結(jié)合形成一階因式,二階共軛成對(duì)的零點(diǎn)和二階共軛成對(duì)的極點(diǎn)結(jié)合形成二階因式,系統(tǒng)函數(shù)H(z)分解為若干個(gè)一階因式和二階因式相乘的形式,一階因式對(duì)應(yīng)一階網(wǎng)絡(luò)結(jié)構(gòu),二階因式對(duì)應(yīng)二階網(wǎng)絡(luò)結(jié)構(gòu),把若干個(gè)一階網(wǎng)絡(luò)結(jié)構(gòu)和二階網(wǎng)絡(luò)結(jié)構(gòu)級(jí)聯(lián)在一起,形成IIR數(shù)字濾波網(wǎng)絡(luò)的級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu).
借助Matlab軟件中的tf2sos函數(shù),可以把直接型網(wǎng)絡(luò)結(jié)構(gòu)轉(zhuǎn)換為級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu),生成級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)的系數(shù)矩陣SOS和增益G,其中增益G為常數(shù),級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)的系數(shù)矩陣SOS的每行元素構(gòu)成一個(gè)基本的二階網(wǎng)絡(luò)結(jié)構(gòu).
借助Matlab軟件中的filter函數(shù)實(shí)現(xiàn)直接型網(wǎng)絡(luò)結(jié)構(gòu)濾波,借助filtfilt函數(shù)實(shí)現(xiàn)級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)濾波[8].
以IIR低通濾波器設(shè)計(jì)為例,由于巴特沃斯模擬低通濾波器的幅頻特性在通帶和阻帶內(nèi)單調(diào)和無(wú)波紋,所以模擬濾波器采用巴特沃斯模擬低通濾波器.借助Matlab軟件,設(shè)計(jì)IIR低通濾波器及其濾波的流程如圖1所示.
圖1 IIR低通濾波器設(shè)計(jì)及濾波流程圖
通過(guò)Matlab軟件提供的脈沖響應(yīng)不變法和雙線性變換法設(shè)計(jì)函數(shù),設(shè)計(jì)IIR數(shù)字濾波器,求出系統(tǒng)函數(shù)H(z),如式(1)所示.把式(1)寫成Y(z)和X(z)的等式形式,然后進(jìn)行z變換的逆變換,得到表示IIR數(shù)字濾波的線性常系數(shù)差分方程,如式(2)所示.其中,n為移位位數(shù),i為求和變量,x(n-i)為輸入移位序列,y(n-i)為輸出移位序列.
(1)
(2)
(1)數(shù)組bi[M+1]初始化為bi,數(shù)組ai[N]初始化為ai,數(shù)組xn[M+1]和數(shù)組yn[N]初始化為0,n=0.
(2)數(shù)組xn[M+1]中元素右移1位,數(shù)組元素xn[0]=x(n).
(4)數(shù)組yn[N]中的元素右移1位,數(shù)組元素yn[0]=y[n].
(5)n加1,若n小于序列x(n)的長(zhǎng)度L,則跳到(2)重復(fù)執(zhí)行,否則,算法結(jié)束.
已經(jīng)IIR數(shù)字濾波器的邊界截止頻率、通帶衰減和阻帶衰減,借助模擬濾波器設(shè)計(jì),假設(shè)選用巴特沃斯濾波器作為原型模擬濾波器,選擇脈沖響應(yīng)不變法或雙線性變換法設(shè)計(jì).按照?qǐng)D1中的設(shè)計(jì)步驟,首先,進(jìn)行頻率變換,得到模擬濾波器的技術(shù)指標(biāo).其次,借助Matlab軟件,按照選定的模擬濾波器設(shè)計(jì)函數(shù),進(jìn)行模擬濾波器設(shè)計(jì),求得其系統(tǒng)函數(shù)Ha(s),調(diào)用脈沖響應(yīng)不變法或雙線性變換法設(shè)計(jì)函數(shù),求得IIR數(shù)字濾波器的系統(tǒng)函數(shù)H(z).
由于正弦序列的頻譜為單位沖激信號(hào),在IIR數(shù)字濾波實(shí)驗(yàn)中,為了使實(shí)驗(yàn)現(xiàn)象容易觀察,一般選擇正弦序列作為輸入信號(hào),在對(duì)濾波前和濾波后的信號(hào)頻譜分析時(shí),實(shí)驗(yàn)現(xiàn)象明顯.
根據(jù)IIR濾波器的通帶和阻帶的截止頻率,確定正弦序列的頻率[10].對(duì)于IIR低通和高通濾波器,輸入序列x1(n)設(shè)計(jì)為兩個(gè)正弦序列相加的形式,如式(3)所示,其中Fs為采樣頻率.若f1=25 Hz,f2=100 Hz,F(xiàn)s=256 Hz,則輸入序列x2(n)如式(4)所示,其時(shí)域波形如圖4所示,頻譜如圖5所示.
x1(n)=sin(2×3.14×f1×n/Fs)+sin(2×3.14×f2×n/Fs),
(3)
x2(n)=10×sin(2×3.14×n×(25/256)) +5×sin(2×3.14×n×(100/256)).
(4)
圖4 輸入x2(n)的時(shí)域波形
圖5 輸入x2(n)的頻譜
IIR數(shù)字低通濾波器的技術(shù)指標(biāo)包括通帶截止頻率ωp、阻帶截止頻率ωs、通帶允許的最大衰減αp和阻帶允許的最小衰減αs.采用脈沖響應(yīng)不變法設(shè)計(jì),借助Matlab軟件,按照?qǐng)D1中的設(shè)計(jì)步驟,求得IIR數(shù)字濾波器的系統(tǒng)函數(shù)H(z)[11],如式(5)所示.
(5)
根據(jù)系統(tǒng)函數(shù)H(z),畫出直接Ⅰ型網(wǎng)絡(luò)結(jié)構(gòu)如圖6所示.按照直接Ⅰ型網(wǎng)絡(luò)結(jié)構(gòu)完成濾波,求得輸出序列y(n).首先把系數(shù)b0,b1,…,bM存放到數(shù)組bi[M+1]中,把系數(shù)a1,a2,…,aN存放到數(shù)組ai[N]中,輸入序列x(n)存放到數(shù)組x[n]中,其長(zhǎng)度為L(zhǎng),輸出序列y(n)存放到數(shù)組y[n]中,輸入移位序列x(n-i)存放到數(shù)組xn[M+1]中,輸出移位序列y(n-i)存放到數(shù)組yn[N]中.采用C語(yǔ)言編寫程序,實(shí)現(xiàn)圖6的直接Ⅰ型網(wǎng)絡(luò)結(jié)構(gòu)的C語(yǔ)言算法如圖7所示.
圖6 IIR直接Ⅰ型網(wǎng)絡(luò)結(jié)構(gòu)Fig.6 The direct Ⅰ form of the IIR network
for(i=0;i
若IIR數(shù)字低通濾波器的技術(shù)指標(biāo)為ωp=0.3*pi、ωs=0.5*pi、αp=1和αs=20,按照?qǐng)D1中的設(shè)計(jì)步驟,采用脈沖響應(yīng)不變法設(shè)計(jì)IIR數(shù)字低通濾波器,求得其系統(tǒng)函數(shù)H(z).采用直接I型網(wǎng)絡(luò)結(jié)構(gòu)實(shí)現(xiàn)濾波.采用式(4)表示的混疊信號(hào)作為輸入序列x(n).借助TI公司的CCS 5.5集成開(kāi)發(fā)環(huán)境,采用Texas Instruments Simulator/C55xx Rev3.0 CPU軟件模擬器.采用圖7所示程序,求解線性常系數(shù)差分方程,實(shí)現(xiàn)IIR低通濾波,求得輸出序列y(n).通過(guò)CCS5.5軟件的Tools/Graph菜單觀察y(n)的波形,其時(shí)域波形如圖8所示,頻譜如圖9所示.比較圖5和圖9,可以看出,高頻信號(hào)被濾除,低頻信號(hào)通過(guò)IIR數(shù)字低通濾波器.
圖8 IIR低通濾波器輸出的時(shí)域波形
圖9 IIR低通濾波器輸出的頻譜
IIR數(shù)字高通濾波器的技術(shù)指標(biāo)包括通帶截止頻率ωp、阻帶截止頻率ωs、通帶允許的最大衰減αp和阻帶允許的最小衰減αs.采用雙線性變換法設(shè)計(jì),采用級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)實(shí)現(xiàn)濾波[12],借助Matlab軟件,按照?qǐng)D1中的設(shè)計(jì)步驟,求得級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)的系數(shù)矩陣SOS和增益G,其中G為常數(shù).
IIR數(shù)字濾波器的級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)的系數(shù)矩陣SOS如式(6)所示,系數(shù)矩陣SOS由k行組成,每行元素代表一個(gè)二階因式的系數(shù),前3個(gè)元素為分子多項(xiàng)式的系數(shù),后3個(gè)元素為分母多項(xiàng)式的系數(shù),通過(guò)系數(shù)矩陣SOS的第i行元素得到的二階因式如式(7)所示,若系數(shù)b2i和a2i為0,則為一階因式.
(6)
(7)
通過(guò)一階因式畫出一階網(wǎng)絡(luò)結(jié)構(gòu),二階因式畫出二階網(wǎng)絡(luò)結(jié)構(gòu),把一階網(wǎng)絡(luò)結(jié)構(gòu)和二階網(wǎng)絡(luò)結(jié)構(gòu)級(jí)聯(lián)在一起,得到IIR數(shù)字濾波器的級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu),如圖10所示.
圖10 IIR級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)
通常把SOS矩陣的每行元素表示為二階因式的形式,IIR數(shù)字濾波器的級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)可以看作由K個(gè)基本二階網(wǎng)絡(luò)結(jié)構(gòu)級(jí)聯(lián)而成.若圖6程序中的N=M=2,圖7中的C語(yǔ)言程序轉(zhuǎn)變?yōu)閷?shí)現(xiàn)基本二階網(wǎng)絡(luò)結(jié)構(gòu)濾波的C語(yǔ)言子程序.
按照?qǐng)D10所示的級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu),編寫實(shí)現(xiàn)IIR數(shù)字高通濾波器濾波的C語(yǔ)言程序,在C語(yǔ)言程序主函數(shù)main()中,需要調(diào)用K次基本二階網(wǎng)絡(luò)結(jié)構(gòu)濾波的C語(yǔ)言子程序,完成級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)濾波,求得輸出序列y(n).
若IIR數(shù)字高通濾波器的技術(shù)指標(biāo)為ωp=0.5*pi、ωs=0.3*pi、αp=1和αs=20,采用雙線性變換法設(shè)計(jì)IIR數(shù)字高通濾波器,按照?qǐng)D1中的設(shè)計(jì)步驟,求得系數(shù)矩陣SOS和增益G.采用式(4)表示的混疊信號(hào)作為輸入序列x(n).借助TI公司的CCS 5.5軟件,采用Texas Instruments Simulator/C55xx Rev3.0 CPU軟件模擬器.編寫C語(yǔ)言程序,實(shí)現(xiàn)IIR數(shù)字高通濾波器的級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)濾波,求得輸出序列y(n).通過(guò)CCS 5.5軟件的Tools/Graph菜單觀察y(n)的波形,其時(shí)域波形如圖11所示,頻譜如圖12所示.比較圖5和圖12,可以看出,低頻信號(hào)被濾除,高頻信號(hào)通過(guò)IIR數(shù)字高通濾波器.
圖11 IIR高通濾波器輸出序列的時(shí)域波形
圖12 IIR高通濾波器輸出序列的頻譜
本文借助Matlab軟件實(shí)現(xiàn)IIR數(shù)字濾波器的設(shè)計(jì).借助CCS 5.5軟件,采用Texas Instruments Simulator/C55xx Rev3.0 CPU軟件模擬器,編寫C語(yǔ)言程序完成IIR數(shù)字濾波實(shí)驗(yàn)設(shè)計(jì).首先,借助Matlab軟件,完成IIR數(shù)字濾波器設(shè)計(jì),得到IIR直接型網(wǎng)絡(luò)結(jié)構(gòu)的系數(shù)bi和ai、級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)的系數(shù)矩陣SOS和增益G.其次,根據(jù)IIR濾波器的邊界截止頻率,設(shè)計(jì)輸入序列x(n).再次,借助CCS 5.5軟件,根據(jù)IIR直接型網(wǎng)絡(luò)結(jié)構(gòu)的系數(shù)bi和ai,編寫實(shí)現(xiàn)IIR直接型網(wǎng)絡(luò)結(jié)構(gòu)濾波C語(yǔ)言程序;根據(jù)IIR級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)的系數(shù)矩陣SOS和增益G,編寫實(shí)現(xiàn)IIR級(jí)聯(lián)型網(wǎng)絡(luò)結(jié)構(gòu)濾波C語(yǔ)言程序.完成對(duì)輸入序列x(n)的濾波,較好地完成了IIR數(shù)字濾波綜合實(shí)驗(yàn)設(shè)計(jì),實(shí)驗(yàn)過(guò)程中計(jì)算簡(jiǎn)單、步驟清晰且現(xiàn)象明顯,取得了良好的實(shí)驗(yàn)效果.