加载大数据模拟

带有许多时间步长和信号的模拟模型可以使用和创建数据,这些数据太大,无法放入计算机的工作内存中。当您的模拟输入数据不适合内存时,您可以选择几种策略中的一种来使用该数据作为根级模拟输入轮廓尺寸块。这些策略适用于加载存储的数据数据集格式,包括从另一个模拟记录的数据。

  1. 当单个输入信号太大而无法装入内存时,您可以使用matlab.io.datastore.SimulationDatastore对象来访问信号数据。来自SimulationDatastore对象以适合内存的块的形式递增地加载到模拟中。

  2. 当您的模拟输入由金宝appSimulink.SimulationData.Dataset对象中由于太大而无法加载到内存中的文件,则可以将数据集对象添加到模型中金宝appSimulink.SimulationData.DatasetRef对象。

  3. 当信号适合内存并存储在一个文件中,该文件太大而无法加载到内存中时,您可以使用金宝appSimulink.SimulationData.DatasetRef对象。

请注意

当您希望使用一个模拟中记录的数据作为另一个模拟的输入时,您还可以使用matlab.io.datastore.sdidatastore对象。的sdidatastore对象引用磁盘上的Simulation data Inspector存储库中的数据,因此不必将记录的数据保存到文件中。考虑使用sdidatastore对象作为迭代工作流的模拟输入。

所有的大数据加载策略都是针对特殊情况,当你的数据不适合内存,可能需要额外的步骤。这些示例使用完全适合内存的数据来说明加载大数据所需的步骤。当您的模拟输入适合内存时,考虑使用其他加载技术。

使用单个信号流SimulationDatastore对象

当你输入数据中的单个信号太大而无法放入内存时,你可以创建matlab.io.datastore.SimulationDatastore对象,并将它们输入模型。创建一个SimulationDatastore对象的一个信号,您想要流进您的模型,首先创建金宝appSimulink.SimulationData.DatasetRef对象引用数据集对象,它包含您感兴趣的信号。例如,创建一个DatasetRef的模拟中记录的数据slexAircraftExample模型。

logsout_DSR = 金宝appSimulink.SimulationData.DatasetRef (“aircraftData.mat”“logsout”);

您可以创建SimulationDatastore对象的DatasetRef对象或使用getAsDatastore方法DatasetRef对象。在这两种情况下SimulationDatastore对象存在于被遣返人的财产金宝appSimulink.SimulationData.Signal对象。

当你知道信号的指数数据集对象,则可以在DatasetRef对象,以创建SimulationDatastore你的信号。

alphaRad_ds = logsout_DSR {4}
alphaRad_ds = 金宝appSimulink. simulationdata . signal Package: Simulink. .模拟Data Properties: Name: 'alpha, rad' PropagatedName: '' BlockPath: [1x1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 4 Values: [1x1 matlab.io.datastore.SimulationDatastore] Methods, Superclasses

创建一个SimulationDatastore对象的信号索引、名称或块路径,请使用getAsDatastore方法。例如,创建一个SimulationDatastore对象的坚持信号。

stick_ds = logsout_DSR.getAsDatastore (“坚持”
Simulink. s金宝appimulationdata . signal Package: Simulink。模拟Data Properties: Name: 'Stick' PropagatedName: '' BlockPath: [1x1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [1x1 matlab.io.datastore.SimulationDatastore] Methods, Superclasses

因为的属性stick_dsalphaRad_ds金宝appSimulink.SimulationData.Signal对象是SimulationDatastores,信号数据流进入你的模型。你可以包括SimulationDatastore支持信号对象中的元素数据集对象中的一项或一项输入参数以逗号分隔。

整个流数据集使用一个DatasetRef对象

当您的模拟输入在数据集如果文件太大而无法加载到内存中,您可以创建金宝appSimulink.SimulationData.DatasetRef对象将您的模拟输入输入到模型中。当你指定DatasetRef对象中输入参数的所有信号数据集对象,用于创建DatasetRef流进你的模型。使用其他大数据加载技术之一,从一个数据集对象。

当您的模拟输入的文件数据集存储包含其他数据集数据,你可以用金宝appSimulink.SimulationData.DatasetRef.getDatasetVariableNames命令功能,查看列表数据集文件中包含的对象。中的变量名预览数据集对象在文件内容无法装入内存时特别有用。

datasetNames = 金宝appSimulink.SimulationData.DatasetRef.getDatasetVariableNames (“aircraftData.mat”
datasetNames =1 x3单元格{' logsout}{‘xout}{'你'}

创建一个DatasetRef对象logsout

logsout_DSR = 金宝appSimulink.SimulationData.DatasetRef (“aircraftData.mat”“logsout”);

你可以加载logsout_DSR使用输入参数的加载方式与加载金宝appSimulink.SimulationData.Dataset对象。每个信号数据集对象,用于创建DatasetRef流以适合内存的块的形式进入模型。

从一个DatasetRef对象

当你的模拟输入信号单独适合内存和存储在数据集对象,如果文件不能装入内存,则使用金宝appSimulink.SimulationData.DatasetRef对象将感兴趣的每个信号加载到内存中。然后,可以将信号加载为模型的模拟输入。

首先,创建一个DatasetRef对象引用数据集对象,该对象包含要加载的信号。例如,创建一个DatasetRef对象的模拟中记录到文件的数据slexAircraftExample模型。

logsout_DSR = 金宝appSimulink.SimulationData.DatasetRef (“aircraftData.mat”“logsout”);

你可以使用得到getElement方法将单个信号加载到内存中DatasetRef对象。这两个方法都使用相同的语法将指定的元素加载到内存中。属性中的索引可以指定要加载到内存中的信号数据集对象或其名称。如果您不知道要加载的信号的名称,请使用getElementNames方法查看元素的名称数据集对象引用的DatasetRef对象。

elNames = logsout_DSR.getElementNames
elNames =15 x1细胞{0x0 char} {0x0 char} {'alpha, rad'} {'q, rad/sec'} {0x0 char} {'qGust'} {'wGust'} {0x0 char} {'Stick'} {0x0 char} {0x0 char} {0x0 char} {0x0 char} {' x0 char} {' x0 char} {' x0 char} {' x0 char} {' x0 char} {' x0 char} {' x0 char} {' x0 char} {' x0 char}}

加载qGust使用它的名字将信号输入内存。

qGust = logsout_DSR.getElement (“qGust”
qGust = 金宝appSimulink. simulationdata . signal Package: Simulink. .模拟Data Properties: Name: 'qGust' PropagatedName: '' BlockPath: [1x1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 2 Values: [1x1 timeseries] Methods, Superclasses

你可以添加qGust信号数据集对象的仿真输入信号加载到模型中的根级导入块,也可以指定qGust作为一项输入参数以逗号分隔。

另请参阅

||

相关的话题