可视化和访问信号记录数据
可以使用信号记录从仿真中保存数据,而无需向模型中添加模块。有关详细信息,请参阅 使用信号记录保存信号数据。当您使用信号记录来保存仿真数据时,数据会存储在工作区中并流式传输到仿真数据检查器。
您可以使用仿真数据检查器在仿真期间查看记录的信号数据,也可以使用其他可视化界面查看暂停或停止的仿真的信号记录数据。请参阅决定如何可视化仿真数据。
您也可以使用 MATLAB® 命令以编程方式访问信号记录数据。
提示
如果您没有看到在模型中标记要记录的信号的信号记录数据,请检查记录配置以确保信号记录处于选中状态。或者,使用信号记录选择器为其记录设置被覆盖了的信号启用记录功能。有关详细信息,请参阅View the Signal Logging Configuration和Override Signal Logging Settings。
有关记录其他类型的数据和不同记录方法的信息,请参阅保存仿真数据。
使用仿真数据检查器查看信号记录数据
要以交互方式直观地检查和比较记录的信号数据,请考虑使用仿真数据检查器。仿真数据检查器允许您在多个子图上查看来自多个仿真和源的数据。您可以在图中进行缩放和平移,使用数据游标仔细检查信号值,并回放数据以分析信号关系。有关详细信息,请参阅Inspect Simulation Data。您也可以使用仿真数据检查器来比较在仿真中记录的或者从工作区或文件中导入的数据和元数据。通过指定信号属性、比较约束和容差,根据您的需要定制比较方案。请参阅Compare Simulation Data。
在仿真期间,信号记录数据会自动流式传输到仿真数据检查器,因此您可以在仿真期间查看和分析来自无限仿真时间模型或实时模型的数据。有关详细信息,请参阅View Streaming Data in the Simulation Data Inspector。
以编程方式访问工作区数据
您可以通过编程方式访问和分析记录到工作区的数据。默认情况下,记录到工作区的所有仿真数据作为单个 Simulink.SimulationOutput
对象返回到一个变量中,该变量的默认名称为 out
。SimulationOutput
对象包含完整的仿真元数据和记录到工作区的所有仿真数据。
当您将模型配置为在单个 SimulationOutput
对象中返回所有仿真数据时,信号记录数据将作为 SimulationOutput
对象的属性存储在具有默认变量名称 logsout
的 Simulink.SimulationData.Dataset
对象中。当模型未配置为返回单一仿真输出时,信号记录数据将返回到工作区的一个 Dataset
对象中,该对象具有默认变量名称 logsout
。
要访问 Dataset
对象中的特定元素,请使用花括号、find
函数或 get
函数。要返回 Dataset
对象元素的名称,请使用 getElementNames
函数。
提示
要对每个指定的 MATLAB timeseries
对象调用函数,可以使用 Simulink.SimulationData.forEachTimeseries
函数。例如,您可以使用此函数对通过记录总线获取的 timeseries
对象结构体中的每个元素进行重采样。
以编程方式访问 Dataset
对象和元素
打开模型 sldemo_fuelsys
,该模型对容错燃油控制系统进行建模。有关该模型的详细信息,请参阅容错燃油控制系统建模。
mdl = "sldemo_fuelsys";
open_system(mdl)
在“配置参数”对话框的数据导入/导出窗格中,请注意:
该模型未配置为将仿真输出以单个
Simulink.SimulationOutput
对象的形式返回。该模型对信号记录数据使用变量名称
sldemo_fuelsys_output
。
对模型进行仿真。
sim(mdl);
访问包含信号记录数据的 Dataset
对象 sldemo_fuelsys_output
。
sldemo_fuelsys_output
sldemo_fuelsys_output = Simulink.SimulationData.Dataset 'sldemo_fuelsys_output' with 10 elements Name BlockPath ______________ ________________________________________ 1 [1x1 Signal] '' sldemo_fuelsys/EGO Fault Switch 2 [1x1 Signal] air_fuel_ratio sldemo_fuelsys/Engine Gas Dynamics 3 [1x1 Signal] '' sldemo_fuelsys/Engine Speed Fault Switch 4 [1x1 Signal] speed sldemo_fuelsys/Engine_Speed_Selector 5 [1x1 Signal] '' sldemo_fuelsys/MAP Fault Switch 6 [1x1 Signal] map sldemo_fuelsys/MAP_Selector 7 [1x1 Signal] ego sldemo_fuelsys/O2_Voltage_Selector 8 [1x1 Signal] '' ...o_fuelsys/Throttle Angle Fault Switch 9 [1x1 Signal] throttle sldemo_fuelsys/Throttle_Angle_Selector 10 [1x1 Signal] fuel sldemo_fuelsys/To Plant - Use braces { } to access, modify, or add elements using index.
要访问 Dataset
对象元素,可以使用带花括号的索引。例如,使用索引 9
访问信号记录 Dataset
对象的 throttle
元素。
el9 = sldemo_fuelsys_output{9}
el9 = Simulink.SimulationData.Signal Package: Simulink.SimulationData Properties: Name: 'throttle' PropagatedName: '' BlockPath: [1x1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [1x1 timeseries]
信号数据作为 timeseries
对象存储在 Simulink.SimulationData.Signal
对象的 Values
属性中。时间值在 timeseries
对象的 Time
属性中。信号值在 Data
属性中。
el9.Values
timeseries Common Properties: Name: 'throttle' Time: [204508x1 double] TimeInfo: tsdata.timemetadata Data: [204508x1 double] DataInfo: tsdata.datametadata
el9.Values.Data
ans = 204508×1
10.0000
10.0028
10.0169
10.0500
10.1000
10.1500
10.2000
10.2500
10.2766
10.2766
⋮
访问 Simulink.SimulationOutput
对象中的信号记录数据
打开 vdp
模型,该模型对二阶范德波尔微分方程进行建模。有关该模型的详细信息,请参阅范德波尔振荡器。
mdl = "vdp";
open_system(mdl)
将来自 x1
、x2
和 Mu
模块的信号标记为进行记录。然后,对模型进行仿真。
Simulink.sdi.markSignalForStreaming("vdp/x1",1,"on") Simulink.sdi.markSignalForStreaming("vdp/x2",1,"on") Simulink.sdi.markSignalForStreaming("vdp/Mu",1,"on") out = sim("vdp")
out = Simulink.SimulationOutput: logsout: [1x1 Simulink.SimulationData.Dataset] tout: [64x1 double] yout: [1x1 Simulink.SimulationData.Dataset] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]
所有记录的数据都返回到一个 Simulink.SimulationOutput
对象中,该对象具有工作区变量名称 out
。信号记录数据作为一个 Dataset
对象包含在默认名称为 logsout
的 SimulationOutput
对象中。您可以使用圆点表示法访问记录的信号数据,也可以使用 get
或 find
SimulationOutput
对象函数。使用圆点表示法访问 logsout
。
out.logsout
ans = Simulink.SimulationData.Dataset 'logsout' with 3 elements Name BlockPath ____ _________ 1 [1x1 Signal] '' vdp/Mu 2 [1x1 Signal] x1 vdp/x1 3 [1x1 Signal] x2 vdp/x2 - Use braces { } to access, modify, or add elements using index.
要访问 logsout
Dataset
对象的元素,您可以使用花括号,也可以使用 get
或 find
Dataset
对象函数。使用花括号访问 logsout
中的第二个元素。
x1sig = out.logsout{2}
x1sig = Simulink.SimulationData.Signal Package: Simulink.SimulationData Properties: Name: 'x1' PropagatedName: '' BlockPath: [1x1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [1x1 timeseries]
信号数据作为 timeseries
对象存储在 Simulink.SimulationData.Signal
对象的 Values
属性中。时间值在 timeseries
对象的 Time
属性中。信号值在 Data
属性中。
x1sig.Values
timeseries Common Properties: Name: 'x1' Time: [64x1 double] TimeInfo: tsdata.timemetadata Data: [64x1 double] DataInfo: tsdata.datametadata
另请参阅
模型设置
函数
对象
Simulink.SimulationData.Dataset
|Simulink.SimulationData.Signal
|Simulink.SimulationData.BlockPath
|Simulink.SimulationOutput