preview

Class: matlab.io.datastore.SimulationDatastore
Package: matlab.io.datastore

Return subset of data from datastore

Syntax

data = preview(dst)

Description

data = preview(dst) returns a subset of data from datastore (matlab.io.datastore.SimulationDatastore object) dst without changing its current read position. preview returns only the first ten samples (time steps) of data in the datastore. Use this method to quickly inspect and verify that the data appears as you expect.

Input Arguments

expand all

Input datastore, specified as a matlab.io.datastore.SimulationDatastore object. To create a SimulationDatastore object, see matlab.io.datastore.SimulationDatastore.

Output Arguments

expand all

Subset of data, returned as a timetable object. For information about timetable, see Timetables (MATLAB).

Examples

expand all

This example shows how to log big data from a simulation and inspect and analyze portions of that data by interacting with a matlab.io.datastore.SimulationDatastore object.

Log Big Data from Model

Open the example model sldemo_fuelsys.

open_system('sldemo_fuelsys')

Select Configuration Parameters > Data Import/Export > Log Dataset data to file.

set_param('sldemo_fuelsys','LoggingToFile','on')

Simulate the model.

sim('sldemo_fuelsys')

The MAT-file out.mat appears in your current folder. The file contains data for logged signals such as fuel (which is at the root level of the model).

At the command prompt, create a DatasetRef object that refers to the logging variable by name, sldemo_fuelsys_output.

DSRef = Simulink.SimulationData.DatasetRef('out.mat','sldemo_fuelsys_output');

Preview Big Data

Use curly braces ({ and }) to extract the signal element fuel, which is the tenth element in DSRef, as a Simulink.SimulationData.Signal object that contains a SimulationDatastore object.

SimDataSig = DSRef{10};

To more easily interact with the SimulationDatastore object that resides in the Values property of the Signal object, store a handle in a variable named DStore.

DStore = SimDataSig.Values;

Use the preview method to inspect the first five samples of logged data for the fuel signal.

preview(DStore)
ans =

  10x1 timetable

         Time          Data 
    ______________    ______

    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
    0.055328 sec      1.0652
    0.055328 sec      1.0652

Inspect Specific Sample

Inspect the 603rd sample of logged fuel data.

Set the ReadSize property of DStore to a number that, considering memory resources, your computer can tolerate. For example, set ReadSize to 200.

DStore.ReadSize = 200;

Read from the datastore three times. Each read operation advances the reading position by 200 samples.

read(DStore);
read(DStore);
read(DStore);

Now that you are very close to the 603rd sample, set ReadSize to a smaller number. For example, set ReadSize to 5.

DStore.ReadSize = 5;

Read from the datastore again.

read(DStore)
ans =

  5x1 timetable

      Time       Data 
    ________    ______

    5.79 sec    1.6097
    5.8 sec     1.6136
    5.81 sec    1.6003
    5.82 sec    1.5904
    5.83 sec    1.5832

The third sample of read data is the 603rd sample in the datastore.

Inspect Earlier Sample

Inspect the 403rd sample of logged fuel data. Due to previous read operations, the datastore now reads starting from the 606th sample, so you must reset the datastore. Then, you can read from the first sample up to the 403rd sample.

Use the reset method to reset DStore.

reset(DStore);

Set ReadSize to 200 again.

DStore.ReadSize = 200;

Read from the datastore twice to advance the read position to the 401st sample.

read(DStore);
read(DStore);

Set ReadSize to 5 again.

DStore.ReadSize = 5;

Read from the datastore.

read(DStore)
ans =

  5x1 timetable

      Time       Data  
    ________    _______

    3.85 sec      0.999
    3.86 sec    0.99219
    3.87 sec    0.98538
    3.88 sec    0.97858
    3.89 sec    0.97179

Extract Multiple Samples

Extract samples 1001 through 1020 (a total of 20 samples).

Reset the datastore.

reset(DStore)

Advance to sample 1001.

DStore.ReadSize = 200;

for i = 1:5
    read(DStore);
end

Prepare to extract 20 samples from the datastore.

DStore.ReadSize = 20;

Extract samples 1001 through 1020. Store the extracted data in a variable named targetSamples.

targetSamples = read(DStore)
targetSamples =

  20x1 timetable

      Time       Data 
    ________    ______

    9.7 sec     1.5828
    9.71 sec    1.5733
    9.72 sec    1.5664
    9.73 sec    1.5614
    9.74 sec    1.5579
    9.75 sec    1.5553
    9.76 sec    1.5703
    9.77 sec     1.582
    9.78 sec    1.5913
    9.79 sec    1.5988
    9.8 sec      1.605
    9.81 sec    1.6101
    9.82 sec    1.6145
    9.83 sec    1.6184
    9.84 sec    1.6049
    9.85 sec     1.595
    9.86 sec    1.5877
    9.87 sec    1.5824
    9.88 sec    1.5785
    9.89 sec    1.5757

Find Maximum Value of Data in Datastore

Reset the datastore.

reset(DStore)

Write a while loop, using the hasdata method, to incrementally analyze the data in chunks of 200 samples.

DStore.ReadSize = 200;
runningMax = [];
while hasdata(DStore)
    tt = read(DStore);
    rawChunk = tt.Data;
    runningMax = max([rawChunk; runningMax]);
end

Now, the variable runningMax stores the maximum value in the entire datastore.

runningMax
runningMax =

    1.6423

Introduced in R2017a