matlab.io.datastore.sdidatastore class

Пакет: 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) создает sdidatastoreds , для сигнала в Simulink.sdi.DatasetRef объект выбран критерием поиска arg. Можно задать arg как целое число, представляющее индекс желаемого сигнала в Simulink.sdi.DatasetRef объект, или как вектор символов, содержащий имя сигнала.

ds = matlab.io.datastore.sdidatastore(signalID) создает sdidatastoreds , для сигнала, соответствующего заданному 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 = 
'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 класс имеет метод, чтобы создать длинное расписание непосредственно, позволяя вам пропустить шаг создания datastore путем создания его негласно. Используйте ID сигнала, чтобы получить доступ к 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
          :             :
          :             :

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

Когда вы используете длинное расписание 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 1 min 51 sec
Evaluation completed in 1 min 51 sec
egoMean = 1.3292

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