主要内容

编程检查和比较数据

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

模拟数据检查器在运行和信号中组织数据,为每个运行和信号分配一个唯一的数字标识。一些仿真数据检查器API函数使用运行和信号ID来参考数据,而不是接受运行或信号本身作为输入。要访问工作空间中的运行ID,您可以使用万博1manbetxsimulink.sdi.getAllrunids或者万博1manbetxsimulink.sdi.getRunidByIndex。您可以通过A访问信号ID万博1manbetxsimulink.sdi.run对象使用getsignalidbyIndex方法。

万博1manbetxsimulink.sdi.run万博1manbetxsimulink.sdi.signal课程提供对数据的访问权限,并允许您查看和修改运行和信号元数据。您可以使用诸如万博1manbetxsimulink.sdi.setsubplotlayout,,,,万博1manbetxsimulink.sdi.setrunnamingrule, 和万博1manbetxsimulink.sdi.setmarkerson。要恢复模拟数据检查器的默认设置,请使用万博1manbetxsimulink.sdi.clearpreferences

创建运行并查看数据

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

创建运行数据

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

时间= linspace(0,20,100);sine_vals = sin(2*pi/5*时间);sine_ts = limeseries(sine_vals,time);sine_ts.name ='正弦,t = 5';cos_vals = cos(2*pi/8*时间);cos_ts = limeseries(cos_vals,time);cos_ts.name =``余弦,t = 8'';

创建运行并添加数据

使用万博1manbetxsimulink.sdi.view功能以打开仿真数据检查器。

万博1manbetxsimulink.sdi.view

要将数据从工作区导入仿真数据检查器,请创建一个万博1manbetxsimulink.sdi.run对象使用万博1manbetxsimulink.sdi.run.create功能。使用The Metadata添加有关运行的信息姓名描述属性目的。

SinusoidSrun = 万博1manbetxsimulink.sdi.run.create;Sinusoidsrun.name =“正弦”;Sinusoidsrun.Description =“带有不同频率的正弦和余弦信号”;

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

添加(Sinusoidsrun,'vars',sine_ts,cos_ts);

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

使用getSignalByIndex访问功能万博1manbetxsimulink.sdi.signal包含信号数据的对象。您可以使用万博1manbetxsimulink.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 =' - ';

使用万博1manbetxsimulink.sdi.setsubplotlayout配置一个功能2-经过-1模拟数据检查器绘图区域中的子图布局。然后使用Plotonsubplot功能以在顶部子图上绘制正弦信号和下部子图上的余弦信号。

万博1manbetxsimulink.sdi.setsubplotlayout(2,1);plotonsubplot(sine_sig,1,1,true);PlotonSubplot(Cos_sig,2,1,true);

关闭仿真数据检查器并保存您的数据

完成检查绘制的信号数据后,您可以关闭仿真数据检查器并将会话保存到MLDATX文件中。

万博1manbetxsimulink.sdi.close('sinusoids.mldatx'

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

您可以使用仿真数据检查器编程接口来比较单个运行中的信号。此示例比较了飞机纵向控制器的输入和输出信号。

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

万博1manbetxsimulink.sdi.load('aircraftExample.mldatx');

使用万博1manbetxsimulink.sdi.run.getlatest访问数据中最新运行的功能。

aircraftrun = 万博1manbetxsimulink.sdi.run.getlatest;

然后,您可以使用万博1manbetxsimulink.sdi.getSignalsByname访问的功能信号,代表控制器的输入,阿尔法,rad代表输出的信号。

stick = getsignalsbyname(aircraftrun,'戳');alpha = getsignalsByname(aircraftrun,'alpha,rad');

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

Stick.Abstol = 0.1;

现在,使用万博1manbetxsimulink.sdi.comparesignals功能。这信号是基线,阿尔法,rad信号是与基线进行比较的信号。

比较results = simulink万博1manbetx.sdi.comparesignals(stick.id,alpha.id);匹配= comparionresults.status
匹配=比较枚举枚举

比较结果不可能。您可以使用万博1manbetxsimulink.sdi.view功能以打开仿真数据检查器以查看和分析比较结果。

比较全球宽容

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

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

万博1manbetxsimulink.sdi.load('aircraftExample.mldatx');

要访问运行数据以进行比较,请使用万博1manbetxsimulink.sdi.getAllrunids函数以获取与最后两个模拟运行相对应的运行ID。

runids = 万博1manbetxsimulink.sdi.getAllrunids;RunID1 = RunIDS(end -1);runId2 = runids(end);

使用万博1manbetxsimulink.sdi.compareruns比较运行的功能。指定全球相对容忍值的0.2以及全球时间公差价值0.5

runresult = 万博1manbetxsimulink.sdi.compareruns(runid1,runid2,“ reltol',0.2,“时间托托”,0.5);

检查概括返回的财产万博1manbetxsimulink.sdi.diffrunresult目的是查看信号是在公差值之内还是不容忍。

runresult.summary
ans =带有字段的结构:Outoftererance:0 withIntolarance:3不结盟:0单位mismatch:0空:0取消:0 emptysynced:0 datatypemismatch:0 timemismant:0 startStopMismatch:0 startStopMismatch:0 notupported:0万博1manbetx

所有三个信号比较结果都属于指定的全球公差。

您可以使用该比较结果将比较结果保存到MLDATX文件中Saveresult功能。

Saveresult(Runresult,“ inputfilterComparison”);

使用信号公差分析仿真数据

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

首先,加载包含仿真数据的会话文件。

万博1manbetxsimulink.sdi.load('aircraftExample.mldatx');

会话文件包含四个运行。在此示例中,您比较文件中前两个运行的数据。访问万博1manbetxsimulink.sdi.run从文件加载的前两个运行的对象。

runids = 万博1manbetxsimulink.sdi.getAllrunids;runidts1 = runids(end-3);runidts2 = runids(end-2);

现在,在没有指定任何公差的情况下比较这两个运行。

notoldiffresult = 万博1manbetxsimulink.sdi.compareruns(runidts1,runidts2);

使用GetResultByIndex访问比较结果的功能α信号。

qresult = getResultByIndex(NodoldiffResult,1);Alpharesult = GetResultByIndex(NodoldiffResult,2);

检查地位每个信号的结果都可以查看比较结果是否落在我们的耐受性之内。

qresult.status
ans =比较枚举枚举
alpharesult.status
ans =比较枚举枚举

比较使用的值0对于所有公差,所以外观结果意味着信号是不一样的。

您可以通过指定信号的公差值进一步分析时间常数的效果。通过设置属性来指定公差万博1manbetxsimulink.sdi.signal与要比较的信号相对应的对象。比较使用为基线信号指定的公差。此示例指定了时间公差和绝对耐受性。

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

runts1 = 万博1manbetxsimulink.sdi.getRun(runidts1);qsig = getsignalsbyname(runts1,'q,rad/sec');alphasig = getsignalsbyname(runts1,'alpha,rad');

指定绝对的公差0.1和时间的宽容0.6为了使用Abstol时间表特性。

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

指定绝对的公差0.2和时间的宽容0.8为了α信号。

Alphasig.Abstol = 0.2;alphasig.timetol = 0.8;

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

telliffresult = 万博1manbetxsimulink.sdi.compareruns(runidts1,runidts2);qresult2 = getResultbyIndex(telliffresult,1);alpharesult2 = getResultbyIndex(telliffresult,2);qresult2.status
ANS =比较枚举枚举与智力
alpharesult2.status
ANS =比较枚举枚举与智力

也可以看看

相关话题