(在此特別鳴謝作者 逸珺 及其 公眾號(hào)“嵌入式客棧”)【導(dǎo)讀】:在嵌入式系統(tǒng)中經(jīng)常需要采集模擬信號(hào),采集模擬信號(hào)的信號(hào)鏈中難免引入干擾,那么如何濾除干擾呢?今天就來(lái)個(gè)一步一步描述如何設(shè)計(jì)部署一個(gè)IIR濾波器到你的系統(tǒng)。寫(xiě)這篇文章考慮到很多粉絲是做單片機(jī)系統(tǒng)開(kāi)發(fā)的,經(jīng)常會(huì)需要采集模擬信號(hào),系統(tǒng)中往往存在各種各樣的干擾,干擾常常讓人一籌莫展,所以花了一周時(shí)間整理出IIR濾波器設(shè)計(jì)部署的干貨文章,照此一步一步做,你必會(huì)解決大部分干擾問(wèn)題。
逸珺編外語(yǔ):文章寫(xiě)作過(guò)程雖談不上嘔心瀝血,但也可算絞盡腦汁。在此也呼吁粉絲朋友積極參與互動(dòng),或點(diǎn)在看,或分享,或留言評(píng)論,當(dāng)然如能買(mǎi)杯咖啡,那就更好啦!如果大家對(duì)此類話題感興趣,我會(huì)寫(xiě)出系列信號(hào)處理文章以答謝各位的厚愛(ài),如果大家對(duì)此類話題不感興趣,就不在花過(guò)多時(shí)間整理發(fā)布了。在此感謝各位關(guān)注厚愛(ài)!
何為IIR濾波器?
無(wú)限沖激響應(yīng)(IIR:Infinite Impulse Response)是一種適用于許多線性時(shí)不變系統(tǒng)的屬性,這些系統(tǒng)的特征是具有一個(gè)沖激響應(yīng)h(t),該沖激響應(yīng)h(t)不會(huì)在特定點(diǎn)上完全變?yōu)榱悖菬o(wú)限期地持續(xù)。這與有限沖激響應(yīng)(FIR:Finite Impulse Response)系統(tǒng)形成對(duì)比,在有限沖激響應(yīng)(FIR)系統(tǒng)中,對(duì)于某個(gè)有限T,在時(shí)間t》 T時(shí),沖激響應(yīng)確實(shí)恰好變?yōu)榱恪>€性時(shí)不變系統(tǒng)的常見(jiàn)示例是大多數(shù)電子和數(shù)字濾波器。具有此屬性的系統(tǒng)稱為IIR系統(tǒng)或IIR濾波器。對(duì)于什么叫沖激響應(yīng),這里就不展開(kāi)解釋了,有興趣的可以查閱相關(guān)書(shū)籍。
這是常見(jiàn)的教科書(shū)式數(shù)學(xué)嚴(yán)謹(jǐn)定義,很多人看到這一下就蒙了,能說(shuō)人話嗎?
線性時(shí)不變系統(tǒng)理論俗稱LTI系統(tǒng)理論,源自應(yīng)用數(shù)學(xué),直接在核磁共振頻譜學(xué)、地震學(xué)、電路、信號(hào)處理和控制理論等技術(shù)領(lǐng)域運(yùn)用。它研究的是線性、非時(shí)變系統(tǒng)對(duì)任意輸入信號(hào)的響應(yīng)。雖然這些系統(tǒng)的軌跡通常會(huì)隨時(shí)間變化(例如聲學(xué)波形)來(lái)測(cè)量和跟蹤,但是應(yīng)用到圖像處理和場(chǎng)論時(shí),LTI系統(tǒng)在空間維度上也有軌跡。因此,這些系統(tǒng)也被稱為線性非時(shí)變平移,在最一般的范圍理論給出此理論。在離散(即采樣)系統(tǒng)中對(duì)應(yīng)的術(shù)語(yǔ)是線性非時(shí)變平移系統(tǒng)。由電阻、電容、電感組成的電路是LTI系統(tǒng)的一個(gè)很好的例子。比如一個(gè)運(yùn)放系統(tǒng)在一定頻帶范圍內(nèi)滿足信號(hào)的時(shí)域疊加,輸入一個(gè)100Hz和200Hz正弦信號(hào),輸出頻率是這兩種信號(hào)的線性疊加。
用數(shù)學(xué)對(duì)LTI系統(tǒng)描述:
線性:輸入x1(t),產(chǎn)生響應(yīng) y1(t),而輸入x2(t),產(chǎn)生相應(yīng)y2(t) , 那么放縮和加和輸入 ax1(t)+bx1(t), 產(chǎn)生放縮、加和的響應(yīng)ay1(t)+by1(t),其中a和b是標(biāo)量,對(duì)于任意的有:
而對(duì)200Hz的正弦信號(hào),假定其放大倍數(shù)為1.7倍。(做過(guò)運(yùn)放電路設(shè)計(jì)的朋友應(yīng)該有經(jīng)驗(yàn),在其同頻帶其放大倍數(shù)往往并不平坦,也即幅頻響應(yīng)在頻帶內(nèi)不平坦,這是比較常見(jiàn)的)。也即輸入為:
那么如果輸入100Hz和200Hz的時(shí)域疊加信號(hào),則其輸入為:
由這些圖可看出,輸入信號(hào)的形狀保持不變,輸出為對(duì)應(yīng)輸入的線性時(shí)域疊加。對(duì)于時(shí)不變,就不用圖描述了,在一個(gè)真實(shí)電路中,如果輸入延遲一定時(shí)間,則響應(yīng)對(duì)應(yīng)延遲相同時(shí)間輸出。
上面這么多文字只是為了描述在什么場(chǎng)合可以使用IIR濾波器對(duì)信號(hào)進(jìn)行數(shù)字濾波。總結(jié)而言,就是在線性時(shí)不變系統(tǒng)中適用。換言之,在大多數(shù)電路系統(tǒng)中我們都可以嘗試采用IIR濾波器進(jìn)行數(shù)字濾波。
那么究竟什么是IIR濾波器呢?從數(shù)字信號(hào)處理的書(shū)籍中我們能看到這樣的Z變換信號(hào)流圖:
上述數(shù)字濾波器,如果從編程的角度來(lái)看,x(n-1),表示上一次的信號(hào),可能是來(lái)自ADC的上次采樣,而y(n-1)則為上一次濾波器的輸出值,對(duì)應(yīng)就比較好理解x(n-N)就表示前第n次輸入樣本信號(hào),而y(n-M)則為前第M次濾波器的輸出。
說(shuō)了這么多,只是為了更好的理解概念,只有概念理解正確,才能使用正確。概念理解這對(duì)工程師而言,非常之重要。
如何設(shè)計(jì)呢?
MATLAB提供了非常容易使用的FDATool幫助我們?cè)O(shè)計(jì)數(shù)字濾波器,真正精彩的地方開(kāi)始了,讓我們拭目以待究竟如何一步一步設(shè)計(jì)并實(shí)施一個(gè)IIR濾波器。首先打開(kāi)MATLAB,在命令行中敲fdatool,然后敲回車
在設(shè)計(jì)具體,有幾個(gè)相關(guān)概念需要澄清:Fs:采樣率,單位為Hz,真實(shí)部署在系統(tǒng)中,請(qǐng)務(wù)必確保樣本是按照恒定采樣率進(jìn)行采樣,否則將得不到想要的效果。Fpass: 通頻帶,單位為Hz,即系統(tǒng)中期望通過(guò)的最高頻率。Fstop: 截至頻率,即幅頻響應(yīng)的-3dB處的頻率,這個(gè)如不理解,請(qǐng)自行查閱相關(guān)書(shū)籍。分貝dB: 這是一個(gè)無(wú)單位反應(yīng)輸出與輸入倍數(shù)的一個(gè)術(shù)語(yǔ)。電學(xué)中分貝與放大倍數(shù)的轉(zhuǎn)換關(guān)系為:
A(V)(dB)=20lg(Vo/Vi);電壓增益,Vo 為輸出電壓,Vi為輸入電壓
A(I)(dB)=20lg(Io/Ii);電流增益,Io 為輸出電流,Ii為輸入電流
A(p)(dB)=10lg(Po/Pi);功率增益,Po 為輸出功率,Pi為輸入功率
濾波器類型:這里有Butterworth(巴特沃斯)、Chebyshev Type I,Chebyshev Type II、(切比雪夫)、Elipic 等可選。
巴特沃斯 Butterworth,也被稱作最大平坦濾波器。巴特沃斯濾波器的特點(diǎn)是通頻帶內(nèi)的頻率響應(yīng)曲線最大限度平坦,沒(méi)有紋波。
切比雪夫 Chebyshev,是在通帶或阻帶上頻率響應(yīng)幅度等波紋波動(dòng)的濾波器。切比雪夫?yàn)V波器在過(guò)渡帶比巴特沃斯濾波器的衰減快,但頻率響應(yīng)的幅頻特性不如后者平坦。
橢圓 Elliptic,橢圓濾波器是在通帶和阻帶等波紋的一種濾波器。
…這里就不一一介紹了,有興趣可以去查信號(hào)處理書(shū)籍。
就其特點(diǎn),這里對(duì)其中幾種略作介紹:
巴特沃斯具有最平坦的通帶。
橢圓濾波器衰減最快,但是通帶、阻帶都有波紋。
切比雪夫?yàn)V波器衰減比巴特沃斯快,但比橢圓濾波器慢,波紋區(qū)域可選擇。
假設(shè)我們需要設(shè)計(jì)一個(gè)IIR濾波器,采樣率為32000Hz, 有用信號(hào)頻率在10000Hz內(nèi),設(shè)計(jì)IIR濾波器對(duì)信號(hào)進(jìn)行數(shù)字濾波。這里為節(jié)省算力,我們指定濾波器的階數(shù),也即傳遞函數(shù)中N/M中的最大值,一般而言N大于M。
這里指定階數(shù)為8階,類型指定為巴特沃斯型IIR濾波器,輸入階數(shù)8階,采樣率32000Hz,然后點(diǎn)擊Design Filter如下圖所示:
除此之外,我們還可以將幅頻與相頻曲線放在一個(gè)頻率坐標(biāo)上去看設(shè)計(jì)結(jié)果:
導(dǎo)出濾波器參數(shù),這里我們選擇,
然后就得到了一個(gè)文件,保存2KHz_LPF.fcf,文件名隨你喜歡。
?
所謂直接II型,SOS(second order section)理解很簡(jiǎn)單,本質(zhì)是將IIR Z傳遞函數(shù)分解為上述二階塊的級(jí)聯(lián)形式。
部署測(cè)試濾波器
到這里,沒(méi)有經(jīng)驗(yàn)的朋友可能會(huì)說(shuō),這么一堆參數(shù)我該咋用呢?
需要自己去寫(xiě)前面描述的計(jì)算公式嗎?當(dāng)然你也可以這么做,這里就不寫(xiě)了,ARM的CMSIS庫(kù)已經(jīng)幫大家設(shè)計(jì)好了種類繁多的數(shù)字信號(hào)處理函數(shù)實(shí)現(xiàn)了,而且經(jīng)過(guò)了測(cè)試,這里直接拿來(lái)用即可。有興趣自己寫(xiě)也不難,只要理解Z傳遞函數(shù)概念內(nèi)涵,非常容易實(shí)現(xiàn)。這里我們采用32位浮點(diǎn)實(shí)現(xiàn)函數(shù):
arm_biquad_cascade_df1_f32。該函數(shù)位于:
CMSIS\DSP\Source\FilteringFunctions\arm_biquad_cascade_df1_init_f32.c
CMSIS\DSP\Source\FilteringFunctions\arm_biquad_cascade_df1_f32.c
我們來(lái)看一看這個(gè)函數(shù):
arm_biquad_cascade_df1_init_f32.c:
?
開(kāi)始測(cè)試:
(編者注:以上是上截圖不完整部分的補(bǔ)充:)
const float iir_coeffs[5*IIR_SECTION]={
0.035416141341387819,2*0.035416141341387819,0.035416141341387819,1.7193929141691948,-0.8610574795347461, 0.031387100113383172,2*0.031387100113383172,0.031387100113383172,1.5237898734101736,-0.64933827386370635, 0.028873109331868367,2*0.028873109331868367,0.028873109331868367,1.4017399331200424,-0.51723237044751591, 0.027673522765052503,2*0.027673522765052503,0.027673522765052503,1.3435020629061745,-0.45419615396638446
};
static arm_biquad_casd_df1_inst_f32 S;
/*假定采樣512個(gè)點(diǎn)*/
(補(bǔ)充完成,接上)
?
利用csv文件,將模擬數(shù)據(jù)存儲(chǔ),直接用excel打開(kāi),將行數(shù)據(jù)生成曲線圖如下:
有興趣也可以寫(xiě)個(gè)界面直接顯示,甚至繪制出譜線圖,做進(jìn)一步分析。
?
第一幅圖,為800Hz信號(hào)混入隨機(jī)噪聲的波形
第二幅圖,為4000Hz信號(hào),對(duì)假定系統(tǒng)為無(wú)用干擾信號(hào)
第三幅圖, 為800Hz 混入隨機(jī)噪聲過(guò)濾后,已經(jīng)很好的還原有用信號(hào)頻率
第四幅圖, 為800Hz信號(hào)混入隨機(jī)噪聲,同時(shí)疊加4000Hz干擾的波形,對(duì)系統(tǒng)而言,從時(shí)域中,明顯可見(jiàn),有用信號(hào)已經(jīng)完全扭曲
第五幅圖,為800Hz信號(hào)混入隨機(jī)噪聲,同時(shí)疊加4000Hz干擾的輸入,經(jīng)過(guò)該低通濾波器后的波形,與第三幅圖基本一樣,已經(jīng)非常好的濾除了干擾信號(hào)。
總結(jié):
IIR濾波器在線性時(shí)不變系統(tǒng)中可以很好的解決工程中一般噪聲問(wèn)題
如果需要設(shè)計(jì)帶通、高通濾波器其步驟基本類似,只是濾波器的參數(shù)以及SOS塊個(gè)數(shù)可能不一樣而已
需要提醒的時(shí),IIR的相頻響應(yīng)不線性,如果系統(tǒng)對(duì)相頻響應(yīng)有嚴(yán)格要求,就需要采用其他的數(shù)字濾波器拓?fù)湫问搅?/p>
實(shí)際應(yīng)用中,如果階數(shù)不高時(shí),現(xiàn)在算力強(qiáng)勁的單片機(jī)或者DSP以及可以直接使用浮點(diǎn)處理。
如果對(duì)處理速度有嚴(yán)格的實(shí)時(shí)要求,需要在極短時(shí)間進(jìn)行濾波處理,可以考慮降低階數(shù),或采用定點(diǎn)IIR濾波算法實(shí)現(xiàn)。也或者將文中函數(shù)進(jìn)行匯編級(jí)優(yōu)化。
歡迎大家進(jìn)行留言討論。
評(píng)論
查看更多