一、实验目的
1. 学会用MATLAB求解连续系统的零状态响应;
2.学会用MATLAB求解冲激响应及阶跃响应;
3. 学会用MATLAB实现连续信号卷积的方法;
二、实验原理
1.连续时间系统零状态响应的数值计算
我们知道,LTI连续系统可用如下所示的线性常系数微分方程来描述,
在MATLAB中,控制系统工具箱提供了一个用于求解零初始条件微分方程数值解的函数lsim。其调用格式为:
y=lsim(sys,f,t)
式中,t表示计算系统响应的抽样点向量,f是系统输入信号向量,sys是LTI系统模型,用来表示微分方程,差分方程或状态方程。其调用格式为:
sys=tf(b,a)
式中,b和a分别是微分方程的右端和左端系数向量。例如,对于以下方程:
可用a=[a,a,a,a];b=b,b,b,b]; sys=f(b,a)获得其LTI模型。
注意,如果微分方程的左端或右端表达式中有缺项,则其向量a或b中的对应元素应为零,不能省略不写,否则出错。
例3-1 已知某LTI系统的微分方程为
其中,,求系统的输出
。
解:显然,这是一个求系统零状态响应的问题。其MATLAB计算程序如下:
ts=0;te=5;dt=0.01;
sys=tf([1],[1,2,100]);
t=ts:dt:te;
f=10*sin(2*pi*t);
y=lsim(sys,f,0);
plot(t,y);
xlabel('Time(sec)');
ylabel('y(t)');
2.连续时间系统冲激响应和阶跃响应的求解
在MATLAB中,对于连续LTI系统的冲激响应和阶跃响应,可分别用控制系统工具箱提供的函数impluse和step来求解。其调用格式为
y=impulse(sys,t)
y=step(sys,t)
式中,t表示计算系统响应的抽样点向量,sys是LTI系统模型。
例3-2已知某LTI系统的微分方程为
求系统的冲激响应和阶跃响应的波形.
解:
ts=0;te=5;dt=0.01;
sys=tf([10],[1,2,100]);
t=ts:dt:te;
h=impulse(sys,t);
figure;
plot(t,h);
xlabel('Time(sec)');
ylabel('h(t)');
g-step(sys,t);
figure;
plot(t.g);
xlabel('Time(sec)');
ylabel('g(t)');
3.用MATLAB实现连续时间信号的卷积
信号的卷积运算有符号算法和数值算法,此处采用数值计算法,需调用MATLAB的conv()函数近似计算信号的卷积积分。连续信号的卷积积分定义是
如果对连续信号和
进行等时间间隔△均匀抽样,则
和
分别变为离散时间信号
和
。其中,m为整数。当Δ足够小时,
和
既
为连续时间信号和
。因此连续时间信号卷积积分可表示为
采用数值计算时,只求当时卷积积分
的值
,其中,n为整数,既
其中,实际就是离散序列
和
的卷积和。当
足
够小时,序列就是连续信号
的数值近似,既
上式表明,连续信号 和
的卷积,可用各自抽样后的离散时间序列的卷积再乘以抽样间隔
。抽样间隔
越小,误差越小。
例3-3用数值计算法求与
的卷积积分。
解:因为是一个持续时间无限长的信号,而计算机数值计算不可能计算真正的无限长信号,所以在进行
的抽样离散化时,所取的时间范围让
衰减到足够小就可以了,本例取t=2.5。程序是
dt=0.01;t=-1:dt:2.5;
fl=Heaviside(t)-Heaviside(t-2);
f2=exp(-3*t).*Heaviside(t);
f=conv(f1,f2)*dt;n=length(f);tt=(0:n-1)*dt-2;
subplot(221), plot(t,f1),grid on;
axis([-1,2.5,0.2,1.2]); titde('f1(t)'); xlabel('t')
subplot(222), plot(t,f2),grid on;
axis([-1,2.5,0.2,1.2]); title('f2(t)'); xlabel('t')
subplot(212), plot(tt,f), grid on;
title('f(t)=f1(t)*f2(t)');xlabel('t')
由于和
的时间范围都是从t=-1开始,所以卷积结果的时间范围从t=-2开始,增量还是取样间隔,这就是语句tt=(0:n-1)*dt-2的由来。
三,上机实验
1.验证上述实验内容
2.已知描述系统的微分方程和激励信号f(t)如下,试用解析法求系统的零状态响应y(t),并用MATLAB绘出系统零状态响应的时域仿真波形,验证结果是否相同
clear
ys=dsolve('D2y+4*Dy+4*y=0','y(0)=1,Dy(0)=1');%求零输入响应
anns=dsolve('D2y+4*Dy+4*y=Df+3*f','f=exp(-t)*heaviside(t)','y(-0.001)=0,Dy(-0.001)=0');% heaviside(t)表示单位阶跃信号
yt=simplify(anns.y)%求零状态响应,ans为结构体,ans.y为零状态响应
yq = simplify(ys+yt);%求全响应
a=[1 4 4];b=[0 1 3];
sys=tf(b,a);
t=0:0.01:5;%求t在0到5之间时对应的响应值
f=exp(-t).*(t>=0);
c=lsim(sys,f,t); %零状态响应的波形
plot(t,c);
xlabel('Time(sec)');
ylabel('y(t)');
title('零状态响应')
3.已知描述系统的微分方程如下,试用MATLAB求系统在0~10秒范围内冲激响应和阶跃响应的数值解,并用绘出系统冲激响应和阶跃响应的时域波形
ts=0;te=10;dt=0.5;
a=[1,3,2];
b=[0 0 1];
sys=tf(b,a);
t=ts:dt:te;
y1=impulse(sys,t)%(1)冲激响应数值
subplot(211)
plot(t,y1);
xlabel('Time(sec)');
ylabel('h(t)1');title('(1)冲激响应')
y2=step(sys,t)%(1)阶跃响应数值解
subplot(212)
plot(t,y2);
xlabel('Time(sec)');
ylabel('g(t1)');title('(1)阶跃响应')
%. 3.2已知描述系统的微分方程如下,试用MATLAB求系统在0-10秒范围内冲激响应和阶跃响应的数值解,
%并用绘出系统冲激响应和阶跃响应的时域波形
%y"(t)+2y'(t)+2y(t)=f'(t)(2)
c=[1,2,2];
d=[0 1 0];
ts=0;te=10;dt=0.5;
sys=tf(d,c);
t=ts:dt:te;
y3=impulse(sys,t)%(2)冲激响应数值
%figure(1);
subplot(211)
plot(t,y3);
xlabel('Time(sec)');
ylabel('h(t)2');title('(2)冲激响应')
y4=step(sys,t);%(2)阶跃响应数值解
%figure(2);
subplot(212)
plot(t,y4);
xlabel('Time(sec)');
ylabel('g(t)2');title('(2)阶跃响应')