摘要:介紹了利用MATLAB快速有效地設計無限長沖激響應數字濾波器的方法。給出了使用MATLAB 語言進行程序設計和FDATool工具進行界面設計的詳細步驟。介紹了如何利用MATLAB環境下的仿真軟件Simulink對所設計的濾波器進行模擬仿真。
關鍵詞:數字濾波器;MATLAB;無限長沖激響應
中圖分類號:TN713 TN702文獻標識碼: A文章編號:1009-3044(2008)23-1072-03
Design and Simulation of IIR Filter Based onMATLAB
WANG Zhan-zhong
(Department of Computer Science and Information Engineering, Anyang Institute of Technology, Anyang 455000, China)
Abstract: MATLAB-based methods are introduced to design the infinite impulse response (IIR) filter effectively. To design the IIR filter , it can be programmed by MATLAB language or FDATool tool. Detailed steps of theseways are given. With the Simulink of MATLAB, the simulation for designated filter is also introduced.
Key words: digital filter;MATLAB;IIR
1 引言
數字濾波器(Digital Filter,DF)是數字信號處理的重要內容,在對信號的過濾、檢測與參數的估計等信號處理中,數字濾波器是使用最為廣泛的裝置,無論在工業、農業和其它行業均有應用。數字濾波器實質上是一個有限精度算法實現的線性時不變離散系統,它的基本工作原理是利用離散系統特性對系統輸入信號進行加工和變換,改變輸入序列的頻譜或信號波形,讓有用的頻率信號分量通過,抑制無用的信號分量輸出[1]。數字濾波器按照其沖激響應函數的時域特性,可分為無限長沖激響應(Infinite Impulse Response,IIR)濾波器和有限長沖激響應(Finite Impulse Response,FIR)濾波器。在滿足相同指標下,IIR濾波器的階數明顯小于FIR,硬件實現容易且大大減少了運算量,遺憾的是IIR是非線性相位,在不要求嚴格線性相位的情況下,IIR濾波器的應用相當廣泛。
本文基于 MATLAB7.1 討論 IIR 數字濾波器的設計問題。在 MATLAB 里提供了很多設計數字濾波器的方法,這里只介紹兩種:通過程序設計和通過 FDATool 工具設計。通過一個具體的實例,說明詳細的操作,最后對實現的濾波器進行仿真。
2 常規IIR濾波器的基本設計法
IIR濾波器設計的最基本的方法就是模擬原型法。數字濾波器和模擬濾波器有千絲萬縷的聯系,它們之間的轉換是s平面和z平面的轉換,轉換的基本方式就是沖激響應不變法和雙線性變換法。根據設計指標用合適的傳遞函數去實現之,對于要求特殊的濾波器,自我構建傳遞函數是一個非常復雜的工作,不過經過努力可以得到極佳的效果(當然MATLAB也提供從指定的頻幅特性的直接設計,在此不作討論)。對于常規的應用而言,MATLAB 提供有許多經典的模擬原型函數候選[2-3]。設計人員要做的工作是選取適宜的函數,指定合適的參數,最后對得到濾波器進行驗證。
選擇原型函數時的考慮如下:巴特沃斯濾波器的頻率特性在通帶和阻帶內都是隨著頻率單調的變化,顯然,如果在通帶的邊緣能滿足指標,在通帶的內部肯定超過設計指標要求,造成濾波器的階數比較高,在各頻帶內沒有幅度的波動,如果要求幅值穩定性極好時,巴特沃斯濾波器是一個不錯的選擇。在許多情況下,降低濾波器的階數至為重要,因為降低階數意味著實現簡單、成本低,所以一般設計人員都比較重視降低階數。如果將指標的精度要求均勻地分布在整個通帶內,或者均勻地分布在整個阻帶內,更有效的方法是同時均勻地分布在通帶和阻帶內,可以設計出滿足設計要求的、階數又比較低的的濾波器。切比雪夫I型濾波器特性是頻幅在通帶內是等波紋的,在阻帶內是單調的;切比雪夫II型則相反,在通帶內是單調的,在阻帶內是等波紋的。所以一般地講,切比雪夫濾波器的階數比巴特沃斯濾波器要低些。還有一種值得關注的濾波器是橢圓濾波器,它是采用橢圓法設計出低通的模擬濾波器,然后采用變換的方法得到數字的高通、低通、帶通和帶阻的濾波器。在模擬濾波器的設計中,橢圓濾波器的設計是幾種濾波器設計方法中最為復雜的一種方法,但是它設計出的濾波器的階數最小,同時它對參數的量化靈敏度最敏感,是值得關注的一種原型濾波器。
3 設計實例
設計內容:有用信號為150Hz正弦波,要求設計一個 IIR 帶通濾波器,濾掉信號中的工頻成分及高頻部分,階數為4,截止頻率為100,200Hz,抽樣頻率為1000Hz,信號s=sin(100*pi*t)+sin(300*pi*t)+ sin(800*pi*t)。
3.1 程序設計方法
程序設計方法是通過具體的命令,來完成給定的任務。這種方法可以使設計人員像過去手工設計濾波器一樣的思維方式設計濾波器。具體步驟如下(原型為橢圓函數):
Step1:產生含有3個正弦分量的信號
Fs=1000; t=(1:100)/Fs; %抽樣頻率、時間軸
s1=0.5*sin(2*pi*t*50);s2=sin(2*pi*t*150);s3=sin(2*pi*t*400);
s=s1+s2+s3; subplot(221); %組成信號、指定圖形位置
plot(t,s);title('三個正弦信號的疊加');
xlabel(' Time (seconds)' ); ylabel('Signal waveform' );
Step2:產生一個4階IIR帶通濾波器
%通帶為100Hz 到200Hz,并得出其幅頻響應
[b,a]=ellip(2,0.5,20,[100,200]*2/Fs);%得到濾波器的系數矩陣
[H,w]=freqz(b,a,512);%H為濾波器的系統函數
subplot(222); plot(w*Fs/(2*pi),abs(H));
title('IIR帶通濾波器幅頻響應' );
xlabel(' Frequency(Hz)' );ylabel(' Magnitude of frequency response' );
axis([0 500 0 1.5]);
Step3:對原始信號進行濾波
sf=filter(b,a,s);%用設計的濾波器過濾原始信號
subplot(223);plot(t,sf);
title(' 濾波后的信號波形' );
xlabel(' Time(seconds)' ); ylabel(' Time waveform' );
axis([0 0.1 -1 1]);
Step4:繪出信號濾波前、后的幅頻圖
S=fft(s,512); %求出原始信號的傅立葉變換
SF=fft(sf,512); %求出過濾后信號的傅立葉變換
w=(0:255)/256*(Fs/2);
subplot(224);
plot(w,abs([S(1:256)' ,SF(1:256)' ]));
title(' 濾波前、后的幅頻圖' );
set(gcf,'color' ,'white' );
xlabel(' Frequency(Hz)' );
ylabel(' Mag.of frequency response' ); grid;
legend({' 濾波前的幅頻' ,' 濾波后的幅頻' })
得到的圖形如圖1。
從圖1中可以看出,濾波器的斜坡比較緩,這是由于我們給出的濾波器的階數只有4階,比較小。即使這樣從信號的變化情況看,效果還是比較令人滿意的,基本保持了150Hz正弦波,濾掉了工頻信號與高頻信號。
3.2 用FDATool設計濾波器
FDATool(Filter Design Analysis Tool)是MATLAB信號處理工具箱提供的專用的濾波器設計分析工具。FDATool可以設計幾乎所有的常規濾波器,包括 FIR 和IIR 的各種設計方法。它操作簡單,方便靈活。實施上述實例的具體操作如下。
打開 FDATool 工具,Filter Type 選擇 Bandpass,Design Method 選擇IIR、Ellitic,Filter Order 選擇4,Frequency Specification選擇Unit:Hz、Fs:1000Hz、Fpass1:100、Fpass1:200 Magnitude Specifications的選擇Unit: dB、Astop:20、Apass: 0.5如圖2所示。
可以在這里顯示濾波器的各種圖形和數字表達,更改各種參數已十分方便。利用圖形方式是快速設計數字濾波器的主要方式。將其另存為k1.fda。
4 濾波器的仿真
MATLAB不僅設有多種途徑的設計工具,而且有完備的仿真工具以驗證設計的正確與否。仿真模塊為Simulink提供。我們依然對以上的問題進行操作。在命令窗口內輸入simulink或雙擊相應項啟動仿真功能。新建一個模塊文件,出現如圖3界面,選擇相應的模塊并對參數作合適的設置(依據前面參數的內容),濾波器這里選擇的是FDATool工具設計的濾波器,圖形顯示達到了設計的要求(見圖4、圖5)。
5 結論
討論了MATLAB設計IIR濾波器的幾種方法,并作了仿真驗證,證明幾種方法的原理是相通的。利用MATLAB設計濾波器,可以隨時按照設計要求和濾波器特性調整參數,直觀簡便,極大地減輕了工作量,縮短了開發周期。為縮短電子器件的開發周期提供了一捷徑。在設計仿真完成之后就可以進行真正的硬件設計并實施。
參考文獻:
[1] 程佩青.數字信號處理教程[M].2版.北京:清華大學出版社,2002:145-146.
[2] 尹澤明,丁立春.精通MATLAB 6[M].北京:高等教育出版社,2002:198-209.
[3] 鄒鯤.MATLAB 6.X信號處理[M].北京:清華大學出版社,2002:163-164.