检查可变尺寸信号打开动态仿真模块模型
可变大小信号的产生和操作
这个示例模型展示了如何从多个固定大小的信号和从单个数据信号创建一个可变大小的信号。它还展示了一些可以应用于可变大小信号的操作。
有关支持可变大小信号的块的完整列表,请参见Simulink块对可变大小信号的支持.
在MATLAB®命令窗口中,键入
openExample('sldemo_varsize_basic') varSize = get_param(outPortHandle,'CompiledPortDimensionsMode')
在仿真软件®编辑器,调试选项卡上,选择信息覆盖>信号的维度.运行模拟或按ctrl - d.
Simulink编辑器显示信号尺寸和线条样式。看到信号基础知识用来解释信号线的样式。
这样你就能看到模型中方块的名字,在格式选项卡,明确汽车>隐藏自动块名称.
从固定大小的信号创建一个可变大小的信号
创建可变大小信号的一种方法是使用开关块。输入信号到开关块可以在维度的数量和大小上有所不同。
的输出开关块是一个二维可变大小的信号,其最大大小为3 x2
.当您选择允许不同的数据输入大小的参数开关块,Simulink不会从Constant1块扩展标量值。
保存可变大小的信号数据
你可以加一个到工作空间块的输出开关块。因为模型已经有一个到工作空间块,第二到工作空间块将数据保存到一个名为simout2
的值
字段记录实际的信号值。如果记录的信号数据小于最大大小,则用nan或适当的值填充值。要获得这些信号值,输入:
simout2.signals。值ans(:,:,1) = 1 -1 -2 2 -3 3 ans(:,:,2) = 1 -1 -2 2 -3 3 ans(:,:,3) = 0 NaN NaN NaN NaN NaN
的valueDimensions
字段记录可变尺寸信号的尺寸。要获得尺寸,输入:
simout2.signals.valueDimensions
给出了前三个时间步长的信号维数。
Ans = 3 2 3 2 1 1
从单个数据信号创建一个可变大小的信号
数据信号(Constant5)是一个3 x4
矩阵。脉冲发生器表示选择起始和结束指标值((1 2)
或3 [1]
).的选择器Block然后使用索引值在每个时间步选择数据信号的不同部分,并输出一个可变大小的信号。
查看信号大小的变化
的输出选择器Block要么是2 x2
或3 x3
矩阵。因为可变大小信号的最大维数是3 x4
矩阵从数据信号,记录的输出信号填充nan。
使用探针或宽度块来检查可变大小信号的当前尺寸和宽度。此外,还可以显示可变大小的信号范围块,并将可变大小的信号保存到工作区到工作空间块。
过程适应信号
模型的其余部分显示了使用可变大小的信号可能进行的各种操作。操作包括使用获得,总和,数学函数,矩阵连接块。方法连接可变大小的信号从,转到,总线分配,总线的创造者,总线选择器块。
可变尺寸信号长度适应
这个示例模型对应于一个假设系统,其中模型随时间调整信号的长度。长度自适应是基于控制信号的值。当控制信号落在三个预定义范围之一时,固定大小的原始数据信号变为可变大小的数据信号。
可变大小信号连接到一个处理块,支持可变大小信号的块对其进行操作。一个具有可变大小的输入和输出信号的MATLAB函数块比支持可变大小信号的其他块具有更大的灵活性。看到Simulink块对可变大小信号的支持.
要打开示例模型,在MATLAB命令窗口中输入:
sldemo_varsize_dataLengthAdapt
这样你就可以在模型中看到方块的名字格式选项卡,明确汽车>隐藏自动块名称.
通过调整数据信号的长度来创建可变大小的信号
该模型生成一个数据信号,并将该信号转换为可变大小的信号。信号的大小取决于控制信号的值。原始数据信号是一个列向量,其值来自1
来9
.
[1:9]。’ans = 1 2 3 4 5 6 7 8 9
在长度适应子系统中,信号大小子系统根据来自尺寸选择子系统(In2)的质量值生成索引。的数据选择器块使用开始和结束索引来适应数据信号(In1)的长度,并输出一个可变大小的信号。
处理可变大小的信号
模型的中心部分处理可变尺寸的信号。的MATLAB函数Block在数据值之间加0的方式类似于信号的上采样。信号的维数从9
来18
.的数学函数块显示了您可以用可变大小的信号进行的各种操作。
可视化可变大小的信号
模型的右边部分确定信号宽度(大小),并使用一个作用域来可视化宽度和处理过的数据信号。
Mode-Dependent适应信号
该示例模型表示一个具有三种操作模式的系统。对于每种模式,要处理的数据信号有不同的大小。
该模型中的Process子系统接收一个可变大小的信号,其中信号的大小取决于系统的运行模式。对于每个模式更改,状态流®模式控制逻辑,检测数据信号大小的变化。然后它生成一个函数调用来重置Process子系统中的块。
要打开模型,在MATLAB命令窗口中,输入:
sldemo_varsize_multimode
这样你就可以在模型中看到方块的名字格式选项卡,明确汽车>隐藏自动块名称.
基于模式创建可变大小信号
模式选择子系统决定处理数据信号的模式,并输出模式值(1、2或3)。该值有助于使用大小选择和数据子系统选择数据信号的长度。
大小选择子系统从模式值创建一个索引值。在本例中,索引值为3 [1]
,(1 2)
,[1]
.
Data子系统接受一个数据信号(常数Block),并根据模式选择部分数据信号。输出是一个矩阵大小为的可变大小信号3 x3
,2 x2
,1 x1
.
原始数据信号的尺寸(常数块)是一个3 x3
.连接后到工作空间块到信号线,您可以在MATLAB命令窗口中通过输入:
Simout.signals.values ans(:,:,1) = 1 4 7 2 5 8 3 6 9
数据子系统产生的可变大小信号也是一个3 x3
矩阵。对于较短的信号,矩阵用nan填充。
simout.signals.values ans(:,:,1) = 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN ans(:,:,2) = 1 4 NaN 2 5 NaN NaN NaN NaN NaN ans(:,:,3) = 1 4 7 2 5 8 3 6 9
用有条件执行的子系统处理可变大小的信号
因为Process子系统包含一个延迟块,子系统在每个时间步上重置并重新传播信号。该模型使用状态流图来检测信号大小的变化并重置Process子系统。
在功能块对话框中,并从可变大小信号的传播大小列表中,选择只有当使
.当模型启用这个子系统时,选择这个选项将指导Simulink软件在有条件执行的子系统中传播可变大小信号的大小。只有当信号从禁用转换为启用时,信号大小才能改变。有关使用包含状态的块处理信号大小变化的解释,请参见变大小信号如何传播.
状态流图确定信号的大小是否有变化。这个函数size_detect
计算可变大小信号在每个时间步长的宽度,并将当前宽度与之前的宽度进行比较。如果信号大小发生变化,图表将输出一个函数调用输出事件,该事件重置并重新传播Process子系统中的信号大小。
可视化数据
使用Probe块可视化信号大小和信号尺寸。
因为信号是n * n
矩阵,信号维度线重叠在范围显示。
您可以使用显示块和Simulink调试器来可视化每个时间步的信号值。
使用可变大小信号的s函数
2级MATLABs函数与变大小信号
二级MATLAB s -函数和C s -函数都支持可变大小的信号,当你设置DimensionMode的输出端口变量
.您还需要考虑输入和输出更新方法中输入和输出信号的当前维度。
要打开这个示例模型,在MATLAB命令窗口中输入:
msfcndemo_varsize
Enabled子系统包括一个Level-2的MATLAB S-Function,它展示了如何实现一个块,保持它的状态直到重置。因为这个块包含状态并延迟输入信号,所以只有在发生重置时输入大小才会改变。
的扩大block是一个第2级MATLAB s函数,它接受标量输入并输出由其输入值表示的长度向量。输出为1: n
在哪里n
是输入值。
C s函数的变大小信号
要打开这个示例模型,在MATLAB命令窗口中输入:
sfcndemo_varsize
已启用的子系统有两个s - function:
sfun_varsize_holdStatesUntilReset是一个C S-Function,它有状态,并且每当输入信号的大小改变时,需要重置它的DWorks向量。
sfun_varsize_concat1D是一个C s函数,它实现了两个无方向向量的拼接。您可以在已启用的子系统中单独使用此函数。