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');
在比较信号之前,您可以指定用于比较的容差值。比较使用在比较中为基线信号指定的容差值,因此请在 Stick
信号上设置绝对容差值 0.1
。
stick.AbsTol = 0.1;
现在,使用 Simulink.sdi.compareSignals
函数比较信号。Stick
信号是基线,alpha, rad
信号是要与基线进行比较的信号。
comparisonResults = Simulink.sdi.compareSignals(stick.ID,alpha.ID); match = comparisonResults.Status
match = ComparisonSignalStatus enumeration OutOfTolerance
比较结果超出容差范围。您可以使用 Simulink.sdi.view
函数打开仿真数据检查器来查看和分析比较结果。
比较一个信号在不同运行中的结果
此示例说明如何使用仿真数据检查器的 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
输入参数
sigID1
— 基线信号的信号 ID
整数
基线信号的信号 ID,指定为整数。创建一个运行时,仿真数据检查器会为每个信号赋予一个信号 ID。您可以使用以下函数之一获取信号的信号 ID:
sigID2
— 要比较的信号的信号 ID
整数
要比较的信号的信号 ID,指定为整数。创建一个运行时,仿真数据检查器会为每个信号赋予一个信号 ID。您可以使用以下函数之一获取信号的信号 ID:
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: diff = Simulink.sdi.compareSignals(sigID1,sigID2,DataType="MustMatch")
DataType
— 比较时对数据类型的敏感度
"MustMatch"
比较时对信号数据类型的敏感度,指定为 "MustMatch"
。如果您希望比较对所比较信号中的数值数据类型不匹配敏感,请指定 DataType="MustMatch"
。
当信号数据类型不匹配时,Simulink.sdi.DiffSignalResult
结果对象的 Status
属性设置为 DataTypeMismatch
。
Simulink.sdi.compareSignals
函数将先比较数据类型,再同步和比较信号数据。如果不指定此名称-值参量,数据类型检查只用于检测是否为字符串和数值数据之间的比较。对于字符串和数值数据之间的比较,不计算结果,且结果的状态为 DataTypeMismatch
。对于具有不同数值数据类型的信号,比较会计算结果。
如果您将比较配置为在遇到第一次不匹配时停止,则数据类型不匹配会停止比较。
Time
— 比较时对信号时间向量的敏感度
"MustMatch"
比较时对信号时间向量的敏感度,指定为 "MustMatch"
。当您希望比较对所比较信号的时间向量中的不匹配敏感,请指定 Time="MustMatch"
。当您指定此名称-值参量时,算法会先比较时间向量,再同步和比较信号数据。
当时间向量不匹配时,Simulink.sdi.DiffSignalResult
结果对象的 Status
属性设置为 TimeMismatch
。
除非指定此名称-值参量,否则比较对信号时间向量的差异不敏感。如果比较对时间向量的差异不敏感,比较算法会在比较之前同步信号。有关同步如何工作的详细信息,请参阅仿真数据检查器如何比较数据。
如果您指定时间向量必须匹配并将比较配置为在遇到第一次不匹配时停止,则时间向量不匹配会停止比较。
StartStop
— 比较时对信号开始和停止时间的敏感度
"MustMatch"
比较时对信号开始和停止时间的敏感度,指定为 "MustMatch"
。如果您希望比较对信号开始和停止时间的不匹配敏感,请指定 StartStop="MustMatch"
。当您指定此名称-值参量时,算法会在同步和比较信号数据之前比较每个信号的开始和停止时间。
当开始时间和停止时间不匹配时,Simulink.sdi.DiffSignalResult
结果对象的 Status
属性设置为 StartStopMismatch
。
如果您指定开始和停止时间必须匹配并将比较配置为在第一次不匹配时停止,则开始或停止时间不匹配会停止比较。
StopOnFirstMismatch
— 比较是否在第一次检测到不匹配时停止
"Metadata"
| "Any"
比较是否在第一次检测到不匹配时停止,指定为 "Metadata"
或 "Any"
。在比较多维信号时,停止的比较可能不会计算所有通道的结果,并且会更快地返回不匹配的结果。
"Metadata"
- 元数据不匹配会停止比较。元数据比较发生在信号数据比较之前。仿真数据检查器始终比较信号单位。如果您将比较配置为在遇到第一次不匹配时停止,则不匹配的单位始终会停止比较。您可以指定额外的名称-值参量来配置比较,以检查是否存在额外元数据(如信号数据类型、开始和停止时间以及时间向量)的不匹配,并在第一次遇到该不匹配时停止。
"Any"
- 元数据或信号数据不匹配会停止比较。
ExpandChannels
— 是否计算多维信号中每个通道的比较结果
false
或 0
(默认) | true
或 1
是否计算多维信号中每个通道的比较结果,指定为逻辑值 true
(1
) 或 false
(0
)。
true
或1
- 比较将表示为具有非标量采样值的单个信号的多维信号扩展为一组具有标量采样值的信号,并计算每个信号的比较结果。该多维信号在仿真数据检查器中仍将表示为含非标量采样值的单个信号,这并不会有所改变。
false
或0
- 比较不计算表示为具有非标量采样值的单个信号的多维信号的结果。
输出参量
diff
— 信号比较结果
Simulink.sdi.diffSignalResult
| Simulink.sdi.diffSignalResult
对象的数组
信号比较结果,以 Simulink.sdi.DiffSignalResult
对象形式返回。复信号比较结果以包含两个 DiffSignalResult
对象的数组形式返回。DiffSignalResult
对象包含实数数据,另一个包含虚数数据。检查 DiffSignalResult
对象的 Name
属性,以确定它是包含实数还是虚数数据。
限制
仿真数据检查器不支持比较以下项:
在 R2020a 之前:
int64
或uint64
数据类型的信号。可变大小信号。
如果执行多个信号比较或运行比较,则只有最新的 DiffSignalResult
对象具有可见属性。
版本历史记录
在 R2011b 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)