exponenta event banner

matlab.io.datastore.SimulationDatastore класс

Пакет: matlab.io.datastore

Хранилище данных для входов и выходов моделей Simulink

Описание

A matlab.io.datastore.SimulationDatastore объект позволяет модели Simulink ® взаимодействовать с большими данными. Большие данные можно загружать как входные данные моделирования и регистрировать выходные данные моделирования. Для моделирования моделей с большими данными необходимо сохранить данные в MAT-файле и обратиться к данным через SimulationDatastore объект. См. раздел Работа с большими данными для моделирования.

A SimulationDatastore объект относится к данным большого моделирования (которые хранятся в MAT-файле) для одного сигнала. Если MAT-файл хранит данные моделирования для сигнала шины, SimulationDatastore объект относится к данным для одного элемента конечного сигнала в шине. Можно использовать объект хранилища данных для проверки данных и доступа к ним, а также через родительский объект, такой как Simulink.SimulationData.Signalсмоделировать модель Simulink с данными.

Для анализа данных хранилища данных можно использовать методы и свойства SimulationDatastore объект, а также инструменты MATLAB ®, такие как tall функция. Дополнительные сведения об инструментах MATLAB см. в разделе Начало работы с хранилищем данных.

Строительство

После сохранения больших данных моделирования в Simulink.SimulationData.Dataset объект в MAT-файле, сигнальный элемент в Dataset объект указывает на большие данные. Создание matlab.io.datastore.SimulationDatastore объект, который ссылается на большие данные:

  1. В командной строке или в сценарии создайте Simulink.SimulationData.DatasetRef объект, который ссылается на Dataset в MAT-файле.

  2. Используйте один из следующих методов:

    • Использовать индексирование на основе одной фигурной скобки (например, {1}) для возврата объекта, представляющего элемент целевого сигнала, например, Simulink.SimulationData.Signal или Simulink.SimulationData.State. Например, для DatasetRef объект с именем logsout_ref, для создания Signal объект, который относится ко второму элементу сигнала, используйте следующий код:

      myLoggedSig = logsout_ref{2}

    • Используйте getAsDatastore способ DatasetRef для возврата объекта, представляющего элемент целевого сигнала. Дополнительные сведения см. в разделе getAsDatastore.

SimulationDatastore объект находится в Values свойства возвращенного объекта.

Свойства

развернуть все

Имя и путь к файлу, содержащему большие данные, возвращенные в виде символьного вектора. Это свойство доступно только для чтения.

Типы данных: char

Общее количество выборок (временных шагов) в хранилище данных, возвращаемых в виде целого числа. readall метод извлекает это множество образцов из больших данных. Это свойство доступно только для чтения.

Типы данных: uint64

Количество данных, считываемых за один раз, в количестве выборок (временных шагов), указанных как скалярная двойка. read метод извлекает это множество образцов из больших данных.

Типы данных: double

Методы

hasdataОпределение доступности данных для чтения
isPartitionableОпределение возможности разделения хранилища данных
isShuffleableОпределение возможности тасования хранилища данных
предварительный просмотрВозврат подмножества данных из хранилища данных
прогрессПроцент возврата данных, считанных из хранилища данных
читатьСчитывание данных в хранилище данных
readallСчитывание всех данных в хранилище данных
сбросСброс хранилища данных в исходное состояние

Копирование семантики

Ручка. Сведения о том, как классы обработки влияют на операции копирования, см. в разделе Копирование объектов.

Ограничения

  • SimulationDatastore не поддерживает использование параллельного пула с установленным Toolbox™ Parallel Computing. Для анализа данных с помощью массивов уровня или выполнения алгоритмов MapReduce установите глобальную среду выполнения в качестве локальной сессии MATLAB с помощью mapreducer. Введите следующий код:

    mapreducer(0)
    Сведения об управлении параллельными ресурсами см. в разделе Выполнение mapreduction на параллельном пуле (панель инструментов параллельных вычислений).

  • В качестве входных данных моделирования нельзя использовать переменную уровня MATLAB.

Примеры

свернуть все

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

Вести журнал больших данных из модели

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

open_system('sldemo_fuelsys')

Выберите Параметры конфигурации > Импорт/экспорт данных > Данные набора данных журнала для файла.

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;

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

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

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

DStore.ReadSize = 5;

Повторите чтение из хранилища данных.

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-я выборка в хранилище данных.

Проверить более ранний образец

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

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

reset(DStore);

Набор ReadSize кому 200 снова.

DStore.ReadSize = 200;

Дважды считывайте из хранилища данных, чтобы переместить положение считывания в 401-й образец.

read(DStore);
read(DStore);

Набор ReadSize кому 5 снова.

DStore.ReadSize = 5;

Чтение из хранилища данных.

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 образцов).

Сбросьте хранилище данных.

reset(DStore)

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

DStore.ReadSize = 200;

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

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

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

Найти максимальное значение данных в хранилище данных

Сбросьте хранилище данных.

reset(DStore)

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

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

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

runningMax
runningMax =

    1.6423

Представлен в R2017a