摘要:數(shù)字濾波器因具備應用靈活、穩(wěn)定、處理精度高等優(yōu)點被廣泛應用于信號處理等領(lǐng)域?,F(xiàn)介紹了在Anaconda開發(fā)環(huán)境下,基于Python的FIR數(shù)字濾波器仿真設(shè)計方法,為后續(xù)基于Python的數(shù)字信號處理方面的教學、科研提供了參考。
關(guān)鍵詞:FIR數(shù)字濾波器;Python;數(shù)字信號處理
0 引言
數(shù)字濾波器作為信號處理的核心設(shè)備之一,在工業(yè)生產(chǎn)、科學研究等領(lǐng)域有著廣泛應用。目前在科研和教學領(lǐng)域,數(shù)字濾波器主要基于Matlab軟件進行設(shè)計,隨著國外軟件公司逐漸限制部分高校使用Matlab軟件,基于開源軟件平臺進行數(shù)字濾波器設(shè)計顯得十分重要。本文主要介紹了在Anaconda開發(fā)環(huán)境下,基于Python的有限長單位脈沖響應(FIR)數(shù)字濾波器的設(shè)計方法。
1 Anaconda開發(fā)環(huán)境簡介
Anaconda作為Python的一個開源發(fā)行版本,主要面向科學計算,它預裝了很多常用的第三方庫,提供了包管理與環(huán)境管理的功能,可以方便解決各種第三方包的安裝問題,其自帶的Spyder集成開發(fā)環(huán)境及IPython交互式編程環(huán)境都有助于提高編程效率[1]。本文程序均調(diào)用了Python科學計算包中的基礎(chǔ)數(shù)據(jù)處理庫numpy、圖表繪制庫matplotlib及數(shù)值計算庫scipy。
2 FIR數(shù)字濾波器設(shè)計
2.1 ? ?窗函數(shù)法設(shè)計線性相位FIR濾波器
設(shè)計思路:假設(shè)希望逼近的理想濾波器的頻率響應為Hd(ejω),如果能求出其單位脈沖響應hd(n),經(jīng)過Z變換可得到濾波器的系統(tǒng)函數(shù)。因hd(n)是無限長的,需用一個有限長的N點窗函數(shù)序列w(n)去截斷(相乘),截斷后的序列為h(n),再求出加窗后實際的頻率響應H(ejω)。若結(jié)果不滿足要求,則需考慮改變窗的形狀或窗長的點數(shù)N[2]。
下面設(shè)計一個34階的高通濾波器,歸一化截止角頻率為0.48π,使用具有50 dB旁瓣紋波衰減的Chebyshev窗設(shè)計。Python程序與數(shù)字高通濾波器的幅頻響應如圖1所示,也可選擇其他窗函數(shù)進行設(shè)計。
2.2 ? ?頻率采樣法設(shè)計FIR濾波器
該方法從頻域出發(fā),對理想的頻率響應Hd(ejω)進行等間隔采樣得到Hd(k),并以此作為實際FIR濾波器頻率特性的離散樣本H(k),H(k)再通過IDFT可求出有限長序列h(n),同樣可利用H(k)求出FIR濾波器的系統(tǒng)函數(shù)H(Z)及頻率響應H(ejω)。
下面設(shè)計一個線性相位低通FIR數(shù)字濾波器,使得ωp=0.2π,Rp=0.25 dB,ωs=0.3π,As=40 dB。
當采樣點數(shù)M初步設(shè)置為20時,最小阻帶衰減不到-20 dB。為進一步增加阻帶衰減,可增加采樣點數(shù)M,還可在通帶和阻帶交界處插入一個或幾個0~1的采樣值來改善頻率特性。這里直接選擇M=40,在過渡帶內(nèi)k=5和k=35處,增設(shè)H(k)=0.39。Python程序與數(shù)字低通濾波器的幅頻響應如圖2所示,可以看出此時阻帶最小衰減可達-40 dB以上。
2.3 ? ?等波紋最佳逼近法設(shè)計FIR濾波器
該方法克服了窗函數(shù)設(shè)計法和頻率采樣法的缺點,使最大誤差最小化,并使加權(quán)逼近誤差在整個逼近頻段上均勻分布。該方法所設(shè)計的濾波器性價比高,階數(shù)相同時可使通帶最大衰減最小、阻帶最小衰減最大,指標相同時可使濾波器階數(shù)最低。為求取滿足等波紋最佳逼近準則的FIR數(shù)字濾波器的單位脈沖響應h(n),目前普遍應用的方法是Parks和McCellan提出的一種高效迭代算法——雷米茲(Remez)交替算法。
下面用雷米茲交替算法設(shè)計一個線性相位FIR帶通濾波器,通帶為[0.2π,0.6π],阻帶為[0,0.15π]和[0.65π,π],濾波器的階數(shù)為31。Python程序與數(shù)字帶通濾波器的幅頻響應如圖3所示。
設(shè)計其他種類數(shù)字濾波器時,需注意Remez函數(shù)相關(guān)參數(shù)的不同格式要求。
3 結(jié)語
本文介紹了FIR數(shù)字濾波器的常用設(shè)計思路,給出了基于Python的濾波器仿真設(shè)計方法,有助于從直觀上比較不同設(shè)計方法的優(yōu)劣,為后續(xù)基于Python的數(shù)字信號處理方面的教學與科研提供了一定的參考。
[參考文獻]
[1] 張若愚.Python科學計算[M].2版.北京:清華大學出版社,2016.
[2] 程佩青.數(shù)字信號處理教程[M].5版.北京:清華大學出版社,2017.
收稿日期:2020-08-11
作者簡介:汪振興(1985—),男,陜西咸陽人,碩士研究生,助教,研究方向:自動檢測技術(shù)。