数字信号处理实验四滤波器的结构.docx
《数字信号处理实验四滤波器的结构.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验四滤波器的结构.docx(24页珍藏版)》请在冰豆网上搜索。
数字信号处理实验四滤波器的结构
实验四滤波器的结构
一.实验内容
1)认真复习数字滤波器的表示方法,信号流图的基本概念和画法;IIR数字滤波器的基本特性和FIR数字滤波器的基本特性。
2)掌握IIR数字滤波器的直接I型、II型、级联型、并联型结构的特点和表示方法;FIR数字滤波器的直接型、级联型、频率抽样型以及快速卷积的结构特点和表示方法;线性相位,FIR滤波器的结构和特点;全通滤波器、梳状滤波器的特点和表示方法。
二.实验内容
新建函数a,代码如下:
Clc;
N=10;
n=0:
N-1;
b1=[1-26-13];
a1=[1-2-43-5];
b2=[2-14-3-2];
a2=[14-1-46];
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);
ifK*2==N;
fori=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
fori=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,代码如下:
functionI=cplxcomp(p1,p2)
I=[];
forj=1:
length(p2)
fori=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.00002.00001.0000-0.2500-0.1250
1.00000.00009.00001.00001.00000.5000
G1=
0.0625
sos2=
1.0000-0.333301.00000.50000
1.00002.00002.00001.00000.50000.2500
1.00001.00001.00001.00000.50000.5000
G2=
0.1875
sos3=
1.00003.00002.00001.00000.50000.2500
1.00001.00002.00001.00001.00000.3333
1.00001.00000.50001.00000.66670.3333
G3=
0.0556
C1=
-18
B1=
-10.0500-3.9500
28.1125-13.3625
A1=
1.00001.00000.5000
1.0000-0.2500-0.1250
C2=
-2
B2=
-0.8437-1.0312
0.68752.3437
2.34370
A2=
1.00000.50000.5000
1.00000.50000.2500
1.00000.50000
C3=
4
B3=
-1.1905-0.1587
-1.11111.7778
-1.6429-4.2143
A3=
1.00001.00000.3333
1.00000.66670.3333
1.00000.50000.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.00006.525301.000000
1.0000-1.07280.18461.000000
1.00000.54750.83031.000000
G1=
1
sos2=
1.00003.00002.00001.000000
1.00001.00002.00001.000000
1.00001.00000.50001.000000
G2=
2
sos3=
1.00003.111301.000000
1.00003.23177.47581.000000
1.0000-1.17632.26431.000000
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=
00.8090
0-0.3090
A=
1.0000-0.61801.0000
1.00001.61801.0000
1.0000-1.00000
在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
00.3827
00.7071
00.9239
A=
1.0000-1.84781.0000
1.0000-1.41421.0000
1.0000-0.76541.0000
1.0000-0.00001.0000
1.00000.76541.0000
1.00001.41421.0000
1.00001.84781.0000
1.0000-1.00000
1.00001.00000
三.实验心得
通过本次实验,我进一步了解了信号流图的作图方法,IIR数字滤波器和FIR数字滤波器的基本特征,强化了对IIR数字滤波器直接I型、直接II型、级联型、并联型结构的理解,对它们的结构图形也有了进一步的了解。