连续时间LTI系统的时域分析
- 格式:doc
- 大小:132.00 KB
- 文档页数:8
MATLAB与信号实验——连续LTI系统的时域分析连续LTI系统的时域分析是信号与系统学中的重要课题。
MATLAB作为一种强大的科学计算软件,提供了丰富的工具和函数来进行信号与系统的分析。
下面将介绍MATLAB在连续LTI系统时域分析中的应用。
首先,我们需要了解连续LTI系统的基本概念。
一个连续域线性时不变系统(LTI系统)可以由它的冲激响应完全描述。
冲激响应是系统对单位冲激信号的响应。
在MATLAB中,可以使用impulse函数来生成单位冲激信号。
假设我们有一个连续LTI系统的冲激响应h(t),我们可以使用conv 函数来计算系统对任意输入信号x(t)的响应y(t)。
conv函数实现了卷积运算,可以将输入信号与冲激响应进行卷积运算得到输出信号。
例如,我们假设一个连续LTI系统的冲激响应为h(t) = exp(-t)u(t),其中u(t)是单位阶跃函数。
我们可以使用以下代码生成输入信号x(t)和计算输出信号y(t):```matlabt=-10:0.1:10;%时间范围x = sin(t); % 输入信号h = exp(-t).*heaviside(t); % 冲激响应y = conv(x, h, 'same'); % 计算输出信号```这段代码首先定义了时间范围t,然后定义了输入信号x(t)和冲激响应h(t)。
接下来,使用conv函数计算输入信号和冲激响应的卷积,设置参数’same’表示输出信号与输入信号长度相同。
最后,得到了输出信号y(t)。
在得到输出信号后,我们可以使用MATLAB的绘图功能来可视化结果。
例如,使用以下代码可以绘制输入信号和输出信号的图像:```matlabfigure;plot(t, x, 'b', 'LineWidth', 2); % 绘制输入信号hold on;plot(t, y, 'r', 'LineWidth', 2); % 绘制输出信号xlabel('时间');ylabel('幅度');legend('输入信号', '输出信号');```除了卷积运算外,MATLAB还提供了许多其他函数来进行连续LTI系统的时域分析。
实验二连续时间LTI系统的时域分析一、实验目的:1、学会使用符号法求解连续系统的零输入响应和零状态响应2、学会使用数值法求解连续系统的零状态响应3、学会求解连续系统的冲激响应和阶跃响应二、实验原理及实例分析1、连续时间系统零输入响应和零状态响应的符号求解连续时间系统可以使用常系数微分方程来描述,其完全响应由零输入响应和零状态响应组成。
MATLAB符号工具箱提供了dsolve函数,可以实现对常系数微分方程的符号求解,其调用格式为:dsolve(‘eq1,eq2…’,’cond1,cond2,…’,’v’)其中参数eq表示各个微分方程,它与MATLAB符号表达式的输入基本相同,微分和导数的输入是使用Dy,D2y,D3y来表示y的一价导数,二阶导数,三阶导数;参数cond表示初始条件或者起始条件;参数v表示自变量,默认是变量t。
通过使用dslove函数可以求出系统微分方程的零输入响应和零状态响应,进而求出完全响应。
2、连续时间系统零状态响应的数值求解在实际工程中使用较多的是数值求解微分方程。
对于零输入响应来说,其数值解可以通过函数initial 来实现,而该函数中的参量必须是状态变量所描述的系统模型,由于现在还没有学习状态变量相关内容,所以此处不做说明。
对于零状态响应,MATLAB 控制系统工具箱提供了对LTI 系统的零状态响应进行数值仿真的函数lsim ,利用该函数可以求解零初始条件下的微分方程的数值解。
其调用格式为:y=lsim(b,a,f,t),其中t 表示系统响应的时间抽样点向量,f 是系统的输入向量; b 和a 分别为微分方程右端和左端的系数向量,若不带返回参数y ,则直接在屏幕上绘制输入信号x 和响应信号的波形。
例如,对于微分方程)()()()()()()()(0'1''2'''30'1''2'''3t f b t f b t f b f f b t y a t y a t y a t y a +++=+++可以使用32103210[,,,];[,,,]a a a a a b b b b b ==注意,如果微分方程的左端或者右端表达式有缺项,则其向量a 或者b 中对应元素应该为零,不能省略不写。
r=conv(h,e);t=-10:l/a:10;PlOt(I.r);title('零状态响应r(t)'); xlabel('t');ylabel('r');零输入程序及仿真建模当UT系统的输入为零时,其零输入响应为微分方程的其次解(即令微分方程的等号右端为零),其形式为(设特征根均为单根)Mf)=GeR÷Ge网+••••+”'其中PbP2,,∙∙,Pn是特征方程alλn+a2λn-l+∙∙∙+anλ+an=O的根,它们可以用rool(八)语句求得。
各系数IIIy及其各阶导数的初始值来确定。
对此有G+G+•…+G=NOp l C l+p2C2+--+P ll C n=Dy0PFG+〃2”工+•…3Y写成矩阵形式为:PJC+IY1C J+∙∙∙+PJC=D"*PlPi - P nC*-∣C∣t-∣JU-IP∣Pi…P…V为范德蒙矩阵,在matlab的特殊矩阵库中有Vandero以下面式子为例:√(r)+5y(0+4y(r)=2∕(∕)-4∕(r)y(OJ=l,y(OJ=5:MAT1.AB程序:a=input(,输入分母系数a=[al,a2,...]=');n=length(八)-l;YO=inputC输入初始条件向量YO=[yO,DyO,D2yO,.p=roots(八);V=rot90(vander(p));c=V∖Y0';dt=inρut('dt=');te=inpιιt('te-);t=O:dt:te;y=zeros(1,length(t));fork=kny=y÷c(k)*exp(p(k)*t);endplot(t,y);gridon:xlabel(,t');ylabel('y');litle('零输入响应');程序运行结果:用这个通用程序来解一个三阶系统,运行此程序并输入a=[l,5,4]Y0=[l,5]dt=O.Olte=6结果如下列图:依据图可以分析零输入响应,它的起始值与输入函数无关,只与它的初始状态值有关,其起始值等于y(0_)的值。
信号与系统MATLAB仿真——LTI连续系统的时域分析1. 知识回顾(1)经典时域分析⽅法线性时不变(LTI)系统是最常见最有⽤的⼀类系统,描述这类系统的输⼊-输出特性的是常系数线性微分⽅程。
\begin{array}{l} {y^{(n)}}(t) + {a_{n - 1}}{y^{(n - 1)}}(t) + \cdot \cdot \cdot + {a_1}{y^{(1)}}(t) + {a_0}y(t) = \\ {b_m}{f^{(m)}}(t) + {b_{m - 1}}{f^{(m - 1)}}(t) + \cdot \cdot \cdot + {b_1}{f^{(1)}}(t) + {b_0}f(t) \end{array}齐次解:{y^{(n)}}(t) + {a_{n - 1}}{y^{(n - 1)}}(t) + \cdot \cdot \cdot + {a_1}{y^{(1)}}(t) + {a_0}y(t) = 0特征⽅程:{\lambda ^n} + {a_{n - 1}}{\lambda ^{n - 1}} + \cdot \cdot \cdot + {a_1}\lambda + {a_0} = 0均为单根:{y_h}(t) = \sum\limits_{i = 1}^n {{C_i}{e^{{\lambda _i}t}}}有重根(r重根):{y_h}(t) = \sum\limits_{i = 1}^r {{C_i}{t^{i - 1}}{e^{{\lambda _1}t}}}共轭复根({\lambda _{1,2}} = \alpha \pm j\beta ):{e^{\alpha t}}({C_1}\cos \beta t + {C_2}\sin \beta t)r重复根:{e^{\alpha t}}(\sum\limits_{i = 1}^r {{C_{1i}}{t^{i - 1}}} \cos \beta t + \sum\limits_{i = 1}^r {{C_{2i}}{t^{i - 1}}} \sin \beta t)特解:f(t) = {t^m}所有的特征根均不等于0:{y_p}(t) = {P_m}{t^m} + {P_{m - 1}}{t^{m - 1}} + \cdot \cdot \cdot + {P_1}t + {P_0}有r重等于0的特征根:{y_p}(t) = {t^r}[{P_m}{t^m} + {P_{m - 1}}{t^{m - 1}} + \cdot \cdot \cdot + {P_1}t + {P_0}] f(t) = {e^{\alpha t}}:\alpha 不是特征根:{y_p}(t) = P{e^{\alpha t}}\alpha 是特征单根:{y_p}(t) = {P_1}t{e^{\alpha t}} + {P_0}{e^{\alpha t}}\alpha 是r重特征根:{y_p}(t) = ({P_r}{t^r} + {P_{r - 1}}{t^{r - 1}} + \cdot \cdot \cdot + {P_1}t + {P_0}){e^{\alpha t}} f(t) = \cos \beta t或\sin \beta t:所有特征根均不等于 \pm j\beta :{y_p}(t) = {P_1}\cos \beta t + {P_2}\sin \beta t\pm j\beta 是特征单根:{y_p}(t) = t[{P_1}\cos \beta t + {P_2}\sin \beta t]全解:y(t) = {y_h}(t) + {y_p}(t)(2)零输⼊响应与零状态响应y(t) = {y_{zi}}(t) + {y_{zs}}(t)(3)冲激响应和阶跃响应\left\{ \begin{array}{l} \delta (t) = \frac{{{\rm{d}}\varepsilon (t)}}{{{\rm{d}}t}}\\ \varepsilon (t) = \int_{ - \infty }^t {\delta (\tau ){\rm{d}}\tau } \end{array} \right. \left\{ \begin{array}{l} h(t) = \frac{{{\rm{d}}g(t)}}{{{\rm{d}}t}}\\ g(t) = \int_{ - \infty }^t {h(\tau ){\rm{d}}\tau } \end{array} \right.(4)卷积积分y(t) = {f_1}(t) * {f_2}(t) = \int_{ - \infty }^{ + \infty } {{f_1}(\tau ){f_2}(t - } \tau ){\rm{d}}\tau系统的零状态响应:{y_{zs}}(t) = f(t) * h(t)卷积积分的性质:交换律分配率结合律任意函数与单位冲激函数卷积的结果仍是函数本⾝:f(t) * \delta (t) = f(t)2. 利⽤MATLAB求LTI连续系统的响应LTI连续系统以常微分⽅程描述,如果系统的输⼊信号及初始状态已知,便可以求出系统的响应。
信号与系统实验陈述课程名称:信号与系统实验实验项目名称:连续线性时不变系统分析专业班级:姓名:学号:完成时间:年月日一、实验目的1.掌握连续LTI系统的单位冲激响应、单位阶跃响应和任意激励对应响应的求解方法。
2.掌握连续LTI系统的频域分析方法。
3.掌握连续LTI系统的复频域分析方法。
4.掌握连续LTI系统的时域、频域和复频域分析方法的相互转换。
二、实验原理1.连续LTI系统的时域分析(1)连续线性时不变系统的描述设连续线性时不变系统的激励为,响应为,则描述系统的微分方程可暗示为为了在Matlab编程中调用有关函数,我们可以用向量和来暗示该系统,即这里要注意,向量和的元素排列是按微分方程的微分阶次降幂排列,缺项要用0补齐。
(2) 单位冲激响应单位冲激响应是指连续LTI系统在单位冲激信号激励下的零状态响应,因此满足线性常系数微分方程(5.1)及零初始状态,即,依照定义,它也可暗示为对于连续LTI系统,若其输入信号为,冲激响应为,则其零状态响应为可见,能够刻画和表征系统的固有特性,与何种激励无关。
一旦知道了系统的冲激响应,就可求得系统对任何输入信号所发生的零状态响应。
Matlab提供了专门用于求连续系统冲激响应的函数impulse(),该函数还能绘制其时域波形。
(3)单位阶跃响应单位阶跃响应是指连续LTI系统在单位阶跃信号激励下的零状态响应,它可以暗示为Matlab提供了专门用于求连续系统单位阶跃响应的函数step( ),该函数还能绘制其时域波形。
(4)任意激励下的零状态响应已经知道,连续LTI系统可用常系数线性微分方程(5.1)式来描述,Matlab提供的函数lsim( )能对上述微分方程描述的连续LTI系统的响应进行仿真,该函数不但能绘制指定时间范围内的系统响应波形图,而且还能求出系统响应的数值解。
其调用格式有lsim(b,a,x,t)y=lsim(b,a,x,t) :只求出系统的零状态响应的数值解,而不绘制响应曲线需要特别强调的是,Matlab总是把由分子和分母多项式暗示任何系统都当作是因果系统。
一、课程设计题目:基于 MATLAB 的连续时间LTI 系统的时域分析二、基本要求:① 掌握连续时不变信号处理的基本概念、基本理论和基本方法; ② 学会 MATLAB 的使用,掌握 MATLAB 的程序设计方法; ③ 学会用 MATLAB 对信号进行分析和处理;④ 编程实现卷积积分或卷积和,零输入响应,零状态响应; ⑤ 撰写课程设计论文,用信号处理基本理论分析结果。
三、设计方法与步骤:一般的连续时间系统分析有以下几个步骤: ①求解系统的零输入响应; ②求解系统的零状态响应; ③求解系统的全响应; ④分析系统的卷积;⑤画出它们的图形. 下面以具体的微分方程为例说明利用MATLAB 软件分析系统的具体方法.1.连续时间系统的零输入响应描述n 阶线性时不变(LTI )连续系统的微分方程为:已知y 及各阶导数的初始值为y(0),y (1)(0),… y (n-1)(0), 求系统的零输入响应。
建模当LIT 系统的输入为零时,其零输入响应为微分方程的其次解(即令微分方程的等号右端为零),其形式为(设特征根均为单根)其中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 01121111n 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 t p t p t n y t C e C e C e =++⋅⋅⋅⋅+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----++⋅⋅⋅⋅+=1012201111120111n 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 。
以下面式子为例:y(0_)=1,y(0_)=5;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('零输入响应');程序运行结果:用这个通用程序来解一个三阶系统,运行此程序并输入 a=[1,5,4] Y0=[1,5] dt=0.01 te=6结果如下图:根据图可以分析零输入响应,它的起始值与输入函数无关,只与它的初始状态值有关,其起始值等于y(0_)的值。
随着时间的推移,最后零输入响应的值无限的趋近于0。
1211112111n n n n n p p p V p p p ---⋅⋅⋅⎡⎤⎢⎥⋅⋅⋅⎢⎥=⎢⎥⎢⎥⋅⋅⋅⎣⎦[]12n C C C C =⋅⋅⋅1000n C y Dy D y -⎡⎤=⋅⋅⋅⎣⎦''''()5()4()2()4()y t y t y t f t f t ++=-ty零输入响应2.卷积的计算连续时间信号1()f t 和2()f t 的卷积运算可用信号的分段求和来实现,即:1212120()()*()()()lim()()k f t f t f t f t f t d f k f t k ττ∞∞-∞∆→=-∞==-=∆-∆⋅∆∑⎰如果只求当t = n ∆(n 为整数)时f (t )的值f (n ∆) ,则上式可得:1212()()()()[()]k k f n f k f t k f k f n k ∞∞=-∞=-∞∆=∆-∆⋅∆=∆∆-∆∑∑式中的12()[()]k f k f n k ∞=-∞∆∆-∆∑实际上就是连续时间信号1()f t 和2()f t 经等时间间隔 均匀抽样的离散序列1()f k ∆和2()f k ∆的卷积和。
当∆足够小时,()f n ∆就是卷积积分的结果——连续时间信号f (t )的较好数值近似。
建模下面是利用MATLAB 实现连续信号卷积的通用程序conv(),该程序在计算出卷积积分的数值近似的同时,还绘制出f (t )的时域波形图。
应注意,程序中是如何设定f (t )的时间长度。
MATLAB 程序:f1=input('输入函数f1='); f2=input('输入函数f2='); dt=input('dt='); y=conv(f1,f2);plot(dt*([1:length(y)]-1),y);grid on; title('卷积');xlabel('t'); ylabel('f1*f2')程序运行结果: 输入以下数据:f1=sin(3*t) f2=cos(3*t+2) dt=0.01 得出图形如下:卷积tf 1*f 23.连续时间系统零状态响应的数值计算我们知道,LTI 连续系统可用如下所示的线性常系数微分方程来描述,()()0()()NMi j i j i j a yt 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 中的对应元素应为零,不能省略不写,否则出错。
求函数的零状态响应及初始状态'(0)(0)0zs zs y y --==。
输入函数()sin(3*)cos(2*)f t t t =+。
建模先求出系统的冲击响应,写出其特征方程2540λλ++=求出其特征根为p 和p ,及相应的留数r ,r ;则冲击响应为''''()5()4()2()4()y t y t y t f t f t ++=-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,5,4] b=[2,4] dt=0.01 te=6sin(3*)cos(2*)u t t =+得出图形如下:由于初始状态为零,所以零状态的起始值也为零,即h (t )包含了连续系统的固有特性,与系统的输入无关。
只要知道了系统的冲激响应,即可求得系统在不同输入时产生的输出。
因此,求解系统的冲激响应h 对进行连续时间系统的分析具有非常重要的意义冲击函数零状态响应4.连续时间系统的全响应计算上面通过对LTI 系统函数的描述,我们可以得知:如果在系统的初始状态不为零,在激励f (t )的作用下,LTI 系统的响应称为全响应,它是零输入响应和零状态响应之和,即()()()zi zs y t y t y t =+故可先求出零输入响应和零状态响应,再把两者相加,得到全响应。
但简单的相加可能由于零输入与零状态的矩阵不同而不能的出正确的结果,这就需要对矩阵进行截取,使它们的阶数相同。
例如,对于以下方程:初始值为:y(0_)=1,y(0_)=5; 输入函数为:()sin(3*)cos(2*)f t t t =+求它的全响应。
建模先根据零输入响应的求法,得出零输入响应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);end 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); 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)));grid xlabel('t');ylabel('y2');title('零状态响应');''''()5()4()2()4()y t y t y t f t f t ++=-subplot(3,1,3),plot(t,y),gridxlabel('t'); ylabel('y');title('全响应响应');程序运行结果执行程序,取 a=[1,5,4] Y0=[1,5] b=[1,2,4] u=sin(3*t)+cos(2*t) dt=0.01 te=6结果如下图:在零输入响应中任一时刻取值y1,在零状态响应的对应时刻取值y2,再在全响应的对应时刻取值y 。