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

2024-05-18 14:23和二斌马庆修张文杰
电脑知识与技术 2024年8期
关键词:信号与系统

和二斌 马庆修 张文杰

摘要:在信号与系统课程的教学过程中,应用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源代码如下:

h=impulse(b,a,t);

figure(3)

subplot(1,3,1)

plot(t,h,'k-','LineWidth',1.0)

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

text(0.9,0.14,'(a)','FontSize',15)

set(gca,'FontSize',20,'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(s)');ylabel('h(\itt)');

yj=dt*conv(h,ft2);

subplot(1,3,2)

plot(t,yj(1:25133),'k','LineWidth',1.0)

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

text(0.9,0.13,'(b)','FontSize',15)

set(gca,'FontSize',20,'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(s)');ylabel('y(\itt)');

subplot(1,3,3)

plot(t,abs(as-yj(1:25133)),'k','linewidth',1.0);

axis([-0.5 8*pi 0 0.8e-4]);axis square;grid on

text(0.9,7.5e-5,'(c)','fontsize',15)

set(gca,'FontSize',20,'Xtick',[0 2*pi 4*pi 6*pi 8*pi],'FontName','Times New Roman');

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

xlabel('Time(s)');ylabel('|\Deltay(\itt)|');

从计算结果可以看出,卷积的数值计算得到的误差要大于使用lsim函数计算的结果(图 4(c)),其优点主要在于只要知道系统的冲激响应,将输入信号与冲激响应进行卷积积分就可以得到系统的零状态响应,卷积运算能够更好地反应信号的特征。

3 系统零状态响应的频域求解

系统的频域分析是将信号从时域通过傅里叶变换,分解成多个虚指数周期信号的和,得到信号的频谱,然后求系统对各频率虚指数信号的响应,得到输出信号的频谱,最后通过傅里叶反变换,求得输出信号的时域表示[14-15]。频域分析方法避开了微分方程的求解和卷积积分的计算,容易求得系统的响应。进行傅里叶变化的基本思路如下:

(1) 首先对输入的时域信号f(t)=cos(t)进行傅里叶变换,得到其频域表达式F(jω)(公式6) :

[F(jω)=-∞∞f(t)·e-jωtdt=πδ(ω-1)+δ(ω+1)] (6)

(2) 连续时间系统的数学模型可以表示为线性常系数微分方程,如公式(7)所示,对系统的数学模型进行傅里叶变换,并利用傅里叶变换的时域微分特性,可得公式(8),其中F(jω)为输入信号的傅里叶变换,Y(jω)为输出信号的傅里叶变换。通过傅里叶变换,可将系统的数学模型由时域微分方程转为频域描述的多项式方程,通过变换可得系统的频率响应如公式(9)所示。

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

[m(jω)2+fd(jω)+ks1+ks2·Y(jω)=F(jω)] (8)

[H(jω)=Y(jω)F(jω)=1m(jω)2+fd(jω)+ks1+ks2] (9)

(3) 根据频率响应与输入信号频谱和输出信号频谱的关系,可得输出信号的频谱可以表示为公式(10), 输出的时域信号y(t)为其频域信号Y(jω)的傅里叶反变换(公式11)。

[Y(jω)=F(jω)H(jω)] (10)

[f(t)=12π-∞∞Y(jω)ejωtdω] (11)

Matlab源代碼及图像如图 5所示:

clc;clear

w=-3*pi:0.1:3*pi;

b=1; a=[1,5,6];

H=freqs(b,a,w);

figure(4)

subplot(2,2,1);

plot(w,abs(H),'k','Linewidth',1.0);

axis([-3*pi 3*pi 0 0.2]);axis square;grid on

text(-8.5,0.185,'(a)','FontSize',15)

set(gca,'Xtick',[-3*pi -2*pi -pi 0 pi 2*pi 3*pi]);

set(gca,'XtickLabels',{'-3\pi','-2\pi','-\pi','0','\pi','2\pi','3\pi'});

set(gca,'FontSize',15,'FontName','Times New Roman')

xlabel('\omega(rad/s)');ylabel('|\itH(\rmj\omega)|')

subplot(2,2,2)

plot(w,angle(H),'k','Linewidth',1.0);

axis([-3*pi 3*pi -3.5 3.5]);grid on;axis square

text(-8.5,3.0,'(b)','fontsize',15)

set(gca,'xtick',[-3*pi -2*pi -pi 0 pi 2*pi 3*pi]);

set(gca,'xticklabels',{'-3\pi','-2\pi','-\pi','0','\pi','2\pi','3\pi'});

set(gca,'FontSize',15,'FontName','Times New Roman')

xlabel('\omega(rad/s)');ylabel('\phi(\omega)');

syms t w;

ft=cos(t);

subplot(2,2,3)

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

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

text(1.5,1.0,'(c)','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',15,'FontName','Times New Roman')

set(h1,'color','k','LineWidth',1.0)

xlabel('Time(s)');ylabel('\itf(t)')

subplot(2,2,4)

F=fourier(ft);

H=1/(1*(1i*w)^2+5*1i*w+6);

Y=F*H;

y=ifourier(Y,t);

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

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

text(1.5,0.13,'(d)','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',15,'FontName','Times New Roman')

set(h2,'Color','k','LineWidth',1.0)

xlabel('Time(s)');ylabel('\ity(t)')

系統的频域分析首先需要对输入的时域信号进行傅里叶变换得到其频域表达式,还需要对输出的频域信号进行傅里叶反变换得到输出的时域表达式,需要经过两次变换计算,计算量比较大。但是在很多工程应用当中,只需得到响应信号的频谱,可以减少计算量。通过比较时域分析和频域分析所得到的输出信号,可以发现三种时域分析方法所得到的结果相同,而通过频域分析得到的输出信号为一个稳态输出,这是因为在频域分析中,输入的周期信号是从无穷远的过去开始,一直到无穷远的将来,横跨整个时间轴,所以得到的结果中只存在稳态响应,不存在暂态响应,这是频域分析和时域分析的不同之处。

4 总结

本文通过具体例子介绍了Matlab在求解系统零状态响应中的一些具体方法,通过这些方法的介绍,揭示了这些方法在求解零状态响应过程中各自具备的特点,用实际例子证明将Matlab应用于理论教学的有效性,能够突出所讲授理论的内涵,减轻理论讲解过程中不必要的数学推导。将Matlab用于课堂教学能够减轻学生的学习强度和学习难度,有效激发学生的学习兴趣,深化学生对专业知识的理解,调动学生学习的积极性和主动性,使学生更好地了解并掌握所学知识点。通过在练习中扩宽深化学生使用Matlab处理实际问题的能力,使学生尽快掌握Matlab这一强大的工具,有助于今后的学习和工作。

参考文献:

[1] 刘世金,姚先文,马啸,等.基于数学与专业深度融合的信号与系统可视化教学[J].高师理科学刊,2023,43(1):70-73,94.

[2] 刘艳华.MATLAB在信号与系统课程教学中的应用[J].科技视界,2021(14):17-18.

[3] 郭建英.MATLAB在信号与系统课程教学中的应用研究[J].山西电子技术,2020(2):73-75.

[4] 杨亚莉,夏舸,田裕康.“信号与系统” 课程与工程思维能力培养[J].电气电子教学学报,2021,43(3):67-69,128.

[5] 胡晓芳.基于Matlab的《信号与系统》课程改革[J].数字通信世界,2021(2):273-275.

[6] 唐亮,宫丽娜,陈婷.信号与系统实验课程教学改革实践研究[J].电脑知识与技术,2022,18(23):145-147.

[7] 陈广福.应用型大学信号与系统课程教学改革与探索[J].电脑知识与技术,2022,18(24):140-142.

[8] 谭北海,余荣,蔡述庭.“信号与系统” 课程多维度教学策略探究[J].电气电子教学学报,2022,44(1):97-103.

[9] 朱娟娟,郭宝龙,张玲霞.“信号与系统” Matlab实践在线课程的建设[J].电气电子教学学报,2019,41(4):38-40.

[10] 陈昌兆.《信号与系统》课程的MATLAB仿真——从一道例题展开[J].曲靖师范学院学报,2021,40(3):37-42.

[11] 陈广福.Matlab应用于“信号与系统” 课程教学探索与实践[J].现代信息科技,2022,6(18):195-198.

[12] 陈后金,胡健,薛健.信号与系统[M].3版.北京:清华大学出版社,2017.

[13] 曾金芳,曾以成.“信号与系统” 中卷积运算的案例教学法[J].电气电子教学学报,2023,45(2):160-163.

[14] 李苑青,蒋宇飞,肖涵,等.信号与系统实验中傅里叶变换的研究与实践[J].科技风,2021(32):68-71.

[15] 曹欣远,陈明生,齐琦.“信号与系统” 中傅里叶变换的教学方法研究[J].合肥师范学院学报,2019,37(6):87-89.

【通联编辑:王 力】

猜你喜欢
信号与系统
《信号与系统》中傅里叶变换在OFDM移动通信系统中的应用
《信号与系统》课程教学的改革与实践
以解决问题为导向的采样定理教学设计
基于MATLAB的“信号与系统”实验教学改革
基于Matlab的“信号与系统”教学辅助平台的设计
应用型本科“信号与系统”课程改革分析
“信号分析与处理”课程群实践体系构建研究
MATLAB软件在《信号与系统》课程实践中的应用
独立学院的信号与系统教学改革探讨
西部地区信号与系统课程理论和实践教学方法探索