Simulink.sdi.compareSignals
比较两个 Simulink.sdi.Signal 对象中的数据
语法
说明
比较与信号 ID diff = Simulink.sdi.compareSignals(sigID1,sigID2)sigID1 和 sigID2 对应的信号,并将结果返回到 Simulink.sdi.DiffSignalResult 对象中。有关如何计算比较结果的详细信息,请参阅 仿真数据检查器如何比较数据。
使用由一个或多个名称-值参量指定的选项,比较与信号 ID diff = Simulink.sdi.compareSignals(sigID1,sigID2,Name=Value)sigID1 和 sigID2 对应的信号。 (自 R2023a 起)
示例
您可以使用仿真数据检查器编程接口比较一次运行中的信号。此示例比较飞机纵向飞行控制器的输入和输出信号。
加载包含飞行控制数据的仿真数据检查器会话文件。
Simulink.sdi.load("AircraftExample.mldatx");要访问最新运行,请使用 Simulink.sdi.Run.getLatest 函数。
aircraftRun = Simulink.sdi.Run.getLatest;
使用 Simulink.sdi.getSignalsByName 函数访问表示控制器输入的 Stick 信号和表示输出的 alpha, rad 信号。
stick = getSignalsByName(aircraftRun,"Stick"); alpha = getSignalsByName(aircraftRun,"alpha, rad");
使用 Simulink.sdi.compareSignals 函数,使用信号 ID 比较 Stick 和 alpha, rad 信号。Stick 信号是基线信号。alpha, rad 信号是与基线信号进行比较的信号。
comparisonResults = Simulink.sdi.compareSignals(stick.ID,alpha.ID); match = comparisonResults.Status
match =
ComparisonSignalStatus enumeration
OutOfTolerance
比较结果超出容差范围。您可以使用 Simulink.sdi.view 函数打开仿真数据检查器来查看和分析比较结果。
Simulink.sdi.view

您可以指定用于比较的时间和幅值容差值。这些比较使用为比较中的基线信号指定的容差值。为了考虑相移,在 Stick 信号上设置时间容差 1。为了考虑幅值差,在 Stick 信号上设置绝对容差值 0.1。
stick.TimeTol = 1; stick.AbsTol = 0.1;
再次比较信号。这次,由于设置了绝对容差和时间容差,信号比较通过。
comparisonResults = Simulink.sdi.compareSignals(stick.ID,alpha.ID); match = comparisonResults.Status
match =
ComparisonSignalStatus enumeration
WithinTolerance

此示例说明如何使用仿真数据检查器的 Simulink.sdi.compareSignals 函数比较一个信号在不同仿真运行中的结果。当您只有一个信号需要比较时,使用信号比较将直接返回 Simulink.sdi.diffSignalResult 对象及比较数据。
生成仿真数据
使用 slexAircraftExample 模型生成仿真运行。在各次运行之间,更改输入滤波器的时间常数。
% Load example model load_system('slexAircraftExample') % Mark the alpha, rad signal for streaming Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on') % Simulate system out_1 = sim('slexAircraftExample'); % Change input filter time constant modelWorkspace = get_param('slexAircraftExample','modelworkspace'); assignin(modelWorkspace,'Ts',0.2) % Simulate again out_2 = sim('slexAircraftExample');
获取用于信号比较的信号 ID
使用运行 ID 创建运行对象,然后使用 getSignalIDByIndex 获取要传递给 Simulink.sdi.compareSignals 的信号 ID。
% Get run data
runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end-1);
runID2 = runIDs(end);
run1 = Simulink.sdi.getRun(runID1);
run2 = Simulink.sdi.getRun(runID2);
sigID1 = getSignalIDByIndex(run1,1);
sigID2 = getSignalIDByIndex(run2,1);比较信号
比较两个信号,然后打开仿真数据检查器查看结果。
diffResult = Simulink.sdi.compareSignals(sigID1,sigID2); Simulink.sdi.view
输入参数
基线信号的信号 ID,指定为整数。创建一个运行时,仿真数据检查器会为每个信号赋予一个信号 ID。您可以使用以下函数之一获取信号的信号 ID:
要比较的信号的信号 ID,指定为整数。创建一个运行时,仿真数据检查器会为每个信号赋予一个信号 ID。您可以使用以下函数之一获取信号的信号 ID:
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: diff = Simulink.sdi.compareSignals(sigID1,sigID2,DataType="MustMatch")
比较时对信号数据类型的敏感度,指定为 "MustMatch"。如果您希望比较对所比较信号中的数值数据类型不匹配敏感,请指定 DataType="MustMatch"。
当信号数据类型不匹配时,Simulink.sdi.DiffSignalResult 结果对象的 Status 属性设置为 DataTypeMismatch。
Simulink.sdi.compareSignals 函数将先比较数据类型,再同步和比较信号数据。如果不指定此名称-值参量,数据类型检查只用于检测是否为字符串和数值数据之间的比较。对于字符串和数值数据之间的比较,不计算结果,且结果的状态为 DataTypeMismatch。对于具有不同数值数据类型的信号,比较会计算结果。
如果您将比较配置为在遇到第一次不匹配时停止,则数据类型不匹配会停止比较。
比较时对信号时间向量的敏感度,指定为 "MustMatch"。当您希望比较对所比较信号的时间向量中的不匹配敏感,请指定 Time="MustMatch"。当您指定此名称-值参量时,算法会先比较时间向量,再同步和比较信号数据。
当时间向量不匹配时,Simulink.sdi.DiffSignalResult 结果对象的 Status 属性设置为 TimeMismatch。
除非指定此名称-值参量,否则比较对信号时间向量的差异不敏感。如果比较对时间向量的差异不敏感,比较算法会在比较之前同步信号。有关同步如何工作的详细信息,请参阅仿真数据检查器如何比较数据。
如果您指定时间向量必须匹配并将比较配置为在遇到第一次不匹配时停止,则时间向量不匹配会停止比较。
比较时对信号开始和停止时间的敏感度,指定为 "MustMatch"。如果您希望比较对信号开始和停止时间的不匹配敏感,请指定 StartStop="MustMatch"。当您指定此名称-值参量时,算法会在同步和比较信号数据之前比较每个信号的开始和停止时间。
当开始时间和停止时间不匹配时,Simulink.sdi.DiffSignalResult 结果对象的 Status 属性设置为 StartStopMismatch。
如果您指定开始和停止时间必须匹配并将比较配置为在第一次不匹配时停止,则开始或停止时间不匹配会停止比较。
比较时对信号单位的敏感度,由 "Ignore" 指定。如果您要在比较时忽略信号单位不匹配,请指定 Units="Ignore"。
除非指定此名称-值参量,否则比较对对齐的信号单位的差异不敏感。当您未指定此名称-值参量且基线信号和比较信号都具有不匹配的单位时,结果的 Simulink.sdi.DiffSignalResult 对象的 Status 属性设置为 UnitsMismatch。如果仅一个信号具有单位,则比较对差异不敏感。
如果您指定比较时忽略信号单位不匹配并将比较配置为在遇到第一次不匹配时停止,则单位不匹配不会停止比较。
比较是否在第一次检测到不匹配时停止,指定为 "Metadata" 或 "Any"。在比较多维信号时,停止的比较可能不会计算所有通道的结果,并且会更快地返回不匹配的结果。
"Metadata"- 元数据不匹配会停止比较。元数据比较发生在信号数据比较之前。仿真数据检查器始终对齐信号。如果您将比较配置为在遇到第一次不匹配时停止,则未对齐的信号始终会停止比较。
默认情况下,当基线信号和比较信号都具有单位时,仿真数据检查器会比较对齐信号的单位。如果您将比较配置为在遇到第一次不匹配时停止,则不匹配的单位会停止比较。要忽略信号单位的不匹配,请指定
Units="Ignore"。您可以指定额外的名称-值参量来配置比较,以检查是否存在额外元数据(如信号数据类型、开始和停止时间以及时间向量)的不匹配,并在第一次遇到该不匹配时停止。
"Any"- 元数据或信号数据不匹配会停止比较。
是否计算多维信号中每个通道的比较结果,指定为逻辑值 true (1) 或 false (0)。
true或1- 比较将表示为具有非标量采样值的单个信号的多维信号扩展为一组具有标量采样值的信号,并计算每个信号的比较结果。该多维信号在仿真数据检查器中仍将表示为含非标量采样值的单个信号,这并不会有所改变。
false或0- 比较不计算表示为具有非标量采样值的单个信号的多维信号的结果。
输出参量
信号比较结果,以 Simulink.sdi.DiffSignalResult 对象形式返回。复信号比较结果以包含两个 DiffSignalResult 对象的数组形式返回。DiffSignalResult 对象包含实数数据,另一个包含虚数数据。检查 DiffSignalResult 对象的 Name 属性,以确定它是包含实数还是虚数数据。
限制
仿真数据检查器不支持比较以下项:
int64或uint64数据类型的信号可变大小信号
如果执行多个信号比较或运行比较,则只有最新的 DiffSignalResult 对象具有可见属性。
版本历史记录
在 R2011b 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)