实验九.docx
《实验九.docx》由会员分享,可在线阅读,更多相关《实验九.docx(16页珍藏版)》请在冰豆网上搜索。
![实验九.docx](https://file1.bdocx.com/fileroot1/2023-4/24/4312516d-976a-4c42-8298-70ff625bea9e/4312516d-976a-4c42-8298-70ff625bea9e1.gif)
实验九
实验报告
实验日期:
学号:
姓名:
实验名称:
Z变换
总分:
离散时间信号
的双边z变换
(9.1)
是时间傅立叶变换的推广,而离散时间傅立叶变换在研究离散时间信号与系统中是很有用的。
然而,存在双边z变换的信号要比存在离散时间傅立叶变换的信号范围广得,并且双边z变换对理解对理解稳定和不稳定系统都是有用的。
对于一大类信号来说,z变换能表示成以z为变量的两个多项式之比,即
(9.2)
这些变换称为有理变换,而且在作为满足线性常系数差分方程的LTI系统的系统函数中常常遇到。
和
分别称作分子和分母多项式,多项式
和
的根分别称为该系统的零点和极点,除了一个常数因子外,它们决定了具有有力变换的LTI系统的特性行为。
因此,能够用这些极点和零点的位置的图来分析系统性质。
注意,这一张都用
作为连续时间频率的变量,
作为离散时间频率变量。
§9.1作离散时间零极点图
目的
学习如何将一个离散时间有理系统函数
的零极点展现一张零极点图。
相关知识
有理系统函数的零极点可以用roots计算出来。
函数roots要求系数向量是以自变量的递降次序设定的。
例如,考虑系统函数
(9.3)
的LTI系统,执行以下命令就能算出它的零极点:
>>b=[1-10];
>>a=[132];
>>zs=roots(b)
zs=
0
1
>>ps=roots(a)
ps=
-2
-1
常常希望将离散时间系统函数写成
升阶次序。
这些多项式的系数是很容易由线性常系数差分方程得到的,并且也是filter或freqz要求的形式。
然而,如果分子和分母多项式具有不同阶次,那么在
的零点或极点有可能被漏掉。
例如,(9.3)式可以重新写作
(9.4)
如果要从(9.4)式得到这些系数就会得到
>>b=[1-1];
>>a=[132];
>>zs=roots(b)
zs=
1
>>ps=roots(a)
ps=
-2
-1
应注意,在
的零点这里没有出现。
当用
的形式表示系统函数时,为了求得完全的零极点集合,就必需要对这个较低降次多项式的系数向量补上零以使向量具有相同的长度。
下面的练习需要用到函数plotdpz,其具体实现如下。
函数plotdpz(b,a)画出离散时间系统的零极点。
plotdpz的输入和filter具有相同的格式,并且如果分子和分母多项式不是同阶次的话,plotdpz将自动的对a或b补上适当个数的零。
同时,plotdpz在图中还包括单位圆,以及如果在单位圆内有多于一个零点或极点的话,还会指出极点或零点的数目。
functionplotdpz(b,a)
la=length(a);
lb=length(b);
if(la>lb)
b=[bzeros(la-lb)];
elseif(lb>la)
a=[azeros(lb-la)];
end
ps=roots(a);
zs=roots(b);
mx=max(abs([ps'zs'.95]))+.05;
clg;
axis([-mxmx-mxmx]);
axis('equal');
holdon;
w=[0:
.01:
2*pi];
plot(cos(w),sin(w),'.');
plot([-mxmx],[00]);
plot([00],[-mxmx]);
text(0.1,1.1,'Im','sc');
text(1.1,.1,'Re','sc');
plot(real(ps),imag(ps),'X');
plot(real(zs),imag(zs),'o');
numz=sum(abs(zs)==0);
nump=sum(abs(ps)==0);
ifnumz>1
text(-.1,-.1,num2str(numz));
elseifnump>1
text(-.1,-.1,num2str(nump));
end
holdoff
基本题
1.用plotdpz画出(9.3)或
的零极点图。
解:
clc;
clear;
closeall;
b=[1-10];
a=[132];
plotdpz(b,a);
gridon;
title('H(z)的零极点分布');
2.用plotdpz画出满足差分方程
的滤波器的零极点图。
解:
b1=[10];
a1=[110.5];
figure;
plotdpz(b1,a1);
gridon;
title('差分方程滤波器的零极点分布图');
3.用plotdpz画出满足差分方程
所描述滤波器的零极点图。
解:
b2=[10.50];
a2=[1-1.250.75-0.125];
figure;
plotdpz(b2,a2);
gridon;
title('差分方程滤波器的零极点分布图');
§9.2离散时间频率响应的几何解释
这个练习要说明如何从系统函数零点和极点位置的几何考虑,计算离散时间系统频率响应的幅值和相位。
回想一下,系统函数可以因式分解成如下形式;
(9.5)
式中
是
的零点,
是
的零点。
每个极点和每个零点对
的贡献取决于该极点或零点到
的向量长度。
对(7.5)式取幅值,并在
上求值可得
(9.6)
因此,总频率响应的幅值是常数A的幅值乘以全部零点向量长度的乘积再除以全部极点向量长度的乘积。
相类似,每个极点或每个零点对频率响应相位
的贡献就是极点或零点和
点之间的向量对实轴所形成的相角。
取(9.5)式的相位就是
(9.7)
据此,总相位就是常数A的相位加上由零点贡献的相角之和再减去由极点贡献的相角之和。
下面的习题将提供以这种方式解释零极点图的实践,以求得系统的频率响应。
基本题
对于这些题将考察一个简单的二阶离散时间系统,其系统函数是
1.定义b1和a1包含按filter要求格式的
分子和分母多项式的系数,按10.1节所介绍的方法求出并画出
的零极点图。
解:
clc;
clear;
closeall;
b1=[100];
a1=[1-0.90.81];
plotdpz(b1,a1);
gridon;
title('H1(z的零极点分布');
2.定义omega=[0:
511]*pi/256和unitcirc=exp(j*omega)得到在单位圆上512等分点,在这些点上将要对频率响应
求值。
定义polevectors1是一个2×512的矩阵,其中每一行包含一些复数,这些复数是由unitcirc的相应列减去一个极点位置得到的。
如果ps1是一个列向量,它包含了极点的位置,那么就能用下列命令来完成
>>polevectors1=ones(2,1)*unitcirc-ps1*ones(1,512);
在MATLAB中总是愿意用矩阵和向量运算,因为MATLAB几乎总是计算矩阵运算比用for循环构成的运算要快。
用abs和atan2定义polelength1和poleangle1作为polevectors1中每一元素的幅值和相位。
解:
ps1=roots(a1);
omega=[0:
511]*pi/256;
unitcirc=exp(j*omega);
polevectors1=zeros(2,512);
polevectors1=ones(2,1)*unitcirc-ps1*ones(1,512);
polelength1=abs(polevectors1);
poleangle1=atan2(imag(polevectors1),real(polevectors1));
3.类似于polevecters1定义zerovectors1,使得它是2×512的矩阵,其中包含从零点位置到unitcirc元素的向量。
定义zerolength1和zeroangle1分别是这些向量的幅值和相位。
解:
zerovectors1=ones(2,512);
zs1=roots(b1);
zerovectors1=ones(2,1)*unitcirc-zs1*ones(1,512);
zerolength1=abs(zerovectors1);
zeroangle1=atan2(imag(zerovectors1),real(zerovectors1));
4.画出polelength1和zerolength1对omega的图。
根据这些图,你预计
在哪里有最大值和最小值?
解:
figure;
subplot(1,2,1);
plot(omega,polelength1);
gridon;
subplot(1,2,2);
plot(omega,zerolength1);
gridon;
5.用polelength1和zerolength1计算
,并将这个结果存入geonH1mag中。
用poleangle1和zeroangle1计算
,并将这个结果存入gemoH1phase中。
在定义geonH1mag和gemoH1phase时,你或许会发现prod和sum是很有用的。
画出从几何上到处的幅值和相位,并将它和经由下面计算所得结果比较:
>>H1=freqz(b1,a1,512,'whole');
你在4中估计的峰值频率正确吗?
解:
geonH1mag=zerolength1./polelength1;
geonH1phase=zeroangle1-poleangle1;
figure;
freqz(b1,a1,512,'whole');
中等题
下面这些题的第一组将考查移动
一个零点的效果。
具体说来,考虑系统函数为
5.求出并画出
的零极点图。
你怎样预计这个系统的polevectors2或者zerovectors2与
的有什么不同吗?
解:
clc;
clear;
closeall;
b2=[1-0.5];
a2=[1-0.90.81];
plotdpz(b2,a2);
gridon;
title('H2(z)的零极点分布图');
6.计算
对polevectors2和zerovectors2以及所有这些向量的幅值和相位。
画出幅值和相位对omega的图。
你在5中的预计正确吗?
解:
ps2=roots(a2);
omega=[0:
511]*pi/256;
unitcirc=exp(j*omega);
polevectors2=zeros(2,512);
polevectors2=ones(2,1)*unitcirc-ps2*ones(1,512);
polelength2=abs(polevectors2);
poleangle2=atan2(imag(polevectors2),real(polevectors2));
zerovectors1=ones(2,512);
zs2=roots(b2);
zerovectors2=ones(1,1)*unitcirc-zs2*ones(1,512);
zerolength2=abs(zerovectors2);
zeroangle2=atan2(imag(zerovectors2),real(zerovectors2));
figure;
subplot(1,2,1);
plot(omega,polelength2);
gridon;
subplot(1,2,2);
plot(omega,zerolength2);
gridon;
7.根据这些零点的变化,预计
与
将会有怎样的不同。
用freqz计算H2验证你的答案。
以下的题将考虑系统函数为
解:
figure;
freqz(b2,a2,512,'whole');
8.求出并画出
的零极点图。
这些零点和极点的位置是如何关联的?
9.类似于你在基本题中所做的方式定义polevectors3和zerovectors3。
定义polelength3和zerolength3是这些复数的幅值。
在同一组坐标轴上画出所有这些幅值,也就是polelength3和zerolength3每一行的幅值。
这些幅值有什么关系?
根据这一点,你如何预计频率响应的幅值
岁频率变化?
利用这些长度计算频率响应幅值,并将它存入gemoH3mag中。
画出gemoH3mag对于omega的图。