主要内容

使用大数据

这个例子展示了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。“StopTime”参数设置为5000秒。对于更现实的大数据示例,停止时间将是一个大得多的值,这将导致需要记录更多的数据样本。cd (tempdir);

# # #开始连续模型参考模拟构建# # #成功更新了模型参考模拟目标:sldemo_mdlref_counter_bus构建总结模拟目标构建:模型重建行动的理由  ============================================================================================================== sldemo_mdlref_counter_bus sldemo_mdlref_counter_bus_msf代码生成和编译。Mexa64不存在。构建1个模型中的1个(0个已经更新的模型)构建持续时间:0h 0m 19.154s

创建一个DatasetRef对象来引用mat文件中的日志数据集

使用DatasetRef对象在已记录的mat文件中引用结果数据集。使用DatasetRef的好处是不会将引用的mat文件加载到内存中。DatasetRef是一个非常轻量级的包装器对象,用于引用存储在文件中的数据集。的替代方案负载函数将整个文件加载到内存中,如果这个数据集包含大数据,这可能是不可能的。

获取一个记录信号的参考

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

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

ans = SimulationDatastore with properties: ReadSize: 100 NumSamples: 50001 FileName: '/tmp/Bdoc22a_1891349_112917/tp276da23a/ex31145726/top。mat'数据预览:时间数据_______ ______ 0秒1 5 0.1秒1 5 0.2秒2 6 0.3秒2 6 0.4秒3 7::

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

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

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

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

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

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

流输入数据到模拟

现在模拟引用的模型sldemo_mdlref_counter_bus,并使用Dataset ds作为输入。由SimulationDatastore对象引用的数据被流式传输到模拟中,而不会使系统不堪重负。

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

总结

这个例子演示了大数据从模拟到模拟的往返工作流程。将日志记录到持久存储用于将来自第一个模拟的数据流式传输到mat文件中。然后设置第二个模拟,将该文件中的数据作为输入流式传输。一个更现实的示例将具有更大的模型StopTime参数值,从而导致更大的日志mat文件。第二个模拟也可以配置为更长的StopTime。然而,即使输出和输入的数据文件更大,长时间模拟的内存需求仍然是相同的!

MATLAB®工作流

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

访问数据块

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

重置SimulationDatastore读取计数器

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

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

使用SimulationDatastore对日志模拟数据进行增量访问,以便在MATLAB中进行大数据分析。你可以遍历整个数据记录和数据块:

另请参阅

相关的话题