您当前的位置: 首页 > 

wendy_ya

暂无认证

  • 1浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

S-function入门及案例详解(2)——S-function基本案例介绍

wendy_ya 发布时间:2021-06-26 17:21:06 ,浏览量:1

目录
    • 一、案例1——对波形的幅值进行放大
      • 1.1 案例分析
      • 1.2 案例详解
      • 1.3 输出波形
    • 二、案例2——对波形的幅值进行放大拓展
      • 2.1 案例分析
      • 2.2 案例详解
      • 2.3 输出波形
    • 三、案例3——对波形的幅值进行放大拓展之要求初始值可以在参数对话框中设置
      • 3.1 案例分析
      • 3.2 案例详解
      • 3.3 输出波形
    • 四、案例4——对离散输入进行延时
      • 4.1 案例分析
      • 4.2 案例详解
      • 4.3 输出波形
    • 五、案例5——对输入进行积分
      • 5.1 案例分析
      • 5.2 案例详解
      • 5.3 输出波形

一、案例1——对波形的幅值进行放大 1.1 案例分析

设置波形幅值放大器,对输入波形进行3倍放大,即y=3*u。

1.2 案例详解

步骤1.可以修改sfuntmpl函数的名称(这里修改为fuzhi)

function [sys,x0,str,ts,simStateCompliance] = fuzhi(t,x,u,flag)

步骤2.进行初始化 一个输出,一个输入,输入与输出为直通, 因此,将相应属性设置为1:

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; 

步骤3.修改mdlOutputs函数相关代码

function sys=mdlOutputs(t,x,u)

sys = 3*u;

步骤4.新建一个simunk文件,将s-function的参数改为如下形式 在这里插入图片描述 步骤5.搭建simulink 在这里插入图片描述

1.3 输出波形

在这里插入图片描述 可以发现,输出波形为输入的3倍,成功~

二、案例2——对波形的幅值进行放大拓展 2.1 案例分析

设置波形幅值放大器,对输入波形进行放大,输出y=gain*x。

2.2 案例详解

步骤1.可以修改sfuntmpl函数的名称(这里修改为fuzhi),并在括号内增加输入参数

function [sys,x0,str,ts,simStateCompliance] = fuzhi(t,x,u,flag,gain)

步骤2.在case3和mdlOutputs中均加入gain参数,并修改mdlOutputs函数

  case 3,
    sys=mdlOutputs(t,x,u,gain);

function sys=mdlOutputs(t,x,u,gain)
	sys = gain*u;

步骤3.进行初始化 一个输出,一个输入,输入与输出为直通, 因此,将相应属性设置为1:

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; 

步骤4.新建一个simunk文件,将s-function的参数改为如下形式 在这里插入图片描述 【这里设置为gain=4】

步骤5.搭建simulink (同上)

2.3 输出波形

在这里插入图片描述 可以发现,输出波形为输入的4倍,成功~

三、案例3——对波形的幅值进行放大拓展之要求初始值可以在参数对话框中设置 3.1 案例分析

设置波形幅值放大器,对输入波形进行放大,要求由用户指定倍数,即用户指定gain,输出y=gain*x,要求初始值可以在参数对话框中设置。

3.2 案例详解

步骤1-3同上

步骤4.新建一个simunk文件,将s-function的参数改为如下形式 右击“s-function”——>点击“Mask”——>选择“Create Mask” 在这里插入图片描述 选择“Parameters & Dialog”——>选择“Edit”。 在这里插入图片描述 “Prompt”为提示,这里输入GAIN;“Name”为参数,要与输入参数一致,这里为gain; 在这里插入图片描述

步骤5.右击“Block Parameters”,打开 在这里插入图片描述 将s-function的参数改为如下形式: 在这里插入图片描述

步骤6.搭建simulink (同上)

步骤7.双击s-function,设置gain 这里设置为gain=6

3.3 输出波形

在这里插入图片描述 可以发现,输出波形为输入的6倍,成功~

四、案例4——对离散输入进行延时 4.1 案例分析

设置一个延时模块,对离散输入进行延时输出。 x(n+1)=u(n);y(n)=x(n);

4.2 案例详解

步骤1.可以修改sfuntmpl函数的名称(这里修改为fuzhi)

function [sys,x0,str,ts,simStateCompliance] = fuzhi(t,x,u,flag)

步骤2.进行初始化 离散状态,一个输出,一个输入, 因此,将相应属性设置为1:

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 1;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1; 

设置初始值:

x0  = 2;

设置采样时间:【0.5s采样一次】

ts=[0.5 0];

步骤3.修改mdlUpdate函数和mdlOutputs函数

mdlUpdate函数为下一个状态函数,这里修改为:

function sys=mdlUpdate(t,x,u)

sys = u;

mdlOutputs函数为输出函数,这里修改为:

function sys=mdlOutputs(t,x,u)

sys = x;

步骤4.搭建simulink

在这里插入图片描述

4.3 输出波形

在这里插入图片描述 上图表示将输入信号延迟后的采样结果,蓝色表示原始阶跃输入,黄色表示延时输入(初始状态为2,0.5s采样一次,延迟时间为1s)。

五、案例5——对输入进行积分 5.1 案例分析

设置一个求导,对输入进行积分输出。 dx=u;y=x;

5.2 案例详解

步骤1.可以修改sfuntmpl函数的名称(这里修改为fuzhi)

function [sys,x0,str,ts,simStateCompliance] = fuzhi(t,x,u,flag)

步骤2.进行初始化 连续状态,一个输出,一个输入, 因此,将相应属性设置为1:

sizes.NumContStates  = 1;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; 

设置初始值:

x0  = 0;

设置采样时间:【连续系统无法设置采样时间,因此这里为[0 0]】

ts=[0 0];

步骤3.修改mdlDerivatives函数和mdlOutputs函数

mdlDerivatives函数为求导,这里修改为:

function sys=mdlDerivatives(t,x,u)

sys = u;

mdlOutputs函数为输出函数,这里修改为:

function sys=mdlOutputs(t,x,u)

sys = x;

步骤4.搭建simulink 在这里插入图片描述

5.3 输出波形

在这里插入图片描述 蓝色表示原始常数输入,黄色表示进行积分操作。

ok,以上便是全部内容了,如果对你有所帮助,记得点个赞哟~

下一篇文章:S-function入门及案例详解(3)——S-function进阶案例

关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.0438s