S-function入门及案例详解(2)——S-function基本案例介绍_s-function怎么用-程序员宅基地

技术标签: matlab  simulink  functional programming  MATLAB  

一、案例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进阶案例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/didi_ya/article/details/118251832

智能推荐

Python数据可视化Pyecharts的全局配置_如何同时调用多个图表组件中的toolbox: { feature: { saveasimage: {-程序员宅基地

文章浏览阅读3.8w次。大家好,我是Mr数据杨。想象一下,《三国演义》中的诸葛亮坐在帐篷中,一张草地前,推演天下大势。在Python的世界中,这张草地就好比一张图表,诸葛亮的一笔一画就是各种配置项。如同诸葛亮的起步,我们需要使用InitOpts来初始化图表。一旦成功,图表将展现在眼前。诸葛亮的笔触下,图表跃然生动,犹如使用了AnimationOpts赋予图表动态的生命力。在诸葛亮的眼中,每个城市、每个战场都有其特性。_如何同时调用多个图表组件中的toolbox: { feature: { saveasimage: {} } },

android checkbox是否选中,更改Android Checkbox的已选中和未选中图标-程序员宅基地

文章浏览阅读266次。小编典典混合种类:在您的布局文件中设置它:android:layout_height="wrap_content"android:text="new checkbox"android:background="@drawable/checkbox_background"android:button="@drawable/checkbox" />@ drawable / checkbox如下所示..._android studio如何处理checkbox的未被选中

Microsoft Office 2021 v16.80 中文正式版 for Mac office全家桶 使用说明及问题处理_microsoft office2021 16.8-程序员宅基地

文章浏览阅读849次,点赞28次,收藏10次。创建、完善和共享既美观又专业的文档通过 Word 中的一流创作和审阅工具,可轻松创建精美文档。新的“见解”窗格可在 Word 内部显示来自 Web 的相关上下文信息。“设计”选项卡可用于管理文档中的布局、颜色和字体。通过使用内置工具共享和审阅文档来协同工作,完成更多任务。多个人员可以同时处理同一个文档,并使用按线索组织的批注在相关文本旁进行对话。_microsoft office2021 16.8

回顾基于MUI开发的APP_mui app 名称-程序员宅基地

文章浏览阅读5.4k次。 第一个基于MUI开发的APP,前端后端都是自己一个人开发的,界面虽然中规中矩,但是还是有所搜获。MUI为何物?性能和体验的差距,一直是mobile app开发者放弃HTML5的首要原因。 浏览器天生的切页白屏、不忍直视的转页动画、浮动元素的抖动、无法流畅下拉刷新等问题,这些都让HTML5开发者倍感挫败,尤其拿到Android低端机运行,摔手机的心都有; 另一方面,浏览器默认控件样式又少又丑..._mui app 名称

dockerfile中expose和ports的区别_docker expose-程序员宅基地

文章浏览阅读893次。这是Dockerfile的指令,用于在创建镜像时声明容器打算使用的端口。它是对构建服务的人的一种文档性的声明,意味着运行的容器会监听某个端口。: 这是docker-compose.yml文件中的一个字段,用于定义容器的端口映射。这实际上在主机上打开了端口,使得外部世界可以访问到容器的网络服务。例如,如果你想在主机的8080端口上运行一个在80端口上运行的web服务器,你可以使用。在Docker中都用于容器的网络配置,但它们的用途和方式略有不同。主要用于在构建阶段声明容器需要使用的端口,而。_docker expose

ARM与嵌入式linux入门建议_arm裸机与嵌入式linux-程序员宅基地

文章浏览阅读174次。由于很多人总问这个问题,所以这里做一个总结供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简..._arm裸机与嵌入式linux

随便推点

2022年山东省职业院校技能大赛高职组云计算赛项试卷第一场-私有云_使用 cirros-0.3.4-x86_64-disk.img 文件创建 cirros-image -程序员宅基地

文章浏览阅读1.5k次,点赞24次,收藏24次。使用提供的OpenStack私有云平台,申请三台CentOS7.9系统的云主机,使用提供的http源,在三个节点自行安装Redis服务并启动,配置Redis的访问需要密码,密码设置为123456。在控制节点和计算节点分别使用iaas-install-cinder-controller.sh、iaas-install-cinder-compute.sh脚本安装Cinder服务,请在计算节点,对块存储进行扩容操作,即在计算节点再分出一个5G的分区,加入到cinder块存储的后端存储中去。_使用 cirros-0.3.4-x86_64-disk.img 文件创建 cirros-image 镜像存储于 cirros-ci

phpcms V9.6.0版本整合百度ueditor1.4.3.2,包括水图片上传水印-程序员宅基地

文章浏览阅读151次。转载请说明文章来源:周陆军的个人网站:ueitor:phpcms V9.6.0版本整合百度ueditor1.4.3.2,包括水图片上传水印phpcms,整合Ueditor的教程很多,但是,都是云里雾里。你看我的文章,然后,安装文章,一步步去找目录,找文件,搜索关键词,替换。然后,okay了……so easy,妈妈再也不用担心编辑器不好用了…… phpcms的ckeditor太难用啊!!..._phpcms v9整合百度编辑器1.4.3

(PAT乙级刷题)程序运行时间-程序员宅基地

文章浏览阅读104次。【代码】(PAT乙级刷题)程序运行时间。

关于arcgis server 发布地图的时候报错"Packaging succeeded but publishing failed"问题解决_packaging succeeded,but publishing failed. failed -程序员宅基地

文章浏览阅读7.7k次,点赞2次,收藏3次。由于工作上需要发布影像地图一份,1.按照规范的地图数据发布进行了地图数据投影1)对影像数据规范参考系。楼主懒得去工具箱找工具,我知道我要操作的是raster,那么ctrl+f打开查找框,输入raster,找到porject raster 。注意选择data mangement工具箱里面的。2)投影 栅格数据按照工具要求,选择要处理的栅格数据,输出路径,输出坐标系,重采_packaging succeeded,but publishing failed. failed to execute(uploadservicede

openstack_openstack网络拓扑图-程序员宅基地

文章浏览阅读1.3k次。1:云计算的定义云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储和应用软件等),这些资源能够被快速提供,只需投入很少的管理工作或与服务供应商进行很少的交互。2:云计算五大特征① 按需自助服务:消费者可以单方面部署资源。例如服务器、网络存储,资源是按需自动部署的,不需要与服务供应商进行人工交互。② 通过互联网获取:资源可以通过互联网获取,并可以通过标准方式访问。_openstack网络拓扑图

记录el-input type=number限制长度el-input使用_el-input-number限制输入长度-程序员宅基地

文章浏览阅读5.2k次。<el-input type="number" oninput="if(value.length>10)value=value.slice(0,10)" @keyup.enter.native="query()" :max="99999999"> </el-input>oninput 是个自定义事件 在事件里面获取输入的数字长度,来进行判断如果大于规定长度就进行剪切。keyup.enter.native 是个键盘回车事件,当按下Enter键时触发query()事件_el-input-number限制输入长度