


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