read

Класс: matlab.io.datastore.SimulationDatastore
Пакет: matlab.io.datastore

Чтение данных в datastore

Синтаксис

data = read(dst)
[data,info] = read(dst)

Описание

data = read(dst) возвращает данные из datastore (matlab.io.datastore.SimulationDatastore объект). Последующие вызовы read функция продолжает считывать из конечной точки предыдущего вызова. Используйте ReadSize свойство SimulationDatastore объект, чтобы задать объем данных, в выборках (временных шагах), для чтения за раз. Используйте progress метод и NumSamples свойство для определения текущей позиции чтения.

[data,info] = read(dst) также возвращает информацию об извлеченных данных в info.

Входные параметры

расширить все

Введите datastore, заданный как matlab.io.datastore.SimulationDatastore объект. Как создать SimulationDatastore объект, см. matlab.io.datastore.SimulationDatastore.

Выходные аргументы

расширить все

Выходные данные, возвращенные как timetable объект. Для получения информации о timetable, см. Timetables.

Информация о считанных данных, возвращенная как структура. Структура имеет одно поле, FileName, который является полностью разрешенным путем, содержащим строку пути, имя файла и расширение файла.

Примеры

расширить все

В этом примере показано, как логгировать большие данные из симуляции и просматривать и анализировать фрагменты этих данных путем взаимодействия с matlab.io.datastore.SimulationDatastore объект.

Логгирование Больших данных из модели

Откройте пример модели sldemo_fuelsys.

open_system('sldemo_fuelsys')

Выберите Configuration Parameters > Data Import/Export > Log Dataset data to file.

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

Симулируйте модель.

sim('sldemo_fuelsys')

Файл MAT out.mat появится в текущей папке. Файл содержит данные для записанных сигналов, таких как fuel (который находится на корневом уровне модели).

В командной строке создайте DatasetRef объект, который ссылается на переменную регистрации по имени, sldemo_fuelsys_output.

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

Предварительный просмотр Больших данных

Используйте фигурные скобки ({ и }) для извлечения сигнального элемента fuel, который является десятым элементом в DSRef, как Simulink.SimulationData.Signal объект, который содержит SimulationDatastore объект.

SimDataSig = DSRef{10};

Чтобы легче взаимодействовать с SimulationDatastore объект, который находится в Values свойство Signal объект, храните указатель в переменной с именем DStore.

DStore = SimDataSig.Values;

Используйте preview метод для проверки первых пяти выборок записанных данных для fuel сигнал.

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

Осмотрите конкретную выборку

Проверьте 603-ю выборку записанных fuel данные.

Установите ReadSize свойство DStore для числа, которое, учитывая ресурсы памяти, компьютер может терпеть. Для примера задайте ReadSize на 200.

DStore.ReadSize = 200;

Прочитайте из datastore три раза. Каждая операция считывания совершенствует положение считывания на 200 выборки.

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

Теперь, когда вы очень близки к 603-й выборке, установите ReadSize на меньшее число. Для примера задайте ReadSize на 5.

DStore.ReadSize = 5;

Еще раз прочитайте из datastore.

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

Третьей выборкой считанных данных является 603-я выборка в datastore.

Осмотрите более раннюю выборку

Осмотрите 403-ю выборку записанных fuel данные. Из-за предыдущих операций чтения datastore теперь читается начиная с 606-ой выборки, поэтому вы должны сбросить datastore. Затем можно считать из первой выборки до 403-й выборки.

Используйте reset метод сброса DStore.

reset(DStore);

Задайте ReadSize на 200 снова.

DStore.ReadSize = 200;

Дважды считывайте из datastore, чтобы продвинуть положение считывания до 401-й выборки.

read(DStore);
read(DStore);

Задайте ReadSize на 5 снова.

DStore.ReadSize = 5;

Прочитайте из 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

Извлечение нескольких выборок

Извлечение выборок с 1001 по 1020 (всего 20 выборки).

Сбросьте datastore.

reset(DStore)

Переходите к выборке 1001.

DStore.ReadSize = 200;

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

Подготовьтесь к извлечению 20 выборок из datastore.

DStore.ReadSize = 20;

Извлеките выборки с 1001 по 1020. Сохраните извлеченные данные в переменной с именем 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

Нахождение максимального значения данных в Datastore

Сбросьте datastore.

reset(DStore)

Написание while цикл, использование hasdata метод, для пошагового анализа данных в фрагментах по 200 выборок.

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

Теперь переменная runningMax сохраняет максимальное значение во всем datastore.

runningMax
runningMax =

    1.6423

Введенный в R2017a