【研发日记】Matlab/Simulink开箱报告(十)——Signal Routing模块模块

文章目录

前言

Signal Routing模块

虚拟模块和虚拟信号

Mux和Demux

Vector Concatenate和Selector

Bus Creator和Bus Selector

分析和应用

总结


前言

        见《开箱报告,Simulink Toolbox库模块使用指南(五)——S-Fuction模块(C MEX S-Function)》

        见《开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)》

        见《开箱报告,Simulink Toolbox库模块使用指南(七)——S-Fuction Builder模块》     

        见《研发日记,MatlabSimulink开箱报告(八)——Lookup Table模块》

        见《研发日记,MatlabSimulink开箱报告(九)——Simulink Test模块》

Signal Routing模块

        Signal Routing模块是Simulink中为了降低数据路径复杂度,提高模型搭建效率,把数据进行组合和分解,并实现跨越式传送的一类模块,Mathworks官方Help对该部分内容的说明如下所示:

        Signal Routing模块在Simulink Toolbox库中的位置如下:

        上述library中一些模块的应用都比较基础,不再赘述。本文挑选其中容易混淆的几类,重点对其异同进行辨析。

虚拟模块和虚拟信号

        Simulink® 模块分为两个基本类别:非虚拟模块和虚拟模块。非虚拟模块在系统的仿真中起主动作用。如果您添加或删除非虚拟模块,模型行为将发生改变。虚拟模块有助于以图形方式组织模型。虚拟模块在仿真中不起主动作用,但它们会影响其他模块的执行顺序。有些 Simulink 模块在某些情况下是虚拟的,而在其他情况下是非虚拟的。这种模块称为条件虚拟模块

        虚拟信号是一种以图形表达方式,不存在于生成的代码中。有些模块(如 Mux 模块)始终生成虚拟信号。有些模块(如 Bus Creator 模块)既可以生成虚拟信号,也可以生成非虚拟信号。如果生成信号的模块是虚拟的,则信号是虚拟信号。非虚拟信号是一种在仿真和代码生成中起主要作用的信号。有些模块(如 Vector Concatenate 模块)始终生成非虚拟信号。如果生成信号的模块是非虚拟的,则信号是非虚拟信号。

Mux和Demux

        Mux模块是将相同数据类型的输入信号合并为虚拟向量,然后基于这个虚拟向量对它们做一些统一的数据处理,这样既可以提高工程师的建模效率,也可以提高模型的可读性,示例如下:

        Tip1:Mux模块的四个输入信号必须是相同的数据类型,比如上图中都是double型;

        Tip2:上述四个信号经过Mux模块后,只是外观看上去匝在一起,但实质上他们之间互不影响。

        Demux模块是Mux模块的逆向操作,把虚拟向量分解开,将元素或者子向量提取并输出。示例如下:

        Tip1:一般情况下要求Deux模块设置的输出端口数与虚拟向量中元素的个数一致,这时是按顺序均匀输出;

        Tip2:如果Demux模块设置的输出端口数比虚拟向量中元素的个数少,这时个别输出上就会自动多一个元素,以虚拟子向量的形式输出;

        Tip3:如果想让Demux模块按照我们的设定输出,就需要在“Number of outputs”中设置对应输出端口的大小。比如[-1, 2, -1],同时包含正值2和 -1,该模块会首先保证有2个元素分配给第二个端口然后将其余元素均匀地分布在值为 -1 的第一个端口和第三个端口上。

Vector Concatenate和Selector

        Vector Concatenate 模块会把输入信号串联起来创建一个实质性的向量,作为一个Array[n]来使用,示例如下:

        Tip1:Vector Concatenate模块的三个输入端口必须是相同的数据类型,比如上图中都是double型;

        Tip2:输入端口不管是向量或者标量,都会按照顺序被串联起来形成一个新的向量;

        Selector模块是Vector Concatenate模块的逆向操作,可以根据指定的索引提取向量的元素,示例如下:

        Tip1:Selector模块的“Input port size”必须与实际输入向量的大小一致,否则会报错;

Bus Creator和Bus Selector

        Bus Creator 模块将输入信号合并成一个总线,相比前面的Mux和Vector,这里输入的信号可以是不同的数据类型。示例如下:

        Tip1:默认情况下,Bus Creator模块创建的是一个虚拟总线,它类似于用束线带绑在一起的一捆电线,每一根电线都有唯一的名称,粗细颜色各部不同,各自独立工作着。

        Tip2:需要时该模块也可以创建非虚拟总线,这类似于C代码中的结构体,总线与里边的信号存在着较强的父与子关系。虚拟总线和非虚拟总线在线型上有所不同。

        Bus Selector是模块Bus Creator模块的逆操作,可以从总线中按名称提取信号。与前面的Mux和Vector相比,这里不需要按索引Index查询提取,而是直接可以按信号名称提取。示例如下:

Tips:总线除了可以将元素信号提取出来使用外,还能通过Bus to Vector模块转换成向量使用,但是这种转换仅限于虚拟向量。

分析和应用

        为了简化模型外观,可以对信号连接进行组合,为模型组件和模块创建合成接口。上文三种不同的合成接口使用不同的开发情景,对比分析如下:

        虚拟总线可满足合成接口的大多数建模要求,并可灵活地组合不同类型的元素。虚拟总线可减少模块图中线条的复杂度和杂乱无章,并使进一步更改接口变得更容易。例如,如果您必须在组件接口中添加或删除元素,修改总线可能比添加或删除端口更简单。创建虚拟总线时,可以根据信号线的功能对其进行分组。通过将信号连接组织到逻辑分组中,可以降低将来进行重大重构的可能性。如果要在生成的代码中,将总线定义实现为一个结构体,就要考虑将虚拟总线改为非虚拟总线。如果要在子系统(例如 For Each 子系统)中以迭代方式处理大量类型相同的数据,适合选用Vector向量。如果各个子元素还要保持相对的独立性,适合选用Mux虚拟向量

        如下流程图可以帮助我们选择合适的接口类型:

总结

        以上就是本人在使用Signal Routing模块时,一些个人理解和分析的总结,首先介绍了Signal Routing的基本知识,然后展示它的使用方法,最后分析了该模块的特点和适用场景。

        后续还会分享另外几个最近总结的Simulink Toolbox库模块,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。

        另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。


        版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/572751.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ClickHouse10-ClickHouse中Kafka表引擎

Kafka表引擎也是一种常见的表引擎,在很多大数据量的场景下,会从源通过Kafka将数据输送到ClickHouse,Kafka作为输送的方式,ClickHouse作为存储引擎与查询引擎,大数据量的数据可以得到快速的、高压缩的存储。 Kafka大家…

YOLOv5实战记录02 模型检测

本人记录打卡,不够自习,慎看。 今天主要学了计组和计网,YOLO简单打个卡。 指路大佬:【手把手带你实战YOLOv5-入门篇】YOLOv5 模型检测_哔哩哔哩_bilibili 1. 主要讲了几个关键参数: 图源你可是处女座 运行示例&#…

在企业微信里面添加h5页面 进行登录授权

1.需求:在企业微信里面添加h5页面 进行登录授权,获取到用户的code,进行登入id的验证 2.步骤: 根据企业微信开发者中心中构造网页授权链接进行授权 在企业微信内部进行配置,拿到appid,redirect_uri&#x…

【八股】2024春招八股复习笔记2(大数据开发,Java)

【八股】2024春招八股复习笔记2(大数据开发) 文章目录 1、大数据存储(Flume、Hive、HBase、HDFS)2、大数据计算(MapReduce,Spark、Flink)3、大数据集群(Yarn、ZooKeeper、kafka&…

R语言 | 上下双向柱状图

1. 效果图 2. 代码 # 生成测试数据 difdata.frame(labelspaste0("pathway", 1:3),upc(30,15,1),downc(10,20,40) ) rownames(dif)dif$labels dif#变形 difreshape2::melt(dif) dif# 绘图 ggplot(dif, aes(xlabels, yifelse(variable"up", value, -value), …

Digital Image processing (DIP)

Camera FOV: Filed of view DOV: deep of view 景深 被F f/D 衡量,f 是焦距,D 是光圈大小。 当确定好了景深后,如何光线较暗,则需要补光,或者适当延长曝光时间(快门) 分辨率、像素尺寸&…

【GitLab】Ubuntu 22.04 快速安装 GitLab

在 Ubuntu 22.04 上安装最新版本的 GitLab,可以按照以下步骤操作: 1. 更新系统: 在终端中执行以下命令以确保系统是最新的: sudo apt update sudo apt upgrade2. 安装依赖: 安装 GitLab 所需的依赖包: …

2024年云计算使用报告,89%组织用多云,25%广泛使用生成式AI,45%需要跨云数据集成,节省成本是云首要因素

备注:本文来自Flexera2024年的云现状调研报告的翻译。原报告地址: https://info.flexera.com/CM-REPORT-State-of-the-Cloud Flexera是一家专注于做SaaS的IT解决方案公司,有30年发展历史,5万名客户,1300名员工。Flex…

35.HarmonyOS App(ArkUI)使用父组件@Builder装饰的方法初始化子组件@BuilderParam报错

HarmonyOS App(ArkUI)使用父组件Builder装饰的方法初始化子组件BuilderParam报错 Type void is not assignable to type () > void. <tsCheck> 去掉括号()就可以了 装饰器&#xff1a; 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。如上述示例中En…

npm淘宝镜像源更新

目录 前情提要&#xff1a; 背景&#xff1a; 镜像源更新&#xff1a; 清楚缓存&#xff1a; 直接切换镜像源&#xff1a; 补充&#xff1a; 错误解释&#xff1a; 解决方法&#xff1a; 前情提要&#xff1a; 2024 /1 /22 &#xff0c;registry.npm.taobao.org淘宝镜像源的SSL…

数据结构之单链表的详细实现(图解)

前言 本次博客讲结合图例讲解单向不带头非循环链表 此后会讲解一些题目 1单链表的实现 1.1什么是单链表 我们先看数组&#xff0c;即顺序表的是什么样的&#xff0c;再看链表 1.2单链表的特点 实际中要实现的链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结…

HarmonyOS实战开发-为应用添加运行时权限

介绍 通过AbilityAccessCtrl动态向用户申请“允许不同设备间的数据交换”的权限&#xff0c;使用设备管理实例获取周边不可信设备列表。 说明&#xff1a; 查询周边不可信设备之前&#xff0c;请确保本设备与周边设备未进行配对。如果已配对&#xff0c;则恢复出厂设置之后重新…