主要内容

matlab.io.datastore.sdidatastore类

包:matlab.io.datastore

模拟数据检查器信号的数据存储

描述

一个matlab.io.datastore.sdidatastore对象提供了对记录到模拟数据检查器的信号的访问,这些信号太大,无法装入内存。一个sdidatastore对象引用单个信号的数据。的类引用的信号数据sdidatastore对象,以便每个块始终适合内存。你可以使用sdidatastore对象为信号数据创建一个高时间表。有关使用高数组的详细信息,请参见高大的数组

请注意

matlab.io.datastore.sdidatastore不支持并行计算。如果您有并行计算工具箱™许可证,请使用mapreduce (0)将执行环境设置为本地MATLAB®客户端之前创建一个高大的时间表从matlab.io.datastore.sdidatastore

建设

ds= dsrObj.getAsDatastore (参数创建sdidatastoreds的信号Simulink.sdi.DatasetRef由搜索条件选择的对象参数.你可以指定参数对象中所期望信号的索引的整数Simulink.sdi.DatasetRef对象,或作为包含信号名称的字符向量。

ds= matlab.io.datastore.sdidatastore (signalID创建sdidatastoreds,为对应于指定的信号signalID

输入参数

全部展开

对象中检索元素的搜索条件Simulink.sdi.DatasetRef对象。对于基于名称的搜索,请指定参数作为一个字符向量。对于基于索引的搜索,参数整数,表示所需元素的索引。

例子:“MySignal”

例子:3.

仿真数据检查器为信号生成的数字信号标识符。方法获取信号的信号IDSimulink.sdi.Run对象的返回值Simulink.sdi.createRun函数。

属性

全部展开

指定为字符向量的信号的名称。

例子:“我的信号”

Simulink.sdi.Signal对象。sdidatastore.的信号属性提供对信号数据和元数据的访问。

方法

hasdata 确定是否有数据可以读取
预览 返回sdidatstore中的数据预览
从sdidatastore读取数据块
readall 从sdidatastore读取所有数据
重置 重置读位置

复制语义

句柄。要了解句柄类如何影响复制操作,请参见复制对象

例子

全部折叠

这个例子展示了如何在模拟数据检查器存储库中为信号创建一个高时间表。类型可以创建高时间表Simulink.sdi.Signal对象或首先创建一个matlab.io.datastore.sdidatastore对于信号。你可以使用matlab.io.datastore.sdidatastore以增量方式读取和处理不适合内存的信号数据。一个高大的时间表在后台处理数据分块和处理。通常,处理高时间表的方式与处理内存数据的方式非常相似。

创建数据和访问信号ID

你是否使用一个Simulink.sdi.Signal对象或matlab.io.datastore.sdidatastore,首先创建数据并访问感兴趣信号的信号ID。的sldemo_fuelsysmodel被配置为在模拟模型时记录流到模拟数据检查器存储库的信号。

open_system (“sldemo_fuelsys”) sim卡(“sldemo_fuelsys”

然后,使用模拟数据检查器编程接口访问感兴趣信号的信号ID。例如,访问自我信号。

runCount = Simulink.sdi.getRunCount;latestRunID = Simulink.sdi.getRunIDByIndex(runCount);latestRun = Simulink.sdi.getRun(latestRunID);egoSigID = latestRun.getSignalIDByIndex(7);

创建一个高时间表使用matlab.io.datastore.sdidatastore

通常,高时间表由数据存储提供支持。创建一个matlab.io.datastore.sdidatastore对象引用模拟数据检查器存储库中的信号数据。

egoDs = matlab.io.datastore.sdidatastore(egoSigID);

检查数据存储的名称,以验证是否有所需的信号。

egoDs。的名字
Ans =“燃料”

制定一个时间表matlab.io.datastore.sdidatastore用于处理信号数据。当您拥有并行计算工具箱™许可证时,您需要使用显式地将执行环境设置为本地MATLAB®会话mapreduce在创建高时间表之前。的matlab.io.datastore.sdidatastore对象不支持并行计算。

mapreduce (0);egoTt =高(egoDs)
egoTt = Mx1高时间表时间数据______________ ______ 0秒1.209 0.00056199秒1.209 0.0033719秒1.209 0.01秒1.1729 0.02秒1.1409 0.03秒1.1124 0.04秒1.0873 0.05秒1.0652::::

创建一个高时间表使用Simulink.sdi.Signal对象

Simulink.sdi.Signal类具有直接创建高时间表的方法,允许您通过在幕后创建数据存储来跳过创建数据存储的步骤。使用信号ID访问Simulink.sdi.Signal对象的自我信号。然后,使用可以获得的方法创建高时间表。

egoSig = Simulink.sdi.getSignal(egoSigID);egoTt = egoSig.getAsTall
egoTt = Mx1高时间表时间数据______________ ______ 0秒1.209 0.00056199秒1.209 0.0033719秒1.209 0.01秒1.1729 0.02秒1.1409 0.03秒1.1124 0.04秒1.0873 0.05秒1.0652::::

使用高时间表处理你的信号数据

当你使用高时间表时egoTt,它的底层数据存储读取数据块并将它们传递给高时间表进行处理。数据存储和高时间表在处理后都不会在内存中保留任何数据。此外,高时间表推迟了许多操作的处理。例如,计算信号的平均值。

egoMean = mean(egoTt.Data)
egoMean =高双份?

您可以使用收集函数求值变量并将其值写入工作区,或者可以使用函数将结果写入磁盘。当你使用收集,确保结果符合记忆。

egoMean =收集(egoMean)
使用本地MATLAB会话评估tall表达式:-通过1 / 1:在1.1秒内完成评估,在1.3秒内完成
egoMean = 1.3292

当您在一个高时间表上执行多个操作时,对每个步骤的结果的评估将被推迟,直到您显式地使用收集.在评估过程中,MATLAB优化了它通过高时间表的次数,这可以显著加快分析非常大信号的处理时间。有关使用高数组的详细信息,请参见内存不足数据的高数组

一个matlab.io.datastore.sdidatastore在模拟数据检查器存储库中引用信号数据。当信号太大而无法装入内存时,可以使用matlab.io.datastore.sdidatastore手动增量处理数据或为为您处理增量处理的信号创建一个高时间表。此示例显示如何使用matlab.io.datastore.sdidatastore

创建一个matlab.io.datastore.sdidatastore寻找信号

模拟sldemo_fuelsys模型,它被配置为记录几个信号,以在Simulation data Inspector存储库中创建数据。

sim卡(“sldemo_fuelsys”

使用“模拟数据检查器”编程接口获取信号的信号ID。

runCount = Simulink.sdi.getRunCount;latestRunID = Simulink.sdi.getRunIDByIndex(runCount);latestRun = Simulink.sdi.getRun(latestRunID);speedSigID = latestRun.getSignalIDByIndex(4);

使用信号ID创建一个matlab.io.datastore.sdidatastore速度信号。

speedSDIds = matlab.io.datastore.sdidatastore(speedSigID);

验证数据存储的内容

检查的名字的属性matlab.io.datastore.sdidatastore验证它是否符合你的期望。

speedSDIds。的名字
Ans = 'map'

你也可以使用预览方法来检查信号中的前十个样本是否正确。

speedSDIds.preview
ans =10×1的时间表时间数据______________ _______ 0秒0.589 0.00056199秒0.58772 0.0033719秒0.58148 0.01秒0.56765 0.02秒0.54897 0.03秒0.53264 0.04秒0.51837 0.05秒0.50594 0.055328秒0.5 0.055328秒0.5

处理信号数据matlab.io.datastore.sdidatastore

当信号太大而无法装入内存时,可以使用readData方法从“模拟数据检查器”存储库中读取数据块,以增量地处理数据。使用hasdata方法作为while循环增量处理整个信号的条件。例如,求最大信号值。

latestMax = [];speedSDIds。hasdata速度Chunk = speedSDIds.read; speedChunkData = speedChunk.Data; latestMax = max([speedChunkData; latestMax]);结束latestMax
latestMax = 0.8897

在每次读取操作中,方法更新下一个读取操作开始时的读取位置。在阅读了部分或全部之后matlab.io.datastore.sdidatastore,您可以重置读取位置,重新从信号的起点开始。

speedSDIds.reset

在内存中处理信号数据

当信号被你引用时matlab.io.datastore.sdidatastore适合内存,您可以使用readall方法将所有信号数据读入内存进行处理,而不是使用方法。的readall方法返回时间表所有的信号数据。

speedschedule = speedsdds .readall;speedMax = max(speedschedule . data)
speedMax = 0.8897

版本历史

在R2017b中引入

Baidu
map