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

Пакет: matlab.io.datastore

Datastore для Моделирования сигналы Data Inspector

Описание

Объект matlab.io.datastore.sdidatastore обеспечивает доступ к сигналам, регистрируемым к Моделированию Data Inspector, которые являются слишком большими, чтобы вписаться в память. sdidatastore ссылки на объект данные для единственного сигнала. Метод read загружает данные сигнала, на которые ссылается объект sdidatastore мудрым фрагментом способом, таким образом, что каждый фрагмент всегда вписывается в память. Можно использовать объект sdidatastore создать длинное расписание для данных сигнала. Для получения дополнительной информации о работе с длинными массивами, смотрите Длинные массивы (MATLAB).

Примечание

matlab.io.datastore. sdidatastore не поддерживает параллельные вычисления. Если у вас есть Параллельные вычисления лицензия 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

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

Свойства

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

Имя сигнала, заданного как вектор символа.

Пример: 'Мой сигнал'

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

Методы

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

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

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

Примеры

свернуть все

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

Создайте данные и доступ к ID сигнала

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

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

Затем используйте Моделирование Data Inspector программируемый интерфейс, чтобы получить доступ к ID сигнала для сигнала интереса. Например, получите доступ к сигналу 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 сослаться на данные сигнала в Моделировании репозиторий Data Inspector.

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

Проверьте имя datastore, чтобы проверить, что у вас есть сигнал, который вы ожидаете.

egoDs.Name
ans = 
'ego'

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

mapreducer(0);

egoTt = tall(egoDs)
egoTt =

  Mx1 tall timetable

         Time         Data
    ______________    ____

    0 sec              1  
    0.00056199 sec     1  
    0.0033719 sec      1  
    0.01 sec           1  
    0.02 sec           1  
    0.03 sec           1  
    0.04 sec           1  
    0.05 sec           1  
          :            :
          :            :

Создайте длинное расписание Используя объект Simulink.sdi.Signal

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

egoSig = Simulink.sdi.getSignal(egoSigID);

egoTt = egoSig.getAsTall
egoTt =

  Mx1 tall timetable

         Time         Data
    ______________    ____

    0 sec              1  
    0.00056199 sec     1  
    0.0033719 sec      1  
    0.01 sec           1  
    0.02 sec           1  
    0.03 sec           1  
    0.04 sec           1  
    0.05 sec           1  
          :            :
          :            :

Используйте длинное расписание, чтобы обработать ваши данные сигнала

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

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 3.5 sec
Evaluation completed in 3.7 sec
egoMean = 0.5008

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

matlab.io.datastore.sdidatastore данные сигнала ссылок в Моделировании репозиторий Data Inspector. Когда сигнал является слишком большим, чтобы вписаться в память, можно использовать matlab.io.datastore.sdidatastore, чтобы инкрементно обработать данные вручную или создать длинное расписание для сигнала, который обрабатывает инкрементную обработку для вас. Этот пример показывает, как обработать данные с помощью matlab.io.datastore.sdidatastore.

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

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

sim('sldemo_fuelsys')

Используйте Моделирование Data Inspector программируемый интерфейс, чтобы получить ID сигнала для сигнала.

runCount = Simulink.sdi.getRunCount;

latestRunID = Simulink.sdi.getRunIDByIndex(runCount);

latestRun = Simulink.sdi.getRun(latestRunID);

speedSigID = latestRun.getSignalIDByIndex(4);

Используйте ID сигнала, чтобы создать matlab.io.datastore.sdidatastore для сигнала speed.

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

Проверьте содержимое Datastore

Проверьте свойство Name matlab.io.datastore.sdidatastore проверить, что это совпадает с вашими ожиданиями.

speedSDIds.Name
ans = 
'speed'

Можно также использовать метод preview, чтобы проверить, что первые десять выборок во взгляде сигнала исправляют.

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

    0 sec             300 
    0.00056199 sec    300 
    0.0033719 sec     300 
    0.01 sec          300 
    0.02 sec          300 
    0.03 sec          300 
    0.04 sec          300 
    0.05 sec          300 
    0.055328 sec      300 
    0.055328 sec      300 

Данные сигнала процесса с matlab.io.datastore.sdidatastore

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

latestMax = [];

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

latestMax
latestMax = 300

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

speedSDIds.reset

Данные сигнала процесса в памяти

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

speedTimetable = speedSDIds.readall;

speedMax = max(speedTimetable.Data)
speedMax = 300

Введенный в R2017b

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