淺談IIR濾波器零相位數(shù)字濾波實現(xiàn)及應用
0引言
在動態(tài)測試信號處理過程中,濾波器是常用的測試儀器之一。濾波器(filter),是一種用來消除干擾雜訊的器件,將輸入或輸出經(jīng)過過濾而得到純凈的直流電。對特定頻率的頻點或該頻點以外的頻率進行有效濾除的電路,就是濾波器,其功能就是得到一個特定頻率或消除一個特定頻率。濾波器,顧名思義,是對波進行過濾的器件。"波"是一個非常廣泛的物理概念,在電子技術領域,"波"被狹義地局限于特指描述各種物理量的取值隨時間起伏變化的過程。該過程通過各類傳感器的作用,被轉(zhuǎn)換為電壓或電流的時間函數(shù),稱之為各種物理量的時間波形,或者稱之為信號。因為自變量時間‘是連續(xù)取值的,所以稱之為連續(xù)時間信號,它常被用于抗混濾波,以避免傅立葉變換時在頻域產(chǎn)生混疊,或從具有多種頻率成分的復雜信號中,將感興趣的頻率成分提取出來,而將不感興趣的頻率成分衰減掉。在傳統(tǒng)測試儀器中,濾波器的功能通常需要依靠硬件系統(tǒng)來實現(xiàn)。
隨著數(shù)字信號處理技術的不斷完善,計算機硬件技術的日新月異以及軟件技術飛速發(fā)展,測試儀器系統(tǒng)的設計思想發(fā)生了重大改變。部分傳統(tǒng)的專用測試設備會逐步被以計算機和應用軟件為核心的虛擬儀器所代替[1].虛擬儀器的出現(xiàn)標志著"軟件即儀器(The soft is the instrument)"時代的到來。在計算機輔助測試系統(tǒng)(CAT,Computer Aided Test)中,以往模擬濾波器(AF,Analog Filter)的功能,模擬濾波器可以分為無源和有源濾波器。無源濾波器:2種電路主要有無源元件R、L和C組成。有源濾波器:集成運放和R、C組成,具有不用電感、體積小、重量輕等優(yōu)點。集成運放的開環(huán)電壓增益和輸入阻抗均很高,輸出電阻小,構(gòu)成有源濾波電路后還具有一定的電壓放大和緩沖作用。但集成運放帶寬有限,所以目前的有源濾波電路的工作頻率難以做得很高。 可用數(shù)字濾波器來替代。數(shù)字濾波器的實現(xiàn)不但比模擬濾波器容易的多,而且還能獲得較理想的濾波器性能。
2數(shù)字濾波器的時域描述與分類
對于一個線性移不變(LSI,Linear Shift Invariant)離散時間系統(tǒng),如圖1所示,可用如下差分方程表示:y(n)+∑Nk=1a(k)y(n-k)=∑Mr=0b(r)x(n-r)(1)式中a(k),b(r)為方程系數(shù)
圖1LSI系統(tǒng)
如果a(k),k=1,2,Λ,N不全為零,該系統(tǒng)為無限沖擊響應(IIR)系統(tǒng)。若a(k)均為零,并令b(0)=1,則y(n)=∑Nr=1b(r)x(n-r)+x(n)(2)該系統(tǒng)為有限沖擊響應(FIR)系統(tǒng)。
由此,數(shù)字濾波器在從實現(xiàn)方法上,有IIR濾波器和FIR濾波器之分。這兩類濾波器無論在性能上,還是在設計方法上都有著很大的區(qū)別。數(shù)字濾波器由數(shù)字乘法器、加法器和延時單元組成的一種算法或裝置。數(shù)字濾波器的功能是對輸入離散信號的數(shù)字代碼進行運算處理,以達到改變信號頻譜的目的。數(shù)字濾波器是一個離散時間系統(tǒng)(按預定的算法,將輸入離散時間信號轉(zhuǎn)換為所要求的輸出離散時間信號的特定功能裝置)。應用數(shù)字濾波器處理模擬信號時,首先須對輸入模擬信號進行限帶、抽樣和模數(shù)轉(zhuǎn)換。數(shù)字濾波器輸入信號的抽樣率應大于被處理信號帶寬的兩倍,其頻率響應具有以抽樣頻率為間隔的周期重復特性,且以折疊頻率即1/2抽樣頻率點呈鏡像對稱。為得到模擬信號,數(shù)字濾波器處理的輸出數(shù)字信號須經(jīng)數(shù)模轉(zhuǎn)換、平滑。數(shù)字濾波器具有高精度、高可靠性、可程控改變特性或復用、便于集成等優(yōu)點。IIR數(shù)字濾波器與FIR濾波器相比,前者保留了模擬濾波器的優(yōu)點,幅頻特性較好,但存在相位失真。后者相頻特性較好,可實現(xiàn)線性相位,但在相同指標要求下要比前者的階數(shù)高的多。
3差分數(shù)字濾波及其存在的問題
IIR數(shù)字濾波器的設計方法主要有雙線性Z變換法和沖激響應不變法;FIR數(shù)字濾波器的設計方法主要有窗函數(shù)法、頻率抽樣法和切比雪夫逼近法等。有關數(shù)字濾波器設計的詳細方法。
對于設計好的濾波器,確定出濾波器的系數(shù),通過對差分方程式(1)或式(2)的疊代算法,可以實現(xiàn)IIR濾波器或FIR濾波器的數(shù)字濾波??紤]到程序的通用性,這里就按式(1)編寫一個差分濾波函數(shù)DiffFilter(b,a,x),調(diào)用參數(shù)為三個數(shù)組,b用于存放濾波器的系數(shù)b(r)(r=0,1,…,M);a用于存放濾波器的系數(shù)a(k)(k=0,1,…,N),且a(0)=1;x用于存放輸入信號,返回后用于存放濾波后的輸出信號。如果將調(diào)用參數(shù)a均賦零值,則可實現(xiàn)FIR濾波器的數(shù)字濾波。
在此,用一實例進行說明。圖2為某型坦克發(fā)動機轉(zhuǎn)速1000rpm時,在排氣口測得的噪聲信號(采樣點數(shù)1024,采樣頻率4KHz)。從信號的波形可以看出,它具有一定的周期性,主要是以發(fā)動機周期性排氣產(chǎn)生的噪聲為主。
圖2某型坦克發(fā)動機噪聲信號
采用窗函數(shù)(Hanning窗)法設計出某200階FIR低通濾波器,截止頻率為200Hz,分析頻率為2KHz,其幅頻曲線及相頻曲線如圖3所示。
圖3低通濾波器的幅頻特性和相頻特性
利用該FIR低通數(shù)字濾波器對圖2所示發(fā)動機噪聲信號進行差分濾波,濾波后的波形如圖4所示
圖4差分濾波后的發(fā)動機噪聲信號
對比圖3和圖4所示波形可以看出,差分濾波后,信號變得"光滑"了許多,原來的"毛刺"被濾掉了。但同時也可以看出差分濾波方法存在兩個問題:一是濾波后的信號相對與原信號而言,發(fā)生了相移;二是濾波后的信號在起始部分,波形畸變較為嚴重。在信號處理中,如果對信號的相位有特殊的要求,相移問題需要引起高度的注意。而起始部分的畸變是由于疊代過程中,沒有考慮濾波器的初始條件,剛開始點數(shù)少,沒能用到濾波器全部系數(shù)的緣故。大多情況下,這種畸變可以接受,但當數(shù)據(jù)較短,而濾波器的階數(shù)又較高時,這種畸變會帶來較大的負面影響。
如果輸入信號為一單位脈沖信號,即
x(n)=1,n=1
0,n≠1
那么,濾波器的輸出為其脈沖響應。本文所用200階FIR低通數(shù)字濾波器的脈沖響應如圖5所示。
圖5濾波器的脈沖響應3零相位數(shù)字濾波算法及其實現(xiàn)
3.1零相位數(shù)字濾波的算法
為了克服差分數(shù)字濾波中存在的上述兩個問題,可以采用一種零相位濾波的方法,該方法的基本思路是:先確定出濾波器的初始條件,然后將原序列的首尾進行擴展,把擴展后序列通過濾波器,將所得結(jié)果反轉(zhuǎn)后再次通過濾波器,最后將所得結(jié)果再反轉(zhuǎn),并去掉首尾的擴展部分,即可得到零相位濾波后的輸出序列。本文采用四次差分濾波方式給出一種便于實現(xiàn)的詳細算法,假設輸入信號為x(n),n=0,1,…,P.
(1) 編寫差分濾波函數(shù)DiffFilter(b,a,x),調(diào)用參數(shù)如前所述。
(2) 對于IIR濾波器通常有M=N,求濾波器的初始條件e(q),q=0,1,…,N-1,這里記E=[e(0),e(1),…,e(N-1)]T,則有
E=1+a(1)1-1…0
a(2)01…0
MMMOM
a(N)00…-11× b(1)-b(0)a(0)
b(2)-b(0)a(1)
M
b(Nn)-b(0)a(N)(3)
(3) 對原輸入序列x(n)的首尾進行擴展,在x(n)的前面添加3N個數(shù),在后面添加3N個數(shù),擴展后的序列記為x′(n),n=0,1,…,P+6N.
x′(n)=2x(0)-x(3N-n)
x(n-3N)
2x(P)-x(P-1-(n-P-3N-n))
n<3N
3N?n<P+3N
P+3N?n?P+6N(4)
(4) 進行正向濾波:先用b,a和x′(n)調(diào)用DiffFilter(b,a,x)函數(shù),計算x′(n)通過
H(z)=∑Mm=0b(m)z-m/(1+∑Mm=1a(m)z-m)(5)
的輸出y′(n),然后生成一長度為P+6N+1的單位脈沖信號h(n),用z,a和h(n)調(diào)用DiffFilter(b,a,x)函數(shù),計算h(n)通過
H(z)=∑M-1m=0y′(0)e(m)z-m/(1+∑Mm=1a(m)z-m)(6)
的輸出y′(n),并記y(n)=y′(n)+y″(n)。
(5) 進行反向濾波:將正向濾波結(jié)果反轉(zhuǎn),記x′(n)=y(P+6N-n),重復步驟4°,得到反向濾波后的結(jié)果。
(6) 將反向濾波的結(jié)果反轉(zhuǎn),并刪除首尾的擴展部分,即可得到最后的濾波結(jié)果。
3.2零相位數(shù)字濾波的實現(xiàn)
Borland公司推出的Delphi編程語言,具有合理的單元化結(jié)構(gòu)、優(yōu)化的編譯環(huán)境,開發(fā)速度快、編程效率高。在實現(xiàn)同樣功能的情況下與其它語言相比,不僅編寫的代碼量少、程序可移植性強,而且還有許多優(yōu)秀的組件包可供使用。最為方便的是可以使用動態(tài)數(shù)組,隨時能夠改變數(shù)組的長度,這一點非常適合數(shù)字信號處理。
作者利用Delphi7編寫了利用雙線性Z變換法設計Butterworth型IIR濾波器和利用窗函數(shù)法設計FIR濾波器,以及差分數(shù)字濾波算法和零相位數(shù)字濾波算法應用程序,并作為集成測試軟件平臺的一個虛擬儀器。其中零相位數(shù)字濾波算法程序設計流程如圖6所示。
圖6零相位數(shù)字濾波算法的流程圖
圖7所示為圖2所示信號零相位數(shù)字濾波后的波形,通過與原信號(圖2)和差分濾波后的信號(圖4)對比不難看出:零相位數(shù)字濾波后的輸出與原信號中的相位基本一致,并且起始部分沒有畸變。但不可否認,零相位數(shù)字濾波算法相對于普通差分濾波算法計算量要大許多,但以目前計算機的運算能力,計算量稍大并不是什么主要問題。
圖7零相位濾波后的波形
4結(jié)束語
本文介紹了一種利用四次差分濾波算法,實現(xiàn)零相位數(shù)字濾波的方法,并利用Delphi7編寫了應用軟件。通過與普通差分濾波器的實例對比分析,說明零相位數(shù)字濾波不僅能夠避免相移,而且還能改善差分濾波起始部分的波形畸變。這一點在數(shù)字信號處理中具有重要的應用價值。