FIR濾波器設計例子
窗函式設計線性相位 FIR 濾波器的步驟如下:
1 ) 確定所要設計的濾波器的型別和技術指標;
2 ) 確定窗函式。查表,根據阻帶衰減指標選擇窗函式,選擇原則是:在符合指標要求情況下,選
擇最簡單的窗函式;
3 ) 確定目標濾波器的頻率特性和
h n d ( ) 。以理想濾波器模型並考慮線性相位確定目標濾波器的頻
率特性函式
H e d ( ) j ω ,通過求傅立葉逆變換得到目標濾波器的單位脈衝響應 h n d ( )
4 ) 確定濾波器的最小階數。查表,根據技術指標要求的過渡帶和所選用的窗函式的過渡頻寬度,
計算出窗函式的寬度
5 ) 確定濾波器階數。根據濾波器的型別和線性相位的約束條件,選擇線性相位型別,並以此確定
濾波器的階數和群延時;
6 ) 計算
h n h n W n ( ) ( ) ( ) = d R ,即為所要設計濾波器的單位脈衝響應。如果要求還可進一步求出濾
波器的系統函式;
7 ) 求 H e ( ) j ω 。分析其幅頻特性,若不滿足要求,可適當改變窗函式形式或長度 N ,重複上述設
計過程,以得到滿意的結果。
MATLAB 函式:
1 ) 矩形窗: W=boxcar( N ) ,可產生長度為
2 ) 哈明窗: W=hamming( N ) ,可產生長度為 N 點的哈明窗;
3 ) 布萊克曼窗: W=blackman( N ) ,可產生長度為 N 點的布萊克曼窗;
4 ) 窗函式法設計 FIR 濾波器函式: b = fir1( N , Wn, 'ftype', Window) 。使用的窗型別由 Window 參
數指定,省略時使用 hamming 窗(注意:利用 Window 指定的窗函式進行濾波器設計時, Window 長
度應為 N + 1 );濾波器型別由引數
. 當省略 ftype 引數時,設計低通帶通 FIR 濾波器;
. 當 ftype=high 時,設計高通 FIR 濾波器;
. 當 ftype=stop 時,設計帶阻 FIR 濾波器;
. 當 ftype=bandpass 時,設計帶通 FIR 濾波器;
在設計高通和帶阻濾波器, fir1 函式總是使用偶對稱 N 為奇數(即第一類線性相位 FIR 濾波器)
的結構,因此當輸入的階次為偶數時, fir1 函式會自動加 1;
參考程式
Wp=0.3*pi; Ws=0.45*pi;
deltaw=Ws-Wp;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1, 2);
windows=(hamming(N))';
Wc=(Wp+Ws)/2;
alfa=(N-1)/2;
n=0:N-1;
hd=sin(Wc*(n-alfa+eps))./(pi*(n-alfa+eps)); %理想低通濾波器
b=hd.*windows;
freqz(b,1);
2)參考程式
Wp=0.45*pi; Ws=0.3*pi;
deltaw=Wp-Ws;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1, 2);
windows=(hamming(N))';
Wc=(Wp+Ws)/2;
alfa=(N-1)/2;
n=0:N-1;
hd=sin(pi*(n-alfa+eps))./(pi*(n-alfa+eps))- sin(Wc*(n-alfa+eps))./(pi*(n-alfa+eps)); %理想高通濾波器
b=hd.*windows;
freqz(b,1);
3)參考程式
Wp1=0.3*pi; Wp2=0.7*pi;
Ws1=0.2*pi; Ws2=0.8*pi;
deltaw=Wp1-Ws1;
N0=ceil(11*pi/deltaw);
N=N0+mod(N0+1, 2);
windows=(blackman(N))';
Wc1=(Wp1+Ws1)/2; Wc2=(Wp2+Ws2)/2;
alfa=(N-1)/2;
n=0:N-1;
hd=sin(Wc2*(n-alfa+eps))./(pi*(n-alfa+eps))- sin(Wc1*(n-alfa+eps))./(pi*(n-alfa+eps));
%理想帶通濾波器
b=hd.*windows;
freqz(b,1);
4) 參考程式
Wp1=0.2*pi; Wp2=0.8*pi;
Ws1=0.3*pi; Ws2=0.7*pi;
deltaw=Ws1-Wp1;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1, 2);
windows=(hamming(N))';
Wc1=(Wp1+Ws1)/2; Wc2=(Wp2+Ws2)/2;
alfa=(N-1)/2;
n=0:N-1;
hd=sin(Wc1*(n-alfa+eps))./(pi*(n-alfa+eps))+sin(pi*(n-alfa+eps))./(pi*(n-alfa+eps))-.
sin(Wc2*(n-alfa+eps)). /(pi*(n-alfa+eps)); %理想帶阻濾波器
b=hd.*windows;
freqz(b,1);
5-1) 參考程式
Wp=0.3*pi; Ws=0.45*pi;
deltaw=Ws-Wp;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1, 2);
windows=(hamming(N+1))';
Wc=(Wp+Ws)/2;
b=fir1(N, Wc/pi, windows);
freqz(b,1);
5-2)參考程式
Wp=0.45*pi; Ws=0.3*pi;
deltaw=Wp-Ws;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1, 2);
Wc=(Wp+Ws)/2;
b=fir1(N, Wc/pi, 'high');
freqz(b,1);
5-3)參考程式
Wp1=0.3*pi; Wp2=0.7*pi;
Ws1=0.2*pi; Ws2=0.8*pi;
deltaw=Wp1-Ws1;
N0=ceil(11*pi/deltaw);
N=N0+mod(N0+1, 2);
Wc1=(Wp1+Ws1)/2; Wc2=(Wp2+Ws2)/2;
b=fir1(N, [Wc1, Wc2]/pi, 'bandpass', blackman(N+1));
freqz(b,1);
5-4) 參考程式
Wp1=0.2*pi; Wp2=0.8*pi;
Ws1=0.3*pi; Ws2=0.7*pi;
deltaw=Ws1-Wp1;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1, 2);
Wc1=(Wp1+Ws1)/2; Wc2=(Wp2+Ws2)/2;
b=fir1(N, [Wc1, Wc2]/pi, 'stop');
freqz(b,1);
6-1) 參考程式
Wp=0.3*pi; Ws=0.45*pi;
deltaw=Ws-Wp;
Rp=0.5; Rs=50;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1, 2);
f=[0, Wp/pi, Ws/pi, 1];
A=[1, 10^(-Rp/20), 10^(-Rs/20), 0];
b=fir2(N-1, f, A);
freqz(b,1);
6-2) 參考程式
Wp=0.45*pi; Ws=0.3*pi;
deltaw=Wp-Ws;
Rp=0.5; Rs=50;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1, 2);
f=[0, Ws/pi, Wp/pi, 1];
A=[0, 10^(-Rs/20), 10^(-Rp/20), 1];
b=fir2(N-1, f, A);
freqz(b,1);
6-3) 參考程式
Wp1=0.3*pi; Wp2=0.7*pi;
Ws1=0.2*pi; Ws2=0.8*pi;
deltaw=Wp1-Ws1;
N0=ceil(11*pi/deltaw);
N=N0+mod(N0+1,2);
Rp=0.05; Rs=65;
f=[0, Ws1/pi, Wp1/pi, Wp2/pi, Ws2/pi, 1];
A=[0, 10^(-Rs/20), 10^(-Rp/20), 10^(-Rp/20), 10^(-Rs/20), 0];
b=fir2(N-1, f, A);
freqz(b,1);
6-4) 參考程式
Wp1=0.2*pi; Wp2=0.8*pi;
Ws1=0.3*pi; Ws2=0.7*pi;
deltaw=Ws1-Wp1;
N0=ceil(6.6*pi/deltaw);
N=N0+mod(N0+1,2);
Rp=0.05; Rs=65;
f=[0, Wp1/pi, Ws1/pi, Ws2/pi, Wp2/pi, 1];
A=[1, 10^(-Rp/20), 10^(-Rs/20), 10^(-Rs/20), 10^(-Rp/20), 1];
b=fir2(N-1, f, A);
freqz(b,1);