FIR滤波器设计例子

窗函数设计法
窗函数设计线性相位
FIR 滤波器的步骤如下:
1 ) 确定所要设计的滤波器的类型和技术指标;
2 ) 确定窗函数。查表,根据阻带衰减指标选择窗函数,选择原则是:在符合指标要求情况下,选
择最简单的窗函数;
3 ) 确定目标滤波器的频率特性和
h n d ( ) 。以理想滤波器模型并考虑线性相位确定目标滤波器的频
率特性函数
H e d ( ) j ω ,通过求傅立叶逆变换得到目标滤波器的单位脉冲响应 h n d ( )
4
) 确定滤波器的最小阶数。查表,根据技术指标要求的过渡带和所选用的窗函数的过渡带宽度,
计算出窗函数的宽度
N ,这也是滤波器的最小阶数;
5 ) 确定滤波器阶数。根据滤波器的类型和线性相位的约束条件,选择线性相位类型,并以此确定
滤波器的阶数和群延时;
6 ) 计算
h n h n W n ( ) ( ) ( ) = d R ,即为所要设计滤波器的单位脉冲响应。如果要求还可进一步求出滤
波器的系统函数;
7 ) 求 H e ( ) j ω 。分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度 N ,重复上述设
计过程,以得到满意的结果。
MATLAB 函数:
1 ) 矩形窗: W=boxcar( N ) ,可产生长度为 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 指定:
. 当省略 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);


猜你喜欢

转载自blog.csdn.net/qq_40731414/article/details/80997788