Этот пример показывает, как модели Simulink обрабатывают большие данные как входные и выходные данные симуляции.
Большие данные относятся к данным, которые слишком велики, чтобы загружаться в системную память сразу.
Simulink может производить большие данные в качестве выхода симуляции и использовать большие данные в качестве входов симуляции. Для обработки больших данных как для входа, так и для выхода, все данные хранятся в MAT-файле на жестком диске. Только небольшие фрагменты этих данных загружаются в память системы в любое время во время симуляции. Этот подход известен как потоковая передача. Simulink может транслировать данные в MAT-файл и из него. Потоковая передача решает проблемы с памятью, потому что емкость жесткого диска обычно намного больше, чем емкость памяти с произвольным доступом.
Этот пример показывает, как обрабатывать большие данные в симуляциях Simulink. Возможность логгирования в файл используется для потоковой передачи больших данных как выхода симуляции. Потоковая передача из файла затем поставляет большие данные как вход в симуляцию.
Чтобы передать выходные данные в MAT-файл, включите ведение журнала в файл.
Включите логгирование в файл, выбрав параметр «Параметры конфигурации > Импорт/Экспорт данных > Журналом данных набора данных в файл». Можно также указать имя файла, который будет содержать результат.
Программный способ включения Logging to file - это установка параметра модели LoggingToFile
на on
.
При включении логгирования в файл на модели симуляция этой модели потоки регистрируют сигналы непосредственно в MAT-файл. Кроме того, если включена регистрация состояний или выхода и SaveFormat задан как набор данных, эти значения передаются в тот же MAT-файл.
Этот пример меняет директорию на временную директорию, который имеет разрешения на запись. Затем в примере вызывается команда sim, чтобы симулировать модель, логгирование в файл.
Установите параметр SignalLoggingName, который задает имя объекта набор данных, чтобы сохранить результат логгирования сигнала, равным topOut
. Установите параметр LoggingFileName
, которое задает имя получившегося MAT-файла, чтобы top.mat
. Параметр StopTime установлен на 5000 секунд. Для более реалистичного примера больших данных время остановки было бы намного большим значением, что привело бы к большему количеству выборок данных для регистрации. cd (tempdir);
### Starting serial model reference simulation build ### Successfully updated the model reference simulation target for: sldemo_mdlref_counter_bus Build Summary Simulation targets built: Model Action Rebuild Reason ============================================================================================================== sldemo_mdlref_counter_bus Code generated and compiled sldemo_mdlref_counter_bus_msf.mexa64 does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 16.4s
Используйте объект DatasetRef для ссылки на полученный набор данных в записанном MAT-файле. Преимущество использования DatasetRef заключается в том, что ссылочный MAT-файл не загружается в память. DatasetRef является очень легкой оберткой, объектом для ссылки на набор данных, который хранится в файле. Альтернатива вызова load
функция в этом файле загружает весь файл в память, что может оказаться невозможным, если этот набор данных содержит большие данные.
Можно использовать {} индексацию объекта DatasetRef для ссылки на отдельные сигналы в наборе данных, не загружая эти сигналы в память. Для примера, для ссылки на сигнал секунд:
Поле Values sig2 является объектом SimulationDatastore, который является легкой ссылкой на данные сигнала 2, сохраненной на диске:
ans = SimulationDatastore with properties: ReadSize: 100 NumSamples: 50001 FileName: '/tmp/BR2021ad_1584584_202060/publish_examples6/tp1e9204a8/ex31145726/top.mat' Data Preview: Time Data _______ ______ 0 sec 1 5 0.1 sec 1 5 0.2 sec 2 6 0.3 sec 2 6 0.4 sec 3 7 : :
Этот пример использует некоторые из этих записанных сигналов как входов для симуляции ссылочных моделей. Создайте легкие ссылки для каждого из них. Это сигналы шины в модели, и получившиеся поля Values являются структурами объектов SimulationDatastore. Каждая структура отражает иерархию исходного сигнала шины.
Задайте входные сигналы для симуляции через объект набор данных. Каждый элемент в этом наборе данных предоставляет входные данные блоку inport, соответствующему тому же индексу. Создайте пустой набор данных ds
и затем поместите в него ссылки на записанные сигналы в виде элементов номер один и два.
Используйте индексацию {} для объекта набор данных, чтобы назначить элементы в соответствующие положения.
В каждом элементе набора данных можно смешать ссылки на данные сигнала (например, объект SimulationDatastore) с данными в памяти (например, объектами timeseries). Чтобы изменить один из верхних пределов насыщения с 30 до 37:
Теперь симулируйте ссылку на модель sldemo_mdlref_counter_bus
, и используйте Dataset ds как вход. Данные, на которые ссылаются объекты SimulationDatastore, транслируются в симуляцию, не подавляя систему.
Данные для верхнего предела насыщения не транслируются, потому что этот сигнал задан как timeseries в памяти. Изменение предела насыщения отражается приблизительно в момент времени 6 в возможности (сигнал теперь достигает значения 37 вместо 30).
Этот пример продемонстрировал рабочий процесс туда и обратно больших данных от и до симуляции. Логгирование в постоянное хранилище использовалось для потоковой передачи данных с первой симуляции в MAT-файл. Затем была настроена вторая симуляция, чтобы передать данные из этого файла в качестве входных данных. Более реалистичный пример имел бы большее значение для параметра модели StopTime, что привело бы к большему записанному MAT-файлу. Вторая симуляция также может быть сконфигурирована для более длинного StopTime. Однако даже с большими файлами данных для выхода и входа, требования к памяти для более длинных симуляций остаются неизменными!
SimulationDatastore позволяет вам анализировать записанные данные постепенно в MATLAB. Возвращаясь к ссылке на второй записанный сигнал, присвойте datastore новой переменной, чтобы упростить доступ к нему.
SimulationDatastore позволяет пошагово считывать ссылочные данные. Чтение выполняется в фрагменты и управляется свойством ReadSize. Значение по умолчанию для ReadSize является 100 выборок (каждая выборка для сигнала является данными, регистрируемыми для одного временного шага симуляции). Измените его на 1000 для этого примера. Каждое чтение datastore возвращает представление данных по расписанию.
Каждое чтение на datastore совершенствует счетчик чтения. Можно сбросить этот счетчик и начать чтение с самого начала:
Используйте SimulationDatastore для инкрементного доступа к записанным данным моделирования для анализа больших данных в MATLAB. Можно выполнить итерацию по всей записи данных и фрагментам: