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

Пакет: matlab.io.datastore

Datastore для Инспектора Данных моделирования сигналы

Описание

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

Примечание

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

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

Свойства

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

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

Пример: 'My Signal'

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

Методы

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

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

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

Примеры

свернуть все

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

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

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

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

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

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

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

egoDs.Name
ans = 
'ego'

Создайте длинное расписание из 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  
    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 4 sec
Evaluation completed in 4.2 sec
egoMean = 0.5008

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

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

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

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

sim('sldemo_fuelsys')

Используйте Инспектора Данных моделирования программируемый интерфейс, чтобы получить 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×2 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, чтобы считать фрагменты данных от Инспектора Данных моделирования репозиторий, чтобы инкрементно обработать данные. Используйте метод 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