【 MATLAB 】使用 residuez 函数求 z 反变换的几个案例分析
这篇博文属于我的专栏:数字信号处理的MATLAB实现里面的内容,专栏中给出了这一系列博文的集合,有兴趣的可以关注下。
上篇博文讲解了 residuez 函数的基础知识:
【 MATLAB 】residuez 函数介绍(Z变换部分分数扩展)
这篇博文就给出几个案例来练练手。
案例1:
为了校核留数计算,考虑下面的有理函数:
使用residuez对其进行讨论。
题解:
先将这个有理函数重新整理为以z^-1升幂的函数:
现在利用residuez函数来求它的留数部分、极点以及直接项:
-
clc;clear;close all;
-
b = [0,1];
-
a = [3,-4,1];
-
[r,p,c] = residuez(b,a)
得到:
r =
0.5000
-0.5000
p =
1.0000
0.3333
c =
[]
这说明了:
同样,我们利用residuez函数返回它的有理多项式形式:
-
clc;clear;close all;
-
-
b = [0,1];
-
a = [3,-4,1];
-
[r,p,c] = residuez(b,a);
-
-
[b,a] = residuez(r,p,c)
b =
-0.0000 0.3333
a =
1.0000 -1.3333 0.3333
这样:
可见,和之前有理函数一致。
案例2:
求:
的z反变换。
题解:
从分母多项式中可以看出分母多项式的根分别为:0.9,0.9,-0.9,因此可以使用poly函数求出分母多项式的系数,关于poly函数见博文:
延伸:
-
clc;clear;close all;
-
-
b = 1;
-
a = poly([0.9, 0.9, -0.9])
-
-
[r,p,c]=residuez(b,a)
a =
1.0000 -0.9000 -0.8100 0.7290
r =
0.2500 + 0.0000i
0.2500 + 0.0000i
0.5000 - 0.0000i
p =
-0.9000 + 0.0000i
0.9000 + 0.0000i
0.9000 - 0.0000i
c =
[]
这样:
由常用函数的z变换以及z变换的性质,可得z反变换:
进一步化简:
MATLAB验证环节:
我们的思路是将X(z)方程有理传递函数,那么x(n)就相当于单位脉冲响应,如果系统输入一个单位脉冲信号,那么输出还是x(n).
这样,我们就可以使用filter函数进行验证x(n)是否正确了。
脚本使用到了单位样值函数:
-
function [x,n]=impseq(n0,n1,n2);
-
% generate x(n) = delta(n - n0); n1 <= n <= n2
-
%_____________________________________________
-
%[x,n] = impseq(n0, n1, n2);
-
%
-
n = [n1:n2];
-
x = [(n-n0) == 0];
直接给出MATLAB脚本:
-
clc;clear;close all;
-
-
b = 1;
-
a = poly([0.9, 0.9, -0.9])
-
-
[delta,n] = impseq(0,0,7);
-
x = filter(b,a,delta);
-
-
subplot(2,1,1);
-
stem(n,x,'filled');
-
title('x(n) by impulse response');
-
-
x = 0.75 * (0.9).^n + 0.5 * n .* (0.9).^n + 0.25 * (-0.9).^n;
-
-
subplot(2,1,2);
-
stem(n,x);
-
title('x(n) in z inverse transform');
可见,这里的z反变换是正确的。
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/83446872
- 点赞
- 收藏
- 关注作者
评论(0)