您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > MATLAB电路仿真
第5周MATLAB电路仿真00:031第5周MATLAB电路仿真5.1MATLAB5.2MATLAB编程电路仿真5.3Simulink电路仿真第5周MATLAB电路仿真00:0322.2MATLAB编程仿真2.2.1时间连续的确定信号在物理上是一个随时间变化的(电压或电流)波形,在数学上表示为一个时间连续的函数f(t)。时间连续信号也称为模拟信号。而时间离散的确定信号在数学上可以表示为一个确定的序列{fn}。如果以满足取样定理的取样速率对时间连续函数f(t)进行取样,就可以得到对应的时间离散序列{fn},而将时间离散序列{fn}通过取样定理所规定的理想低通滤波器后,就能够恢复连续信号f(t)。第5周MATLAB电路仿真00:033换句话说,在满足取样定理的前提下,f(t)与{fn}是一一对应的关系。对时间离散序列{fn}进行幅度值上的离散化(这个过程称为量化)就得到了数字信号{}。数字信号通常以二进制编码的形式存储在计算机中。因此,利用计算机所表达的时间连续信号f(t)实质上是其所对应的数字信号{}。本质上,计算机不能直接处理模拟信号,计算机中的信号处理均是对数字信号的处理。而由取样定理保证了它与模拟信号处理之间的一一对应关系。nf~nf~第5周MATLAB电路仿真00:034连续系统可以用微分方程来描述,离散系统可以用差分方程来描述。当系统为无记忆系统时,微分方程或差分方程退化为代数方程。因此,对系统进行仿真的过程就数学意义而言,就是求解这些微分方程、差分方程或代数方程的过程。为了对连续系统进行仿真,首先需要建立其数学模型,然后利用计算机求解这些数学模型,从而得出数学模型的数值解。计算机对数学模型的求解过程就是对系统的仿真过程。由于连续系统是通过微分方程来建模的,因此对此的计算机仿真本质上就是微分方程的数值求解问题。通常,对连续系统进行计算机仿真的过程是:第5周MATLAB电路仿真00:035(1)建立数学模型:就是将物理模型转换为数学模型的过程。对于电子电路而言,就是利用电路的拓扑、元件的属性,列出网孔方程或节点方程,并简化为标准形式的计算机可求解的一阶微分方程组(即状态方程)的过程。对于线性时不变系统来说,就是建立其传递函数模型,并简化为计算机易于求解的线性一阶微分方程组(即状态方程)的过程。而对于一般的系统,通常可建模为一组非线性的微分方程组。(2)选择适合的计算机求解方法求解仿真模型。不同的微分方程求解算法的精度和适用范围均有所不同。(3)编写MATLAB仿真程序或建立Simulink模块方框图,调试并运行程序。(4)得出数值解,即仿真结果,对仿真结果进行分析,以确定结果的可靠性和有效性。第5周MATLAB电路仿真00:036图2-2一个二阶电路系统+-f(t)RLiL(t)C+-uC(t)第5周MATLAB电路仿真00:037对于一个二阶系统,电路如图2-2所示,试利用MATLAB(1)零状态响应:系统在t=-1秒时刻的初状态为零,输入信号为阶跃信号f(t)=u(t),输出为电容电压,试对时间t=[-1,10]秒的输出信号波形进行仿真求解。(2)零输入响应:系统在t=-1秒时刻电容电压为uC=1V,当t=-1秒时刻信号输入二端闭合,试对时间t=[-1,10]秒的输出信号波形进行仿真求解。(3)全响应:系统在t=-1秒时刻电容电压为uC=1V,输入信号为阶跃信号f(t)=u(t),试对时间t=[-1,10]秒的输出信号波形进行仿真求解。第5周MATLAB电路仿真00:038[解](1)设电感电流为iL(t),电容电压为uC(t),根据电路,列出KVL(2-2))()()()()()(titudtdCtftutidtdLtRiLCCLL)(1)()(1)(1)()(tiCtudtdtfLtuLtiLLRtidtdLCCL第5周MATLAB电路仿真00:039令电路的状态变量iL(t)=x1(t),uC(t)=x2(t),输入信号为f(t),则微分方程简写为写出该微分方程的MATLAB函数。注意,这一组微分方程组就是该二阶电路的状态方程,对于同一个物理系统,如果选取的状态变量不同,所得到的状态方程也就不同,但都表达了该物理系统的状态信息。12211111xCxfLxLxLRx(2-3)第5周MATLAB电路仿真00:0310按照MATLAB的固定写法,编写出该微分方程组的MATLAB函数(函数文件名为funcforex123.m)如下:程序2-3functionxdot=funcforex123(t,x,flag,R,L,C)xdot=zeros(2,1);%xdot(1)=-R/L*x(1)-1/L*x(2)+1/L*f(t);%方程1xdot(2)=1/C*x(1);%方程2functionin=f(t)%in=(t0)*1;%阶跃信号第5周MATLAB电路仿真00:0311然后,利用MATLAB提供的求解微分方程的指令对该微分方程组求解。MATLAB提供的求解微分方程的算法有多个,如“ode45”、“ode23”、“ode15s”等,不同的算法适用的场合稍有不同。例如,通过“ode45”函数求解,MATLAB程序(程序名为ex123.m)程序2-4%filenameex123.mL=1;%C=0.1;%forR=[1.535]%仿真电阻值分别为1.5,3,5欧姆的情况[t,x]=ode45(′funcforex123′,[-1,10],[0;0],[],R,L,C);第5周MATLAB电路仿真00:0312%也可采用ode23,ode15sfigure(1);plot(t,x(:,1));holdon;xlabel(′timesec′);text(0.9,0.17,′\leftarrowi-L(t)′);grid;figure(2);plot(t,x(:,2));holdon;xlabel(′timesec′);text(0.5,0.3,′\leftarrowu-C(t)′);grid;end运行程序后,得到的电感电流、电容电压波形仿真结果如图2-3(a)、(b)所示。第5周MATLAB电路仿真00:0313图2-3(a)(b)电容电压单位阶跃响应(零状态响应)波形仿真结果第5周MATLAB电路仿真00:0314(2)当t=-1秒时刻信号输入二端闭合,相当于输入信号为零,因此修改MATLAB函数funcforex123.m如下:程序2-5functionxdot=funcforex123(t,x,flag,R,L,C)xdot=zeros(2,1);%xdot(1)=-R/L*x(1)-1/L*x(2)+1/L*f(t);%方程1xdot(2)=1/C*x(1);%方程2functionin=f(t)%in=0;%第5周MATLAB电路仿真00:0315并修改ex123.m的“ode45”语句,将系统状态改为[0,1],程序2-6%filenameex123.mL=1;%C=0.1;%forR=[1.535]%仿真电阻值分别为1.5,3,5欧姆的情况[t,x]=ode45(′funcforex123′,[-1,10],[0;1],[],R,L,C);%也可采用ode23,ode15sfigure(1);plot(t,x(:,1));holdon;xlabel(′timesec′);第5周MATLAB电路仿真00:0316text(0.9,0.07,′\leftarrowi-L(t)′);grid;figure(2);plot(t,x(:,2));holdon;xlabel(′timesec′);text(0.5,0.3,′\leftarrowu-C(t)′);grid;end然后运行,得到的波形仿真结果如图2-4所示。第5周MATLAB电路仿真00:0317图2-4(a)电感电流零输入响应波形仿真结果;(b)电容电压零输入响应波形仿真结果第5周MATLAB电路仿真00:0318(3)对于全响应情况,可相应修改MATLAB函数funcforex123.m程序2-7functionxdot=funcforex123(t,x,flag,R,L,C)xdot=zeros(2,1);%xdot(1)=-R/L*x(1)-1/L*x(2)+1/L*f(t);%方程1xdot(2)=1/C*x(1);%方程2functionin=f(t)%in=(t0)*1;%而ex123.m的“ode45”语句中仍然将系统状态改为[0,1]。运行后得到的波形仿真结果如图2-5所示。第5周MATLAB电路仿真00:0319图2-5(a)电感电流全响应波形仿真结果;(b)电容电压全响应波形仿真结果第5周MATLAB电路仿真00:0320由此可见,一旦从物理系统中建立了其数学模型,也即得出系统的微分方程描述之后,给定其边界条件,就可得出其数值解,求解的过程就是仿真的过程。在MATLAB中,我们可以方便地修改微分方程函数以及求解指令的参数,从而得出系统的零输入响应、零状态响应以及全响应等各种状态下的输出信号。可以将这个例子中的输入信号修改为一个宽度为0.3s的矩形脉冲,然后观察其响应波形。(提示:只需修改funcforex123.m中语句“in=(t0)*1;”为“in=(t0)*1-(t0.3)*1;”即可。)本例演示了对于一个动态电路瞬态响应的仿真过程。仿真的关键在于建立正确的数学模型。第5周MATLAB电路仿真00:0321对于任何电子电路,都可以根据电路理论的知识得出其数学模型,即一阶微分方程组,也称为状态方程。接下来以MATLAB所规定的格式编写状态方程的描述函数,然后选择合适的求解方式求解,也就完成了对电路的仿真。最后,。需要强调的是,微分方程的MATLAB函数格式是固定的,必须按MATLAB所规定的格式来编写。本例中,需要将方程参数“R;L;C”传入。传入参数前的标志变量“flag”是必需的,以符合求解函数“ode45”的要求。微分方程的MATLABfunctionxdot=方程函数名(t,x,flag,附加参数)第5周MATLAB电路仿真00:0322其中,“t”为时间变量矩阵,“x”为方程的状态变量矩阵,“xdot”为状态变量对时间的一阶导数矩阵。在MATLAB中,对微分方程的求解有多种算法可供利用。通常有“ode23”、“ode45”以及“ode15s”等等,这些函数的调用方式完全相同,但针对的方程类型有所不同。其中,“ode23”和“ode45”分别采用二阶三级RKF算法和四阶五级RKF算法,适用于一般微分方程的求解;“ode15s”则适用于刚性微分方程的求解。所谓刚性方程,指的是方程的某些解(这些解是时间“t”的函数)变化缓慢,而另外一些解变化快速,两者形成明显对比的这样一类方程。“ode15s”同时也适合于一般微分方程的求解。关于其它解法和使用方法详见MTALAB的在线手册。第5周MATLAB电路仿真00:0323以“ode45”为例,[t,x]=ode45(方程函数名,仿真时间范围,状态变量初始值,算法选项,附加参数)例如,以默认算法选项计算微分方程组funcforex123.m,仿真时间从-1s到10s,状态变量初始值为:电感电流x1(0)=0A,电容电压x2(0)=1V,附加参数为R=1.5Ω,L=1H,C=0.1F,[t,x]=ode45(′funcforex123′,[-1,10],[0;1],[],1.5,1,0.1);funcforex123(t,x,flag,R,L,C)第5周MATLAB电路仿真00:0324另外需要注意的是,为了达到算法快速有效,MATLAB中的状态方程的求解函数是自适应步长的,即其数值结果中时间自变量t的离散取值是非均匀的,在解变化剧烈的地方取值点密,而在解变化缓慢的曲线段相对取值会稀疏一些。在信号处理中,进一步对求解信号进行分析时,往往又需要在时间上均匀取样间隔点上的波形函数值。可以采
本文标题:MATLAB电路仿真
链接地址:https://www.777doc.com/doc-3232819 .html