.
一、课程设计题目:
基于 MATLAB的连续时间LTI系统的时域分析
二、基本要求:
① 掌握连续时不变信号处理的基本概念、基本理论和基本方法; ② 学会 MATLAB 的使用,掌握 MATLAB 的程序设计方法; ③ 学会用 MATLAB 对信号进行分析和处理;
④ 编程实现卷积积分或卷积和,零输入响应,零状态响应; ⑤ 撰写课程设计论文,用信号处理基本理论分析结果。
三、设计方法与步骤:
一般的连续时间系统分析有以下几个步骤: ①求解系统的零输入响应; ②求解系统的零状态响应; ③求解系统的全响应; ④分析系统的卷积;⑤画出它们的图形. 下面以具体的微分方程为例说明利用MATLAB 软件分析系统的具体方法.
1.连续时间系统的零输入响应
描述n阶线性时不变(LTI)连续系统的微分方程为:
dnydn?1ydydmudua1n?a2n?1???????an?an?1y?b1m??????bm?bm?1u
dtdtdtdt dt(1)(n-1)
已知y及各阶导数的初始值为y(0),y(0),… y(0), 求系统的零输入响应。 建模
当LIT系统的输入为零时,其零输入响应为微分方程的其次解(即令微分方程的等号右端为零),其形式为(设特征根均为单根)
pntp1tp2t
y(t)?Ce?Ce??????Ce12n
其中p1,p2,…,pn是特征方程a1λn+a2λn-1+…+anλ+an=0的根,它们可以用root(a)语句求得。各系数 由y及其各阶导数的初始值来确定。对此有 C??????C?yC1?2n0
p1C1?p2C2??????pnCn?Dy0………………………………………………………………………………………
pn?1C?pn?1C??????pn?1C?Dn?1y122nn0 1写成矩阵形式为: P1C1+ P2C2+…+ PnCn=Dy0
n-1
n-1
n-1
n-1
.
.
?1?p?1??n?1?p11p2??????p2n?1???1??C1??y0??C??Dy?pn?0???2?????????????pnn?1??Cn??Dn?1y0?
即 V?C=Y0 其解为:C=V\\Y0 式中 C?CC???CnC??y0Dy0???12?
1???1??1
?p?p???p 12n?V????
?n?1n?1n?1? pp???p2n?1?
V为范德蒙矩阵,在matlab的特殊矩阵库中有vander。
以下面式子为例:
y'' (t)?5y'(t)?4y(t)?2f'(t)?4f(t)??Dn?1y0??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);grid
xlabel('t') ;ylabel('y'); title('零输入响应');
程序运行结果:
用这个通用程序来解一个三阶系统,运行此程序并输入 a=[1,5,4] Y0=[1,5] dt=0.01 te=6
结果如下图:根据图可以分析零输入响应,它的起始值与输入函数无关,只与它的初始状态值有关,其起始值等于y(0_)的值。随着时间的推移,最后零输入响应的值无限的趋近于0。
.
.
零输入响应1.81.61.41.21y0.80.60.40.200123t456
2.卷积的计算
连续时间信号f1(t)和f2(t)的卷积运算可用信号的分段求和来实现,即:
f(t)?f1(t)*f2(t)?????f1(t)f2(t??)d??lim??0k?????f1(k?)f2(t?k?)??
如果只求当t ??n?(n为整数)时f (t)的值f (n?) ,则上式可得:
f(n?)?式中的
?k?????f1(k?)f2(t?k?)?????f1(k?)f2[(n?k)?]
k????k????f1(k?)f2[(n??k)?] 实际上就是连续时间信号f1(t)和f2(t)经等时间间
隔 均匀抽样的离散序列f1(?k)和f2(?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')
.