gusucode.com > matlab通信工程仿真源码(张德丰等编著)程序书籍 > matlab_code/matlab通信工程仿真源码(张德丰等编著)/第6章/sfuntmp2.m
% sfuntmp1.m程序代码如下(把部分注释删除): function [sys,x0,str,ts] = sfuntmp2(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t,x,u); case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, sys=mdlTerminate(t,x,u); otherwise error(['Simulink:blocks:unhandledFlag', num2str(flag)]); end %======================================================================== % mdlInitializeSizes模型初始化函数,返回: % sys是系统参数 % x0是系统初始状态,若没有状态,取[ ] % str是系统阶字串,通常设为[ ] % ts是取样时间矩阵,对连续取样时间,ts取[0 0] % 若使用内部取样时间,ts取[-1 0],-1表示继承输入信号的采样周期 %======================================================================== function [sys,x0,str,ts]=mdlInitializeSizes %模型初始化函数 sizes = simsizes; %取系统默认设置 sizes.NumContStates = 0; %设置连续状态变量的个数 sizes.NumDiscStates = 0; %设置离散状态变量的个数 sizes.NumOutputs = 0; %设置系统输出变量的个数 sizes.NumInputs = 0; %设置系统输入变量的个数 sizes.DirFeedthrough = 1; %设置系统是否直通 sizes.NumSampleTimes = 1; % 采样周期的个数,必须大于等于1 sys = simsizes(sizes); %设置系统参数 x0 = []; %系统状态初始化 str = []; %系统阶字串总为空矩阵 ts = [0 0]; %初始化采样时间矩阵 %======================================================================== % mdlDerivatives模型计算导数——连续状态部分的计算,返回连续状态的导数 %======================================================================== function sys=mdlDerivatives(t,x,u) sys = []; %根据状态方程(微分方程部分)修改此处 %======================================================================== % mdlUpdate计算离散状态部分 %======================================================================== function sys=mdlUpdate(t,x,u) sys = []; %根据状态方程(差分方程部分)修改此处 %======================================================================== % mdlOutputs计算输出信号,返回模块的输出 %======================================================================== function sys=mdlOutputs(t,x,u) sys = []; %根据输出方程修改此处 %======================================================================== % mdlGetTimeOfNextVarHit计算一步的仿真时刻,该函数仅当在mdlInitializeSizes %函数中的采样时间向量定义了一个可变离散采样时间ts为[-2 0]时才被使用 %======================================================================== function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1; % 例如,下一步仿真时间是1s之后 sys = t + sampleTime; %======================================================================== % mdlTerminate终止仿真设定,完成仿真终止时的任务 %======================================================================== function sys=mdlTerminate(t,x,u) sys = []; % 程序结束