陳仲源 廈門市專用通信局
數(shù)字濾波器根據(jù)其沖激響應(yīng)函數(shù)的時(shí)域特性,分無限長沖激響應(yīng)(IIR)濾波器和有限長沖激響應(yīng)(FIR)濾波器。FIR濾波器在保證幅度特性滿足技術(shù)要求的同時(shí),很容易做到有嚴(yán)格的線性相位特性。穩(wěn)定和線性相位特性是FIR濾波器突出的優(yōu)點(diǎn)。
用窗函數(shù)法設(shè)計(jì)一線性相位數(shù)字低通濾波器,其技術(shù)指標(biāo)為:3dB截止頻率為:0.2 PI;阻帶截止頻率為:0.4PI;阻帶最小衰減為40dB;并編程用DSP實(shí)現(xiàn)。
由數(shù)字信號(hào)處理知識(shí)可知:有限長單位脈沖響應(yīng)(FIR)濾波器的系統(tǒng)函數(shù)為的N-1階多項(xiàng)式,顯然系數(shù)即是該系統(tǒng)的的單位脈沖響應(yīng)。
線性相位FIR濾波器通常采用窗函數(shù)法和頻率采樣法來設(shè)計(jì)。本設(shè)計(jì)采用窗函數(shù)法中的凱塞(Kaiser)窗,對(duì)于凱塞(Kaiser)窗,可以在主瓣寬度與旁瓣寬度衰減之間自由地選擇。由濾波器的過渡帶寬為,阻帶最小衰減為,這時(shí)的參數(shù)和濾波器長度N可由下列經(jīng)驗(yàn)公式求得:
2.2.1 產(chǎn)生輸入信號(hào)序列
利用MATLAB產(chǎn)生一輸入信號(hào)序列,該序列所含頻譜有直流的頻率分量,同時(shí)將生成的數(shù)字序列保存,導(dǎo)入到CCS5000里。
2.2.2 濾波器設(shè)計(jì)
根據(jù)指標(biāo)要求其邊界頻率應(yīng)為
利用MATLAB編寫程序,設(shè)計(jì)并計(jì)算出系數(shù)表。
由定點(diǎn)的知識(shí)可見,定點(diǎn)的選擇很重要,此處選擇Q14格式,若選Q15形式,由于所選的DSP芯片為16位字長的定點(diǎn)DSP芯片,而由MATLAB濾波運(yùn)行結(jié)果可發(fā)現(xiàn)一些計(jì)算量已超出了動(dòng)態(tài)范圍,所以MATLAB中x=x*16383, b2=b1*16383,實(shí)現(xiàn)十進(jìn)制數(shù)轉(zhuǎn)換為定點(diǎn)數(shù)。
在TMS320C54x中,提供了一個(gè)用于對(duì)稱有限沖擊響應(yīng)濾波器設(shè)計(jì)的專用指令FIRS 其操作如下:
FIRS指令在同一個(gè)機(jī)器周期內(nèi),通過C和D總線讀2次數(shù)據(jù)存儲(chǔ)器,同時(shí)通過D總線讀一個(gè)系數(shù)。
本設(shè)計(jì)采用循環(huán)尋址方式。在TI的DSP中,循環(huán)尋址通過如下方法實(shí)現(xiàn)。
①設(shè)定BK(寄存器塊大?。┲担源_定循環(huán)尋址緩沖區(qū)的大小,也可將它看作是循環(huán)的周期。
②設(shè)定緩沖區(qū)的底部地址。必須注意:其低N位為零,其中N為滿足式(1)的最小N值。
2 N>BK (1)
③用輔助寄存器間接尋址循環(huán)緩沖區(qū)。
由于一個(gè)N(設(shè)N為偶數(shù))階的FIR濾波器具有系數(shù)對(duì)稱特性,其輸出方程可以寫為:
所以可建立如下實(shí)現(xiàn)算法:
①在數(shù)據(jù)存儲(chǔ)中開辟兩個(gè)循環(huán)緩沖區(qū),New循環(huán)緩沖區(qū)存放新數(shù)據(jù),O1d循環(huán)緩沖區(qū)中存放老數(shù)據(jù)。循環(huán)緩沖區(qū)的長度為N/2。
②設(shè)置循環(huán)緩沖區(qū)指針,AR2指向New緩沖區(qū)中最新的數(shù)據(jù),AR3指向O1d緩沖區(qū)中最老的數(shù)據(jù)。
③在程序存儲(chǔ)器中設(shè)置系數(shù)表。即導(dǎo)入先前由MATLAB生成的系數(shù)表(FIR_table.dat)。
④(AR2)+(AR3)→AH(累加器 A 的高位);(AR2)-1→AR2;(AR3)-1→AR3。
⑤將累加器B清零,重復(fù)執(zhí)行下列操作N/2次:(AH)*系數(shù)ai+(B)→B,系數(shù)指針(PAR)加1,(AR2)+(AR3)→AH,AR2和 AR3減 1。
⑥保存和輸出結(jié)果。
⑦修正數(shù)據(jù)指針,讓AR2和AR3分別指向New緩沖區(qū)最新數(shù)據(jù)和O1d緩沖區(qū)中最老的數(shù)據(jù)。
⑧用New緩沖區(qū)中最老的數(shù)據(jù)替代O1d緩沖區(qū)中最老的數(shù)據(jù)。O1d緩沖區(qū)指針減1。
⑨輸入一個(gè)新數(shù)據(jù)替代New緩沖區(qū)中最老的數(shù)據(jù)。
重復(fù)執(zhí)行第④~⑨步。
根據(jù)上述算法編寫DSP程序,輸入數(shù)據(jù)x_in, 輸出x_out的頻譜,如圖1,圖2所示
圖1:輸入信號(hào)序列x_in的頻譜(上)和相位譜(下)
圖2:濾波后輸出信號(hào)序列x_out的頻譜(上)和相位譜(下)
分析:由圖可見,輸入序列中所含頻譜分量分別為直流, 經(jīng)過DSP所設(shè)計(jì)的系數(shù)對(duì)稱的FIR濾波器后,只剩直流, 的頻率分量,而 的頻率分量已被濾除,設(shè)計(jì)符合要求。
數(shù)字濾波器的應(yīng)用十分廣泛,運(yùn)行MATLAB語言,能很容易地設(shè)計(jì)出具有嚴(yán)格要求(如線性相位等)的濾波器。用定點(diǎn)DSP實(shí)現(xiàn)濾波器要考慮DSP的定標(biāo)、誤差、循環(huán)尋址等幾個(gè)關(guān)鍵問題。