IIR 数字滤波器三种结构形式的MATLAB实现

2022-07-20 14:24:10 浏览数 (1)

一.实验目的 1. 掌握IIR 数字滤波器设计的方法; 2. 掌握IIR 数字滤波器直接型、级联型和并联型的基本特点并根据给定的传递函数形式正 确选择是否采用直接型、级联型和并联型。 3. 熟悉直接型、级联型和并联型软件实现的编程方法。 二.实验原理 一个IIR 滤波器的系统函数给出为:

 有三种结构用于实现一个IIR 滤波器。 1.直接型:结构数字滤波器按给出的差分方程式直接与以实现。有两种型式:直接Ⅰ型和 直接Ⅱ型结构。直接型结构用两个行向量来描述:含有系数{ n b }的向量b 和含有系数{ n a } 的向量a,MATLAB 中其结构实现是用filter 函数。 2. 级联型:将系统函数H(z)写成具有实系数的二阶节的乘积。即将分子分母多项式分解为 它们各自的根,然后将一对复数共轭根或者任意两个实数根组合成二阶多项式。一般假定N 为偶数,有:

 三.实验内容 1、根据程序参考流程图,分别编制以下给出的IIR 数字滤波器直接型、级联型和并联型结 构的单位脉冲响应,单位阶跃响应及频率特性的程序。 2、利用所编的程序,对以下IIR 数字滤波器,给出三种结构形式下的滤波器结构及信号流 图,并画出此结构下单位脉冲响应和单位阶跃响应曲线。

 参考流程图:

 四、思考题 (1)对于实验中的三种结构形式,你认为哪一种在计算机上实现更方便些,为什么?

(2)所给出的IIR 数字滤波器是低通、高通还是带通?3dB 截止频率大约是多少?是否是线性相位的?

(3)为何要将系统函数转换为三种不同的结构,三种结构的优缺点各是什么?

五、实验报告要求 1.简述实验目的及原理。 2.给出数字滤波器三种结构形式的结果。 3.对三种结构形式滤波器的优缺点进行分析比较。 4.简要回答思考题。

代码语言:javascript复制
b=[1,-3,11,27,18];
a=[16,12,2,-4,-1];
n=0:63;
figure;
h=impz(b,a,n);
u=dstep(b,a,n);
w=linspace(-2*pi,2*pi,500);
H=freqz(b,a,w);
H=20*log10(abs(H));
subplot(3,1,1),stem(n,h,'.');
title('直接型单位冲激响应');
subplot(3,1,2),stem(n,u,'.');
title('直接型单位阶跃响应');
subplot(3,1,3),plot(w/pi,H);
title('直接型频率响应');
axis([0,1,-50,20]);
xlabel('单位:pi');
ylabel('单位:dB');
[sos,g]=tf2sos(b,a);
N=size(sos);
N=N(1);
h0=[n==0];
for k=1:N
b1=sos(k,1:3);
a1=sos(k,4:6);
h1=impz(b1,a1,n);
h0=conv(h0,h1);
end
h0=g*h0;
h0=h0(1:64);
figure;
subplot(3,1,1),stem(n,h0,'.');
title('级联型单位冲激响应');
u0=[n>=0];
for k=1:N
b1=sos(k,1:3);
a1=sos(k,4:6);
h1=impz(b1,a1,n);
u0=conv(u0,h1);
end
u0=g*u0;
u0=u0(1:64);
subplot(3,1,2),stem(n,u0,'.');
title('级联型单位阶跃响应');
w=linspace(-2*pi,2*pi,500);
H0=ones(1,length(w));
for k=1:N
b1=sos(k,1:3);
a1=sos(k,4:6);
H1=freqz(b1,a1,w);
H0=H0.*H1;
end
H0=g*H0;
H0=20*log10(abs(H0));
subplot(3,1,3),plot(w/pi,H0);
title('级联型频率响应');
axis([0,1,-50,20]);
xlabel('单位:pi');
ylabel('单位:dB');
[r,p,q]=residuez(b,a);
N=size(r);
N=N(1);
h0=zeros(1,64);
for k=1:N
b1=r(k);
a1=[1,-1*p(k)];
s=[n==0];
h1=filter(b1,a1,s);
h0=h0 h1;
end
h1=[n==0];
h1=q*h1;
h0=h0 h1;
figure;
subplot(3,1,1),stem(n,h0,'.');
title('并联型单位冲激响应');
u0=zeros(1,64);
for k=1:N
b1=[r(k),0];
a1=[1,-1*p(k)];
s=[n>=0];
u1=filter(b1,a1,s);
u0=u0 u1;
end
u1=[n>=0];
u1=q*u1;
u0=u0 u1;
subplot(3,1,2),stem(n,u0,'.');
title('并联型单位阶跃响应');
w=linspace(-2*pi,2*pi,500);
H10=zeros(1,length(w));
for k=1:N
b1=[r(k),0];
a1=[1,-1*p(k)];
H11=freqz(b1,a1,w);
H10=H10 H11;
end
H10=q H10;
H10=20*log10(abs(H10));
subplot(3,1,3),plot(w/pi,H10);
title('并联型频率响应');
axis([0,1,-50,20]);
xlabel('单位:pi');
ylabel('单位:dB');

0 人点赞