matlab.io.datastore.SimulationDatastore class

Пакет: matlab.io.datastore

Datastore для входов и выходов моделей Simulink

Описание

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

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

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

Конструкция

После хранения больших данных моделирования в 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.

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

Свойства

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

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

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

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

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

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

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

Методы

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

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

Указатель. Чтобы узнать, как классы handle влияют на операции копирования, см. раздел «Копирование объектов».

Ограничения

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

    mapreducer(0)
    Для получения информации о контроле параллельных ресурсов смотрите Run mapreduce on a Parallel Pool (Parallel Computing Toolbox).

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

Примеры

свернуть все

В этом примере показано, как логгировать большие данные из симуляции и просматривать и анализировать фрагменты этих данных путем взаимодействия с 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