主要内容

以编程方式检查和比较数据

您可以利用MATLAB的模拟数据检查器的功能®命令行,使用仿真数据检查器API。

模拟数据检查器组织运行和信号中的数据,为每个运行和信号分配一个唯一的数字标识。一些Simulation Data Inspector API函数使用运行和信号id来引用数据,而不是接受运行或信号本身作为输入。要访问工作区中的运行id,可以使用金宝appSimulink.sdi.getAllRunIDs或者金宝appSimulink.sdi.getRunIDByIndex.您可以通过金宝appsimulink.sdi.run.对象使用getsignalidbyIndex.方法。

金宝appsimulink.sdi.run.金宝appsimulink.sdi.signal.类提供对数据的访问,并允许您查看和修改运行和信号元数据。您可以使用如下函数修改Simulation Data Inspector首选项金宝appsimulink.sdi.setsubplotlayout.金宝appsimulink.sdi.setrunnamingrule., 和金宝appsimulink.sdi.setmarkerson..要恢复模拟数据检查器的默认设置,请使用金宝appsimulink.sdi.clearPreeferences.

创建运行并查看数据

此示例显示如何创建运行,将数据添加到它,然后在模拟数据检查器中查看数据。

为运行创建数据

创建时间序列对象,以包含正弦信号和余弦信号的数据。给每个时间序列对象的描述性名称。

时间= linspace (0, 20100);sine_vals =罪(2 * 5π/ *时间);sine_ts = timeseries (sine_vals、时间);sine_ts。Name ='正弦,t = 5';cos_vals = cos(π/ 2 * 8 *时间);cos_ts = timeseries (cos_vals、时间);cos_ts。Name ='余弦,t = 8'

创建运行并添加数据

使用金宝appSimulink.sdi.view打开模拟数据检查器的功能。

金宝appSimulink.sdi.view

要从工作区导入数据到Simulation data Inspector,请创建金宝appsimulink.sdi.run.对象使用金宝appsimulink.sdi.run.Create.函数。使用run添加有关运行的信息姓名描述属性目的。

sinusoidsRun = 金宝appSimulink.sdi.Run.create;sinusoidsRun。Name ='sinusoids';sinusoidsrun.description =.“具有不同频率的正弦和余弦信号”

使用添加函数添加您在工作区中创建的数据到空运行。

添加(SinusoidsRun,'vars'、sine_ts cos_ts);

绘制模拟数据检查器中的数据

使用getsignalbyIndex.函数访问金宝appsimulink.sdi.signal.包含信号数据的对象。你可以使用金宝appsimulink.sdi.signal.对象属性指定信号的线条样式和颜色,并在模拟数据检查器中绘制它。指定LineColor绑扎着每个信号的属性。

sine_sig = getsignalbyIndex(SinusoidsRun,1);sine_sig.linecolor = [0 0 1];sine_sig.linedashed =.“-”。;cos_sig = sinUsoidsRun.getSignalByIndex(2);cos_sig.linecolor = [0 1 0];cos_sig.linedashed =“——”

使用金宝appsimulink.sdi.setsubplotlayout.配置a的功能2——- - - - - -1仿真数据检测器绘图区域中的子图布局。然后用来Plotonsubplot.函数在较低子图上绘制顶部子图上的正弦信号和余弦信号。

金宝appsimulink.sdi.setsubplotlayout(2,1);plotoneubplot(sine_sig,1,1,true);plotonsubplot(cos_sig,2,1,true);

关闭模拟数据检查器并保存数据

完成检查绘制信号数据时,您可以关闭模​​拟数据检查器并将会话保存到MLDATX文件。

金宝appSimulink.sdi.close (“sinusoids.mldatx”

比较同一运行中的两个信号

您可以使用模拟数据检查器编程接口将信号与单个运行中的信号进行比较。该示例比较了飞机纵向控制器的输入和输出信号。

首先,加载包含数据的会话。

金宝appsimulink.sdi.load('飞机表ample.mldatx');

使用金宝appsimulink.sdi.run.getlatest.函数访问数据中的最近一次运行。

aircraftrun = 金宝appsimulink.sdi.run.getlatest;

然后,你可以使用金宝appsimulink.sdi.getSignalSyName.函数访问信号,表示对控制器的输入,以及α,rad表示输出的信号。

坚持= getSignalsByName (aircraftRun,'戳');alpha = getsignalsbyname(aircraftrun,“α,rad”);

在比较信号之前,您可以指定要用于比较的公差值。比较在比较中使用为基线信号指定的公差值,因此设定了绝对公差值0.1信号。

kick.abstol = 0.1;

现在,使用该信号进行比较金宝appSimulink.sdi.compareSignals函数。这信号是基线,而α,rad信号是与基线相比的信号。

comparisonResults = 金宝appSimulink.sdi.compareSignals (stick.ID alpha.ID);= comparisonResults相匹配。地位
比赛= Outoftolerance.

比较结果超出了容许范围。你可以使用金宝appSimulink.sdi.view函数打开仿真数据检查器以查看和分析比较结果。

比较运行和全局容忍

您可以指定在比较两个模拟运行时使用的全局公差值。全局公差值适用于运行中的所有信号。此示例显示如何为运行比较指定全局公差值以及如何分析和保存比较结果。

首先,加载包含数据进行比较的会话文件。会话文件包含用于飞机纵向控制器的四种模拟的数据。此示例将数据与两个使用不同输入滤波器时间常量的两个运行进行比较。

金宝appsimulink.sdi.load('飞机表ample.mldatx');

要访问运行数据以比较,请使用金宝appSimulink.sdi.getAllRunIDs获取对应于最后两个模拟运行的运行ID的功能。

runIDs = 金宝appSimulink.sdi.getAllRunIDs;runid1 = unrids(结束 -  1);runid2 = unrids(结束);

使用金宝appsimulink.sdi.compareruns.函数来比较运行。指定全局相对容差值0.2和全球时间容忍价值0.5

runresult = 金宝appsimulink.sdi.compareruns(runid1,runid2,“reltol”,0.2,'timetol', 0.5);

检查概括被遣返人的财产金宝appsimulink.sdi.diffrunresult.对象查看信号是否在公差值中或超出公差。

runresult.summary.
ans =结构体字段:OutOfTolerance: 0 withtolerant: 3 Unaligned: 0 UnitsMismatch: 0 Empty: 0 Canceled: 0 EmptySynced: 0 DataTypeMismatch: 0 TimeMismatch: 0 StartStopMismatch: 0 Unsup金宝appported: 0

所有三个信号比较结果都在指定的全球公差范围内下降。

您可以使用的是使用的比较结果保存到MLDATX文件Saveresult.函数。

Saveresult(RunResult,'inputfiltercomparison');

使用信号公差分析模拟数据

您可以通过编程方式指定要在使用仿真数据检查器执行的比较中使用的信号公差值。在本例中,您将比较通过模拟飞机纵向飞行控制系统模型收集的数据。每个模拟使用不同的值作为输入滤波器时间常数,并记录输入和输出信号。通过使用仿真数据检查器和信号公差比较结果,分析时间常数变化的影响。

首先,加载包含模拟数据的会话文件。

金宝appsimulink.sdi.load('飞机表ample.mldatx');

会话文件包含四个运行。在此示例中,您将从文件中的前两次运行中的数据进行比较。进入金宝appsimulink.sdi.run.从文件加载的前两次运行的对象。

runIDs = 金宝appSimulink.sdi.getAllRunIDs;runIDTs1 = runIDs (end-3);runIDTs2 = runIDs (end-2);

现在,在不指定任何容差的情况下比较两次运行。

noTolDiffResult = 金宝appSimulink.sdi.compareRuns (runIDTs1 runIDTs2);

使用getresultbyIndex.函数访问的比较结果问:α信号。

qresult = getResultByIndex(notoldiffresult,1);alpharesult = getResultByIndex(notoldiffresult,2);

检查地位每个信号结果看,看看比较结果是否落在我们超出公差范围内。

qresult.status.
ans = OutOfTolerance
alpharesult.status.
ans = OutOfTolerance

比较使用的值为0.对于所有公差,所以OutOfToleranceResult表示信号不相同。

您可以通过指定信号的公差值来进一步分析时间常数的效果。通过设置属性来指定容差金宝appsimulink.sdi.signal.对象,该对象对应于被比较的信号。比较使用为基线信号指定的公差。这个例子指定了一个时间公差和一个绝对公差。

要指定公差,请首先访问信号来自基线运行的对象。

runTs1 = 金宝appSimulink.sdi.getRun (runIDTs1);qSig = getSignalsByName (runTs1,“问,rad /秒”);alphaSig = getSignalsByName (runTs1,“α,rad”);

指定绝对的容差0.1还有一段时间的宽容0.6为了问:使用它的信号AbsTolTimetol.特性。

qsig.abstol = 0.1;qsig.timetol = 0.6;

指定绝对的容差0.2还有一段时间的宽容0.8为了α信号。

alphaSig。AbsTol= 0.2; alphaSig.TimeTol = 0.8;

再比较一下结果。访问比较的结果并检查地位每个信号的属性。

tolDiffResult = 金宝appSimulink.sdi.compareRuns (runIDTs1 runIDTs2);qResult2 = getResultByIndex (tolDiffResult, 1);alphaResult2 = getResultByIndex (tolDiffResult 2);qResult2。地位
ans = WithinTolerance
alphaResult2。地位
ans = WithinTolerance

也可以看看

相关话题