MATLAB信号与系统分析(四)——离散信号与系统的复频域分析及MATLAB实现
一、系统的z变换和反变换
1、利用部分分式展开求解逆Z变换:
2、例子
3、Z变换的MATLAB函数
clear all f=sym('cos(a*k)'); F=ztrans(f) F=sym('z^2/((1+z)*(z-2))'); f=iztrans(F)
二、系统的零极点分布及其稳定性
%求H(z)=(z^3+2z)/(z^4+3(z^3)+2(z^2)+2z+1)的零极点及其分布图 %求H(z)=(1+z^(-1))/(1+z^-1/2+z^-2/4+1)的零极点及其分布图 %采用roots和plot函数 clear all %(1) b=[1,0,2,0]; a=[1,3,2,2,1]; zs1=roots(b); ps1=roots(a); figure(1) subplot(2,1,1);plot(real(zs1),imag(zs1),'o',real(ps1),imag(ps1),'kx','markersize',12); axis([-2,2,-2,2]);grid on; legend('零点','极点') %(2) c=[1,1,0]; d=[1,1/2,1/4]; zs2=roots(c); ps2=roots(d); subplot(2,1,2); plot(real(zs2),imag(zs2),'o',real(ps2),imag(ps2),'kx','markersize',12); axis([-2,2,-2,2]);grid on;legend('零点','极点') %采用tf2zp和zplane函数 %(1) b=[1,0,2,0]; a=[1,3,2,2,1]; figure(2) [z,p]=tf2zp(b,a) subplot(2,1,1),zplane(z,p) %(2) c=[1,1,0]; d=[1,1/2,1/4]; [z,p]=tf2zp(c,d) subplot(2,1,2),zplane(z,p)
三、系统的零极点分布与系统冲激响应时域特性
clear all a=[1 -2*0.8*cos(pi/4) 0.8^2]; b=[1]; [z,p,k]=tf2zp(b,a); figure(1) subplot(2,1,1),zplane(z,p); subplot(2,1,2),impz(b,a,20)
四、离散系统的频率响应
MATLAB提供了专门对离散系统频率响应H(jw)进行分析的函数freqz(),该函数可以求出系统频率响应的数值解,并可绘出系统的幅频和相频响应曲线。
[H,w]=freqz(b,a,N)
[H,w]=freqz(b,a,N,’whole’)
freqz(b,a,N)
freqz(b,a,N,’whole’)
%例7 clear all; b=[5/4 -5/4]; a=[1 -1/4]; [h,w]=freqz(b,a,400,'whole'); hf=abs(h); hx=angle(h); figure(1),clf; subplot(2,1,1),plot(w,hf),title('幅频特性曲线'),grid on; subplot(2,1,2),plot(w,hx),title('相频特性曲线'),grid on; figure(2) freqz(b,a,'whole') % [z,p]=tf2zp(b,a); r=2; k=200; w=0:1*pi/k:r*pi; y=exp(i*w); %定义单位圆上的k个频率等分点 N=length(p); %求极点个数 M=length(z); %求零点个数 yp=ones(N,1)*y; %定义行数为极点个数的单位圆向量 yz=ones(M,1)*y; %定义行数为零点个数的单位圆向量 vp=yp-p*ones(1,r*k+1); %定义极点到单位圆上各点的向量 vz=yz-z*ones(1,r*k+1); %定义零点到单位圆上各点的向量 Ai=abs(vp); %求出极点到单位圆上各点的向量的模 Bj=abs(vz); %求出零点到单位圆上各点的向量的模 Ci=angle(vp); %求出极点到单位圆上各点的向量的相角 Dj=angle(vz); %求出零点到单位圆上各点的向量的相角 fai=sum(Dj,1)-sum(Ci,1); %求系统相频响应 H=prod(Bj,1)./prod(Ai,1); %求系统幅频响应 figure(3) subplot(2,1,1),plot(w,H);title('离散系统幅频特性曲线'),xlabel('角频率'),ylabel('幅度') subplot(2,1,2),plot(w,fai);title('离散系统的相频特性曲线'),xlabel('角频率'),ylabel('相位')