信号与系统课程设计报告书课题名称 零输入响应与零状态响应姓 名梁何磊学 号 20086354 院、系、部 电气系 专 业 电子信息工程 指导教师孙秀婷 康朝红※※※※※※※※※ ※ ※※ ※※ ※※※※※※※※※2008级信号与系统课程设计2011年1月11日连续时间系统的LTI 系统的时域仿真 -------零输入响应与零状态响应20086354 梁何磊一、设计目的掌握信号经过LTI 系统的时域分析方法。
巩固已经学过的知识,加深对知识的理解和应用,加强学科间的横向联系,学会应用MATLAB 对实际问题进行仿真。
学会对带有非零起始状态的LTI 系统进行仿真。
二、设计要求(1)根据实际问题建立系统的数学模型,对给定的如下电路,课本第二章例2-8,参数如图所示;建立系统的数学模型,并计算其完全响应;(2)用MATLAB 描述此系统;(3)仿真实现并绘制输出信号的波形。
要求用两种方法仿真实现完全响应。
对仿真结果进行比较,并与理论值比较。
三、设计方法与步骤:一般的连续时间系统分析有以下几个步骤: ①求解系统的零输入响应; ②求解系统的零状态响应; ③求解系统的全响应; ④分析系统的卷积;⑤画出它们的图形. 下面以具体的微分方程为例说明利用MATLAB 软件分析系统的具体方法.1.连续时间系统的零输入响应描述n 阶线性时不变(LTI )连续系统的微分方程为:已知y 及各阶导数的初始值为y(0),y (1)(0),… y (n-1)(0), 求系统的零输入响应。
建模当LIT 系统的输入为零时,其零输入响应为微分方程的其次解(即令微分方程的等号右端为零),其形式为(设特征根均为单根)1121111n n m n n m m n n m d y d y dy d u du a a a a y b b b u dtdt dt dt dt -++-++⋅⋅⋅⋅⋅++=+⋅⋅⋅⋅++1212()n p tp t p t n y t C e C e C e =++⋅⋅⋅⋅+()4=t e ()t L H 41=L Ω=232其中p 1,p 2,…,p n 是特征方程a 1λn +a 2λn-1+…+a n λ+a n =0的根,它们可以用root(a)语句求得。
各系数 由y 及其各阶导数的初始值来确定。
对此有………………………………………………………………………………………写成矩阵形式为: P 1n-1C 1+ P 2n-1C 2+…+ P n n-1C n =D n-1y 01012201111120111n n n n n n n C y p p p C Dy p p p C D y ----⋅⋅⋅⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⋅⋅⋅⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⋅⋅⋅⎣⎦⎣⎦⎣⎦即 V •C=Y 0 其解为:C=V\Y 0 式中V 为范德蒙矩阵,在matlab 的特殊矩阵库中有vander 。
以下面式子为例:)(6)('4)(3)('2)("t f t f t y t y t y -=++初始条件为2_)0(=y ,7_)0('=y ;MATLAB 程序:a=input('输入分母系数a=[a1,a2,...]='); n=length(a)-1;Y0=input('输入初始条件向量 Y0=[y0,Dy0,D2y0,...]='); p=roots(a);V=rot90(vander(p));c=V\Y0'; dt=input('dt=');te=input('te='); t=0:dt:te;y=zeros(1,length(t)); for k=1:n y=y+c(k)*exp(p(k)*t);end plot(t,y);gridxlabel('t') ;ylabel('y'); title('零输入响应'); 程序运行结果:用这个通用程序来解一个三阶系统,运行此程序并输入120n C C C y ++⋅⋅⋅⋅+=11220n n p C p C p C Dy ++⋅⋅⋅⋅+=111111220n n n n n n p C p C p C D y----++⋅⋅⋅⋅+=1211112111n n n n n p p p V p p p ---⋅⋅⋅⎡⎤⎢⎥⋅⋅⋅⎢⎥=⎢⎥⎢⎥⋅⋅⋅⎣⎦[]12n C C C C =⋅⋅⋅1000n C y Dy D y -⎡⎤=⋅⋅⋅⎣⎦a=[1,2,3] Y0=[2,7] dt=0.002 te=7结果如下图:根据图可以分析零输入响应,它的起始值与输入函数无关,只与它的初始状态值有关,其起始值等于y(0_)的值。
随着时间的推移,最后零输入响应的值无限的趋近于0。
2.连续时间系统零状态响应的数值计算我们知道,LTI 连续系统可用如下所示的线性常系数微分方程来描述,()()()()NMi j i j i j a y t b f t ===∑∑例如,对于以下方程:''''''''''''32103210()()()()()()()()a y t a y t a y t a y tb f t b f t b f t b f t +++=+++可用32103210[,,,],[,,,],a a a a a b b b b b ==输入函数()u f t =,得出它的冲激响应h ,再根据LTI 系统的零状态响应y (t )是激励u (t )与冲激响应h (t )的卷积积分。
注意,如果微分方程的左端或右端表达式中有缺项,则其向量a 或b 中的对应元素应为零,不能省略不写,否则出错。
求函数的零状态响应)(6)('4)(3)('2)("t f t f t y t y t y -=++及初始状态'(0)(0)0zs zs y y --==。
输入函数)*5cos()*2sin(t t y +=。
建模先求出系统的冲激响应,写出其特征方程 0322=++λλ求出其特征根为p 和p ,及相应的留数r ,r ;则冲激响应为1212()p t p th t r e r e =+输入y (t )可用输入u (t )与冲激响应h (t )的卷积求得。
MATLAB 程序:a=input('输入分母系数a=[a1,a2,...]='); b=input('输入输入信号系数b=[b1,b2,...]='); dt=input('dt=');te=input('te='); t=0:dt:te;u=input('输入函数u='); te=t(end);dt=te/(length(t)-1); [r,p,k]=residue(b,a);h=r(1)*exp(p(1)*t)+r(2)*exp(p(1)*t); subplot(2,1,1),plot(t,h);grid title('冲激函数'); y=conv(u,h)*dt; subplot(2,1,2),plot(t,y(1:length(t)));grid title('零状态响应'); 程序运行结果执行这个程序,取a=[1,2,3] b=[4,6] dt=0.001 te=7 得出图形如下:由于初始状态为零,所以零状态的起始值也为零,即h(t)包含了连续系统的固有特性,与系统的输入无关。
只要知道了系统的冲激响应,即可求得系统在不同输入时产生的输出。
因此,求解系统的冲激响应h 对进行连续时间系统的分析具有非常重要的意义3.连续时间系统的全响应计算上面通过对LTI 系统函数的描述,我们可以得知:如果在系统的初始状态不为零,在激励f (t )的作用下,LTI 系统的响应称为全响应,它是零输入响应和零状态响应之和,即()()()zi zs y t y t y t =+故可先求出零输入响应和零状态响应,再把两者相加,得到全响应。
但简单的相加可能由于零输入与零状态的矩阵不同而不能的出正确的结果,这就需要对矩阵进行截取,使它们的阶数相同。
例如,对于以下方程:yttfy++t=y-t4)('f)()(6)("t32)('初始值为:y(0_)=2, 7y;0('=_)输入函数为:)2t=y+sin(t*5*)cos(求它的全响应。
建模先根据零输入响应的求法,得出零输入响应y1(t)。
再根据零状态响应的求法,得出零状态响应y2(t)。
最后,全响应y等于零输入响应y1(t)加上零状态响应y2(t),得出全响应。
MATLAB程序:a=input('输入分母系数a=[a1,a2,...]=');n=length(a)-1;Y0=input('输入初始条件向量 Y0=[y0,Dy0,D2y0,...]=');b=input('输入输入信号系数b=[b1,b2,...]=');u=input('输入函数u=');dt=input('dt=');te=input('te=');t=0:dt:te;p=roots(a);V=rot90(vander(p));c=V\Y0';y1=zeros(1,length(t));for k=1:n y1=y1+c(k)*exp(p(k)*t);endte=t(end);dt=te/(length(t)-1);[r,p,k]=residue(b,a);h=r(1)*exp(p(1)*t)+r(2)*exp(p(1)*t);y2=conv(u,h)*dt;y=y1(1:length(t))+y2(1:length(t));figure(1);subplot(3,1,1),plot(t,y1),gridxlabel('t'); ylabel('y1');title('零输入响应');subplot(3,1,2),plot(t,y2(1:length(t)));gridxlabel('t');ylabel('y2');title('零状态响应');subplot(3,1,3),plot(t,y),gridxlabel('t'); ylabel('y');title('全响应响应');程序运行结果执行程序,取 a=[1,2,3] Y0=[2,7] b=[1,4,6]u=sin(2*t)+cos(5*t) dt=0.001 te=7结果如下图:在零输入响应中任一时刻取值y1,在零状态响应的对应时刻取值y2,再在全响应的对应时刻取值y。