exponenta event banner

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

Пакет: matlab.io.datastore

Хранилище данных для сигналов инспектора данных моделирования

Описание

A matlab.io.datastore.sdidatastore объект обеспечивает доступ к сигналам, зарегистрированным в инспекторе данных моделирования, которые слишком велики для размещения в памяти. Один sdidatastore объект ссылается на данные для одного сигнала. read метод загружает данные сигнала, на которые ссылается sdidatastore объект по частям таким образом, что каждый блок всегда помещается в память. Вы можете использовать sdidatastore объект для создания высокого расписания для данных сигнала. Дополнительные сведения о работе с массивами tall см. в разделе Массивы tall.

Примечание

matlab.io.datastore.sdidatastore не поддерживает параллельные вычисления. При наличии лицензии Parallel Computing Toolbox™ используйте mapreducer(0) установка среды выполнения для локального клиента MATLAB ® перед созданием высокого расписания из matlab.io.datastore.sdidatastore.

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

ds = dsrObj.getAsDatastore(arg) создает sdidatastore, ds, для сигнала в Simulink.sdi.DatasetRef объект, выбранный по критерию поиска arg. Можно указать arg в виде целого числа, представляющего индекс требуемого сигнала в пределах Simulink.sdi.DatasetRef объект или в виде символьного вектора, содержащего имя сигнала.

ds = matlab.io.datastore.sdidatastore(signalID) создает sdidatastore, ds, для сигнала, соответствующего указанному signalID.

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

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

Критерий поиска, используемый для извлечения элемента из Simulink.sdi.DatasetRef объект. Для поиска по именам укажите arg в виде символьного вектора. Для индексных поисков, arg - целое число, представляющее индекс требуемого элемента.

Пример: 'MySignal'

Пример: 3

Числовой идентификатор сигнала, сгенерированный инспектором данных моделирования. Идентификатор сигнала можно получить с помощью методов Simulink.sdi.Run объект, содержащий сигнал или в виде возврата от Simulink.sdi.createRun функция.

Свойства

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

Имя сигнала, указанного как символьный вектор.

Пример: 'My Signal'

Simulink.sdi.Signal объект, связанный с sdidatastore. Signal обеспечивает доступ к данным и метаданным сигнала.

Методы

hasdata Определение доступности данных для чтения
предварительный просмотр Возврат предварительного просмотра данных в sdidatstore
читать Считывание части данных из sdidatastore
readall Считывание всех данных из sdidatastore
сброс Сброс положения считывания

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

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

Примеры

свернуть все

В этом примере показано, как создать высокое расписание для сигнала в репозитории Simulation Data Inspector. Вы можете создать высокое расписание с помощью Simulink.sdi.Signal или путем первого создания matlab.io.datastore.sdidatastore для сигнала. Вы можете использовать matlab.io.datastore.sdidatastore для инкрементного считывания и обработки данных сигнала для сигналов, которые не помещаются в память. Высокое расписание обрабатывает порцию и обработку данных в фоновом режиме. В целом, вы можете работать с высоким расписанием так же, как вы работаете с данными в памяти.

Создание идентификатора сигнала данных и доступа

Создаете ли вы свое высокое расписание с помощью Simulink.sdi.Signal объект или matlab.io.datastore.sdidatastore, начните с создания данных и доступа к идентификатору сигнала для интересующего сигнала. sldemo_fuelsys модель конфигурируется для регистрации сигналов, которые поступают в репозиторий Simulation Data Inspector при моделировании модели.

open_system('sldemo_fuelsys')
sim('sldemo_fuelsys')

Затем используйте программный интерфейс Simulation Data Inspector для доступа к идентификатору сигнала, представляющего интерес. Например, доступ к ego сигнал.

runCount = Simulink.sdi.getRunCount;
latestRunID = Simulink.sdi.getRunIDByIndex(runCount);
latestRun = Simulink.sdi.getRun(latestRunID);

egoSigID = latestRun.getSignalIDByIndex(7);

Создание расписания высокого уровня с помощью matlab.io.datastore.sdidatastore

В целом, высокие расписания поддерживаются хранилищами данных. Создать matlab.io.datastore.sdidatastore объект для ссылки на данные сигнала в репозитории Simulation Data Inspector.

egoDs = matlab.io.datastore.sdidatastore(egoSigID);

Проверьте имя хранилища данных, чтобы убедиться в наличии ожидаемого сигнала.

egoDs.Name
ans = 
'fuel'

Создание высокого расписания из matlab.io.datastore.sdidatastore используется для обработки данных сигнала. При наличии лицензии Parallel Computing Toolbox™ необходимо явно установить среду выполнения на локальный сеанс MATLAB ® с помощьюmapreducer перед созданием высокого расписания. matlab.io.datastore.sdidatastore объект не поддерживает параллельные вычисления.

mapreducer(0);

egoTt = tall(egoDs)
egoTt =

  Mx1 tall 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
          :             :
          :             :

Создание расписания высокого уровня с помощью Simulink.sdi.Signal Объект

Simulink.sdi.Signal класс имеет метод создания высокого расписания непосредственно, позволяющий пропустить шаг создания хранилища данных, создав его за кадром. Используйте идентификатор сигнала для доступа к Simulink.sdi.Signal объект для ego сигнал. Затем используйте getTable метод создания высокого расписания.

egoSig = Simulink.sdi.getSignal(egoSigID);

egoTt = egoSig.getAsTall
egoTt =

  Mx1 tall 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
          :             :
          :             :

Используйте расписание Tall для обработки данных сигнала

При использовании высокого расписания egoTt, его базовое хранилище данных считывает порции данных и передает их в высокое расписание для обработки. Ни в хранилище данных, ни в расписании высокого уровня после обработки данные не сохраняются в памяти. Кроме того, высокий график откладывает обработку для многих операций. Например, вычислите среднее значение сигнала.

egoMean = mean(egoTt.Data)
egoMean =

  tall double

    ?

Вы можете использовать gather чтобы вычислить переменную и записать ее значение в рабочую область, или можно использовать write для записи результатов на диск. При использовании gather, убедитесь, что результаты соответствуют памяти.

egoMean = gather(egoMean)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 9.8 sec
Evaluation completed in 10 sec
egoMean = 1.3292

При выполнении нескольких операций по высокому графику оценка результатов для каждого шага откладывается до явного запроса результатов с помощью write или gather. Во время оценки MATLAB оптимизирует количество проходов по высокому расписанию, что может значительно ускорить время обработки для анализа очень больших сигналов. Дополнительные сведения о работе с массивами tall см. в разделе Массивы Tall для данных, не имеющих памяти.

A matlab.io.datastore.sdidatastore ссылается на данные сигнала в репозитории Simulation Data Inspector. Если сигнал слишком велик, чтобы поместиться в память, можно использовать matlab.io.datastore.sdidatastore для инкрементной обработки данных вручную или для создания высокого расписания для сигнала, который обрабатывает инкрементную обработку для вас. В этом примере показано, как обрабатывать данные с помощью matlab.io.datastore.sdidatastore.

Создать matlab.io.datastore.sdidatastore для сигнала

Моделирование sldemo_fuelsys модель, которая сконфигурирована для регистрации нескольких сигналов, для создания данных в репозитории Simulation Data Inspector.

sim('sldemo_fuelsys')

Программный интерфейс Simulation Data Inspector используется для получения идентификатора сигнала.

runCount = Simulink.sdi.getRunCount;

latestRunID = Simulink.sdi.getRunIDByIndex(runCount);

latestRun = Simulink.sdi.getRun(latestRunID);

speedSigID = latestRun.getSignalIDByIndex(4);

Используйте идентификатор сигнала для создания matlab.io.datastore.sdidatastore для speed сигнал.

speedSDIds = matlab.io.datastore.sdidatastore(speedSigID);

Проверка содержимого хранилища данных

Проверьте Name имущества matlab.io.datastore.sdidatastore чтобы убедиться, что он соответствует вашим ожиданиям.

speedSDIds.Name
ans = 
'map'

Вы также можете использовать preview способ проверки правильности первых десяти выборок в сигнале.

speedSDIds.preview
ans=10×1 timetable
         Time          Data  
    ______________    _______

    0 sec               0.589
    0.00056199 sec    0.58772
    0.0033719 sec     0.58148
    0.01 sec          0.56765
    0.02 sec          0.54897
    0.03 sec          0.53264
    0.04 sec          0.51837
    0.05 sec          0.50594
    0.055328 sec          0.5
    0.055328 sec          0.5

Обработка данных сигнала с помощью matlab.io.datastore.sdidatastore

Когда сигнал слишком велик, чтобы поместиться в память, можно использовать readData метод считывания порций данных из репозитория Simulation Data Inspector для инкрементной обработки данных. Используйте hasdata способ в качестве условия цикла времени для инкрементной обработки всего сигнала. Например, найдите максимальное значение сигнала.

latestMax = [];

while speedSDIds.hasdata
    
    speedChunk = speedSDIds.read;
    speedChunkData = speedChunk.Data;
    latestMax = max([speedChunkData; latestMax]);
    
end

latestMax
latestMax = 0.8897

При каждой операции считывания read обновляет положение чтения для начала следующей операции чтения. После прочтения некоторых или всех matlab.io.datastore.sdidatastore, можно сбросить положение считывания, чтобы начать заново с начала сигнала.

speedSDIds.reset

Обработка сигнальных данных в памяти

Когда на сигнал ссылается ваш matlab.io.datastore.sdidatastore вписывается в память, можно использовать readall способ считывания всех сигнальных данных в память для обработки, а не считывания и инкрементной обработки данных с помощью read способ. readall метод возвращает timetable со всеми данными сигнала.

speedTimetable = speedSDIds.readall;

speedMax = max(speedTimetable.Data)
speedMax = 0.8897
Представлен в R2017b