Simulink 环境基础知识(二十四)--合成信号的类型

目录

合成信号的类型

虚拟总线

非虚拟总线

串联信号

复路信号


合成信号的类型

        为了降低模型中的外观复杂度,可以将信号合并为合成信号。合成信号包含的信号称为元素。元素保留它们各自的身份,这可以从合成信号中提取它们。根据合成信号类型,可以通过名称或索引访问合成信号元素。

  • 基于名称的合成信号允许使用信号层次结构。它们统称为总线

  • 基于索引的合成信号是平面结构的,无论是否是在不同的阶段创建它们。它们要求所有输入信号具有相同的数据类型。

        当将多个信号组合为一个合成信号时,可以决定它们是否影响仿真和代码生成。

  • 虚拟合成信号通过将两条或多条信号线合并为一条线,简化模型的视觉外观。它不会在任何功能上对信号进行组合,因此不会影响仿真或代码生成。在仿真和生成代码中,虚拟合成信号可以直接访问元素,因此比非虚拟合成信号的执行速度更快。

  • 非虚拟合成信号在外观和功能上对信号进行组合,从而会影响仿真和代码生成。

        模型可以使用这些合成信号类型的组合。

合成信号特性基于名称的访问基于索引的访问
外观上的组合

虚拟总线

复路信号

功能上的组合

非虚拟总线

串联信号

        编译或仿真模型后,可以通过合成信号的线型来识别其类型。

线型合成信号类型
虚拟总线
非虚拟总线
启用 Nonscalar Signals 信息叠加时的非标量信号(包括基于索引的合成信号)
包含非虚拟总线的基于索引的合成信号

虚拟总线

        此模型显示一条虚拟总线,其中包含信号 ab 和 c

        Bus Creator模块在子系统或模型中创建总线。Bus Selector模块提取总线的指定元素。此模型显示穿过子系统边界的等效虚拟总线。

        Out Bus Element模块在子系统或模型接口上创建总线。In Bus Element模块在子系统或模型接口上提取总线的指定元素。可以使用虚拟总线来:

  • 包含具有不同采样率的总线元素。

  • 跨模型引用边界。

        要指定和验证虚拟总线的属性,可以指定Simulink.Bus对象。要创建虚拟总线,将信号组合为虚拟总线

非虚拟总线

        此模型显示包含信号 ab 和 c 的非虚拟总线。

        Bus Creator模块在子系统或模型中创建总线。Bus Selector模块提取总线的指定元素。可以使用非虚拟总线来:

  • 将总线数据打包为生成的 C 代码中的结构体。

  • 构造总线数组。

  • 通过 S-Function 对接外部代码。

  • 总线数据需要跨 MATLAB Function 模块或 Stateflow® 图边界。

  • 使用 Scope 模块显示和记录总线。

        非虚拟总线的所有元素必须使用相同的采样时间,即使相关联的Bus对象指定使用继承的采样时间也是如此。可以使用Rate Transition模块更改总线中单个信号或所有信号的采样时间。

        Simulink.Bus对象必须定义要做为非虚拟的总线。当选择 Output as nonvirtual bus 参数时,总线变为非虚拟总线。选择此参数将导致仿真和代码生成应用由 Bus 对象定义的结构体。如果清除此参数,Bus对象将仅验证总线的属性。不同的总线类型在生成代码的效率、大小和可读性方面可能存在显著差异。要使总线出现在生成的代码中,它必须为非虚拟总线。只有虚拟总线的元素出现在生成的代码中。

        例如,假设一条总线穿过 Unit Delay 模块。为简单起见,该总线只包含三个元素:ab 和 c。下表显示 Output as nonvirtual bus 参数对生成代码的影响。

生成的代码虚拟总线非虚拟总线

model_types.h 文件

虚拟总线不需要类型定义。

Bus对象在生成的代码中显示为结构体。

typedef struct {
  real_T a;
  real_T b;
  real_T c;
} BusObject;

model.h 文件

生成的代码为虚拟总线的每个元素定义一个 Unit Delay 模块。

typedef struct {
  real_T UnitDelay_1_DSTATE;  /* '<Root>/Unit Delay' */
  real_T UnitDelay_2_DSTATE;  /* '<Root>/Unit Delay' */
  real_T UnitDelay_3_DSTATE;  /* '<Root>/Unit Delay' */
} DW_model_T;

生成的代码使用 BusObject 结构体为非虚拟总线定义一个 Unit Delay 模块。

typedef struct {
  BusObject UnitDelay_DSTATE;  /* '<Root>/Unit Delay' */
} DW_model_T;

        要创建非虚拟总线,可以参考Create Nonvirtual Buses。如果打算为使用总线的模型生成代码,参考Generate Efficient Code for Bus Signals(Simulink Coder)。非虚拟总线的生成代码可能会包含某些总线信号的多个副本。

串联信号

        此模型显示将输入矩阵并排放置在一起的串联信号。

        Matrix Concatenate 模块创建串联信号。元素可以是向量或矩阵,这取决于如何配置此模块。Selector模块根据指定的索引提取信号。提取的信号可以按不同于输入信号的方式进行组合。可以在数学运算中使用串联信号。要用 Vector Concatenate 或 Matrix Concatenate 模块对信号进行组合,这些信号必须具有相同的数据类型。当数据类型是Bus对象时,输入必须为非虚拟总线。

        串联的非虚拟总线也称为总线数组。在总线数组中,所有元素均为非虚拟总线,它们使用相同的Bus对象来指定属性。总线数组相当于MATLAB® 中的结构体数组。可以使用总线数组对多通道系统进行建模。虽然所有通道都具有相同的属性,但每个通道可能具有不同值。

        在此模型中,Vector Concatenate 模块创建一个总线数组。

        有关总线数组的详细信息,可以参考将总线合并为总线数组

复路信号

        此模型显示将三个输入信号并排放置在一起的复路信号。

        Mux模块创建复路信号。Demux模块提取所有信号,这些信号的组合方式可能不同于输入信号。Selector模块根据指定的索引提取信号。提取的信号可以按不同于输入信号的方式进行组合。可以使用复路信号对多个向量执行计算。还可以使用Mux模块创建由函数调用组成的向量。

        Mux模块的输入信号可以是标量、向量和复路信号的任意组合,但它们必须具有相同的数据类型和数值类型。复路输出信号中信号的显示顺序与Mux模块的输入信号相同。可以使用多个Mux模块分多个阶段创建复路信号,但结果是平面结构,就像只使用一个 Mux 模块一样。

  • 5
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值