Read a chunk of data from an sdidatastore
data = sdi_ds.read
reads a chunk of samples
data = sdi_ds.read
and updates the read position for
sdi_ds to the point following the
endpoint of the returned data. The samples are returned in the
data. The number of samples read by the
read method vary, and the returned
always fits into memory. Use the
read method to incrementally process
signals that are too large to fit into memory.
data— Chunk of data read from sdidatastore
Chunk of samples read from the
matlab.io.datastore.simulationdatastore, returned as
matlab.io.datastore.sdidatastore references signal data in the Simulation Data Inspector repository. When the signal is too large to fit into memory, you can use the
matlab.io.datastore.sdidatastore to incrementally process the data manually or to create a tall timetable for the signal that handles the incremental processing for you. This example shows how to process data using a
matlab.io.datastore.sdidatastore for a Signal
sldemo_fuelsys model, which is configured to log several signals, to create data in the Simulation Data Inspector repository.
Use the Simulation Data Inspector programmatic interface to get the signal ID for the signal.
runCount = Simulink.sdi.getRunCount; latestRunID = Simulink.sdi.getRunIDByIndex(runCount); latestRun = Simulink.sdi.getRun(latestRunID); speedSigID = latestRun.getSignalIDByIndex(4);
Use the signal ID to create a
matlab.io.datastore.sdidatastore for the
speedSDIds = matlab.io.datastore.sdidatastore(speedSigID);
Verify the Contents of the Datastore
Name property of the
matlab.io.datastore.sdidatastore to verify that it matches your expectations.
ans = 'map'
You can also use the
preview method to check that the first ten samples in the signal look correct.
ans=10×2 timetable Time Data ______________ _______ 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
Process Signal Data with the
When your signal is too large to fit into memory, you can use the
readData method to read chunks of data from the Simulation Data Inspector repository to incrementally process your data. Use the
hasdata method as the condition for a while loop to incrementally process the whole signal. For example, find the maximum signal value.
latestMax = ; while speedSDIds.hasdata speedChunk = speedSDIds.read; speedChunkData = speedChunk.Data; latestMax = max([speedChunkData; latestMax]); end latestMax
latestMax = 0.8897
On each read operation, the
read method updates the read position for the start of the next read operation. After reading some or all of the
matlab.io.datastore.sdidatastore, you can reset the read position to start again from the beginning of the signal.
Process Signal Data in Memory
When the signal referenced by your
matlab.io.datastore.sdidatastore fits into memory, you can use the
readall method to read all the signal data into memory for processing, rather than reading and processing the data incrementally with the
read method. The
readall method returns a
timetable with all the signal data.
speedTimetable = speedSDIds.readall; speedMax = max(speedTimetable.Data)
speedMax = 0.8897
You can use your
matlab.io.datastore.sdidatastore to create a tall
timetable to process signals too large to fit into memory. The tall timetable handles
loading and processing the chunks of signal data for you. The
matlab.io.datastore.sdidatastore reference page includes an
example that shows how to process your data using a tall timetable. For more information
about working with tall timetables, see Tall Arrays (MATLAB).