matlab.io.datastore.simulationdatastore.sdidatastore.read

Read a chunk of data from an sdidatastore

Syntax

data = sdi_ds.read

Description

data = sdi_ds.read reads a chunk of samples from the matlab.io.datastore.sdidatastore, sdi_ds, and updates the read position for sdi_ds to the point following the endpoint of the returned data. The samples are returned in the timetable, data. The number of samples read by the read method vary, and the returned timetable always fits into memory. Use the read method to incrementally process signals that are too large to fit into memory.

Output Arguments

expand all

Chunk of samples read from the matlab.io.datastore.simulationdatastore, returned as a timetable.

Examples

expand all

A 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.

Create a matlab.io.datastore.sdidatastore for a Signal

Simulate the sldemo_fuelsys model, which is configured to log several signals, to create data in the Simulation Data Inspector repository.

sim('sldemo_fuelsys')

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 speed signal.

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

Verify the Contents of the Datastore

Check the Name property of the matlab.io.datastore.sdidatastore to verify that it matches your expectations.

speedSDIds.Name
ans = 
'map'

You can also use the preview method to check that the first ten samples in the signal look correct.

speedSDIds.preview
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 matlab.io.datastore.sdidatastore

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.

speedSDIds.reset

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

Alternatives

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).

Introduced in R2017b