史明泉
(內(nèi)蒙古科技大學(xué)信息工程學(xué)院,內(nèi)蒙古包頭014010)
數(shù)字濾波器是數(shù)字信號處理的重要環(huán)節(jié),其實質(zhì)是用有限精度算法實現(xiàn)的離散時間線性時不變系統(tǒng),從而完成對信號進(jìn)行濾波處理的功能。具有可靠性好、精度高和靈活性大等優(yōu)點,廣泛應(yīng)用于語音、圖像處理、HDTV、模式識別和頻譜分析等方面[1]。數(shù)字濾波器根據(jù)其單位沖激響應(yīng)函數(shù)的時域特性可分為2類:無限沖激響應(yīng)(IIR)濾波器和有限沖激響應(yīng)(FIR)濾波器。FIR濾波器是有限長單位沖激響應(yīng)濾波器,在結(jié)構(gòu)上是非遞歸型的。它可以在幅度特性隨意設(shè)計的同時,保證精確嚴(yán)格的線性相位,廣泛應(yīng)用于數(shù)字信號處理[2]。
設(shè)h(n),n=0,1,2…N-1為濾波器的沖激響應(yīng),輸入信號為x(n),則FIR濾波器就是要實現(xiàn)下列差分方程[2,3]:
式中,y(n)為輸出信號,即經(jīng)過濾波之后的信號;N為濾波器階數(shù)。FIR濾波器的最主要特點是沒有反饋回路,因此是無條件穩(wěn)定系統(tǒng),其單位脈沖響應(yīng)h(n)是一個有限長序列。由式(1)可見,FIR濾波算法實際上是一種乘法累加運(yùn)算,不斷地輸入樣本x(n),經(jīng)延時(z-1)做乘法累加,再輸出濾波結(jié)果y(n)。對式(1)進(jìn)行 Z變換,整理后可得FIR濾波器的傳遞函數(shù)為:
FIR濾波器的一般結(jié)構(gòu)如圖1所示。
圖1 FIR濾波器結(jié)構(gòu)
由上述分析可知,FIR濾波器的算法實際上是一個乘累加運(yùn)算。在這個乘累加運(yùn)算中,主要涉及到3個要素:輸入信號 x(n)、沖擊響應(yīng)即濾波器系數(shù)h(n)和輸出信號y(n)。其中,x(n)和 h(n)為已知,y(n)為待求。
假設(shè)輸入信號是頻率為1 000 Hz和2 500 Hz的正弦波合成的波形,希望得到輸入信號的256個抽樣點,為了與整個系統(tǒng)保持一致,抽樣頻率fs規(guī)定為8 000 Hz。利用C語言得到256個點的輸入信號的源代碼如下:
代碼說明:由于TMS320VC5402 DSP是一款定點的16位DSP芯片,在定點DSP中,表示數(shù)字要用Q表示法[4]。根據(jù)本算法中數(shù)字的大小范圍選用Q15格式。
設(shè)計一個FIR低通濾波器,其截止頻率 fc=1 500 Hz,抽樣頻率 fs=8 000 Hz,階數(shù) N=17,選擇Hamming窗。利用MATLAB軟件設(shè)計濾波器方法有很多,可以采用FDATool濾波器設(shè)計分析工具箱和SPTool信號處理工具[5],還可以直接編程實現(xiàn),在此采用編程實現(xiàn),代碼如下:
得到17個濾波器系數(shù)轉(zhuǎn)化成Q15格式,即分別乘以32768(215),轉(zhuǎn)化成Q15格式的濾波器系數(shù)如下:
理論上,上述輸入信號(頻率為 1 000 Hz和2 500 Hz的正弦波合成的波形)經(jīng)過此低通濾波器濾波后的輸出信號應(yīng)該為頻率為1 000 Hz的正弦波。
CCS是TI推出的用于開發(fā)其DSP芯片的繼承開發(fā)調(diào)試工具,集編輯、編譯、鏈接、軟件仿真、硬件調(diào)試及實時跟蹤等功能于一體,極大地方便了DSP程序的設(shè)計與開發(fā),此外還提供圖形顯示功能,方便用戶觀察特定地址的波形。
在CCS中實現(xiàn)FIR低通濾波器的C語言算法的主要代碼如下:
此外,還需向工程中添加vector.asm、fir.cmd和rts.lib文件。其中rts.lib文件是TI提供的運(yùn)行時支持庫,如果是C代碼寫的源程序,必須要包含該庫,該庫由TI公司做好放在CCS的cgtoolslib中,源代碼TI網(wǎng)站可以下載。
采用CCS的圖形顯示功能,分別觀察輸入信號x(n)、輸出信號y(n)的時域波形和頻域波形,輸入信號波形如圖2所示。
圖2 輸入信號 x(n)的波形
圖2中有2個沖激,分別對應(yīng)的頻率為1 000 Hz和2 500 Hz,由此可以看出輸入信號是頻率分別為1 000 Hz和2 500 Hz的2個正弦波的疊加。這里設(shè)計的FIR低通濾波器截止頻率為1 500 Hz,理論上,上述輸入信號如果通過此濾波器將會濾除其高頻分量,而只保留低頻分量。輸出信號波形如圖3所示。
圖3 輸出信號 y(n)的波形
圖3(a)為輸出信號的時域波形,是一正弦波;圖2(b)為輸出信號的頻域波形,為一沖激,頻率為1 000 Hz,由此可以看出輸出信號是一頻率為1 000 Hz的正弦波,此FIR低通濾波器實現(xiàn)了其濾波功能,將高頻分量2 500 Hz的正弦波濾掉了,保留了頻率為1 000 Hz的正弦波,與理論上一致。
采用C語言算法在DSP平臺上實現(xiàn)了FIR低通數(shù)字濾波器,并且通過仿真波形說明了此算法的正確性和高效性。C語言算法相比于匯編算法可移植性很強(qiáng)。這里是在TMS320VC5402 DSP為平臺編寫的C語言算法,此算法可以稍加改動用在其他DSP芯片上,而匯編算法則不然。
[1]李 娟.MATLAB平臺下的FIR數(shù)字濾波器設(shè)計與分析[J].Journal of Science of Teachers′College and University,2010,30(3):64-67.
[2]趙順珍,馬 英.基于DSP的FIR數(shù)字濾波器設(shè)計與實現(xiàn)[J].微計算機(jī)信息,2009,25(2):162-163.
[3]丁玉美.數(shù)字信號處理[M].西安:西安電子科技大學(xué)出版社,2001.
[4]喬瑞萍.TMS320C54X DSP原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2005.
[5]張化光.MATLAB/SIMULINK實用教程[M].北京:人民郵電出版社,2009.
[6]彭啟琮.DSP集成開發(fā)環(huán)境:CCS及DSP/BIOS的原理與應(yīng)用[M].北京:電子工業(yè)出版社,2004.