Класс

matlab.io.datastore. SimulationDatastore

Пакет: matlab.io.datastore

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

Описание

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

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

Чтобы анализировать данные datastore, можно использовать методы и свойства объекта SimulationDatastore, а также инструментов MATLAB®, таких как функция tall. Для получения дополнительной информации о средствах MATLAB, смотрите Начало работы с Datastore (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 возвратить объект, который представляет целевой элемент сигнала. Для получения дополнительной информации смотрите Simulink.SimulationData.DatasetRef.getAsDatastore.

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

Свойства

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

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

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

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

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

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

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

Методы

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

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

Указатель. Чтобы изучить, как классы Handle влияют на операции копии, смотрите Копирование Объектов (MATLAB).

Ограничения

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

    mapreducer(0)
    Для получения информации об управлении параллельными ресурсами см. mapreduce Выполнения на Параллельном Пуле (Parallel Computing Toolbox).

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

Примеры

свернуть все

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

Регистрируйте Большие данные от модели

Откройте модель в качестве примера sldemo_fuelsys.

open_system('sldemo_fuelsys')

Выберите Configuration Parameters> Data Import/Export> данные Log Dataset к файлу.

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

Была ли эта тема полезной?