本科生实验报告
实验课程数字信号处理实验 学院名称信息科学与技术学院 专业名称电子信息工程 学生姓名干娜
学生学号 [1**********]9 指导教师刘瑛 实验地点 6B609 实验成绩
二〇 年 月二〇 年 月
离散系统的z 域分析方法
一、 实验目的
1. 回顾MATLAB 软件的使用方法,如m 文件的编写及命令行的使用; 2. 学会用MATLAB 求离散时间序列的z 变换及逆变换;
3. 了解用MATLAB 将z 变换后的函数进行部分分式展开,然后求其逆变换;
4. 学会用MATLAB 进行零极点分析,并画出零极点图。
二、 实验内容
1. 用MATLAB 求离散时间序列的z 变换及z 变换逆变换,并与自己的计算结果对比;
2. 用MATLAB 将z 变换按部分式展开法展开,然后求z 变换逆变换; 3. 求系统的零极点;
4. 编写m 文件函数画系统的零极点图;
5. 完成例题以及习题并总结实验过程中出现的问题以及收获与心得。
三、 离散信号的z 变换和逆变换
例1. 已知序列f(k)=2−k, 求其z 变换 matlab 代码:
syms k
f=sym('2^(-k)'); F=ztrans(f) %求z 变换
运行结果: F = z/(z - 1/2)
例2. 已知一离散系统的系统函数H (z )=z+3z+2,求其冲激响应h(k). matlab 代码:
syms kz
z
H=sym('z/(z^2+3*z+2)'); h=iztrans(H,k)
运行结果: h =
(-1)^k - (-2)^k
例3. 已知离散系统的系统函数H (z )=z2+3z+2MATLAB 求其冲激
响应h(k).
首先方程两边同时除以z ,得matlab 代码: A=[1 3 2]; B=[1 0]; [r p k]=residue(B,A) 运行结果: r = 2 -1 p = -2 -1 k = []
例4. 已知一离散系统的系统函数H (z )=
z2−0. 7z+0. 1z+3z+2
H(Z) Z
z2
z2+3z+2, 然后再将其展开,
Z
.
法一:直接调用matlab 的zplane()函数画出系统的零极点图。 matlab 代码: a=[1 3 2]; b=[1 -0.7 0.1];
zplane(b,a) %绘制其零极点图 运行结果:
法二:利用用roots()函数求得H(z)的零极点后,在用plot 命令绘制出系统函数的零极点图。
matlab 代码:
ljdt()函数的定义: function ljdt(A,B)
p=roots( A); % 系统极点 q=roots(B); %系统零点 p=p'; %将极点的列向量转置为行向量 q=q'; %将零点的列向量转置为行向量 x=max(abs([p q 1]));% 确定纵坐标的范围 x=x+0.1;
y=x; % 确定横坐标的范围 clf hold on
axis([-x x -y y]) % 确定坐标轴显示的范围 w=0:pi/300:2*pi; t=exp(i*w);
plot(t) % 画单位圆 axis('square' )
plot([-x x],[0 0]) % 画横坐标轴 plot([0 0],[-y y]) % 画纵坐标轴 text(0.1, x,'jIm[z]') text(y,1/10,'Re[z]')
plot(real(p),imag(p),'x' ) % 画极点 plot(real(q),imag(q),'o' ) % 画零点
title('pole-zero diagram for discrete system') hold off
在命令行中调用ljdt()函数画出零极点图:
a=[1 3 2]; b=[1 -0.7 0.1]; ljdt(a,b) 运行结果:
四、 习题
1. 已知一离散因果系统的系统该函数为: H(z)=
z2+2z+1z3−0.5z2−0.005z+0.3
.
利用matlab ,求系统的零极点,并在z 平面显示它们的分布. matlab 代码: b=[1 2 1];
a=[1 -0.5 -0.005 0.3]; ljdt(a,b) 运行结果:
结果分析:由零极点图可以看出,该系统函数有1个零点,3个极点,分析传递函数的式子 H(z)=z−0.5z−0.005z+0.3可知,系统有2个相同的零点,3个极点, 保持现有的图像,再在命令行输入p=roots(a),q=roots(b),得到的结果为 p =
0.5198 + 0.5346i 0.5198 - 0.5346i
-0.5396 + 0.0000i ; q= -1 -1 ,
可以看出系统有一个负的实极点,两个共轭的虚极点,这符合实数系统的零极点特性,并且和我计算出的结果一致。 2. 已知描述离散系统的差分方程为: y(k)-y(k-1)-y(k-2)=4f(k)-f(k-1)-f(k-2) , 试用matlab 绘出该系统的零极点分布图. 分析:先求差分方程的z 变换:
Y(z) - Y(z)z−1- Y(z)z−2 = 4X(z) - X(z)z−1-X(z)z−2 H(z)=X(z) 1−z−z, 将指数转化为正值:H(z)= 画出系统的零极点图。 matlab 代码: b=[4 -1 -1]; a=[1 -1 -1];
ljdt(a,b)
Y(z) 4−z−1−z−2
4z2−z−1z−z−1
z2+2z+1
. 然后再利用函数ljdt()
运行结果:
pole-zero diagram for discrete system
-1.5
-1
-0.5
0.5
1
1.5
结果分析:由零点图可以看出,该系统有两个零点和两个极点,并且都在实轴上,保持现有的图像,再在命令行输入p=roots(a),q=roots(b),得到的结果为p = -0.61801.6180q =0.6404 -0.3904 ,由系统的传递函数H(z)=
4z2−z−1z−z−1
可计算出的零
点和极点,由此可知matlab 计算的结果和我计算出的结果一致。
本科生实验报告
实验课程数字信号处理实验 学院名称信息科学与技术学院 专业名称电子信息工程 学生姓名干娜
学生学号 [1**********]9 指导教师刘瑛 实验地点 6B609 实验成绩
二〇 年 月二〇 年 月
离散系统的z 域分析方法
一、 实验目的
1. 回顾MATLAB 软件的使用方法,如m 文件的编写及命令行的使用; 2. 学会用MATLAB 求离散时间序列的z 变换及逆变换;
3. 了解用MATLAB 将z 变换后的函数进行部分分式展开,然后求其逆变换;
4. 学会用MATLAB 进行零极点分析,并画出零极点图。
二、 实验内容
1. 用MATLAB 求离散时间序列的z 变换及z 变换逆变换,并与自己的计算结果对比;
2. 用MATLAB 将z 变换按部分式展开法展开,然后求z 变换逆变换; 3. 求系统的零极点;
4. 编写m 文件函数画系统的零极点图;
5. 完成例题以及习题并总结实验过程中出现的问题以及收获与心得。
三、 离散信号的z 变换和逆变换
例1. 已知序列f(k)=2−k, 求其z 变换 matlab 代码:
syms k
f=sym('2^(-k)'); F=ztrans(f) %求z 变换
运行结果: F = z/(z - 1/2)
例2. 已知一离散系统的系统函数H (z )=z+3z+2,求其冲激响应h(k). matlab 代码:
syms kz
z
H=sym('z/(z^2+3*z+2)'); h=iztrans(H,k)
运行结果: h =
(-1)^k - (-2)^k
例3. 已知离散系统的系统函数H (z )=z2+3z+2MATLAB 求其冲激
响应h(k).
首先方程两边同时除以z ,得matlab 代码: A=[1 3 2]; B=[1 0]; [r p k]=residue(B,A) 运行结果: r = 2 -1 p = -2 -1 k = []
例4. 已知一离散系统的系统函数H (z )=
z2−0. 7z+0. 1z+3z+2
H(Z) Z
z2
z2+3z+2, 然后再将其展开,
Z
.
法一:直接调用matlab 的zplane()函数画出系统的零极点图。 matlab 代码: a=[1 3 2]; b=[1 -0.7 0.1];
zplane(b,a) %绘制其零极点图 运行结果:
法二:利用用roots()函数求得H(z)的零极点后,在用plot 命令绘制出系统函数的零极点图。
matlab 代码:
ljdt()函数的定义: function ljdt(A,B)
p=roots( A); % 系统极点 q=roots(B); %系统零点 p=p'; %将极点的列向量转置为行向量 q=q'; %将零点的列向量转置为行向量 x=max(abs([p q 1]));% 确定纵坐标的范围 x=x+0.1;
y=x; % 确定横坐标的范围 clf hold on
axis([-x x -y y]) % 确定坐标轴显示的范围 w=0:pi/300:2*pi; t=exp(i*w);
plot(t) % 画单位圆 axis('square' )
plot([-x x],[0 0]) % 画横坐标轴 plot([0 0],[-y y]) % 画纵坐标轴 text(0.1, x,'jIm[z]') text(y,1/10,'Re[z]')
plot(real(p),imag(p),'x' ) % 画极点 plot(real(q),imag(q),'o' ) % 画零点
title('pole-zero diagram for discrete system') hold off
在命令行中调用ljdt()函数画出零极点图:
a=[1 3 2]; b=[1 -0.7 0.1]; ljdt(a,b) 运行结果:
四、 习题
1. 已知一离散因果系统的系统该函数为: H(z)=
z2+2z+1z3−0.5z2−0.005z+0.3
.
利用matlab ,求系统的零极点,并在z 平面显示它们的分布. matlab 代码: b=[1 2 1];
a=[1 -0.5 -0.005 0.3]; ljdt(a,b) 运行结果:
结果分析:由零极点图可以看出,该系统函数有1个零点,3个极点,分析传递函数的式子 H(z)=z−0.5z−0.005z+0.3可知,系统有2个相同的零点,3个极点, 保持现有的图像,再在命令行输入p=roots(a),q=roots(b),得到的结果为 p =
0.5198 + 0.5346i 0.5198 - 0.5346i
-0.5396 + 0.0000i ; q= -1 -1 ,
可以看出系统有一个负的实极点,两个共轭的虚极点,这符合实数系统的零极点特性,并且和我计算出的结果一致。 2. 已知描述离散系统的差分方程为: y(k)-y(k-1)-y(k-2)=4f(k)-f(k-1)-f(k-2) , 试用matlab 绘出该系统的零极点分布图. 分析:先求差分方程的z 变换:
Y(z) - Y(z)z−1- Y(z)z−2 = 4X(z) - X(z)z−1-X(z)z−2 H(z)=X(z) 1−z−z, 将指数转化为正值:H(z)= 画出系统的零极点图。 matlab 代码: b=[4 -1 -1]; a=[1 -1 -1];
ljdt(a,b)
Y(z) 4−z−1−z−2
4z2−z−1z−z−1
z2+2z+1
. 然后再利用函数ljdt()
运行结果:
pole-zero diagram for discrete system
-1.5
-1
-0.5
0.5
1
1.5
结果分析:由零点图可以看出,该系统有两个零点和两个极点,并且都在实轴上,保持现有的图像,再在命令行输入p=roots(a),q=roots(b),得到的结果为p = -0.61801.6180q =0.6404 -0.3904 ,由系统的传递函数H(z)=
4z2−z−1z−z−1
可计算出的零
点和极点,由此可知matlab 计算的结果和我计算出的结果一致。