matlab.io.datastore.sdidatastore class

Пакет: matlab.io.datastore

Datastore для сигналов Данных моделирования Inspector

Описание

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

Примечание

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

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

Свойства

расширить все

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

Пример: 'My Signal'

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

Методы

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

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

Указатель. Чтобы узнать, как классы handle влияют на операции копирования, см. раздел «Копирование объектов».

Примеры

свернуть все

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

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

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

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

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

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

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

egoDs.Name
ans = 
'fuel'

Составьте длинное расписание из matlab.io.datastore.sdidatastore для использования для обработки данных сигнала. Когда у вас есть лицензия Parallel Computing Toolbox™, необходимо явным образом задать окружение выполнения для локального сеанса MATLAB ® с помощью mapreducer перед созданием длинное расписание. The 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 Объект

The Simulink.sdi.Signal Класс имеет метод создания длинного расписания непосредственно, позволяющий пропустить шаг создания datastore путем создания его за кадром. Используйте идентификатор сигнала для доступа к 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 9.8 sec
Evaluation completed in 10 sec
egoMean = 1.3292

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

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

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

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

sim('sldemo_fuelsys')

Используйте программный интерфейс Данные Моделирования 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);

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

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 способ. The readall метод возвращает timetable со всеми данными о сигнале.

speedTimetable = speedSDIds.readall;

speedMax = max(speedTimetable.Data)
speedMax = 0.8897
Введенный в R2017b