主要内容

与大数据打交道

这个例子展示了Simulink模型如何处理大数金宝app据作为仿真的输入和输出。

使用实例描述

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

金宝appSimulink可以产生大数据作为仿真输出,也可以消费大数据作为仿真输入。为了处理大数据的输入和输出,整个数据存储在硬盘上的mat文件中。在模拟过程中,任何时候只有小块数据被加载到系统内存中。这种方法被称为流。金宝appSimulink可以流数据到mat文件和从mat文件。流处理解决了内存问题,因为硬盘的容量通常比随机存取存储器的容量大得多。

这个例子展示了如何在Simulink仿真中处理大数据。金宝app日志记录到文件功能用于将大数据流作为模拟的输出。然后从文件流提供大数据作为模拟的输入。

设置日志记录到文件

若要将输出数据流式传输到mat文件,请启用日志记录到文件。

文件启用日志记录“配置参数>数据导入/导出>日志数据集数据到文件”选择。您还可以指定将包含结果的文件的名称。

启用日志记录到文件的编程方法是通过设置模型参数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 16.542秒

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

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

获取记录信号的参考

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

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

文件名:'/tmp/Bdoc22b_2134332_1896769/tp4b6d4ed9/simulink_features-ex31145726/top。金宝appmat'数据预览:时间数据_______ ______ 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,并使用数据集ds作为输入。由SimulationDatastore对象引用的数据被流到模拟中,而不会使系统不堪重负。

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

总结

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

MATLAB®工作流

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

以块的形式访问数据

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

重置SimulationDatastore读计数器

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

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

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

另请参阅

相关的话题