金宝appSimulink.sdi.compareRuns
比较两次模拟运行中的数据
语法
描述
比较对应的运行中的数据diffResult
= 金宝appSimulink.sdi.compareRuns (runID1
,runID2
)runID1
而且runID2
中返回的结果金宝appSimulink.sdi.DiffRunResult
对象diffResult
.比较使用仿真数据检查器比较算法。有关该算法的详细信息,请参见模拟数据检查器如何比较数据.
比较对应的模拟运行diffResult
= 金宝appSimulink.sdi.compareRuns (runID1
,runID2
,名称,值
)runID1
而且runID2
使用一个或多个指定的选项名称,值
对参数。有关选项如何影响比较的详细信息,请参见模拟数据检查器如何比较数据.
例子
用程序比较和分析仿真数据
这个示例展示了如何比较模拟数据的运行,然后使用模拟数据检查器编程接口分析和保存结果。
创建模拟数据
首先,通过模拟记录数据的模型来创建模拟数据。本例使用ex_sldemo_absbrake
建模并分析了改变的效果期望相对滑移
价值。
加载模型。使用set_param
函数指定相对滑移的初始值并模拟模型。
load_system (“ex_sldemo_absbrake”) set_param ('ex_sldemo_absbrake/期望的相对滑移',“价值”,“0.24”) out_1 = sim(“ex_sldemo_absbrake”);
使用set_param
函数为相对滑移指定不同的值并再次模拟模型。
set_param ('ex_sldemo_absbrake/期望的相对滑移',“价值”,“0.25”) out_2 = sim(“ex_sldemo_absbrake”);
使用全局公差值比较运行
首先,使用金宝appSimulink.sdi.getAllRunIDs
函数获取与最后两次模拟运行相对应的运行id。
runIDs = 金宝appSimulink.sdi.getAllRunIDs;runID1 = runid (end - 1);runID2 = runIDs(end);
现在,使用金宝appSimulink.sdi.compareRuns
函数来比较运行情况。指定的全局相对公差值0.2
的全局时间容忍值0.5
.
runResult = 金宝appSimulink.sdi.compareRuns(runID1,runID2,“reltol”, 0.2,“timetol”, 0.5);
检查总结
返回者的财产金宝appSimulink.sdi.DiffRunResult
对象。
runResult。总结
ans =带字段的结构:OutOfTolerance: 2 withtolerance: 2 Unaligned: 0 UnitsMismatch: 0 Empty: 0 cancelled: 0 EmptySynced: 0 DataTypeMismatch: 0 TimeMismatch: 0 StartStopMismatch: 0 Uns金宝appupported: 0
两次信号比较在公差范围内,两次信号比较超出公差范围。
地块对比结果
您可以使用图表来分析比较结果。控件的信号结果Ww
信号来自DiffRunResult
对象,该对象包含使用getResultByIndex
函数。检查状态
的属性金宝appSimulink.sdi.DiffSignalResult
对象。
signalResult_Ww = getResultByIndex(runResult,1)
signalResult_Ww = DiffSignalResult,属性:Name: 'yout. 'Ww' Status: OutOfTolerance AlignBy: 'Path' SignalID1: 144229 SignalID2: 144275 MaxDifference: 12.4878 Sync1: [1x1 timeseries] Sync2: [1x1 timeseries] Diff: [1x1 timeseries]
signalResult_Ww。状态
ans = out toftolerance
的Ww
信号比较结果超差。绘制差分信号,分析结果。
图(1)情节(signalResult_Ww.Diff)
保存比较结果
您可以将比较结果保存到MLDATX文件中,以便以后分析或与同事共享。使用saveResult
函数保存运行数据和比较结果。
saveResult (runResult“desiredSlipResults”)
MLDATX文件desiredSlipResults
在工作目录中创建。使用金宝appSimulink.sdi.load
函数或开放
函数查看MLDATX文件中的结果。
使用信号公差分析仿真数据
使用“模拟数据检查器”编程接口,可以指定要在比较中使用的信号容差值。本例使用slexAircraftExample
模型和仿真数据检查器,以评估在控制输入之后改变低通滤波器的时间常数的效果。
配置模型
加载模型并标记感兴趣的信号以进行日志记录。的日志数据问
而且α
信号。
load_system (“slexAircraftExample”) 金宝appSimulink.sdi.markSignalForStreaming ('slexAircraftExample/飞机动力学模型'3,“上”) 金宝appSimulink.sdi.markSignalForStreaming ('slexAircraftExample/飞机动力学模型'4“上”)
运行模拟
使用不同的低通滤波器时间常数运行模拟以生成结果进行比较。的slexAircraftExample
模型在模型工作区中存储与模型相关的变量。要修改时间常数值,请访问模型工作区并使用assignin
函数。
Out1 = sim(“slexAircraftExample”);modelWorkspace = get_param(“slexAircraftExample”,“modelworkspace”);assignin (modelWorkspace“t”,1) out2 = sim(“slexAircraftExample”);
访问和比较仿真结果
使用“仿真数据检查器”编程接口访问仿真结果。每个模拟在模拟数据检查器中创建一个具有唯一运行ID的运行。您可以使用运行id来比较模拟结果。
runIDs = 金宝appSimulink.sdi.getAllRunIDs;runIDTs1 = runIDs(end-1);runIDTs2 = runIDs(end);
使用金宝appSimulink.sdi.compareRuns
函数比较来自模拟的数据。然后检查状态
属性,以查看信号是否落在默认容差为0的范围内。
diffRun1 = 金宝appSimulink.sdi.compareRuns(runIDTs1,runIDTs2);sig1Result1 = getResultByIndex(diffRun1,1);sig2Result1 = getResultByIndex(diffRun1,2);sig1Result1。状态
ans = out toftolerance
sig2Result1。状态
ans = out toftolerance
比较运行与信号公差
默认情况下,使用信号0
对于所有公差值,因此当信号不相同时,比较返回超出公差的结果。为了进一步分析时间常数变化的影响,指定信号的容差值。属性的属性指定编程比较的公差金宝appSimulink.sdi.Signal
您比较的运行中的对象。比较使用为基线指定的公差信号
对象。这个例子指定了时间公差和绝对公差的组合。
要指定公差,首先访问金宝appSimulink.sdi.Signal
与要比较的运行中的每个信号对应的对象。
run1 = 金宝appSimulink.sdi.getRun(runIDTs1);sigID1 = getSignalIDByIndex(run1,1);sigID2 = getSignalIDByIndex(run1,2);sig1 = 金宝appSimulink.sdi.getSignal(sigID1);sig2 = 金宝appSimulink.sdi.getSignal(sigID2);
检查的名字
属性来标识每个信号
对象。
sig1。的名字
Ans = 'q, rad/sec'
sig2。的名字
Ans = 'alpha, rad'
指定的绝对公差0.1
和时间的容忍度0.6
为问
信号使用AbsTol
而且TimeTol
的属性问
基线运行中的信号对象。
sig1。AbsTol = 0.1;sig1。时间Tol = 0.6;
指定的绝对公差0.2
和时间的容忍度0.8
为α
信号使用AbsTol
而且TimeTol
的属性α
基线运行中的信号对象。
sig2。AbsTol = 0.2;sig2。时间Tol = 0.8;
再次比较运行并访问结果。
diffRun2 = 金宝appSimulink.sdi.compareRuns(runIDTs1,runIDTs2);sig1Result2 = getResultByIndex(diffRun2,1);sig2Result2 = getResultByIndex(diffRun2,2);
检查状态
属性,以确定比较结果是否落在规定的公差范围内。
sig1Result2。状态
不宽容
sig2Result2。状态
不宽容
配置比较以检查元数据
您可以使用金宝appSimulink.sdi.compareRuns
函数比较信号数据和元数据,包括数据类型和开始和停止时间。单个比较可以检查一个或多个元数据片段中的不匹配。检查信号元数据中的不匹配时,总结
的属性金宝appSimulink.sdi.DiffRunResult
对象可能与基本比较不同,因为状态
属性。金宝appSimulink.sdi.DiffSignalResult
对象可以指示元数据不匹配。属性配置比较金宝appSimulink.sdi.compareRuns
函数用于导入的数据和从模拟中记录的数据。
此示例配置了从工作空间数据创建的运行的比较,以显示如何总结
的DiffSignalResult
对象可以提供有关信号不匹配的特定信息。
创建工作区数据
的金宝appSimulink.sdi.compareRuns
函数比较时间序列数据。控件创建要用作基线信号的正弦波数据timeseries
格式。给timeseries
这个名字波数据
.
时间= 0:0.1:20;Sig1vals = sin(2*pi/5*time);Sig1_ts =时间序列(sig1vals,时间);sig1_ts。Name =“波数据”;
创建第二个正弦波与基线信号进行比较。使用稍微不同的时间矢量并衰减信号,这样两个信号就不相同了。类型的信号数据转换为单
数据类型。也给这个命名timeseries
对象波数据
.仿真数据检查器比较算法将对齐这些信号,以便使用名称进行比较。
Time2 = 0:0.1:22;Sig2vals = single(0.98*sin(2*pi/5*time2));Sig2_ts =时间序列(sig2vals,time2);sig2_ts。Name =“波数据”;
在模拟数据检查器中创建和比较运行
的金宝appSimulink.sdi.compareRuns
函数中包含的数据进行比较金宝appSimulink.sdi.Run
对象。使用金宝appSimulink.sdi.createRun
函数在模拟数据检查器中为数据创建运行。的金宝appSimulink.sdi.createRun
函数返回每次创建的运行的运行ID。
runID1 = 金宝appSimulink.sdi.createRun(“基线运行”,“var”, sig1_ts);runID2 = 金宝appSimulink.sdi.createRun(“比较运行”,“var”, sig2_ts);
您可以使用金宝appSimulink.sdi.compareRuns
函数来比较运行情况。比较算法将信号数据转换为双
数据类型,并在计算差分信号之前同步信号数据。
basic_DRR = 金宝appSimulink.sdi.compareRuns(runID1,runID2);
检查总结
返回者的财产金宝appSimulink.sdi.DiffRunResult
对象查看比较的结果。
basic_DRR。总结
ans =带字段的结构:OutOfTolerance: 1 withtolerance: 0 Unaligned: 0 UnitsMismatch: 0 Empty: 0 cancelled: 0 EmptySynced: 0 DataTypeMismatch: 0 TimeMismatch: 0 StartStopMismatch: 0 Uns金宝appupported: 0
信号之间的差异超出了容忍范围。
比较运行并检查数据类型匹配
根据您的系统需求,您可能希望比较的信号的数据类型匹配。您可以使用金宝appSimulink.sdi.compareRuns
函数配置比较算法,以检查和报告数据类型不匹配。
dataType_DRR = 金宝appSimulink.sdi.compareRuns(runID1,runID2,“数据类型”,“MustMatch”);dataType_DRR。总结
ans =带字段的结构:OutOfTolerance: 0 withtolerance: 0 Unaligned: 0 UnitsMismatch: 0 Empty: 0 cancelled: 0 EmptySynced: 0 DataTypeMismatch: 1 TimeMismatch: 0 StartStopMismatch: 0 Uns金宝appupported: 0
信号比较的结果是DataTypeMismatch
因为基线信号的数据是双
数据类型,而信号与基线比较的数据为单
数据类型。
比较运行并检查开始和停止时间是否匹配
您可以使用金宝appSimulink.sdi.compareRuns
函数配置比较算法,以检查对齐的信号是否具有相同的开始和停止时间。
startStop_DRR = 金宝appSimulink.sdi.compareRuns(runID1,runID2,“起止”,“MustMatch”);startStop_DRR。总结
ans =带字段的结构:OutOfTolerance: 0 withtolerance: 0 Unaligned: 0 UnitsMismatch: 0 Empty: 0 cancelled: 0 EmptySynced: 0 DataTypeMismatch: 0 TimeMismatch: 0 StartStopMismatch: 1 Uns金宝appupported: 0
信号比较结果为StartStopMismatch
因为在工作空间中创建的信号具有不同的停止时间。
比较运行与对齐标准
这个例子展示了如何使用您想要的标准来比较运行,以便在运行之间对齐信号。
生成模拟数据进行比较
首先加载slexAircraftExample
系统和标记感兴趣的测井信号。
load_system (“slexAircraftExample”) 金宝appSimulink.sdi.markSignalForStreaming (“slexAircraftExample /试点”, 1“上”) 金宝appSimulink.sdi.markSignalForStreaming ('slexAircraftExample/飞机动力学模型',...4,“上”)
的两个模拟slexAircraftExample
用变量的不同值进行建模Ts
.使用get_param
控件的模型工作区slexAircraftExample
模型。然后,为变量赋值并运行第一个模拟。
modelWorkspace = get_param(“slexAircraftExample”,“modelworkspace”);modelWorkspace.assignin (“t”, 0.1);Out_1 = sim(“slexAircraftExample”);
更改的值Ts
然后进行第二次模拟。然后,
modelWorkspace.assignin (“t”, 0.2);Out_2 = sim(“slexAircraftExample”);
使用金宝appSimulink.sdi.getAllRunIDs
函数访问模拟时创建的两个模拟运行的运行idslexAircraftExample
模型。
runIDs = 金宝appSimulink.sdi.getAllRunIDs;runID1 = runid (end-1);runID2 = runIDs(end);
定义比较的对齐标准
在运行比较之前,定义您希望模拟数据检查器如何在运行之间对齐信号。这个例子根据信号的名称,然后是它们的块路径,然后是它们的Simulink标识符对齐信号。金宝app
alignMethods = [金宝appSimulink.sdi.AlignType.]信号的名字金宝appSimulink.sdi.AlignType.BlockPath金宝appSimulink.sdi.AlignType.SID];
将运行与指定的对齐标准进行比较
使用指定的对齐标准比较两次运行中的模拟数据。该比较使用了一个小的时间公差,以解释求解器使用的步长差异对方波输入转换的影响。
diffResults = 金宝appSimulink.sdi.compareRuns(runID1,runID2,“对齐”alignMethods,...“timetol”, 0.005);
检查对准信号的比较结果
您可以使用getResultByIndex
方法访问所比较的运行中对齐信号的比较结果。您可以使用数
的属性金宝appSimulink.sdi.DiffRunResult
对象来设置为
循环检查状态
每个人的财产金宝appSimulink.sdi.DiffSignalResult
对象。
numcomparison = diffResults.count;为k = 1: numcomparison resultAtIdx = getResultByIndex(diffResults,k);sigID1 = resultAtIdx.signalID1;sigID2 = resultAtIdx.signalID2;sig1 = 金宝appSimulink.sdi.getSignal(sigID1);sig2 = 金宝appSimulink.sdi.getSignal(sigID2);displayStr ='信号%s和%s: %s \n';流(displayStr sig1.Name、sig2.Name resultAtIdx.Status);结束
信号alpha, rad和alpha, rad:不耐受信号Stick和Stick:不耐受
输入参数
runID1
- - - - - -基线运行标识符
整数
比较中基线运行的数字标识符,指定为与模拟数据检查器中的运行相对应的运行ID。模拟数据检查器在创建运行时分配运行id。方法可以获取运行的运行IDID
的属性金宝appSimulink.sdi.Run
对象,金宝appSimulink.sdi.getAllRunIDs
函数,或金宝appSimulink.sdi.getRunIDByIndex
函数。
runID2
- - - - - -要比较的运行标识符
整数
要比较的运行的数字标识符,指定为与模拟数据检查器中的运行相对应的运行ID。模拟数据检查器在创建运行时分配运行id。方法可以获取运行的运行IDID
的属性金宝appSimulink.sdi.Run
对象,金宝appSimulink.sdi.getAllRunIDs
函数,或金宝appSimulink.sdi.getRunIDByIndex
函数。
名称-值对参数
的可选逗号分隔对名称,值
参数。的名字
参数名称和价值
对应的值。的名字
必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
abstol, x,“对齐”,alignOpts
“对齐”
- - - - - -信号对齐选项
字符串数组|字符矢量数组
信号对齐选项,指定为由逗号分隔的对组成“对齐”
一个字符串数组或者字符向量数组。
数组,指定用于对来自正在比较的运行的信号的对齐选项。模拟数据检查器首先通过数组中的第一个元素对齐信号,然后通过数组中的第二个元素,以此类推。有关更多信息,请参见信号对齐.
价值 | 对齐的 |
---|---|
金宝appSimulink.sdi.AlignType.BlockPath |
信号源块的路径 |
金宝appSimulink.sdi.AlignType.SID |
金宝app®标识符金宝app动态仿真模块标识符 |
金宝appSimulink.sdi.AlignType.SignalName |
信号的名字 |
金宝appSimulink.sdi.AlignType.DataSource |
变量在MATLAB中的路径®工作空间 |
例子:[金宝appSimulink.sdi.AlignType.SignalName, Simulink.sdi.AlignType.SID]
先按名称,再按SID指定信号对齐。
“AbsTol”
- - - - - -绝对容忍度
0
(默认)|标量
“RelTol”
- - - - - -相对容忍度
0
(默认)|标量
运行比较中用于所有信号的正值全局相对容差,指定为由逗号分隔的对组成“RelTol”
一个标量。相对公差表示为分数乘子。例如,0.1
指定10%的公差。有关如何在模拟数据检查器中应用相对公差的详细信息,请参见公差规范.
例子:0.1
数据类型:双
“TimeTol”
- - - - - -比较时容差
0
(默认)|标量
运行比较中用于所有信号的正值全局时间容差,指定为由逗号分隔的对组成“TimeTol”
一个标量。指定以秒为单位的时间公差。有关模拟数据检查器中公差的更多信息,请参见公差规范.
例子:0.2
数据类型:双
“数据类型”
- - - - - -信号数据类型的比较灵敏度
“MustMatch”
指定名称-值对“数据类型”、“MustMatch”
当您希望比较对比较信号中的数据类型不匹配敏感时。指定此名称-值对时,算法会在同步和比较信号数据之前比较已对齐信号的数据类型。
的金宝appSimulink.sdi.compareRuns
函数不会比较对齐信号的数据类型,除非指定此名值对。比较算法可以比较不同数据类型的信号。
当信号数据类型不匹配时,状态
的属性金宝appSimulink.sdi.DiffSignalResult
对象的值DataTypeMismatch
.
如果指定数据类型必须匹配,并将比较配置为在第一次不匹配时停止,则数据类型不匹配将停止比较。停止比较可能无法计算所有信号的结果。
“时间”
- - - - - -信号时间向量的比较灵敏度
“MustMatch”
指定名称-值对“时间”、“MustMatch”
当你希望比较对比较信号的时间向量中的不匹配敏感时。当指定此名称-值对时,算法会在同步和比较信号数据之前比较已对齐信号的时间向量。
比较对信号时间向量的差异不敏感,除非指定此名称-值对。对于对时间向量的差异不敏感的比较,比较算法在比较之前同步信号。有关同步工作方式的详细信息,请参见模拟数据检查器如何比较数据.
当信号的时间向量不匹配时状态
的属性金宝appSimulink.sdi.DiffSignalResult
对象的值TimeMismatch
.
如果指定时间向量必须匹配,并将比较配置为在第一次不匹配时停止,则时间向量不匹配将停止比较。停止比较可能无法计算所有信号的结果。
“起止”
- - - - - -信号开始和停止时间的比较灵敏度
“MustMatch”
指定名称-值对“起止”、“MustMatch”
当您希望比较对信号开始和停止时间中的不匹配敏感时。指定此名称-值对时,算法在同步和比较信号数据之前比较对齐信号的开始和停止时间。
当开始时间和停止时间不匹配时,将状态
的属性金宝appSimulink.sdi.DiffSignalResult
对象的值StartStopMismatch
.
如果指定开始和停止时间必须匹配,并将比较配置为在第一次不匹配时停止,则开始或停止时间不匹配将停止比较。停止比较可能无法计算所有信号的结果。
“StopOnFirstMismatch”
- - - - - -是否在第一次检测到不匹配时停止比较
“元数据”
|“任何”
比较是否停止,而不比较第一个检测到的不匹配上的剩余信号,指定为由逗号分隔的对组成“StopOnFirstMismatch”
而且“元数据”
或“任何”
.停止比较可能无法计算所有信号的结果,并且可能更快地返回不匹配的结果。
元数据
—对齐信号的元数据不匹配会导致比较停止。元数据比较发生在比较信号数据之前。仿真数据检查器总是对齐信号并比较信号单元。当您将比较配置为在第一次不匹配时停止时,未对齐的信号或不匹配的单元总是会导致比较停止。您可以指定额外的名称-值对来配置比较,以检查和停止额外元数据(如信号数据类型、开始和停止时间以及时间向量)的第一次不匹配。
任何
—对对齐信号的元数据或信号数据不匹配会导致比较停止。
输出参数
diffResult
-对比结果
金宝appSimulink.sdi.DiffRunResult
比较结果,返回为金宝appSimulink.sdi.DiffRunResult
对象。
另请参阅
getResultByIndex
|金宝appSimulink.sdi.compareSignals
|金宝appSimulink.sdi.DiffRunResult
|金宝appSimulink.sdi.DiffSignalResult
|金宝appSimulink.sdi.getRunCount
|金宝appSimulink.sdi.getRunIDByIndex
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。