Matlab在信号与系统课程教学中的应用研究

作者: 和二斌 马庆修 张文杰

摘要:在信号与系统课程的教学过程中,应用Matlab能够有效地处理教学中的各种问题。Matlab软件直观生动的图形显示功能和强大的计算能力可以将抽象的问题以图形的方式展现出来并减轻复杂的计算过程,有助于抓住问题的数学本质,激发学生对课程的学习兴趣,在信号与系统的教学过程中发挥着重要的作用。文章依据现有教材中的课后习题,通过建立所研究系统的数学模型,利用Matlab强大的数学计算能力,探讨连续时间系统零状态响应不同求解方法的特点,提高学生对相关知识领域的认识和解决实际问题的能力。

关键词:Matlab;信号与系统;时域分析;频域分析;零状态响应

中图分类号:TP391.9      文献标识码:A

文章编号:1009-3044(2024)08-0138-05

开放科学(资源服务)标识码(OSID)

0 引言

信号与系统是电子信息及通信类专业的一门重要专业基础课,是进一步学习专业核心课程的重要先修课程。该课程的主要任务是培养学生的抽象思维能力,提高学生分析问题、解决问题的能力,为进一步研究控制理论、通信理论、信号检测和信号处理等内容奠定必要的基础。该课程的学习需要深厚的数学知识,并要求深刻理解其中蕴含的信号概念和原理来解决实际的问题,这些都给课程的教学带来了一定的困难。

如何积极有效地开展信号与系统课程教学是目前任课教师需要面对的一个问题。传统的教学方式主要依靠课堂讲授,课后做大量习题的方法来巩固教学内容,虽然学生能够掌握一些计算方法,但是冗繁的计算过程阻碍了学生学习的热情,很难在数学理论、信号概念和工程应用之间建立紧密的关联[1-3]。信号与系统课程内容繁多而教学时间有限,教学内容应该适当弱化冗繁的计算过程,强化数学方法与应用的紧密联系[4]。此外,在对系统响应的求解过程中,只有少数简单问题才有解析解,多数问题求解需要采用数值计算方法,限制了学生探索课程实际应用价值的积极性。因此,在教学过程中通过选择能够涵盖多个关键知识点的经典例题进行仿真,不仅能够避免繁杂的计算过程,还可以加深学生对多个方法概念之间关联性的理解,取得事半功倍的效果。

随着Matlab在课堂教学中的广泛应用,其强大的计算能力和图像显示功能增强了学生对信号与系统课程的认识,极大地扩展了学生学习的主动性和积极性,提高了教学质量[5-11]。在该课程的教学过程中,求解线性时不变连续时间系统的零状态响应是课程中的重要部分,零状态响应指系统的初始状态为零,系统的响应完全由激励信号产生的响应,在教材中涉及多种零状态响应的求解方法,这些不同的求解方法在求解零状态响应方面的特点是需要深刻认识的一个问题。文章利用Matlab在不同的计算方法下求解系统的零状态响应,能够直观地展示不同方法所具有的特点,深化学生对不同求解方法的认识,提高学生应用这些方法解决实际问题的能力。

1 系统数学模型的建立

本文以北京交通大学陈后金教授主编教材《信号与系统》(第三版,清华大学出版社)第114页习题M3-10为例[12],题干如下(略改动):如图 1所示,双弹簧振子力学系统中振子质量为m=1 kg ,弹簧的弹性系数分别为ks1=2 N/m和ks2=4 N/m,物体与地面的摩擦系数为fd=5 N·s/m,物体m在外力f(t)=cos(t)的作用下位移为y(t),系统的初始状态为零,写出系统的微分方程并计算系统的零状态响应y(t)。

在该系统中,除外力f(t)外,还有三种类型的力影响物体的运动,分别是物体与地面的摩擦力、弹簧产生的恢复力和运动物体的惯性力,系统中的四种力是平衡的,振子运动微分方程的一般形式可表示为公式(1):

[md2(y)dt2+fddy(t)dt+(ks1+ks2)y(t)=f(t)] (1)

将相关参数带入式(1)后,可得该力学系统的数学模型为公式(2):

[d2(y)dt2+5dy(t)dt+6y(t)=cos(t)] (2)

由该微分方程可知,该力学系统为二阶连续线性时不变系统,f(t)为输入激励信号,y(t)为系统在激励信号f(t)作用下的零状态响应。针对上述例题的Matlab仿真求解可以采用多种方法,以下将分别对不同的求解方法的特点进行分析。

2 系统零状态响应的时域求解

2.1 零状态响应的符号解

微分方程的符号解又称为解析解,是指能够用一个含有符号变量的解析式精确表示的解,相对于数值解有更高的精度。线性时不变系统的数学模型是一个线性常系数微分方程,根据微分方程的一般理论,该类方程总是有符号解。本例题所描述系统零状态响应符号解的Matlab源代码及图像如图 2所示:

clc; clear;clf;

syms t y;

yt=dsolve('1*D2y+5*Dy+6*y=cos(t)','y(0)=0,Dy(0)=0');

figure(1)

ft=cos(t);

subplot(1,2,1)

h1=ezplot(t,ft,[0 8*pi]);

axis([0 8*pi -1.2 1.2]);axis square;grid on

text(0.3,1.1,'(a)','fontsize',15)

set(gca,'xtick',[0 2*pi 4*pi 6*pi 8*pi],'ytick',[-1 -0.5  0 0.5 1])

set(gca,'xticklabels',{'0','2\pi','4\pi','6\pi','8\pi'});

set(gca,'fontsize',20,'FontName','Times New Roman');

set(h1,'color','k','linewidth',2)

xlabel('Time(s)');ylabel('\itf(t)');delete(get(gca,'title'))

subplot(1,2,2)

h2=ezplot(yt,[0 8*pi]);

axis([0 8*pi -0.15 0.15]);axis square;grid on

text(0.3,0.135,'(b)','fontsize',15)

set(gca,'xtick',[0 2*pi 4*pi 6*pi 8*pi],'ytick',[-0.15 -0.1 -0.05 0 0.05 0.1 0.15]);

set(gca,'xticklabels',{'0','2\pi','4\pi','6\pi','8\pi'});

set(gca,'fontsize',20,'FontName','Times New Roman');

set(h2,'color','k','linewidth',2)

xlabel('Time(s)');ylabel('\ity(\itt)');delete(get(gca,'title'))

从图 2可以直观地看出,系统在周期激励信号f(t)=cos(t)的作用下(图 2 (a)),系统的输出很快进入一个稳定震荡的状态(图 2 (b))。系统的响应可以分解为暂态响应和稳态响应,暂态响应随着时间的增加而衰减趋于零,稳态响应不随着时间的增加而衰减趋于零。在零状态响应的符号解中,可以根据解的函数形式确定系统输出的暂态响应和稳态响应(图 2 (c))。如在本题中,系统响应符号解的形式为公式(3), 通过输出的形式可以确定暂态响应为公式(4),稳态响应为公式(5)。在采用符号法求解系统的零状态响应具有一定的局限性,若描述系统的微分方程中激励信号较复杂,则难以求出其解析解。

[y=310e-3t-25e-2t+210cost-π4] (3)

[yt=310e-3t-25e-2t] (4)

[ys=210cost-π4] (5)

2.2 lsim函数求解系统的零状态响应

在系统的激励信号较复杂的情况下,通常采用数值方法求出系统对激励信号的响应。lsim函数能够模拟动态系统对任意输入零状态响应的数值解,其调用格式为y=lsim(b,a,f,t),式中,b和a为微分方程右端和左端各项的系数向量,f为系统输入信号向量,t表示计算系统响应的抽样点向量,该函数的使用可以不受信号形式的约束,即信号不能用解析式表达的情况下可以使用该函数。使用lsim函数求解零状态响应数值解的Matlab源代码及图像如图 3所示:

a=[1 5 6]; b=1; ts=0;dt=0.001; te=8*pi;

t=ts:dt:te; ft2=cos(t);

yt2=lsim(b,a,ft2,t);

figure(2)

subplot(1,2,1)

plot(t,yt2,'k-','linewidth',1.0)

axis([0 8*pi -0.15 0.15]);axis square;grid on

text(0.3,0.13,'(a)','fontsize',15)

set(gca,'xtick',[0 2*pi 4*pi 6*pi 8*pi]);

set(gca,'xticklabels',{'0','2\pi','4\pi','6\pi','8\pi'});

set(gca,'fontsize',20,'fontname','times new roman');

xlabel('Time(t)'),ylabel('\ity(\itt)');axis square;

as=eval(yt);

subplot(1,2,2)

plot(t,abs(as-yt2'),'k-','linewidth',1.0)

axis([0 8*pi 0 1.5e-8]);axis square;grid on

text(0.3,1.40e-8,'(b)','fontsize',15)

set(gca,'xtick', [0 2*pi 4*pi 6*pi 8*pi],'fontsize',20,'fontname','times new roman');

set(gca,'xticklabels',{'0','2\pi','4\pi','6\pi','8\pi'});

xlabel('Time(t)'),ylabel('|\Deltay(\itt)|');

图 3(a)表示系统零状态响应的数值解,其精度低于解析解,图 3(b)表示两种求解方法差的绝对值,由图可知计算误差非常小。通过数值计算的方法可以求出任意激励信号的输出,但是不能区分信号中的暂态响应和稳态响应。

2.3 零状态响应的卷积求解

连续系统的零状态响应还可以通过输入信号与系统冲激响应的卷积积分进行计算[13]。首先使用impulse函数计算系统的单位冲激响应的数值解向量(图 4 (a)) ,再使用输入信号向量与冲激响应向量进行卷积,求出系统的零状态响应(图 4 (b)) 。使用卷积方法求解零状态响应的Matlab源代码如下:

上一篇 点击页面呼出菜单 下一篇