陳 櫻 楊培消 文申平 凌佳俊
(1.91668部隊(duì) 上海 200000)(2.海軍工程大學(xué) 武漢 430033)(3.91878部隊(duì) 湛江 524000)(4.91917部隊(duì) 北京 100000)
在這個(gè)信息化時(shí)代,數(shù)字信號(hào)處理技術(shù)越來(lái)越受到人們的關(guān)注[1],隨著計(jì)算機(jī)相關(guān)技術(shù)和微電子技術(shù)飛速地發(fā)展,其相關(guān)的理論和算法被廣泛應(yīng)用于數(shù)字通信、模式識(shí)別、語(yǔ)音圖像信號(hào)處理以及自動(dòng)控制等領(lǐng)域[2~4]。作為數(shù)字信號(hào)處理技術(shù)中非常重要的一環(huán),數(shù)字濾波器的應(yīng)用幾乎遍布所有的數(shù)字信號(hào)處理系統(tǒng)中[5]。數(shù)字濾波器由加法器、數(shù)字乘法器以及相關(guān)延時(shí)單元組成的一種算法或裝置。它的主要功能是在數(shù)字域?qū)斎氲碾x散信號(hào)進(jìn)行運(yùn)算處理,從而達(dá)到濾除雜波得到目標(biāo)信號(hào)的目的[6~8]。相比于傳統(tǒng)的模擬濾波器,數(shù)字濾波器沒(méi)有模擬器件的溫度和電壓漂移,性能更加可靠且能夠達(dá)到很高的精度,同時(shí)濾波器參數(shù)容易修改[9]。由于數(shù)字器件的規(guī)范性,數(shù)字濾波器能夠進(jìn)行大規(guī)模的集成,通過(guò)DSP數(shù)字處理芯片可以實(shí)現(xiàn)并行操作處理[10]。
數(shù)字濾波器根據(jù)沖激響應(yīng)的不同,能夠分為有限沖激響應(yīng)(FIR)濾波器和無(wú)限沖激響應(yīng)(IIR)濾波器。對(duì)于FIR濾波器,沖激響應(yīng)在有限時(shí)間內(nèi)衰減為零,其輸出僅取決于當(dāng)前和過(guò)去的輸入信號(hào)值[11]。對(duì)于IIR濾波器,沖激響應(yīng)理論上應(yīng)會(huì)無(wú)限持續(xù),其輸出不僅取決于當(dāng)前和過(guò)去的輸入信號(hào)值,也取決于過(guò)去的信號(hào)輸出值[12]。本文主要在DSP TMS320C54x系列芯片上實(shí)現(xiàn)FIR濾波器。
對(duì)于一個(gè)FIR濾波器,假定其沖激響應(yīng)為bi(i=0,1,2,…N-1),輸入信號(hào)為x(n),則有以下差分方程:
其對(duì)應(yīng)的濾波器傳遞函數(shù)為
可以用橫截型(又稱直接型或卷積型)FIR數(shù)字濾波器的結(jié)構(gòu)圖表示[13],如圖1所示。
圖1 橫截型FIR濾波器的結(jié)構(gòu)圖
由上面的公式和結(jié)構(gòu)圖可知,F(xiàn)IR濾波算法實(shí)際上是一種乘法累加運(yùn)算。它不斷地從輸入端讀入樣本值x(n),經(jīng)延時(shí)(z-1),做乘法累加,再輸出濾波結(jié)果y(n)。
在實(shí)際編程中,z-1的實(shí)現(xiàn)方法有兩種:線性緩沖區(qū)法和循環(huán)緩沖區(qū)法。下面進(jìn)行分別介紹。
2.2.1 線性緩沖區(qū)法
線性緩沖區(qū)法的主要特點(diǎn):對(duì)于N級(jí)FIR濾波器,在存儲(chǔ)器中開(kāi)辟一個(gè)大小為N的緩沖區(qū),存放最新的N個(gè)數(shù)據(jù)樣本值。每次輸入新的樣本值時(shí),新的樣本值總是放在緩沖區(qū)的頂部,其他數(shù)據(jù)都要下移一位。如圖2所示,圖中假定N=5。
圖2 利用線性緩存區(qū)法實(shí)現(xiàn)
每次從緩沖區(qū)的底部向上讀取數(shù)據(jù),每讀取一個(gè)數(shù)據(jù)后,要將此數(shù)據(jù)下移一位。
2.2.2 循環(huán)緩沖區(qū)法
循環(huán)緩沖區(qū)法的主要特點(diǎn)是:對(duì)于N級(jí)FIR濾波器,在數(shù)據(jù)存儲(chǔ)區(qū)開(kāi)辟一個(gè)稱為滑窗的具有N個(gè)單元的緩沖區(qū),滑窗中存放最新的N個(gè)輸入樣本值。每次輸入新的樣本時(shí),新的樣本將改寫(xiě)滑窗中最老的數(shù)據(jù),其它數(shù)據(jù)則不需要移動(dòng)。編寫(xiě)程序時(shí)利用片內(nèi)BK(循環(huán)緩沖區(qū)長(zhǎng)度)寄存器對(duì)滑窗進(jìn)行間接尋址,因而循環(huán)緩沖區(qū)地址是首尾相鄰的,如圖2所示,圖中假定N=6。
圖3 利用循環(huán)緩沖區(qū)法實(shí)現(xiàn)
利用循環(huán)緩沖區(qū)法的主要優(yōu)點(diǎn)是:不需要移動(dòng)數(shù)據(jù),可將循環(huán)緩沖區(qū)定位在數(shù)據(jù)存儲(chǔ)器的任何位置(而線性緩沖區(qū)則要求必須定位在DARAM中)。
本文在DSP實(shí)現(xiàn)中采用循環(huán)緩沖區(qū)法。
下面設(shè)計(jì)實(shí)現(xiàn)一個(gè)FIR低通濾波器,通帶邊界頻率為1500Hz,通帶波紋小于1dB;阻帶邊界頻率為2000Hz,阻帶衰減大于40dB;采樣頻率為8000Hz。
1)采用Matlab計(jì)算濾波器參數(shù)
在Matlab中使用窗函數(shù)法計(jì)算FIR濾波器,例如選擇Hamming窗,其程序?yàn)?/p>
b=fir1(16,1500/8000*2)。得到下表中FIR數(shù)字濾波器系數(shù)。
表1 FIR濾波器系數(shù)
將上述系數(shù)存盤(pán),建立一個(gè)數(shù)據(jù)文件(如fir01.txt)。
2)建立DSP匯編程序的FIR濾波器系數(shù)文件
上述系數(shù)必須轉(zhuǎn)換成Q15格式,并放置在DSP匯編程序的。inc文件中,進(jìn)行FIR濾波器的匯編程序的匯編、鏈接時(shí),inc文件將被自動(dòng)地加入到工程中去。
從Matlab中產(chǎn)生的fir01.txt文件,通過(guò)執(zhí)行轉(zhuǎn)換命令,將自動(dòng)變換為firdata.inc濾波器系數(shù)文件。轉(zhuǎn)換命令為(在Matlab下):!firdat fir01.txt將產(chǎn)生firdata.inc文件。
其內(nèi)容如下:
3)產(chǎn)生濾波器輸入信號(hào)的文件
在使用CCS的Simulator進(jìn)行濾波器特性的測(cè)試時(shí),需要輸入時(shí)間信號(hào)x(n)。以下是一個(gè)產(chǎn)生輸入信號(hào)的C語(yǔ)言程序,這個(gè)信號(hào)是頻率為1000Hz和2500Hz的正弦波合成的波形。文件名為firin?put.c。
該程序?qū)a(chǎn)生名為firin.inc的輸入信號(hào)程序。
4)實(shí)現(xiàn)FIR數(shù)字濾波器的匯編程序
按照上述步奏操作,便能在DSP上實(shí)現(xiàn)數(shù)字濾波器,完成對(duì)混合信號(hào)高頻分量的濾波功能。
濾波之前生成的DSP混合信號(hào)波形:
圖4 濾波前DSP時(shí)域波形
圖5 濾波前DSP頻域波形
將信號(hào)輸入數(shù)字濾波器進(jìn)行濾波,得到濾波后的信號(hào)。
圖6 FIR濾波器頻域特性
圖7 濾波前DSP時(shí)域波形
圖8 濾波前DSP頻域波形
從上面的波形圖可以看出,經(jīng)過(guò)低通FIR濾波器后,高頻信號(hào)被有效地濾除,得到所需的目標(biāo)信號(hào)。實(shí)驗(yàn)結(jié)果證明FIR低通濾波器在DSP中得到實(shí)現(xiàn)。
隨著技術(shù)的飛速發(fā)展,數(shù)字濾波器的應(yīng)用不僅僅局限于數(shù)字信息處理和過(guò)濾干擾,它在生物學(xué)、指揮控制和醫(yī)療事業(yè)等相關(guān)方面也有廣泛的應(yīng)用,并且功能也變得多樣化。DSP芯片的普及使數(shù)字濾波器越來(lái)越容易實(shí)現(xiàn),不但輸出精度較傳統(tǒng)濾波器有了大的提高,其執(zhí)行速度和實(shí)用性也有大的提升。