检查和比较数据编程
你可以利用MATLAB的仿真数据检查器的功能®命令行中使用模拟数据检查器API。
仿真数据检查员组织运行的数据和信号,分配每次运行一个独特的数字识别和信号。一些仿真数据检查员API函数使用运行IDs和信号参考数据,而不是接受运行或信号本身作为输入。访问运行IDs在工作区中,您可以使用金宝appSimulink.sdi.getAllRunIDs
或金宝appSimulink.sdi.getRunIDByIndex
。您可以访问id通过一个信号金宝appSimulink.sdi.Run
对象使用getSignalIDByIndex
方法。
的金宝appSimulink.sdi.Run
和金宝appSimulink.sdi.Signal
类提供对数据的访问,并允许您查看和修改运行和信号元数据。您可以修改仿真数据检查员偏好使用功能金宝appSimulink.sdi.setSubPlotLayout
,金宝appSimulink.sdi.setRunNamingRule
,金宝appSimulink.sdi.setMarkersOn
。恢复仿真数据检查器的默认设置,使用金宝appSimulink.sdi.clearPreferences
。
创建一个运行和视图数据
这个例子展示了如何创建一个运行时,添加数据,然后把数据仿真数据检查员。
创建数据运行
创建timeseries
对象包含数据为一个正弦信号和一个余弦信号。给每个timeseries
对象一个描述性的名称。
时间= linspace (0, 20100);sine_vals =罪(2 * 5π/ *时间);sine_ts = timeseries (sine_vals、时间);sine_ts。Name =“sin, T = 5”;cos_vals = cos(π/ 2 * 8 *时间);cos_ts = timeseries (cos_vals、时间);cos_ts。Name =“余弦,T = 8”;
创建一个运行和添加数据
使用金宝appSimulink.sdi.view
函数打开仿真数据检查员。
金宝appSimulink.sdi.view
数据导入仿真数据检查员的工作空间,创建一个金宝appSimulink.sdi.Run
对象使用金宝appSimulink.sdi.Run.create
函数。运行的信息添加到其元数据使用的名字
和描述
的属性运行
对象。
sinusoidsRun = 金宝appSimulink.sdi.Run.create;sinusoidsRun。Name =正弦曲线的;sinusoidsRun。描述=与不同频率的正弦和余弦信号的;
使用添加
函数在工作区中创建的数据添加到空运行。
添加(sinusoidsRun“var”、sine_ts cos_ts);
图中的数据仿真数据检查员
使用getSignalByIndex
函数来访问金宝appSimulink.sdi.Signal
对象包含信号的数据。您可以使用金宝appSimulink.sdi.Signal
对象属性指定线条样式和颜色的信号和情节在检查员的模拟数据。指定LineColor
和LineDashed
属性为每个信号。
sine_sig = getSignalByIndex (sinusoidsRun, 1);sine_sig。LineColor = (0 0 1);sine_sig。LineDashed =“-”。;cos_sig = sinusoidsRun.getSignalByIndex (2);cos_sig。LineColor = (0 0 1);cos_sig。LineDashed =“——”;
使用金宝appSimulink.sdi.setSubPlotLayout
功能配置2
——- - - - - -1
次要情节布局仿真数据督察绘图区域。然后使用plotOnSubplot
函数来绘制正弦信号在顶部次要情节和余弦信号更低的次要情节。
金宝appSimulink.sdi.setSubPlotLayout (2, 1);plotOnSubPlot (sine_sig 1 1,真实);plotOnSubPlot (cos_sig 2 1,真实);
关闭仿真数据检查和保存您的数据
当你检查完绘制信号数据,您可以关闭仿真数据检查员MLDATX文件并保存会话。
金宝appSimulink.sdi.close (“sinusoids.mldatx”)
比较两个信号在相同的运行
您可以使用模拟数据检查员在单个运行程序化接口比较信号。这个例子比较了飞机纵向控制器的输入和输出信号。
首先,包含装载会话数据。
金宝appSimulink.sdi.load (“AircraftExample.mldatx”);
使用金宝appSimulink.sdi.Run.getLatest
函数来访问的最新运行数据。
aircraftRun = 金宝appSimulink.sdi.Run.getLatest;
然后,您可以使用金宝appSimulink.sdi.getSignalsByName
函数来访问坚持
代表的输入信号控制器,和α,rad
代表输出信号。
坚持= getSignalsByName (aircraftRun,“坚持”);α= getSignalsByName (aircraftRun“α,rad”);
你比较的信号之前,您可以指定一个公差值用于比较。比较使用指定公差值的基线信号比较,所以设置一个绝对的公差值0.1
在坚持
信号。
棍子。AbsTol = 0.1;
现在,比较信号使用金宝appSimulink.sdi.compareSignals
函数。的坚持
信号基线,α,rad
信号是信号对基线进行比较。
comparisonResults = 金宝appSimulink.sdi.compareSignals (stick.ID alpha.ID);匹配= comparisonResults.Status
= ComparisonSignalStatus枚举OutOfTolerance相匹配
比较结果是宽容。您可以使用金宝appSimulink.sdi.view
函数打开模拟数据检查员来查看和分析比较的结果。
与全球公差比较运行
您可以指定全局公差值比较两个模拟运行时使用。中的所有信号全局公差值应用于运行。这个例子显示了如何指定全局公差值运行比较和如何分析并保存比较结果。
首先,装载会话文件,其中包含数据比较。会话数据文件包含四个模拟飞机纵向控制器。这个例子比较的数据,使用不同的输入滤波器时间常数。
金宝appSimulink.sdi.load (“AircraftExample.mldatx”);
访问运行数据比较,使用金宝appSimulink.sdi.getAllRunIDs
函数来运行id对应于最后两个模拟运行。
runIDs = 金宝appSimulink.sdi.getAllRunIDs;runID1 = runIDs(- 1)结束;runID2 = runIDs(结束);
使用金宝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 WithinTolerance: 3对齐:0 UnitsMismatch: 0空:0取消:0 EmptySynced: 0 DataTypeMismatch: 0 TimeMismatch: 0 StartStopMismatch: 0支持:0金宝app
这三个信号比较结果落在指定的全球宽容。
你可以将比较结果保存到一个MLDATX文件使用saveResult
函数。
saveResult (runResult“InputFilterComparison”);
使用信号公差分析仿真数据
您可以通过编程方式指定信号公差值用于比较使用模拟数据进行督察。在本例中,您比较收集的数据模拟的模型飞机纵向飞行控制系统。每个模拟使用不同的值输入滤波器时间常数和日志输入和输出信号。你分析的影响时间常数变化通过比较使用仿真数据结果检查员和信号公差。
首先,负载的会话文件包含仿真数据。
金宝appSimulink.sdi.load (“AircraftExample.mldatx”);
会话文件包含四分。在本例中,您比较的数据文件中的第一个2分。访问金宝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 = ComparisonSignalStatus枚举OutOfTolerance
alphaResult.Status
ans = ComparisonSignalStatus枚举OutOfTolerance
使用的比较值0
对于所有的公差,所以OutOfTolerance
结果意味着信号并不相同。
您可以进一步分析时间常数的影响通过指定公差值信号。指定公差通过设置的属性金宝appSimulink.sdi.Signal
对应于信号相比较的对象。比较使用指定的公差基准信号。本例中指定一个时间宽容和绝对宽容。
指定一个宽容,第一次访问信号
对象从基线运行。
runTs1 = 金宝appSimulink.sdi.getRun (runIDTs1);qSig = getSignalsByName (runTs1,“问,rad /秒”);alphaSig = getSignalsByName (runTs1,“α,rad”);
指定一个绝对的宽容0.1
和时间的宽容0.6
为问
信号使用AbsTol
和TimeTol
属性。
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.Status
ans = ComparisonSignalStatus枚举WithinTolerance
alphaResult2.Status
ans = ComparisonSignalStatus枚举WithinTolerance