文档

与大数据合作

这个例子展示了Simulink模型如何处理大数万博1manbetx据作为模拟的输入和输出。

打开示例模型

打开示例模型。

示例说明

“大数据”是指数据太大,无法一次全部加载到系统内存中。

万博1manbetxSimulink可以产生大数据作为仿真输出,消耗大数据作为仿真输入。为了同时处理输入和输出的大数据,整个数据存储在硬盘上的mat文件中。在模拟期间,只有一小块数据被加载到系统内存中。这种方法被称为流。万博1manbetxSimulink可以流数据进出mat文件。流解决了内存问题,因为硬盘的容量通常比随机访问内存的容量大得多。

这个例子展示了如何在Simulink模拟中处理大数据。万博1manbetx记录到文件的能力用于流大数据作为模拟的输出。然后从文件流提供大数据作为模拟的输入。

设置日志到文件

若要将输出数据流到mat文件中,请启用文件记录功能。

通过选择日志记录文件“配置参数>数据导入/导出>日志数据集数据到文件”设置复选框。点击这里打开配置参数对话框。还可以指定将包含结果的文件的名称。

启用Logging to file的编程方法是设置模型参数LoggingToFile

当在一个模型上启用日志记录到文件时,该模型的模拟会将记录的信号直接写入mat -文件。此外,如果启用了状态或输出的日志记录并将SaveFormat指定为Dataset,那么这些值将流到相同的mat -文件中。

模拟模型

本例将目录修改为具有写权限的临时目录。然后,示例调用sim命令来模拟模型,并记录到文件中。

设置参数SignalLoggingName为,该参数指定要保存信号日志记录结果的Dataset对象的名称topOut.设置参数LoggingFileName,它指定生成的mat文件的名称top.mat.停止时间设置为5000秒。对于更现实的大数据示例,停止时间将是一个更大的值,这将导致记录更多的数据样本。

创建一个DatasetRef对象来在mat文件中引用记录的数据集

使用DatasetRef对象在记录的mat文件中引用结果数据集。使用DatasetRef的好处是引用的mat文件不会加载到内存中。DatasetRef是一个非常轻的包装对象,用于引用存储在文件中的Dataset。调用的另一种选择负载函数将整个文件加载到内存中,如果数据集包含大数据,这可能是不可能的。

获取记录信号的参考信息

您可以使用DatasetRef对象的{}索引来引用数据集中的单个信号,而无需将这些信号加载到内存中。例如,要引用秒信号:

sig2的Values字段是一个SimulationDatastore对象,它是对存储在磁盘上的信号2数据的一个轻量级引用:

ans = SimulationDatastore with properties: ReadSize: 100 NumSamples: 50001 FileName: '/tmp/BR2018ad_802882_51908/publish_examples3/top. NumSamples: 50001 FileName: '/tmp/BR2018ad_802882_51908/publish_examples3/top. NumSamples: 50001Data Preview: Time Data _______ ______ 0 sec 1 5 0.1 sec 1 5 0.2 sec 2 6 0.3 sec 2 6 0.4 sec 3 7::

获取更多其他日志信号的参考信息

本示例使用这些记录的信号中的一些作为参考模型模拟的输入。为每个对象创建轻量级引用。这些是模型中的总线信号,得到的Values字段是SimulationDatastore对象的结构。每个结构反映了原始总线信号的层次结构。

创建一个新的数据集对象用作模拟输入

通过Dataset对象指定模拟的输入信号。此数据集中的每个元素都向对应于同一索引的导入块提供输入数据。创建空数据集ds然后将记录信号的引用作为元素1和元素2放入其中。

在Dataset对象上使用{}索引将元素分配到适当的位置。

在数据集的每个元素中,您可以混合对信号数据(例如,SimulationDatastore对象)和内存数据(例如,timeseries对象)的引用。将饱和度上限从30更改为37:

流输入数据到仿真

现在模拟引用的模型sldemo_mdlref_counter_bus,并使用数据集ds作为输入。由SimulationDatastore对象引用的数据流进入模拟,而不会使系统过载。

饱和上限的数据不流化,因为该信号被指定为内存中的时间序列。饱和极限的变化在时间6左右反映在范围(信号现在饱和到37的值,而不是30)。

总结

该实例演示了大数据的往返仿真流程。持久性存储日志用于将第一次模拟的数据流到mat文件中。然后设置第二个模拟,将该文件中的数据作为输入流。更现实的示例是,模型StopTime参数的值更大,从而导致更大的日志mat -文件。第二个模拟也可以配置为更长的停止时间。然而,即使有更大的输出和输入数据文件,长时间模拟的内存需求仍然是一样的!

MATLAB工作流

SimulationDatastore允许您在MATLAB中增量地分析记录的数据。回到对第二个记录的信号的引用,将数据存储分配给一个新变量,以简化对它的访问。

以块访问数据

SimulationDatastore允许增量读取引用数据。读取以块的形式完成,并由ReadSize属性控制。ReadSize的默认值是100个样本(信号的每个样本是模拟的单个时间步长的记录数据)。在本例中,将其更改为1000。对数据存储的每次读取都返回数据的时间表表示。

重置SimulationDatastore读计数器

对数据存储的每次读取都使读取计数器向前移动。你可以重置这个计数器并从头开始读取:

遍历数据存储中的所有数据

使用SimulationDatastore增量访问记录的仿真数据,用于MATLAB中的大数据分析。你可以遍历整个数据记录和数据块:

退出

关闭模式。

相关的文档

点击这里有关SimulationDatastore类的更多信息。

这个话题有用吗?