主要内容

matlab.io.datastore.sdidatastore类

包:matlab.io.datastore

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

描述

一个matlab.io.datastore.sdidatastore对象提供对记录到仿真数据检查器的信号的访问,这些信号太大而无法放入内存中。一个sdidatastore对象引用单个信号的数据。的方法加载由对象引用的信号数据sdidatastore对象,以便每个块总是适合于内存。你可以用sdidatastore对象为您的信号数据创建一个高的时间表。有关使用高数组的更多信息,请参见高大的数组

请注意

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

建设

ds= dsrObj.getAsDatastore (参数创建sdidatastoreds的信号万博1manbetxSimulink.sdi.DatasetRef搜索条件选择的对象参数.您可以指定参数作为一个整数表示所需信号在万博1manbetxSimulink.sdi.DatasetRef对象,或作为包含信号名称的字符向量。

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

输入参数

全部展开

搜索标准用于从中检索元素万博1manbetxSimulink.sdi.DatasetRef对象。对于基于名称的搜索,请指定参数作为字符向量。基于索引的搜索,参数是一个整数,表示所需元素的索引。

例子:“MySignal”

例子:3.

由仿真数据检查器为信号生成的数字信号标识符。的方法可以获得信号的信号ID万博1manbetxSimulink.sdi.Run对象中包含信号或作为万博1manbetxsimulink.sdi.createrun函数。

属性

全部展开

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

例子:“我的信号”

万博1manbetxSimulink.sdi.Signal对象关联的sdidatastore.的信号属性提供对信号数据和元数据的访问。

方法

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

复制语义

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

例子

全部折叠

这个示例展示了如何在Simulation Data Inspector存储库中为信号创建一个高时间表。你可以用万博1manbetxSimulink.sdi.Signal对象或首先创建一个matlab.io.datastore.sdidatastore的信号。你可以用matlab.io.datastore.sdidatastore对不能装入内存的信号增量地读取和处理信号数据。一个高大的时间表在后台处理数据分块和处理。一般来说,您可以与处理内存中的数据非常相似地处理高时间表。

创建数据和访问信号ID

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

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

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

runCount = 万博1manbetxSimulink.sdi.getRunCount;latestRunID = 万博1manbetxSimulink.sdi.getRunIDByIndex (runCount);latestRun = 万博1manbetxSimulink.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用来处理信号数据的。当您拥有Parallel Computing Toolbox™许可证时,您需要显式地将执行环境设置为使用的本地MATLAB®会话mapreduce在制定高时间表之前。的matlab.io.datastore.sdidatastore对象不支持并行计算。万博1manbetx

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

制定一个高的时间表万博1manbetxSimulink.sdi.Signal对象

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

egoSig = 万博1manbetxSimulink.sdi.getSignal (egoSigID);egoTt = egoSig.getAsTall
egoTt = mx tall时刻表时间数据______________ ______ 0 sec 1.209 0.00056199 sec 1.209 0.0033719 sec 1.209 0.01 sec 1.1729 0.02 sec 1.1409 0.03 sec 1.1124 0.04 sec 1.0873 0.05 sec 1.0652::::

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

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

egoMean =意味着(egoTt.Data)
我是高个子吗?

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

egoMean =收集(egoMean)
使用本地MATLAB会话评估高表达: - 通过1的1:29秒内完成的评估完成于30秒
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 = 万博1manbetxSimulink.sdi.getRunCount;latestRunID = 万博1manbetxSimulink.sdi.getRunIDByIndex (runCount);latestRun = 万博1manbetxSimulink.sdi.getRun (latestRunID);speedSigID = latestRun.getSignalIDByIndex (4);

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

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

验证数据存储的内容

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

speedsdids.name.
ans ='地图'

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

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

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

当信号太大,无法装入内存时,你可以使用readData方法从Simulation data Inspector存储库读取数据块,以增量地处理数据。使用hasdata方法作为一个while循环的条件,增量地处理整个信号。例如,查找最大信号值。

liginalmax = [];speedsdids.hasdata speedchunk = speedsdids.read;speedchunkdata = speedchunk.data;Resultmax = Max([speedchunkdata; nullumax]);结束latestMax
latestMax = 0.8897

在每个读操作中方法更新下一个读操作开始时的读位置。读完部分或全部的matlab.io.datastore.sdidatastore时,可复位读数位置,从信号开始重新开始。

speedSDIds.reset

处理内存中的信号数据

当信号被你引用matlab.io.datastore.sdidatastore装入内存,就可以使用了readall方法将所有信号数据读入存储器以进行处理,而不是逐步读取和处理数据方法。的readall方法返回A.时间表所有的信号数据。

speedTimetable = speedSDIds.readall;speedMax = max (speedTimetable.Data)
speedMax = 0.8897
介绍了R2017b