实验三 用双线性变换法设计IIR数字滤波器
实验项目名称:用双线性变换法设计IIR数字滤波器 实验项目性质:验证性实验 所属课程名称:数字信号处理 实验计划学时:2 一. 实验目的
(1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法。 (2)掌握数字滤波器的计算机仿真方法。
(3)通过观察对实际心电图信号的滤波作用,获得数字滤波的感性知识。 二. 实验内容和要求
(1)用双线性变换法设计一个巴特沃斯低通IIR数字滤波器。设计指标参数为:在通带内频率低于0.2π时,最大衰减小于1dB;在阻带内[0.3π,π]频率区间上,最小衰减大与15dB。 (2)以0.02π为采样间隔,打印出数字滤波器在频率区间[0,π/2]的幅频响应特性曲线。 (3)用所设计的滤波器对实际心电图信号采样序列(在本实验后面给出)进行仿真滤波处理,并打印出滤波前后的心电图信号波形图,观察总结滤波作用与效果。 三. 实验主要仪器设备和材料 计算机,MATLAB6.5或以上版本 四. 实验方法、步骤及结果测试
(1)复习有关巴特沃斯模拟滤波器设计和用双线性变换法设计IIR数字滤波器的内容,用双线性变换法设计数字滤波器系统函数
H?z?。其中满足本实验要求的数字滤波器系统函数为:
H?z???1?1.2686z3k?1?1?0.7051z?2??0.00073781?z?1 ?1?2?1?21?1.0106z?0.3583z1?0.9044z?0.2155z??6?????Hk?z?
(3.1)
A1?2z?1?z?2式中: Hk?z??,k?1,2,3 ?1?21?Bkz?CkzA?0.09036B1?1.2686,C1??0.7051B2?1.0106,C2??0.3583B3?0.9044,C3??0.2155?? (3.2)
根据设计指标,调用MATLAB信号处理工具箱buttord和butter,也可以得到H?z?。
由公式(3.1)和(3.2)可见,滤波器H?z?由三个二阶滤波器H1?z?、
H2?z?和H3?z?级联而成,如图3-1所示。
? x?n
H1?z? y1?n? H2?z? y2?n? H3?z? y3?n??y?n?
图3-1 滤波器H?z?的组成
(2)编写滤波器仿真程序,计算H?z?对心电图采样序列x(n)的响应序列y(n)。
设yk(n)为第k级二阶滤波器Hk(z)的输出序列,yk-1(n)为输入序列,如图3-1所示。由(3.2)式可得到差分方程为:
yk?n??Ayk?1?n??2Ayk?1?n?1??Ayk?1?n?2??Bkyk?n?1??Ckyk?n?2?(3.3)
当k=1时,yk-1(n)=x(n)。所以H(z)对x(n)的总响应序列y(n)可以用顺序迭代算法得到。即依次对k=1,2,3,求解差分方程(3.3),最后得到y3(n)=y(n)。仿真程序就是实现上述求解差分方程和顺序迭代算法的通用程序。也可以直接调用MATLAB filter函数实现仿真。 (3)在通用计算机上运行仿真滤波程序,并调用通用绘图子程序,完成实验内容(2)和(3)。 (4)本实验中用到的心电图信号采用序列x(n)
人体心电图信号在测量过程往往受到工业高频干扰,所以必须经过低
通滤波处理后,才能作为判断心脏功能的有用信息。下面给出一实际心电图信号采样序列样本x(n),其中存在高频干扰。在实验中,以x(n)作为输入序列,滤除其中的干扰成分。
{x(n)}={-4, -2, 0, -4, -6, -4, -2, -4, -6, -6,
-4, -4, -6, -6, -2, 6, 12, 8, 0,-16, -38,-60,-84,-90,-66,-32, -4, -2, -4, 8, 12, 12, 10, 6, 6, 6, 4, 0, 0, 0, 0, 0, -2, -4, 0, 0, 0, -2, -2, 0, 0, -2, -2, -2, -2, 0}
MATLAB程序清单:
%实验三,用双线性变换法设计IIR数字滤波器
x=[-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-2,6,12,8,0,-16,-38,-60,-84,-90,-66,-32,-4,-2,-4,8,12,12,10,6,6,6,4,0,0,0,0,0,-2,-4,0,0,0,-2,-2,0,0,-2,-2,-2,-2,0]; k=1; close all; figure(1); subplot(2,2,1); n=0:55; %更正 stem(n,x,'.');
axis([0,56,-100,50]); %更正
hold on; n=0:60; m=zeros(61); plot(n,m); xlabel('n'); ylabel('x(n)');
title('心电图信号采集序列x(n)'); B=[0.09036,2*0.09036,0.09036]; A=[1.2686,-0.7051]; A1=[1.0106,-0.3583]; A2=[0.9044,-0.2155]; while(k<=3)
y=filter(B,A,x); %The function is to filte the singal x x=y; if k==2 A=A1; end if k==3 A=A2; end k=k+1; end
subplot(2,2,3) n=0:55; %更正 stem(n,y,'.'); axis([0,56,-15,5]); hold on; n=0:60; m=zeros(61);
plot(n,m); xlabel('n'); ylabel('y(n)');
title('三级滤波后的心电图信号'); %求数字滤波器的幅频特性 A=[0.09036,0.1872,0.09036]; B1=[1,-1.2686,0.7051]; B2=[1,-1.0106,0.3583]; B3=[1,-0.9044,0.2155]; [H1,w]=freqz(A,B1,100); [H2,w]=freqz(A,B2,100); [H3,w]=freqz(A,B3,100); H4=H1.*(H2); H=H4.*(H3); mag=abs(H);
db=20*log10((mag+eps)/max(mag)); subplot(2,2,2) plot(w/pi,db); axis([0,0.5,-50,10]); grid on; %更正
title('滤波器的幅频响应曲线');
程序运行结果:
直接运行程序,结果输出滤波器幅频特性曲线图,有噪声的心电图采集信号波形图和经过三级二阶滤波器滤波后的心电图信号波形图,见图3-2,对比分析就可以看出低通滤波器滤除信号中高频噪声的滤波效果。