MATLAB信号处理---学习小案例(10)---Z反变换

定义 X ( z ) X(z) X(z)的Z反变换(IZT)为 x ( n ) = 1 2 π j ∮ C X ( z ) z n − 1 d z x(n)=\frac{1}{2\pi j} \oint_{C}X(z)z^{n-1}dz x(n)=2πj1CX(z)zn1dz,式中,C为收敛域内一条环绕原点的逆时针闭合围线。

求Z反变换的方法主要有两种,留数法和部分分式展开发。

由留数定理可知:若函数在围线c上连续,在c以内有K个极点,在c以外有M个极点,则有 1 2 π j ∫ X ( z ) z n − 1 d z = ∑ k R e s [ X ( z ) z n − 1 ] z = z k \frac{1}{2\pi j} \int X(z)z^{n-1}dz=\sum_{k}Res[X(z)z^{n-1}]_{z=z_k} 2πj1X(z)zn1dz=kRes[X(z)zn1]z=zk
当极点为一阶时的留数为 R e s [ X ( z ) z n − 1 ] z = z r = [ ( z − z r ) X ( z ) z n − 1 ] z = z r Res[X(z)z^{n-1}]_{z=z_r}=[(z-z_r)X(z)z^{n-1}]_{z=z_r} Res[X(z)zn1]z=zr=[(zzr)X(z)zn1]z=zr
当极点为多重极点时的留数为 R e s [ X ( z ) z n − 1 ] z = z r = 1 ( l − 1 ) ! d l − 1 d z l − 1 [ ( z − z r ) l X ( z ) z n − 1 ] z = z r Res[X(z)z^{n-1}]_{z=z_r}=\frac{1}{(l-1)!}\frac{d^{l-1}}{dz^{l-1}}[(z-z_r)^lX(z)z^{n-1}]_{z=z_r} Res[X(z)zn1]z=zr=(l1)!1dzl1dl1[(zzr)lX(z)zn1]z=zr

部分分式法把x的一个实系数的真分式分解成几个分式的和,使各分式具有 a ( x + A ) k \frac{a}{(x+A)^k} (x+A)ka或者 a x + b ( x 2 + A x + B ) k \frac{ax+b}{(x^2+Ax+B)^k} (x2+Ax+B)kax+b的形式

通常情况下传递函数可分解为 X ( z ) = B ( z ) A ( z ) = ∑ i = 0 M b i z − i 1 + ∑ i = 1 N a i z − i X(z)=\frac{B(z)}{A(z)}=\frac{\sum_{i=0}^{M}b_iz^{-i}}{1+\sum_{i=1}^{N}a_iz^{-i}} X(z)=A(z)B(z)=1+i=1Naizii=0Mbizi

MATLAB的符号数学工具箱提供了计算Z变换的函数ztrans和Z反变换的函数iztrans,其调用形式为

F=ztrans(f)
f=iztrans(F)

其中,右端的f和F分别为表示时域表达式和z域表达式的符号,可用函数sym来实现,其调用格式为

S=sym(A)

在MATLAB中,留数法求Z反变换可用函数residuez实现,调用格式如下:

[R P K] = residuez(B,A)

其中,B和A分别为X(z)多项式中分子多项式和分母多项式的系数向量,返回值R为留数向量,P为极点向量,二者均为列向量,返回值K为直接项系数,仅在分子多项式最高次幂大于等于分母多项式最高次幂时存在,否则,返回值为空

例:求 f ( n ) = s i n ( a k ) u ( k ) f(n)=sin(ak)u(k) f(n)=sin(ak)u(k)的Z变换和 F ( z ) = z ( z − 3 ) 2 F(z)=\frac{z}{(z-3)^2} F(z)=(z3)2z的Z反变换
运行程序如下:

f=sym('sin(a*k)');
F=ztrans(f)
F=sym('z/(z-3)^2');
f=iztrans(F)

Z变换运行结果如下:

F =

(z*sin(a))/(z^2 - 2*cos(a)*z + 1)

Z逆变换运行结果如下:

f =

3^n/3 + (3^n*(n - 1))/3

例:求 X ( z ) = ( 1 + 0.4 z − 1 ) 2 ( 1 + 0.8 z − 1 ) 2 ( 1 − 0.5 z − 1 ) 2 ( 1 + 0.1 z − 1 ) ∣ z ∣ > 0.8 X(z)=\frac{(1+0.4z^{-1})^2}{(1+0.8z^{-1})^2(1-0.5z^{-1})^2(1+0.1z^{-1})}|z|>0.8 X(z)=(1+0.8z1)2(10.5z1)2(1+0.1z1)(1+0.4z1)2z>0.8的Z反变换

运行程序如下:

clear all;close all;clc;

B = poly([-0.4 -0.4]);
A = poly([-0.8 -0.8 0.5 0.5 -0.1]);

[R P K] = residuez(B,A);
R = R'
P = P'
K

运行结果如下:

R =

   0.2842 + 0.0000i   0.1082 - 0.0000i   0.2031 - 0.0000i   0.3994 + 0.0000i   0.0051 + 0.0000i


P =

  -0.8000 - 0.0000i  -0.8000 + 0.0000i   0.5000 - 0.0000i   0.5000 + 0.0000i  -0.1000 + 0.0000i


K =

 []

参考文献:

  1. 《精通MATLAB信号处理》,沈再阳编写,清华大学出版社

猜你喜欢

转载自blog.csdn.net/Xiao_Jie123/article/details/113090932