【实验目的】
2.1 学习用窗函数法设计FIR数字滤波器的原理及其设计步骤 2.2 学习编写数字滤波器的设计程序的方法,并能进行正确编程 2.3 根据给定的滤波器指标,给出设计步骤 【实验原理】
如果系统的冲激响应hd(n)为已知,则系统的输入/输出关系为:
y(n)x(n)hd(n)
对于低通滤波器,只要设计出低通滤波器的冲激响应函数,就可以由上式得到系统的输出了。假设所希望的数字滤波器的频率响应为Hd(ejw),它是频域的周期函数,周期为2,那么它与Hd(ejw)相对应的傅立叶系数为
hd(n)12Hd(ejw)ejnwdw
以hd(n)为冲激响应的数字滤波器将具有频域响Hd(ejw)。 但是将hd(n)作为滤波器脉冲响应有两个问题:
(1) 它是无限长的,与FIR滤波器脉冲响应有限长这一前提不一致 (2) 它是非因果的,hd(n)0,n0 对此,要采取以下的措施,
(1) 将hd(n)截短 (2)将其往右平移,
由此得到h2(n)的实际频域响应Hd(e)h2(n)ejnw,与理想频域响应Hd(ejw)jwn0N1相近,但不完全一致。理论证明上述现象是对hd(n)进行简单截短处理的必然结果,一般称为吉布斯现象,为尽可能的减少吉布斯现象,应对hd(n)进行加窗截取,即以h(n)hd(n)WN(n)作为FIR滤波器的系数。
常用的窗函数有矩形窗、海明窗和布莱克曼窗等。
(1)矩形窗(Rectangle Window) :w=boxcar(n),根据长度 n 产生一个矩形窗 w。
(2)三角窗(Triangular Window):w=triang(n),根据长度 n 产生一个三角窗 w。
(3)汉宁窗(Hanning Window):w=hanning(n),根据长度 n 产生一个汉宁窗 w。
(4)海明窗(Hamming Window):w=hamming(n),根据长度 n 产生一个海明窗 w。
(5)布拉克曼窗(Blackman Window):w=blackman(n),根据长度 n 产生一个布拉克曼窗 w。
(6)恺撒窗(Kaiser Window):w=kaiser(n,beta),根据长度 n 和影响窗函数旁瓣的β参数产生一个恺撒窗w。
用窗函数法设计FIR滤波器
Matlab设计FIR滤波器有多种方法和对应的函数,见表2-1。
表2-1 matlab设计FIR滤波器的方法和函数 方法 描述 函数 窗方法 使用窗函数和逆傅立叶变换实现 fir1,fir2,kaiserord等 多带方法 包含子带频率域 firls,remez等 最小二乘使用最小二乘法将整个频率域上的fircls ,fircls1等 法 错误几率压缩到最小 任意响应使用任意响应,包括非线性相位以cremez等 法 及复滤波器 余弦法 使用三角函数的低通响应 firrcos等 窗函数方法不仅在数字滤波器的设计中占有重要的地位,同时可以用于功率谱的估计,从根本上讲,使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs现象所带来的影响。
窗函数设计线性相位FIR滤波器步骤如下:
(1) 确定数字滤波器的性能要求,临界频率{wk},滤波器单位脉冲响应长
度N
(2) 根据性能要求,合理选择单位脉冲响应h(n)的奇偶对称性,从而确定
理想频率响应Hd(ejw)的幅频特性和相频特性
(3) 求理想单位脉冲响应hd(n),在实际计算中,可对Hd(ejw)采样,并对
其求IDFT的hM(n),用hM(n)代替hd(n)
(4) 选择适当的窗函数w(n),根据h(n)hd(n)WN(n)求所需设计的FIR
滤波器单位脉冲响应
(5) 求Hd(ejw),分析其幅频特性,若不满足要求,可适当改变窗函数形
式或长度N,重复上述设计过程,以得到满意的结果 窗类型 矩形 Bartlrtt Hanning Hamming Blackman 最大旁瓣幅度过度带宽度 (相对值) -13 -25 -31 -41 -57 4π/N 8π/N 8π/N 8π/N 12π/N 最大逼近误差等效kaiser窗20log10δ(dB) -21 -25 -44 -53 -74 β 0 1.33 3.86 4.86 7.04
【实例2-1】 设计一个34阶的高通滤波器,截止频率为0.48,使用具有30dB
波纹的chebyshev窗。
解:源程序如下:
b=fir1(34,0.48,'high',chebwin(35,30));
freqz(b,1,512)
其响应波形如图2-1所示。
图2-1 带通FIR滤波器
【实例2-2】 设计具有下面指标的低通FIR滤波器
wp0.2,Rp0.25dB,ws0.3,AS50dB
由于其最小阻带衰减为50dB,因此可以选择hamming窗来实现这个滤波器,因为它具有较小的过渡带。
解:MATLAB源程序为 % 数字滤波器指标
wp=0.2*pi;
ws=0.3*pi; tr_width=ws-wp; M=ceil(8*pi/tr_width)+1; n=[0:1:M-1]; wc=(ws+wp)/2; hd=ideal_lp(wc,M);
% 生成hamming窗
w_ham=(hamming(M))';
% 频域图像的绘制
h=hd.*w_ham; freqz (h,[1]) figure(2);
subplot(2,2,1),stem(n,hd);title('理想脉冲响应') axis([0 M-1 -0.3 0.3]);xlabel('n');ylabel('hd(n)') xa=0.*n; hold on plot(n,xa,'k'); hold off
subplot(2,2,2),stem(n,w_ham);title('hamming窗') axis([0 M-1 -0.3 1.2]);xlabel('n');ylabel('w(n)')
subplot(2,2,3),stem(n,h);title('实际脉冲响应') axis([0 M-1 -0.3 0.3]);xlabel('n');ylabel('h(n)') hold on plot(n,xa,'k'); hold off
其响应波形如图2-2所示。
图2-2 hamming窗函数设计FIR滤波器
【实例2-3】设带通滤波器的指标为
wp10.35,wp20.8,ws10.2,ws20.65,As60dB选择Blackman窗来实现这个滤波器。 解:MATLAB源程序为
% 数字滤波器指标
ws1=0.2*pi; wp1=0.35*pi; ws2=0.65*pi; wp2=0.8*pi; As=60;
tr_width=min((wp1-ws1),(wp2-ws2)); M=ceil(12*pi/tr_width)+1; n=[0:1:M-1];
wc1=(ws1+wp1)/2; wc2=(ws2+wp2)/2;
hd=ideal_lp(wc2,M)-ideal_lp(wc1,M);
% 生成blackman窗 w_bla=(blackman(M))'; h=hd.*w_bla
% 频域图像的绘制 freqz(h,[1])
figure(2);
subplot(2,2,1),stem(n,hd);title('idael impulse response') axis([0 M-1 -0.4 0.5]);xlabel('n');ylabel('hd(n)') xa=0.*n; hold on
plot(n,xa,'k');
hold off
subplot(2,2,2),stem(n,w_bla);title('blackman window') axis([0 M-1 0 1.1]);xlabel('n');ylabel('w(n)')
subplot(2,2,3),stem(n,h);title('actual impulse response') axis([0 M-1 -0.4 0.5]);xlabel('n');ylabel('h(n)') hold on
plot(n,xa,'k'); hold off
其响应波形如图2-3所示。
图2-3 blackman窗函数设计FIR滤波器
【实验内容】
1. 利用hamming窗设计一个48阶的FIR带通滤波器,通带为Wn=[0.35 0.65]。 2. 用矩形窗设计一个线性相位高通滤波器。其中
ej(w-),wcwHd(ejw)0,0wwc其中wc=0.65pi;
因篇幅问题不能全部显示,请点此查看更多更全内容