文档库 最新最全的文档下载
当前位置:文档库 › 离散时间系统分析及MATLAB实现

离散时间系统分析及MATLAB实现

离散时间系统分析及MATLAB实现

张登奇,周婷,梁莺

(湖南理工学院计算机与信息工程系,湖南岳阳 414006)

摘要:线性时不变离散时间系统是最基本的数字系统,差分方程和系统函数是描述系统的常用数学模型,单位脉冲响应和频率响应是描述系统特性的主要特征参数,零状态响应和因果稳定性是系统分析的重要内容。文章从系统的分析流程、系统模型的创建、时域分析、频域分析和因果稳定性分析等方面,介绍了线性时不变离散时间系统的基本分析方法,并以实例形式列举了MATLAB实现程序。

关键词:MATLAB;离散时间系统;系统分析;传输函数

中图分类号:TN911.6 TP391.75 文献标识码:A 文章编号:

Analysis of Discrete-time System and Realization Based on Matlab

ZHANG Dengqi, ZHOU Ting, LIANG Ying

(Department of Computer Science and Information Engineering,

Hunan Institute of Science and Technology, Yueyang, China, 414006)

Abstract:Linear time-invariant discrete-time system is one of the basic digital systems. Difference equation and transmission function are common mathematical models to describe the system. Besides, unit impulse response and frequency response are primary characteristic parameters to the system. To the systems analysis, it is important to compute zero-state response and causality stability analysis. This paper introduces the fundamental analysis methods of the system in several aspects including system analysis flow, system modeling, time-domain analysis, frequency-domain analysis and causality stability analysis. To illustrate some examples are displayed based on Matlab.

Keywords:MATLAB; discrete-time system; systems analysis; transmission function

离散时间系统是将一个序列变换成另一序列的系统,它有多种类型,其中线性时不变离散时间系统是最基本、最重要的系统。差分方程反映了系统输入与输出的运动状态,是在时域描述系统的通用数学模型;系统函数是零状态下系统输出与输入的Z变换之比,在时域与频域之间起桥梁作用。分析系统就是在已知系统结构或系统模型条件下,从时域和频域两方面分析系统输入与输出的关系,前者重点研究系统的时间特性,后者主要研究系统的频率特性。下面从系统分析流程、系统模型创建、系统时域分析、系统频域分析和因果稳定性分析等方面,介绍线性时不变离散时间系统的基本分析方法,并以实例形式列举MATLAB在系统分析过程中的具体应用。

1 系统分析流程

分析系统首先要根据系统的实际情况,建立一个描述系统的数学模型。系统函数和差分方程都只与系统自身的结构和参数有关,反映了系统的自身特性,是最基本的系统模型。在零状态条件下,将差分方程两边进行Z变换很容易求出系统函数,反之由系统函数也可

直接写出差分方程。系统函数的Z 反变换就是单位脉冲响应,将系统函数的Z 变量用ωj e 代入即可得到频率响应。根据差分方程或单位脉冲响应,可在时域计算给定激励下系统的输出;根据系统函数或频率响应,可通过频域来计算系统的输出。无论是时域还是频域,都可判断系统的因果性和稳定性。分析系统的基本流程如图1所示。

2 系统模型的创建

创建系统模型就是根据离散系统的网络

结构,建立系统的差分方程或系统函数的过程。

实际系统可能是多输入多输出系统,根据系统

的线性特性可分别求出每一个输入信号产生的

各路输出,再进行叠加处理[1],故这里只分析

单输入单输出系统模型的创建。创建系统模型的方法有多种[2],有些方法对稍复杂的系统建模往往比较麻烦。根据系统结构先建立描述系统的状态方程和输出方程,再将其转换成系统函数也是一种有效方法。状态方程是一组一阶的状态差分方程:)()()1(n x B n A n ?+?=+λλ ,输出方程描述了输出与状态和输入的关系:)()()(n x D n C n y ?+?=λ ,状态变量一般都选延时单元的输出,列写方程一般是围绕加法器进行[1],因差分方程都是一阶的,创建容易。方程建好后,转换成系统函数的计算工作可用MATLAB 实现。

实例1:已知离散系统的网络结构如图2所示,试列写系统的状态方程和输出方程,再用MATLAB 算出系统函数。

直接写出系统的状态方程和输出方程:

)

(3.0)()()

(0375.0)(125.0)1()(165.0)()(55.0)1()

(39.0)()(1.1)1(113312211n x n n y n x n n n x n n n n x n n n +=+=+-+-=+++=+λλλλλλλλλ 由状态方程和输出方程求系统函数的程序如下:

clc; close all; clear;

A=[1.1,1,0; -0.55,0,1; 0.125,0,0];

B=[0.39; -0.165; 0.0375];

C=[1,0,0]; D=0.3;

图1 分析系统的基本流程

图2 系统的网络结构

[b,a] = ss2tf(A,B,C,D), %计算并显示系数向量

sys=filt(b,a), %按Z^-1显示系统函数

计算结果:b = 0.3000 0.0600 -0.0000 0.0000

a = 1.0000 -1.1000 0.5500 -0.1250

忽略计算误差引起的极小量,系统函数为:

3211

125.055.01.1106.03.0)(-----+-+=z

z z z z H 3 系统的时域分析

系统的时域分析主要包括求表征系统时间特性的单位脉冲响应特征量和在时域求解系统输出两方面内容。

3.1 单位脉冲响应的计算

根据差分方程求解单位脉冲激励下系统的零状态响应,或将系统函数进行Z 反变换都可算出系统的单位脉冲响应,具体算法可参见参考文献[3]。在MATLAB 中描述系统的差分方程或系统函数都是用系数向量表示,调用impz 函数就可直接算出系统的单位脉冲响应。如实例1描述的系统,其单位脉冲响应的计算及显示程序如下:

b=[0.3,0.06,0,0]; %系数向量不齐后面补0

a=[1,-1.1,0.55,-0.125]; %系数向量不齐后面补0

[hn,n]=impz(b,a,16), %列向求出16点单位脉冲响应

stem(n,hn,'.'); grid; %绘制点状图并加网格

xlabel('n');ylabel('hn');title('单位脉冲响应');

若要写出闭环形式,可调用residuez 函数将系统函数展开成部分分式形式,再通过查表求Z 反变换即可。

3.2 系统输出的时域计算

在时域上计算离散时间系统的输出,实际上就是直接求解差分方程或作卷积运算。参考文献[3]列举了迭代法、时域经典法、卷积法等常用方法及应用实例。考虑到分析系统的目的在于综合,系统设计时不存在初始问题,因此,分析系统响应重点分析零状态响应。只要掌握了分析系统的概念、原理和方法,繁杂的计算可由MATLAB 完成。

实例2:试计算实例1中,当输入序列分别为单位脉冲、单位阶跃和一般序列时,系统的输出响应。

方法1:调用filter 函数实现

b=[0.3,0.06,0,0]; a=[1,-1.1,0.55,-0.125];

x1=[1,zeros(1,15)]; %产生16点单位脉冲序列

x2=ones(1,16); %产生16点单位阶跃序列

x3=exp(-0.2*[0:15]); %用指数序列代表一般序列

y1=filter(b,a,x1), %计算单位脉冲响应

y2=filter(b,a,x2), %计算单位阶跃响应

y3=filter(b,a,x3), %计算一般序列响应

方法2:调用conv函数实现

b=[0.3,0.06,0,0]; a=[1,-1.1,0.55,-0.125];

[hn,n]=impz(b,a,16); %求出16点单位脉冲响应

x=exp(-0.2*(0:15)); %输入或产生一般序列

y1=conv(hn,x), %用线性卷积求系统响应

y2=filter(b,a,x), %用系统函数求系统响应

k=1:16;dy=y1(k)-y2(k), %两种计算的误差对比

结果表明,用有限长单位脉冲响应序列代替无限长单位脉冲响应系统会有一定的误差,但可通过增加单位脉冲响应的长度逼近。

4 系统的频域分析

系统的频域分析主要包括求表征系统频率特性的频率响应特征量和在频域求解系统输出两方面内容。

4.1 频率响应的计算

稳定系统的频率响应就是系统函数在单位圆上的取值,计算系统的频率响应,可将系统函数中的Z变量用 j e代入即可得到。频率响应是一个复函数,其模叫幅度响应,其相角叫相位响应,它反映了输入序列的频谱经系统后所发生的变化规律。从幅频曲线上可直观看到各频率分量的幅度变化情况,从相频曲线上可直观看到各频率分量的相移情况。根据频响曲线分析系统对信号频谱的影响,概念清楚、简单直观,对信号综合也意义重大,但要将一个较复杂的频率响应复函数转化成幅度响应和相位响应并图示,计算量大且容易出错,图示结果也不一定精确。利用MATLAB函数这些问题都迎刃而解。

实例3:利用MATLAB函数计算实例1中离散系统的频率响应并图示。

由系统函数绘制频响曲线的程序如下:

N=100; w=[0:(N-1)]*2*pi/N; %确定频点

z=exp(j*w); %求频点对应的z点

b=[0.3,0.06,0,0]; a=[1,-1.1,0.55,-0.125];

Hz=polyval(b,z)./polyval(a,z); %求各频点的频响

subplot(2,1,1),plot(w/pi,abs(Hz)) %绘制幅频曲线

xlabel('w *pi'),ylabel('abs(Hz)') %加标签

grid; title('幅频特性'); %加网格和标题

subplot(2,1,2),plot(w/pi,angle(Hz)) %绘制相频曲线

xlabel('w *pi'),ylabel('angle(Hz)') %加标签

grid,title('相频特性'); %加网格和标题

绘制的频响曲线如图3所示,由图可知系统有低通效果,且通带内有较好的线性相位。该程序过程清晰、容易理解,但调用freqz函数则更加简便。

b=[0.3,0.06,0,0]; a=[1,-1.1,0.55,-0.125];

freqz(b,a); %直接绘出频响曲线

顺便指出,MATLAB 函数一般有多

种用法,如freqz 函数还可求指定点数

或指定频点的频率响应等,本文大多

只用了函数的基本用法,各函数的详

细应用可参考help 命令或参见帮助系

统了解。

4.2 系统输出的频域计算

在频域上计算离散时间系统的输

出,实际上就是利用Z 变换或离散傅里

叶变换,将时域的卷积运算变换到频

域的相乘运算,再将频域运算结果反

变换到时域,从而得到最终结果。其

中,Z 变换法是手工计算的常用方法,

特别适合于输入序列的Z 变换能写成

闭合形式的情形。当输入序列是不能写成闭合形式的数据时,用Z 变换法计算就很不方便,此时可改用离散傅里叶变换实现系统响应的频域计算。由于有快速算法,离散傅里叶变换在工程上得到了广泛应用。

实例4:利用离散傅里叶变换,计算一般的数据序列经实例1所示系统的输出。 xn=exp(-0.2*(0:15)); %输入一般序列数据

b=[0.3,0.06,0,0]; a=[1,-1.1,0.55,-0.125];

[h,n]=impz(b,a,16); hn=h'; %求出单位脉冲响应并转置

M=length(xn); N=length(hn); %计算两序列长度

L=pow2(nextpow2(M+N-1)); %取L 为大于等于且最接近(N+M-1)的2的正次幂

Xk=fft(xn,L); Hk=fft(hn,L); %L 点FFT

Yk=Xk.*Hk; %频域相乘得Y(k)

yn=ifft(Yk,L), %L 点IFFT 得时域卷积结果

如果输入的序列太长,可参考文献[4]编程实现,也可直接调用fftfilt 函数。 5 因果稳定性分析

系统的因果性和稳定性分析也是系统分析的重要内容。离散时间系统的因果性在差分方程上表现为输出与未来输入无关;在单位脉冲响应上表现为n<0时h(n)=0;在系统函数上表现为收敛域包括无穷远点。系统的稳定性在差分方程上表现为输入有界则输出有界;在单位脉冲响应上表现为∞<∑)(n h ;在系统函数上表现为收敛域包括单位圆。判断系统的因果性和稳定性,比较简单的方法是绘制系统函数的零极点图,如果全部极点都在单位圆内,则说明系统是因果稳定的。如利用零极点图判断实例1中离散系统的因果稳定性程序如下:

图3 系统的频响曲线

b=[0.3,0.06,0,0]; a=[1,-1.1,0.55,-0.125];

zplane(b,a), %绘零极点图

绘制的零极点图如图4所示,由图可知系统极点全在单位圆内,系统是因果稳定的。增加语句zs=roots(b),ps=roots(a), ks=b(1)/a(1),可计算系统的零极点和增益,也可直接调用[r,p,k]=tf2zp(b,a)函数。

6 结束语

用MATLAB 辅助分析离散时间系统,具有编

程简单、计算准确、绘图方便、结果直观等特

点,只要掌握了系统分析的概念原理和方法,

繁杂的分析计算及图形显示均可用MATLAB 实

现。利用MATLAB 的计算功能,不仅使大量的手

工计算得以简化,也使得系统分析更为简便和

高效;利用MATLAB 的绘图功能,有利于分析结

果的直观理解,也有利于深入掌握所学的内

容。

参考文献:

[1] 吴湘淇.信号、系统与信号处理(上)[M].北京:电子工业出版社, 2000:278-307

[2] 门爱东等.数字信号处理[M].北京:人民邮电出版社, 2003:218-221

[3] 林梓等.信号与线性系统分析基础[M].北京:北京邮电大学出版社,2005:153-160

[4] 徐庆征等.基于MATLAB 的分段卷积计算[J].苏州科技学院学报,2006,(02):88-90

[5] 吴湘淇等.信号、系统与信号处理的软硬件实现[M].北京:电子工业出版社, 2002

[6] 陈怀琛等.MATLAB 及在电子信息课程中的应用[M].北京:电子工业出版社, 2004

[7] John G. Proakis. 数字信号处理[M]. 方艳梅等译.北京:电子工业出版社,2006

[8] Sanjit K Mitra. 数字信号处理实验指导书[M].孙洪等译.北京:电子工业出版社,2006 作者简介:张登奇(1968- ),男,湖南临湘人,硕士,湖南理工学院计算机与信息工程系副教授。主要研究方向:信号与信息处理

地 址:414006 湖南省岳阳市湖南理工学院计算机与信息工程系 张登奇

电 话:138********

Email : hnyyzdq@https://www.wendangku.net/doc/046527172.html,

图4 系统的零极点分布图

相关文档
相关文档 最新文档