首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Simulink代码生成: Selector模块及其代码

  • 23-09-22 01:02
  • 2665
  • 8403
blog.csdn.net

本文研究Selector模块的用法和该模块生成的代码。

文章目录

  • 1 Simulink中的Selector模块
    • 1.1 Selector模块的简单模型
    • 1.2 Selector模块的参数
  • 2 Selector模块的代码
  • 3 总结

1 Simulink中的Selector模块

Selector翻译过来就是选择器的意思。该模块用于将Vector信号或者Matrix信号中的某个元素选出来。对应C代码中就是根据某个索引将数组(一维或者多维)中某个元素提取出来。

1.1 Selector模块的简单模型

首先打开Simulink,建立一个Selector模块。
在这里插入图片描述
可以看出默认的Selector模块左边有三个矩形,右边有两个,并且左边的第一、二个矩形和右边的两个之间有连线。这里推测是将左边输入的三个数的前两个选择出来,从右边输出。

为了验证一下这个想法,在左边建立一个Const模块,数值为[2,4,7]。右边加一个Display模块用于观察结果,如图所示。
在这里插入图片描述
运行后观察Display模块,发现确实输出了前两个数。通过配置参数,可以让这个模块输出特定位置的元素。
在这里插入图片描述

1.2 Selector模块的参数

双击Selector模块,打开Selector模块的参数窗口,其中有很多可配置的参数。
在这里插入图片描述
1)Number of input dimensions
这一项指定了输入的维度。Vector信号对应的是一维数组,这里就写成1。如果是二位数组,输入则是一个[nxn]的Matrix信号。下图展示了一个Matrix信号的,并选择出它第二行第三列的元素。
在这里插入图片描述
2)Index Mode
字面意思是索引模式,可以选择Zero-based或者One-based。区别是下标从0开始算还是从1开始算。
如下图所示,如果选Zero-based,Index为2,就会把第3个元素提取出来。
在这里插入图片描述
3)Index Option
这一项是Index的设置,有5个选项。
在这里插入图片描述
Index vector这一类是直接按照后面的Index输出;Starting Index是按照开始的索引和一个长度,输出若干个连续的元素。

后面括号中的dialog或者port指的是Index是否由外部port口给出。如果是选择了(port),模块就会变成下面这个样子,可以通过一个port口输入一个index值。
在这里插入图片描述
4)Input port size
这一项在Dimensions选择为1维的时候才有,指的是输入Vector的长度。如果长度和实际输入不匹配会报错。

博主在工作中常见的选择配置是,Number of input dimensions是1维,因为很少处理Matrix信号;Index Mode是Zero-based,符合C代码习惯;Index Option选Index vector(port口),因为多数情况下只要用到数组中的一个元素,而且port口可以更直观地反映出提取的是哪个元素。

2 Selector模块的代码

Selector模块中的配置很多,这里只选择常见的一种情况,研究代码生成。

章节1.1中的模型做少许修改得到如下demo模型。
在这里插入图片描述
其中,把输入U的Port dimensions设为4,也就是输出了一个[1x4]的vector。输入U和Idx都是single型。
在这里插入图片描述
将Selector设置如下,
在这里插入图片描述
这个模型的含义是,根据In2的数值,挑选出In1的中对应索引的值。

Ctrl + B生成代码,如下
在这里插入图片描述
可以观察到step函数中,In1是个长度为4的数组,类型是浮点型。In2也是浮点型,将其类型转换为int32后作为In1的数组下标,取出对应的数值赋给了Out1。

3 总结

Selector在代码中的表现还是比较简单的,主要是模型中做好正确的配置。另外,Selector模块比较常用,而且会经常和循环相关的模块配合一起建模。

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/106390352"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top