实验八 FIR数字滤波器的MATLAB实现
一、 实验目的:学习用窗函数法设计FIR数字滤波器的原理及其设计步骤;学习编写数字滤波器的设计程序的方法,并能进行正确编程;根据给定的滤波器指标,给出设计步骤。 二、 实验仪器:电脑一台,MATLAB6.5或更高级版本软件一套。 三、 实验内容:
(一) 实验原理及实例分析 1. FIR低通数字滤波器的设计原理
如果系统的冲激响应hd(n)为已知,则系统的输入/输出关系为:
y(n)?x(n)?hd(n)
对于低通滤波器,只要设计出低通滤波器的冲激响应函数,就可以由上式得到系统的输出了。假设所希望的数字滤波器的频率响应为Hd(e它与Hd(ejwjw),它是频域的周期函数,周期为2?,那么
)相对应的傅立叶系数为
hd(n)?12?????Hd(ejw)ejwjnwdw
以hd(n)为冲激响应的数字滤波器将具有频域响Hd(e但是将hd(n)作为滤波器脉冲响应有两个问题:
)。
(1) 它是无限长的,与FIP滤波器脉冲响应有限长这一前提不一致 (2) 它是非因果的,hd(n)?0,n?0 对此,要采取以下的措施,
(1) 将hd(n)截短 (2)将其往右平移,
N?1由此得到h2(n)的实际频域响应Hd(ejw)??hn?02(n)ejnw,与理想频域响应Hd(ejw)相近,
但不完全一致。理论证明上述现象是对hd(n)进行简单截短处理的必然结果,一般称为吉布斯现象,为尽可能的减少吉布斯现象,应对hd(n)进行加窗截取,即以h(n)?hd(n)?WN(n)作为FIR滤波器的系数。
常用的窗函数有矩形窗、海明窗和布莱克曼窗等。
2. 用窗函数法设计FIR滤波器
MATLAB设计FIR滤波器有多种方法和对应的函数,见表8-1。
表8-1 MATLAB设计FIR滤波器的方法和函数
方法 描述 函数 窗方法 多带方法 最小二乘法 任意响应法 余弦法 使用窗函数和逆傅立叶变换实现 包含子带频率域 使用最小二乘法将整个频率域上的错误几率压缩到最小 使用任意响应,包括非线性相位以及复滤波器 使用三角函数的低通响应 fir1,fir2,kaiserord等 firls,remez等 fircls ,fircls1等 cremez等 firrcos等
窗函数方法不仅在数字滤波器的设计中占有重要的地位,同时可以用于功率谱的估计,从根本上讲,使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs现象所带来的影响。
窗函数设计线性相位FIR滤波器步骤如下:
(1) 确定数字滤波器的性能要求,临界频率{wk},滤波器单位脉冲响应长度N (2) 根据性能要求,合理选择单位脉冲响应h(n)的奇偶对称性,从而确定理想频率
响应Hd(ejw)的幅频特性和相频特性
jw(3) 求理想单位脉冲响应hd(n),在实际计算中,可对Hd(e的hM(n),用hM(n)代替hd(n)
)采样,并对其求IDFT
(4) 选择适当的窗函数w(n),根据h(n)?hd(n)?WN(n)求所需设计的FIR滤波
器单位脉冲响应
(5) 求Hd(e
【实例8-1】 设计一个34阶的高通滤波器,截止频率为0.48,使用具有30dB波纹的
chebyshev窗。 解:源程序如下:
b=fir1(34,0.48,'high',chebwin(35,30));
freqz(b,1,512) 其响应波形如图7-1所示。
jw),分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度
N,重复上述设计过程,以得到满意的结果
图8-1 带通FIR滤波器
【实例8-2】 设计具有下面指标的低通FIR滤波器
wp?0.2?,Rp?0.25dB,ws?0.3?,AS?50dB
由于其最小阻带衰减为50dB,因此可以选择hamming窗来实现这个滤波器,因为它具有较小的过渡带。 解:MATLAB源程序为 % 数字滤波器指标
wp=0.2*pi; ws=0.3*pi; tr_width=ws-wp;
M=ceil(6.6*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
其响应波形如图8-2所示。
图8-2 hamming窗函数设计FIR滤波器
【实例8-3】设带通滤波器的指标为
wp1?0.35?,wp2?0.8?,ws1?0.2?,ws2?0.65?,As?60dB选择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(11*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
其响应波形如图8-3所示。
图8-3 blackman窗函数设计FIR滤波器
(二) 编程练习
1. 利用hamming窗设计一个48阶的FIR带通滤波器,通带为Wn=[0.35 0.65]。 2. 用矩形窗设计一个线性相位高通滤波器。其中
?e?j(w-?)?,??wc?w???jwHd(e)??
0,0?w???w?c?