介紹了利用MATLAB信號處理工具箱進行FIR濾波器設計的三種方法:程序設計法,、FDATool設計法和SPTool設計法,,給出了詳細的設計步驟,并將設計的濾波器應用到一個混和正弦波信號,,以驗證濾波器的性能,。
1 前言
數(shù)字濾波器是一種用來過濾時間離散信號的數(shù)字系統(tǒng),通過對抽樣數(shù)據(jù)進行數(shù)學處理來達到頻域濾波的目的,。根據(jù)其單位沖激響應函數(shù)的時域特性可分為兩類:無限沖激響應(IIR)濾波器和有限沖激響應(FIR)濾波器,。與IIR濾波器相比,F(xiàn)IR的實現(xiàn)是非遞歸的,,總是穩(wěn)定的,;更重要的是,F(xiàn)IR濾波器在滿足幅頻響應要求的同時,,可以獲得嚴格的線性相位特性,。因此,它在高保真的信號處理,,如數(shù)字音頻,、圖像處理、數(shù)據(jù)傳輸,、生物醫(yī)學等領域得到廣泛應用,。
2 FIR濾波器的窗函數(shù)設計法
FIR濾波器的設計方法有許多種,如窗函數(shù)設計法,、頻率采樣設計法和最優(yōu)化設計法等,。窗函數(shù)設計法的基本原理是用一定寬度窗函數(shù)截取無限脈沖響應序列獲得有限長的脈沖響應序列,主要設計步驟為:
(1) 通過傅里葉逆變換獲得理想濾波器的單位脈沖響應hd(n),。
(2) 由性能指標確定窗函數(shù)W(n)和窗口長度N,。
(3) 求得實際濾波器的單位脈沖響應h(n), h(n)即為所設計FIR濾波器系數(shù)向量b(n),。
(4) 檢驗濾波器性能,。
本文將針對一個含有5Hz、15Hz和30Hz的混和正弦波信號,,設計一個FIR帶通濾波器,,給出利用MATLAB實現(xiàn)的三種方法:程序設計法、 FDATool設計法和SPTool設計法。參數(shù)要求:采樣頻率fs=100Hz,,通帶下限截止頻率fc1=10 Hz,,通帶上限截止頻率fc2=20 Hz,過渡帶寬6 Hz,,通阻帶波動0.01,,采用凱塞窗設計。
3 程序設計法
MATLAB信號處理工具箱提供了各種窗函數(shù),、濾波器設計函數(shù)和濾波器實現(xiàn)函數(shù),。本文的帶通濾波器設計及濾波程序如下:
[n,Wn,beta,ftype]=kaiserord([7 13 17 23],[0 1 0],[0.01 0.01 0.01],100);
%得出濾波器的階數(shù)n=38,beta=3.4
w1=2*fc1/fs; w2=2*fc2/fs;%將模擬濾波器的技術指標轉(zhuǎn)換為數(shù)字濾波器的技術指標
window=kaiser(n+1,beta);%使用kaiser窗函數(shù)
b=fir1(n,[w1 w2],window);使用標準頻率響應的加窗設計函數(shù)fir1
freqz(b,1,512);%數(shù)字濾波器頻率響應
t = (0:100)/Fs;
s = sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%混和正弦波信號
sf = filter(b,1,s);%對信號s進行濾波
程序執(zhí)行的結(jié)果如圖1所示:
圖1 濾波器特性和濾波效果圖
(1)濾波器幅頻特性和相頻特性 (2)濾波前后的波形
4 FDATool設計法
FDATool(Filter Design & Analysis Tool)是MATLAB信號處理工具箱專用的濾波器設計分析工具,,操作簡單,、靈活,可以采用多種方法設計FIR和IIR濾波器,。在MATLAB命令窗口輸入FDATool后回車就會彈出FDATool界面,。
4.1 帶通濾波器設計
已知濾波器的階數(shù)n=38,beta=3.4,。本例中,,首先在Filter Type中選擇Bandpass;在Design Method選項中選擇FIR Window,,接著在Window選項中選取Kaiser,,Beta值為3.4;指定Filter Order項中的Specify order為38,;采樣頻率Fs=100Hz,截止頻率Fc1=10Hz,Fc2=20Hz,。設置完以后點擊窗口下方的Design Filter,在窗口上方就會看到所設計濾波器的幅頻響應,,通過菜單選項Analysis還可以看到濾波器的相頻響應,、組延遲、脈沖響應,、階躍響應,、零極點配置等。設計完成后將結(jié)果保存為kaiser15.fda文件,。
4.2 Simulink仿真
在Simulink環(huán)境下,,將濾波器文件kaiser15.fda導入Digital Filter Design模塊,輸入信號為s(t)=sin(10πt)+sin(30πt)+sin(60πt),生成的仿真圖和濾波效果如圖2所示,。
圖2 Simulink仿真圖和濾波效果圖
(1)Simulink仿真圖 (2)濾波前后的離散波形
5 SPTool設計法
SPTool是MATLAB信號處理工具箱中自帶的交互式圖形用戶界面工具,,它包含了信號處理工具箱中的大部分函數(shù),可以方便快捷地完成對信號,、濾波器及頻譜的分析,、設計和瀏覽,。在本例中按以下步驟完成濾波器的設計和濾波:
創(chuàng)建并導入信號源。
在MATLAB命令窗口輸入命令:
Fs=100,;t = (0:100)/Fs;
s = sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);
此時,變量Fs,、t,、s將顯示在workspace列表中。在命令窗口鍵入Sptool,,將彈出Sptool主界面,,如圖3所示;點擊菜單File/Import將信號s導入并取名為s,。
(2)單擊Filters列表下的New,,按照參數(shù)要求設計出濾波器filt1,具體步驟類似于3.2.1,。
(3)將濾波器filt1應用到s信號序列,。分別在Signals、Filters,、Spectra列表中選擇s,、filt1、mtlbse,,單擊Filters列表下的Apply按鈕,,在彈出的Apply Filter對話框中將輸出信號命名為sin15hz。
(4)進行頻譜分析,。在Signals中選擇s,,單擊Spectra下的Create按鈕,在彈出的Spectra Viewer界面中選擇Method為FFT,,Nfft=512,,單擊Apply按鈕生成s的頻譜spect1。同樣的步驟可以生成信號sin15hz的頻譜spect2,。
分別選中信號s,、sin15hz、spect1,、spect2,,單擊各自列表下方的View按鈕,即可觀察他們的波形,,如圖4所示,。
SPTool主界面
圖3 SPTool主界面 圖4 濾波前后的時域波形和頻域特性
由圖4可以看出,帶通濾波器filt1使輸入信號s中頻率為15hz的正弦波信號通過,,而將頻率為5hz和30hz的正弦波信號大大衰減,。
6 結(jié)束語
本文通過一個設計實例,,介紹了利用MATLAB實現(xiàn) FIR濾波器設計與濾波的三種方法,從仿真結(jié)果可以看出它們均可以達到技術指標要求,,而且方法簡單,、快捷,大大減輕了工作量,。濾波器的設計工作完成后,,可以借助于MATLAB的export操作導出所設計濾波器的系統(tǒng)函數(shù)H(z)。由于MATLAB具有強大的接口功能,,仿真后的結(jié)果可以很方便的移植到 DSP,、CPLD或FPGA等器件中。在實際應用中,只需按要求修改濾波器參數(shù),并對程序作較少的改動,即可實現(xiàn)不同截止頻率的FIR濾波器,實用性較強,。