一.实验内容
1)认真复习数字滤波器的表示方法,信号流图的基本概念和画法;IIR 数字滤波器的基本特性和FIR 数字滤波器的基本特性。
2)掌握IIR 数字滤波器的直接I 型、II 型、级联型、并联型结构的特点和表示方法;FIR数字滤波器的直接型、级联型、频率抽样型以及快速卷积的结构特点和表示方法;线性相位,FIR 滤波器的结构和特点;全通滤波器、梳状滤波器的特点和表示方法。
二.实验内容
新建函数a,代码如下:
Clc;
N=10;
n=0:N-1;
b1=[1 -2 6 -1 3];
a1=[1 -2 -4 3 -5];
b2=[2 -1 4 -3 -2];
a2=[1 4 -1 -4 6];
y1=impz(b1,a1,N);
y2=impz(b2,a2,N);
subplot(211);
stem(n,abs(y1));
title('系统一单位冲激响应幅度谱');
subplot(212);
stem(n,abs(y2));
title('系统二单位冲激响应幅度谱');
生成图像如下:
(1)直接I型
直接II型
(2)直接I型
直接II型
在matlab中新建函数tf2par,代码如下:
function [C,B,A]=tf2par(b,a)
%直接型向并联型转换
M=length(b);N=length(a);
[r1,p1,C]=residuez(b,a);%先求系统的单根p1,对应的留数r1及直接项C
p=cplxpair(p1,0.000000001);%先配对函数cplxpair由p1找共轭复根p,le-9的误差
I=cplxcomp(p1,p);%找p1变为p的排序变化
r=r1(I);
%变为2阶子系统
K=floor(N/2);B=zeros(K,2);A=zeros(K,3);
if K*2==N;
for i=1:2:N-2
pi=p(i:i+1,:);%取出一对极点
ri=r(i:i+1,:);%取出一对对应留数
[Bi,Ai]=residuez(ri,pi,[]);
B(fix((i+1)/2),:)=real(Bi);
A(fix((i+1)/2),:)=real(Ai);
end;
[Bi,Ai]=residuez(r(N-1),p(N-1),[]);%处理单根
B(K,:)=[real(Bi) 0];A(K,:)=[real(Ai) 0];
else
for i=1:2:N-1
pi=p(i:i+1,:);
ri=r(i:i+1,:);
[Bi,Ai]=residuez(ri,pi,[]);
B(fix((i+1)/2),:)=real(Bi);
A(fix((i+1)/2),:)=real(Ai);
end;
end;
在matlab中新建函数cplxcomp,代码如下:
function I=cplxcomp(p1,p2)
I=[];
for j=1:length(p2)
for i=1:length(p1)
if (abs(p1(i)-p2(j))<0.0001)
I=[I,i];
end;
end;
end;
I=I';
在matlab中新建函数b,代码如下:
Clc;
b1=[1,-3,11,-27,18];
a1=[16,12,2,-4,-1];
b2=[3,8,12,7,2,-2];
a2=[16,24,24,14,5,1];
b3=[2,10,23,34,31,16,4];
a3=[36,78,87,59,26,7,1];
%级联型网格系数
[sos1,G1]=tf2sos(b1,a1)
[sos2,G2]=tf2sos(b2,a2)
[sos3,G3]=tf2sos(b3,a3)
%并联型网格系数
[C1,B1,A1]=tf2par(b1,a1)
[C2,B2,A2]=tf2par(b2,a2)
[C3,B3,A3]=tf2par(b3,a3)
实验结果如下:
sos1 =
1.0000 -3.0000 2.0000 1.0000 -0.2500 -0.1250
1.0000 0.0000 9.0000 1.0000 1.0000 0.5000
G1 =
0.0625
sos2 =
1.0000 -0.3333 0 1.0000 0.5000 0
1.0000 2.0000 2.0000 1.0000 0.5000 0.2500
1.0000 1.0000 1.0000 1.0000 0.5000 0.5000
G2 =
0.1875
sos3 =
1.0000 3.0000 2.0000 1.0000 0.5000 0.2500
1.0000 1.0000 2.0000 1.0000 1.0000 0.3333
1.0000 1.0000 0.5000 1.0000 0.6667 0.3333
G3 =
0.0556
C1 =
-18
B1 =
-10.0500 -3.9500
28.1125 -13.3625
A1 =
1.0000 1.0000 0.5000
1.0000 -0.2500 -0.1250
C2 =
-2
B2 =
-0.8437 -1.0312
0.6875 2.3437
2.3437 0
A2 =
1.0000 0.5000 0.5000
1.0000 0.5000 0.2500
1.0000 0.5000 0
C3 =
4
B3 =
-1.1905 -0.1587
-1.1111 1.7778
-1.29 -4.2143
A3 =
1.0000 1.0000 0.3333
1.0000 0.6667 0.3333
1.0000 0.5000 0.2500
(1)系统一:
系统二:
系统三:
(2)直接II型
系统一:
系统二:
系统三:
在matlab中新建函数c,代码如下:
Clc;
b1=[1,-2,6-1,3];
a=1;
b2=[2,-1,4,-3,-2];
b2=1;
subplot(211)
dimpulse(b1,a1,20);
title('系统一单位脉冲响应');
subplot(212)
dimpulse(b2,a2,20);
title('系统二单位脉冲响应');
生成图像如下:
在matlab中新建函数d,代码如下:
b1=[1,6,-3,2,-5,1];
b2=[2,10,23,34,31,16,4];
b3=[6,31,74,102,74,316];
[sos1,G1]=tf2sos(b1,1)
[sos2,G2]=tf2sos(b2,1)
[sos3,G3]=tf2sos(b3,1)
生成结果如下:
sos1 =
1.0000 6.5253 0 1.0000 0 0
1.0000 -1.0728 0.1846 1.0000 0 0
1.0000 0.5475 0.8303 1.0000 0 0
G1 =
1
sos2 =
1.0000 3.0000 2.0000 1.0000 0 0
1.0000 1.0000 2.0000 1.0000 0 0
1.0000 1.0000 0.5000 1.0000 0 0
G2 =
2
sos3 =
1.0000 3.1113 0 1.0000 0 0
1.0000 3.2317 7.4758 1.0000 0 0
1.0000 -1.1763 2.23 1.0000 0 0
G3 =
6
级联结构:
系统一:
系统二:
系统三:
在matlab中新建函数tf2f2,代码如下:
%频率采样型
function [C,B,A]=tf2fs(h)
N=length(h);
H=fft(h,N);%求各频率样本值
MagH=abs(H);
phaH=angle(H)';
if (N==2*floor(N/2)) %N为偶数
L=N/2-1; A1=[1,-1,0;1,1,0];%设置z=+1/-1处两个实极点
C1=[real(H),real(H(L+2))];%相应的系数
else
L=(N-1)/2;A1=[1,-1,0];
C1=[real(H)];
end;
k=[1:L]';
B=zeros(L,2); A=ones(L,3);%初始化BA数组
A(1:L,2)=-2*cos(2*pi*k/N);A=[A;A1];%计算分母系数,加上实极点系数
B(1:L,2)=cos(phaH(2:L+1));%计算分子系数
B(1:L,2)=-cos(phaH(2:L+1)-(2*pi*k/N));
C =[2*MagH(2:L+1),C1]';%计算增益系数
在matlab中新建函数e,代码如下:
clc;
h=[1,2,3,2,1]/9;
[C,B,A]=tf2fs(h)
实验结果如下:
C =
0.5818
0.0849
1.0000
-0.2353
0.0131
0.0131
-0.2353
B =
0 0.8090
0 -0.3090
A =
1.0000 -0.6180 1.0000
1.0000 1.6180 1.0000
1.0000 -1.0000 0
在matlab中新建函数tf2fs2:,代码如下:
%频率采样型
function [C,B,A]=tf2fs2(H,N)
MagH=abs(H);
phaH=angle(H)';
if (N==2*floor(N/2)) %N为偶数
L=N/2-1; A1=[1,-1,0;1,1,0];%设置z=+1/-1处两个实极点
C1=[real(H),real(H(L+2))];%相应的系数
else
L=(N-1)/2;A1=[1,-1,0];
C1=[real(H)];
end;
k=[1:L]';
B=zeros(L,2); A=ones(L,3);%初始化BA数组
A(1:L,2)=-2*cos(2*pi*k/N);A=[A;A1];%计算分母系数,加上实极点系数
B(1:L,2)=cos(phaH(2:L+1));%计算分子系数
B(1:L,2)=-cos(phaH(2:L+1)-(2*pi*k/N));
C =[2*MagH(2:L+1),C1]';%计算增益系数
在matlab中新建函数f:,代码如下:
clc;
H=[1,1,1,0.5,zeros(1,12)];
[C,B,A]=tf2fs2(H,16)
实验结果如下:
C =
2.0000
2.0000
1.0000
0
0
0
0
1.0000
1.0000
1.0000
0.5000
0
0
0
0
0
0
0
0
0
0
0
0
0
B =
0 -0.9239
0 -0.7071
0 -0.3827
0 -0.0000
0 0.3827
0 0.7071
0 0.9239
A =
1.0000 -1.8478 1.0000
1.0000 -1.4142 1.0000
1.0000 -0.7654 1.0000
1.0000 -0.0000 1.0000
1.0000 0.7654 1.0000
1.0000 1.4142 1.0000
1.0000 1.8478 1.0000
1.0000 -1.0000 0
1.0000 1.0000 0
三.实验心得
通过本次实验,我进一步了解了信号流图的作图方法,IIR数字滤波器和FIR数字滤波器的基本特征,强化了对IIR数字滤波器直接I型、直接II型、级联型、并联型结构的理解,对它们的结构图形也有了进一步的了解。