210 likes | 458 Views
信号与系统实验二. 连续时间系统的时域分析. 主要内容. 2.1 信号的卷积 2 .2 信号的冲激响应、阶跃响应、零状态响应和零输入响应. 2.1 信号的卷积. MATLAB的内部函数conv()可以完成两个信号的卷积积分运算。语法为: y = conv(x,h) 其中x和h分别是两个作卷积运算的信号,y为卷积结果。 x = [1 2 3 4]; h = [4 3 2 1]; y=conv(x,h) 注意:
E N D
信号与系统实验二 连续时间系统的时域分析
主要内容 2.1 信号的卷积 2.2 信号的冲激响应、阶跃响应、零状态响应和零输入响应
2.1 信号的卷积 MATLAB的内部函数conv()可以完成两个信号的卷积积分运算。语法为: y = conv(x,h) 其中x和h分别是两个作卷积运算的信号,y为卷积结果。 x = [1 2 3 4]; h = [4 3 2 1]; y=conv(x,h) 注意: 1) 在进行卷积时,conv函数实际上对两个离散信号进行卷积,而不是连续信号; 2) 系统默认卷积信号的值域从1开始,上例中,Matlab认为x(1)=1,h(1)=4。但通常卷积信号两个信号值域是任意的,不一定从1开始,因此实现连续信号的卷积运算需要做一些改动。
例如,对于定义在不同时间段的两个时限信号 x(t),t0 ≤ t ≤ t1 h(t),t2 ≤ t ≤ t3 卷积结果y(t)的持续时间范围为t0+t2 ≤ t ≤ t1+t3 根据这个特点,编制新的卷积程序sconv(),以便实现任意信号的卷积运算。函数如下:
function [f,k]=sconv(f1,f2,k1,k2,p) % 计算连续信号卷积积分f(t)=f1(t)*f2(t) % f:卷积积分f(t)对应的非零值向量 % k:f(t)的对应时间向量 % f1,f2:f1(t),f2(t)的非零样值向量 % k1,k2:f1(t),f2(t)的对应时间向量 % p:取样时间间隔 f=conv(f1,f2); %计算序列f1,f2的卷积和f f=f*p; k0=k1(1)+k2(1); %计算序列f非零样值的起点位置 k3=length(f1)+length(f2)-2; %计算卷积和f的非零样值的宽度 k=k0:p:k0+k3*p; %确定卷积和f非零样值的时间向量 subplot(2,2,1); plot(k1,f1); title('f1(t)'); xlabel('t'); ylabel('f1(t)'); subplot(2,2,2); plot(k2,f2); title('f2(t)'); xlabel('t'); ylabel('f2(t)'); subplot(2,2,3); plot(k,f); %画出卷积f(t)的波形 title('f(t)=f1(t)*f2(t))'); xlabel('t'); ylabel('f(t)'); h=get(gca,'position'); h(3)=2.5*h(3); set(gca,'position',h) %将第三个子图的横坐标扩展为原来的2.5倍
例1:已知 f1(t) = e-t[(t) - (t-2)]、 f2(t) = (t) - (t-3),编制m文件,绘出f1(t)、f2(t)和f(t) = f1(t)* f2(t)的波形。 解:程序如下 p=0.01; k1=0:p:2; f1=exp(-k1); k2=0:p:3; f2= heaviside(k2)-heaviside(k2-4 ); [f,k]=sconv(f1,f2,k1,k2,p);
2.2信号冲激响应、阶跃响应、零状态响应和零输入响应2.2信号冲激响应、阶跃响应、零状态响应和零输入响应 MATLAB的内部函数dsolve,impulse,step,lsim可以方便地用来计算并绘制连续时间LTI系统的单位冲激响应,单位阶跃响应,零输入响应和任意信号作用于系统的零状态响应。以下分别给予介绍。
一、dsolve函数 连续时间系统可以使用常系数微分方程来描述,其完全响应由零输入响应和零状态响应组成。MATLAB符号工具箱提供了dsolve函数,可以实现对常系数微分方程的符号求解,其调用格式为: dsolve(‘eq1,eq2…’,’cond1,cond2,…’,’v’) 其中参数eq表示各个微分方程,它与MATLAB符号表达式的输入基本相同,导数的输入是使用Dy,D2y,D3y来表示y的一价导数,二阶导数,三阶导数;cond表示初始条件;v表示自变量,默认是变量t。 使用dslove函数可以求出系统微分方程的零输入响应和零状态响应,进而求出完全响应。
求零输入响应 例2:求齐次微分方程y’’’(t)+2y’’(t)+y’(t)=0的零输入响应,起始条件为y(0-)=1,y’(0-)=1,y’’(0-)=2 解:程序如下 eq = 'D3y+2*D2y+Dy=0'; cond = 'y(0)=1,Dy(0)=1,D2y(0)=2'; yzi = dsolve(eq,cond) ezplot(yzi)
求零状态响应 例3:已知输入x(t)=(t),求齐次微分方程y’’’(t)+4y’’(t)+8y’(t)=3x’(t)+8x(t)的零状态响应 解:根据题意,理解为求解两个方程 y’’’(t)+4y’’(t)+8y’(t)=3x’(t)+8x(t)和x(t)=(t) 程序如下: 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'; yzs = dsolve(eq1,eq2,cond) ezplot(yzs.y)
求全响应 例4:已知齐次微分方程y’’(t)+3y’(t)+2y(t)=x’(t)+3x(t),当输入为x(t)=e-3t(t),起始条件为y(0-)=1,y’(0-)=2时系统的零输入响应、零状态响应以及完全响应 解:先求零输入响应,程序如下: %零输入响应 eq = 'D2y+3*Dy+2*y=0'; cond = 'y(0)=1,Dy(0)=2'; yzi = dsolve(eq,cond) subplot(3,1,1),ezplot(yzi,[0 8]) %零状态响应 eq1 = 'D2y+3*Dy+2*y=Dx+3*x'; eq2 = 'x=exp(-3*t)*heaviside(t)'; cond = 'y(-0.01)=0,Dy(-0.01)=0'; yzs = dsolve(eq1,eq2,cond) subplot(3,1,2),ezplot(yzs.y,[0 8]) %全响应 yall = yzi + yzs.y subplot(3,1,3),ezplot(yall,[0 8])
二、lsim函数 对于零状态响应,MATLAB提供了对LTI系统的零状态响应进行数值仿真的函数lsim,可以求解零初始条件下的微分方程的数值求解。其调用格式为: y=lsim(sys,f,t) t表示系统响应的时间抽样点向量,f是系统的输入向量;sys表示LTI系统模型,用来表示微分方程、差分方程或状态方程。在求解微分方程时,sys是由tf函数根据微分方程系数生成的系统函数对象,其语句格式为:sys=tf(a,b)。其中,a和b分别为微分方程右端和左端的系数向量。
对于如下微分方程 可以使用 获得其LTI模型。 注意:如果微分方程的左端或者右端表达式有缺项,则其向量a或者b中对应元素应该为零,不能省略不写。
例,某LTI系统的微分方程为y’’(t)+5y’(t)+6y(t)=6x(t),其中x(t)=10sin(2t)(t)。求出0~5范围内的零状态响应。例,某LTI系统的微分方程为y’’(t)+5y’(t)+6y(t)=6x(t),其中x(t)=10sin(2t)(t)。求出0~5范围内的零状态响应。 解:程序为: ts = 0; te = 5; dt= 0.01; a = [1,5,6]; b=[6]; sys = tf(b,a); t = ts:dt:te; f = 10*sin(2*pi*t).*heaviside(t); y = lsim(sys,f,t); plot(t,y),grid on xlabel('Time(秒)'),ylabel('y(t)'); title('零状态响应');
三、impulse函数 函数impulse()将绘出由向量a和b表示的连续系统在指定时间内的冲激响应h(t)的时域波形图,并能求出指定时间范围内冲激响应的数值解。impulse() 函数有如下几种调用格式: 1. impulse(b,a) 该调用格式以默认方式绘出向量a和b定义的连续系统的冲激响应的时域波形。例如,对于微分方程 y’’(t)+3y(t)+2y(t)=f’’(t)+f(t), 可运行如下命令: a=[1 3 2]; b=[1 0 1]; impulse(b,a);
2. impulse(b,a,t) 该调用格式绘出向量a和b定义的连续系统在0~t时间范围内冲激响应的时域波形。对上例的微分方程y’’(t)+3y’(t)+2y(t)=f’’(t)+f(t) ,运行如下命令: impulse(b,a,10) 则绘出系统在0~10秒范围内冲激响应的时域波形。
3. impulse(b,a,t1:p:t2) 该调用格式绘出向量a和b定义的连续系统在t1~t2时间范围内,且以时间间隔p均匀取样 的冲激响应的时域波形。对上例,运行如下命令: impulse(b,a,1:0.1:2) 则绘出系统在1~2秒范围内, 且以时间间隔0.1秒均匀取样的冲激响应的时域波形。
4. y=impulse(b,a,t1:p:t2) 该调用格式并不绘出系统的冲激响应波形,而是求出向量a和b定义的连续系统在t1~t2时间范围内,且以时间间隔p均匀取样的冲激响应的数值解。例如,求时间0~2范围内的冲激响应如下: y=impulse(b,a,0:0.2:2)
四、step函数 函数step()将绘出由向量a和b定义的连续系统的阶跃响应g(t)在指定时间范围内的波形图,并能求出其数值解。和step()函数一样, step()函数也有四种调用格式: step(b,a) step(b,a,t) step(b,a,t1:p:t2) y=step(b,a,t1:p:t2) 上述调用格式的功能与impulse()函数完全相同。
例, LTI系统的微分方程为y’’(t)+2y’(t)+32y(t)=x’(t)+16x(t),绘出0~4范围内的冲激响应和阶跃响应。 t=0:0.001:4; sys=tf([1,16],[1,2,32]); h=impulse(sys,t); g=step(sys,t); subplot(2,1,1) plot(t,h) xlabel(‘Time(秒)'),ylabel('y(t)'); title('冲激响应'); subplot(2,1,2) plot(t,g) xlabel('Time(秒)'),ylabel('g(t)'); title('阶跃响应');
作业 1. 求以下两个函数的卷积 2. 已知系统的微分方程和激励信号,使用MATLAB命令画出系统的零输入响应和零状态响应 3. 已知系统的微分方程,使用MATLAB命令画出系统的冲激响应和阶跃响应