《信号与系统》实验指导书 下载本文

实验6 连续时间LTI系统的时域分析

1. 实验目的

学会运用MATLAB符号求解连续系统的零输入响应和零状态响应;学会运用MATLAB数值求解连续系统的零状态响应;学会运用MATLAB求解连续系统的冲激响应和阶跃响应;思考运用MATLAB卷积积分法求解系统的零状态响应。

3 实验原理和实例分析

2.1 连续时间系统零输入响应和零状态响应的符号求解

LTI连续系统可用线性常系数微分方程来描述,即:

?ayii?0N(i)(t)??bjf(j)(t)

j?0M其中,ai(i?0,1,?,N)和bi(i?0,1,?,M)为实常数。该系统的完全响应由零输入响应yzi(t)和零状态响应yzs(t)两部分组成。

MATLAB符号工具箱提供了dsolve函数,可实现常系数微分方程的符号求解,其调用格式为:

dsolve('eq1,eq2,…','cond1,cond2,…','v')

其中,参数eq1,eq2…表示各微分方程,它与MATLAB符号表达式的输入基本相同,微分或导数的输入是用Dy,D2y,D3y,…来分别表示y的一阶导数,y的二阶导数,y的三阶导数…;参数cond1,cond2,…表示个初始条件或起始条件;参数v表示自变量,默认为变量t。可利用dsolve函数来求解系统微分方程的零输入响应和零状态响应,进而求出完全响应。

例1 试用MATLAB命令求齐次微分方程y'''(t)?2y''(t)?y'(t)?0的零输入响应,已知起始条件为y(0?)?1,y'(0?)?1,y''(0?)?2。 解:MATLAB源程序为: clear;clc;

eq = 'D3y+2*D2y+Dy=0';

cond = 'y(0)=1,Dy(0)=1,D2y(0)=2';

30

ans = dsolve(eq,cond); simplify(ans)

得到结果:

ans = 5-4*exp(-t)-3*exp(-t)*t,即零输入响应yzi(t)?5?4e?t?3te?t,t?0

在求解该微分方程的零输入响应过程中,0?到0?是没有跳变的,因此,程序

中初始条件选择t=0时刻,即cond = 'y(0)=1,Dy(0)=1,D2y(0)=2'。 例2 已知输入x(t)?u(t),试用MATLAB命令求解微分方程

y'''(t)?4y''(t)?8y'(t)?3x'(t)?8x(t)的零状态响应。

解:依题意,可理解为求解给定的两个方程,即

?y'''(t)?4y''(t)?8y'(t)?3x'(t)?8x(t) ??x(t)?u(t)其MATLAB源程序为:

clear;clc;

eq1 = 'D3y+4*D2y+8*Dy=3*Dx+8*x'; eq2 = 'x=Heaviside(t)';

cond = 'y(-0.01)=0,Dy(-0.01)=0,D2y(-0.01)=0'; ans = dsolve(eq1,eq2,cond); simplify(ans.y)

ans =

1/8*heaviside(t)*(exp(-2*t)*cos(2*t)-3*exp(-2*t)*sin(2*t)-1+8*t)

试用dsolve求解零状态响应和零输入响应时,起始条件的时刻是不同的,不

能选择t=0时刻,程序中选择了t=-0.01时刻。如果用

cond = 'y(0)=0,Dy(0)=0,D2y(0)=0'定义初始条件,则实际上是定义了初始条件

y(0?)?0,y'(0?)?0,y''(0?)?0,因此,得出错误的结论。还须注意,本例中dsolve的解答是x(t)和y(t),必须用ans.y 取出y(t)。

例3 试用MATLAB命令求解微分方程y''(t)?3y'(t)?2y(t)?x'(t)?3x(t),当输入

x(t)?e?3tu(t),起始条件为y(0?)?1,y'(0?)?2时系统的零输入响应,零状态响应及完全响应。

解:求得零输入和零状态响应后,完全响应则为二者之和。MATLAB源程序为:

31

clear;clc;

eq = 'D2y+3*Dy+2*y=0'; cond = 'y(0)=1,Dy(0)=2'; yzi = dsolve(eq,cond); yzi = simplify(yzi)

可得解为:

零输入响应 yzi = -3*exp(-2*t)+4*exp(-t)

eq1 = 'D2y+3*Dy+2*y=Dx+3*x'; eq2 = 'x=exp(-3*t)*Heaviside(t)'; cond = 'y(-0.001)=0,Dy(-0.001)=0'; yzs = dsolve(eq1,eq2,cond); yzs = simplify(yzs.y)

yt = simplify(yzi+yzs)

零状态响应 yzs = heaviside(t)*(-exp(-2*t)+exp(-t))

全响应 yt = -3*exp(-2*t)+4*exp(-t)-exp(-2*t)*heaviside(t)+exp(-t)*heaviside(t)

可以利用ezplot命令汇出它们的波形,以便观察。程序段如下:

subplot(311)

ezplot(yzi,[0,8]);grid on title('零输入响应'); subplot(312)

ezplot(yzs,[0,8]);grid on title('零状态响应'); subplot(313)

ezplot(yt,[0,8]);grid on title('完全响应');

图1 例3系统的响应

2.2 连续时间系统零状态响应的数值求解

前面叙述了符号求解系统微分方程的方法,实际工程中用得较多的方法是数值求解微分方程。下面主要讨论零状态响应的求解。而零输入响应的数值求解可通过函数initial来实现,initial函数中的参量必须是状态变量所描述的系统模型,此处不做说明讲解。对于零状态响应,MATLAB控制系统工具箱提供了对LTI系统的零状态响应进行数值仿真的函数lsim,该函数可求解零初始条件下微分方程的数值解,语句格式为:

y=lsim(sys,f,t)

其中,t表示计算系统响应的时间抽样点向量;f是系统的输入信号向量;sys表

32

示LTI系统模型,用来表示微分方程、差分方程或者状态方程。在求微分方程时,sys是由MATLAB的tf函数根据微分方程系数生成的系统函数对象,其语句格式为:

sys = tf(b,a)

其中,b和a分别为微分方程右端和左端的系数向量。例如,对于微分方程

a3y'''(t)?a2y''(t)?a1y'(t)?a0y(t)?b3f'''(t)?b2f''(t)?b1f'(t)?b0f(t)

可用a?[a3,a2,a1,a0];b?[b3,b2,b1,b0];sys?tf(b,a)获得其LTI模型。注意,如果微分方程的左端或右端表达式中有缺项,则其向量a或者b中对应的元素应为0,不能省略不写,否则会出错。 例4 已知某LTI系统的微分方程为

y''(t)?5y'(t)?6y(t)?6f(t)

其中,f(t)?10sin(2?t)u(t)。试用MATLAB命令绘出0?t?5范围内系统零状态响应y(t)的波形图。 解:MATLAB源程序为:

clear;clc;

ts = 0; te =5; dt = 0.01; sys = tf([6],[1,5,6]); t = ts:dt:te;

f = 10*sin(2*pi*t).*uCT(t); y = lsim(sys,f,t); plot(t,y),grid on

xlabel('Time(sec)'), ylabel('y(t)') title('零状态响应')

图2 例4系统的零状态响应

例5 试用MATLAB数值求解方法求例3中系统的零状态响应。 解:MATLAB源程序为: clear;clc;

ts = 0; te =8; dt = 0.01; sys = tf([1,3],[1,3,2]); t = ts:dt:te;

f = exp(-3*t).*uCT(t);

33

y = lsim(sys,f,t); plot(t,y),grid on

axis([0 8 -0.02 0.27])

xlabel('Time(sec)'), ylabel('y(t)') title('零状态响应')