模拟数据检查器可以比较来自工作区、文件或模拟中的运行和单个信号的数据和元数据。可以使用公差来分析比较结果,并可以通过指定信号属性和比较约束来配置比较行为。此示例使用从模型slexAircraftExample的模拟中记录的数据,演示了以下内容:
- 比较信号和运行。
- 使用模拟数据检查器中的比较窗格分析比较结果。
- 指定信号公差和全局公差。
- 配置比较约束。
有关影响比较的公差计算和信号属性的更多信息,请参阅《模拟数据检查器如何比较数据》。要以编程方式比较数据,请使用Simulink.sdi.compareRuns函数或Simulink.sdi.compareSignals函数。
设置 此示例继续自《检查模拟数据》。还可以使用此脚本生成示例所需的数据。
load_system('slexAircraftExample')
% Configure signals to log
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot', 1, 'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model', 3, 'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model', 4, 'on')
% Change Pilot signal to sine
set_param('slexAircraftExample/Pilot', 'WaveForm', 'sine')
% Simulate model
sim('slexAircraftExample')
ans =
Simulink.SimulationOutput:
logsout: [1x1 Simulink.SimulationData.Dataset]
tout: [1235x1 double]
xout: [1x1 Simulink.SimulationData.Dataset]
yout: [1x1 Simulink.SimulationData.Dataset]
SimulationMetadata: [1x1 Simulink.SimulationMetadata]
ErrorMessage: [0x0 char]
% Change Pilot signal to square
set_param('slexAircraftExample/Pilot', 'WaveForm', 'square')
% Simulate Model
sim('slexAircraftExample')
ans =
Simulink.SimulationOutput:
logsout: [1x1 Simulink.SimulationData.Dataset]
tout: [1381x1 double]
xout: [1x1 Simulink.SimulationData.Dataset]
yout: [1x1 Simulink.SimulationData.Dataset]
SimulationMetadata: [1x1 Simulink.SimulationMetadata]
ErrorMessage: [0x0 char]
比较信号 可以比较信号以分析模型中两个信号之间的关系。例如,比较摇杆输入信号与输出信号 alpha(弧度)。
1.导航至比较窗格。
2.要查看可用于比较的信号列表,请展开基准下拉菜单,然后选择信号。
3.选择摇杆(运行 1:slexAircraftExample)。
4.展开“比较至”下拉菜单,然后选择 alpha,弧度(运行 1:slexAircraftExample)。
单击“比较”。
5.或者,可以通过在检查窗格中右键单击信号,使用上下文菜单来选择基准和比较信号。
这些信号不完全相同,因此它们在默认情况下设置为绝对、相对和时间公差均为 0 的情况下不匹配。
如图所示:
信号时间公差 在比较视图的顶部图中,您可以看到 alpha,弧度信号滞后于摇杆信号。对于信号比较,模拟数据检查器使用为基准信号指定的公差值。为了考虑滞后,给摇杆信号添加一个时间公差。
选择摇杆信号,然后在属性窗格的“时间公差”字段中输入 0.5。当您为基准信号指定公差时,其“覆盖全局公差”字段会自动更改为是。当您点击“时间公差”字段以外的区域时,比较会再次运行,使用您指定的信号级公差。如果您想要使用信号的全局公差值,请点击“覆盖全局公差”字段,并从下拉菜单中选择“否”。
模拟数据检查器在绘制的基准信号周围和底部子图中显示差异信号周围绘制公差带。差异图的顶部条显示在绿色和红色中比较中在公差范围内和超出公差范围的区域。
如图所示:
信号幅度公差 时间公差覆盖了两个信号之间的相位差异,但由于振幅差异,比较仍然包括超出公差范围的区域。您可以添加幅度公差,可以是绝对公差或相对公差。
要为摇杆信号添加绝对公差,请在属性窗格的“绝对公差”字段中输入 0.05。通过绝对和时间公差的组合,信号比较通过了。
注意
模拟数据检查器使用每个点的指定公差的最宽松解释来绘制公差区域。有关模拟数据检查器如何计算公差带的更多信息,请参阅《公差规范》。
如图所示:
比较运行
还可以使用模拟数据检查器将一个运行中的所有信号与另一个运行中的所有信号进行比较。运行比较可以提供有关更改模型参数的影响的有用信息。例如,更改控制杆输入信号的滤波器的截止频率。然后,使用模拟数据检查器评估对记录的信号的影响。
1.要访问模型工作区中的数据,请在“建模”选项卡下的“设计”下,单击“模型资源管理器”。
2.单击模型名称旁边的箭头,然后选择“模型工作区”。
3.将 Ts 的值从 0.1 更改为 1,并关闭模型资源管理器。
4.使用新的滤波器对模型进行仿真。
5.在模拟数据检查器中的“比较”窗格中,展开“基准”下拉菜单,然后选择“运行”。
6.从运行列表中,选择“运行 2:slexAircraftExample”。
7.展开“比较至”下拉菜单,然后选择“运行 3:slexAircraftExample”。
8.单击“比较”。
“比较”窗格列出了来自比较运行的所有信号,并总结了比较结果在“结果”列中。在此示例中,所有三个信号都对齐,但没有匹配。可以单击“更多”以查看每个信号比较不匹配的原因。所有三个信号都超出了公差范围。
如图所示:
注意
模拟数据检查器仅比较与比较运行的信号对齐的基准运行中的信号。如果基准运行中的信号与比较运行中的信号不对齐,则在“比较”窗格中列出该信号,并带有警告。有关信号对齐的更多信息,请参阅信号对齐。
要绘制比较结果,请在“比较”窗格中选择要查看的信号。例如,选择 q,弧度/秒 信号的结果。顶部图显示了基准运行和比较运行中的 q,弧度/秒 信号。底部图显示了信号之间的差异以及计算的公差带。
如图所示:
全局公差
要分析运行比较中的信号,您可以指定全局公差。要指定全局公差,请单击“更多”。在全局公差下,输入 0.75 作为时间公差和 0.075 作为绝对公差。
如图所示:
点击“比较”按钮来运行比较。模拟数据检查器会在基准信号周围和在差异图上绘制公差带。使用新的公差值,摇杆和 q,弧度/秒 信号通过了比较。如图所示:
查看 alpha,弧度 信号以分析比较结果中超出公差范围的区域。点击工具栏中的箭头按钮来浏览超出公差范围的区域。图中的两个光标显示了第一个超出公差范围的开始和结束。可以使用键盘上的箭头键来浏览每个超出公差范围内的信号和公差值。要查看下一个超出公差范围,请点击工具栏中的右箭头按钮。如图所示:
要解决超出公差范围的区域,可以选择修改全局公差值或者使用信号属性为 alpha,弧度 信号添加特定信号的公差。
配置比较约束
还可以应用影响结果是否匹配的比较约束。例如,可以指定信号的时间向量必须匹配才能使结果匹配。要指定约束,请单击“更多”,然后选择“信号时间向量必须匹配”。要使用此约束运行新的比较,请单击“比较”。
现在,比较结果显示所有信号结果都是不匹配的。这是因为这些信号来自使用可变步长求解器的模型的模拟,而且模拟之间的条件发生了变化。当比较结果由于约束而不匹配时,模拟数据检查器不会计算该信号的结果。当选择一个信号时,绘图区域会显示信号结果为不匹配的原因解释。
如图所示:
可以配置以下比较约束:
- 信号数据类型必须匹配
- 信号起始和停止时间必须匹配
- 信号时间向量必须匹配
当要求信号元数据匹配时,指定约束可以更快地返回不匹配的结果,因为当指定的元数据不匹配时,比较不会计算结果。
还可以配置比较在检测到第一个不匹配结果后停止计算结果。当配置比较在第一个不匹配时停止时,比较始终在检测到信号元数据的第一个不匹配后停止。还可以选择在比较信号数据时第一个不匹配结果是由于超出公差而导致时停止比较。
模拟数据检查器始终对基准和比较运行中的信号进行对齐,并始终检查信号单位是否匹配。当配置比较在第一个不匹配时停止时,不对齐的信号和单位不匹配的信号总是会导致比较停止。可以通过选择一个或多个约束来指定比较要检查的其他元数据。
取消比较
此示例中使用的运行和信号相对较小,比较速度较快。当比较长信号或包含许多信号的运行时,比较可能需要更多时间。模拟数据检查器在比较过程中显示渐进式进度指示器,并且“比较”按钮变成了“取消”按钮,可以在任何时候点击它来取消比较。对于分层数据,比较视图中的“结果”列总结了每个分层节点上的结果。
如图所示: