中的极点(以符号“×”表示)以及参考单位圆,并在多阶零点和极点的右上角标出其阶数。如果b和a为矩阵,则会以不同颜色绘出b和a各列中的零点和极点。
注意:H?z?是以Z的降幂次序排列,则系数向量一定要由多项式的最高幂次开始,一直到常数项,缺项要用0补齐。 (5)roots:求多项式的极点
p=roots(A)
其中A为待求根的多项式的系数构成的行向量,返回向量p则包含该多项式所有的根位置列向量。
(6)ztrans和iztrans:z变换及反变换
Z变换的函数:F=ztrans(f) Z反变换的函数: f=iztrans(F)
上面两式中,右端的f和F分别为时域表示式和Z域表示式的符号表示,可应用函数sym来实现,其调用格式为:S=sym(A) ,式中,A为待分析的表示式的字符串,S为符号化的数字或变量。
2.利用MATLAB绘制离散系统的零极图 例4–1: 已知某离散系统的系统函数为
H?z??z?1 543z?z?1试用MATLAB求出该系统的零极点,并画出零极点分布图,判断系统是否稳定。 解:% 绘制零极点分布图的实现程序
a=[3 -1 0 0 0 1]; b=[1 1];
zplane(b,a);xlabel('实部');ylabel('虚部');title('零极点分布图') p=roots(a) %求出极点 q=roots(b) %求出零点 程序运行如果为: p =
0.7255 + 0.4633i 0.7255 - 0.4633i -0.1861 + 0.7541i -0.1861 - 0.7541i -0.7455 q = -1
绘制的系统零极点如图4–1所示。由图可知,该系统的所有极点均位于Z平面的单位圆内,故该系统为稳定系统。
零极点分布图10.80.60.40.2虚部0-0.2-0.4-0.6-0.8-1-1-0.540实部0.51图4–1 系统零极点图
3.利用MATLAB绘制离散系统的单位冲激响应和幅频响应 例4–2: 已知某离散系统的系统函数为
H?z??z?1 543z?z?1求系统的单位脉冲响应和幅频响应,并判断系统的是否稳定。 解: % 由系统函数求解系统脉冲响应,频率响应实现程序
a=[3 -1 0 0 0 1]; b=[1 1]; h=impz(b,a); subplot 211
stem(h);xlabel('k');ylabel('h(n)');title('系统的单位脉冲响应'); [H,w]=freqz(b,a); subplot 212
plot(w/pi,abs(H));
xlabel('频率\\omega');ylabel('H(ejw)');title('系统的频率响应(幅频)')
程序运行结果如图4–2所示。由系统的单位脉冲响应可判断系统是稳定的。
系统的单位脉冲响应0.60.4h(n)0.20-0.2010204050k系统的频率响应(幅频)30607021.5H(ejw)10.5000.10.20.30.40.5频率?0.60.70.80.91
图4–2 系统的单位脉冲相应和幅频特性
4.利用MATLAB实现z域的部分分式展开式 例4–3: 利用MATLAB计算F?z??18的部分分式展开式。
18?3z?1?4z?2?z?3解:% 部分分式展开式的实现程序
num=[18];
den=[18 3 -4 -1];
[r,p,k]=residuez(num,den) 程序运行结果为: r =
0.3600 0.2400 0.4000 p =
0.5000 -0.3333 -0.3333 k = []
也就是可得F?z??0.360.240.4 ???1?1?121?0.5z1?0.333z(1?0.333z)az5.利用MATLAB实现Z变换和Z反变换
例4–4: 求(1)f?n??cos?ak?u?k?的Z变换;(2)F?z??解:(1)Z变换的MATLAB程序:
f=sym('cos(a*k)'); F=ztrans(f)
程序运行结果为: F =
(z-cos(a))*z/(z^2-2*z*cos(a)+1) (2)Z反变换的MATLAB程序 F=sym('a*z/(z-a)^2'); f=iztrans(F)
程序运行结果为: f = a^n*n
?z?a?2的Z反变换。
三、实验内容
1.已知某离散系统的系统函数为
z2?2z?1H?z??3 2z?0.5z?0.005z?0.3试用MATLAB求出该系统的零极点,并画出零极点分布图,求系统的单位冲激响应和幅频响应,并判断系统的是否稳定。
2.利用MATLAB极点H?z??3.计算X(z)?z的部分分式展开式。
2z2?3z?1|z|?0.9的Z反变换。
1,(1?0.9z?1)2(1?0.9z?1))n4.求常用信号的Z变换。(1)指数序列au?n? (2)阶跃序列u?n?
四、实验要求
1.在实验报告中写出完整的自编程序,并给出实验结果和分析。 2.在绘制图形时要求图形的完整性,每个图形都要有图标标示。
五、思考题
1.系统的零极点与系统的时域和Z域之间的对应关系? 2.系统Z域分析和复数域分析有何不同?
3.实验中实现Z变换的函数ztrans为单边Z变换,并且未给出收敛域,试编写双边Z变换函数,并给出收敛域。(可借助symsum函数)
实验5 序列的离散傅里叶变换(DFT)
一、实验目的
1.加深对离散傅里叶变换概念和性质的理解
2.掌握使用MATLAB对序列进行离散傅里叶变换 3.掌握使用MATLAB对序列的离散频谱进行分析
二、实验方法和示例
1. MATLAB信号处理工具箱提供一些函数
(1)fft和ifft:一维快速正傅里叶变换和反傅里叶变换
一维快速正傅里叶正变换:X=fft(x,N) 一维快速正傅里叶反变换:x=fft(X,N)
采用FFT算法计算序列向量x的N点DFT,缺省N时,fft函数自动按x的长度计算DFT,若N小于x长度时,自动取x前N点进行DFT运算。当N为2的整数次幂时,fft按基2算法计算,否则用混合基算法。Ifft的调用格式类似。 (2)fftshift:移动坐标轴,使频谱对称
Y=fftshift(X)
用来重新排列X=fft(x)的输出,当X为向量时,把X的左右两半进行交换,从而将零频分量移至频谱的中心;如果X为二维傅里叶变换的结果,它同时将X的左右和上下部分进行交换。
2.利用MATLAB实现的快速傅里的变换
?1?2?例5–1:已知有限长序列x?n?的长度N?4,且x?n?????1??3用IFFT求x?n?。
n?0n?1n?2n?3,用FFT求X?k?,再
解:利用快速傅里叶变换函数求解的MATLAB实现程序清单如下:
xn=[1,2,-1,3]; X=fft(xn) x=ifft(X)
程序运行结果为:
X =
5.0000 2.0000 + 1.0000i -5.0000 2.0000 - 1.0000i x =
1 2 -1 3
?n??e例5–2:已知复正弦序列x1差别,及产生原因。
解:程序清单如下:
N=16;N1=8;
n=0:N-1;k=0:N1-1;
?,余弦序列x(n)?cos(n)R(n),分别对序Rn2NN?8列求当N?16和N?8时的DFT,并绘出幅频特性曲线,并分析两种N值下DFT是否有
jn8??