В этом примере показано, как модели Simulink обрабатывают большие данные, как введено к и выводят от симуляции.
Большие данные относятся к данным, которые являются слишком большими, чтобы загрузить в системную память целиком.
Simulink может произвести большие данные как симуляцию выход и использовать большие данные как вход симуляции. Чтобы обработать большие данные для обоих вводов и выводов, целые данные хранятся в MAT-файле на жестком диске. Только маленькие фрагменты этих данных загружаются в системную память в любое время в процессе моделирования. Этот подход известен как потоковую передачу. Simulink может передать данные потоком к и из MAT-файла. Потоковая передача решает проблемы памяти, потому что мощность жесткого диска обычно очень больше мощности оперативной памяти.
В этом примере показано, как обработать большие данные в симуляциях Simulink. Логгирование, чтобы зарегистрировать возможность используется, чтобы передать большие данные потоком как выход симуляции. Потоковая передача из файла затем снабжает большими данными, как введено к симуляции.
К потоковым выходным данным к MAT-файлу позвольте регистрировать к файлу.
Позвольте регистрировать к файлу путем выбора ''Параметров конфигурации> Импорт/Экспорт Данных> Логарифмические данные о Наборе данных к файлу'' опция. Можно также задать имя файла, который будет содержать результат.
Программируемый способ позволить Регистрировать к файлу путем установки параметра модели LoggingToFile
к on
.
Когда логгирование к файлу включено на модели, симуляции тот потоки, модели регистрировали сигналы непосредственно в MAT-файл. Кроме того, если логгирование состояний или Выхода включено, и SaveFormat задан как Набор данных, те значения передаются потоком в то же самое MAT-файл.
Этот пример изменяет директорию во временную директорию, которая имеет полномочия записи. Затем пример вызывает sim команду, чтобы симулировать модель, регистрируя к файлу.
Установите параметр SignalLoggingName, который задает имя объекта Dataset содержать результат логгирования сигнала к topOut
. Установите параметр LoggingFileName
, который задает имя получившегося MAT-файла к top.mat
. Параметр StopTime устанавливается на 5 000 секунд. Для более реалистического большого примера данных время остановки было бы намного большим значением, которое приведет к значительно большему количеству выборок данных, чтобы регистрировать. 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 17.686s
Используйте объект DatasetRef сослаться на получившийся Набор данных в регистрируемом MAT-файле. Преимущество использования DatasetRef - то, что MAT-файл, на который ссылаются, не загружается в память. DatasetRef является очень легким интерфейсным объектом для ссылки на Набор данных, который хранится в файле. Альтернатива для вызова load
функция на этом файле загружает целый файл в память, которая не может быть возможной, если этот Набор данных содержит большие данные.
Можно использовать {} индексацию объекта DatasetRef сослаться на отдельные сигналы в Наборе данных, не загружая эти сигналы в память. Например, чтобы сослаться на сигнал секунд:
Поле Values sig2 является объектом SimulationDatastore, который является легкой ссылкой на данные сигнала 2, сохраненного на диске:
ans = SimulationDatastore with properties: ReadSize: 100 NumSamples: 50001 FileName: '/tmp/BR2021bd_1724986_151598/publish_examples7/tpe23eae11/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. Каждая структура отражает иерархию сигнала первоначальной шины.
Задайте входные сигналы к симуляции через объект Dataset. Каждый элемент в этом Наборе данных предоставляет входные данные блоку импорта, соответствующему тому же индексу. Создайте пустой Набор данных ds
и затем поместите ссылки на регистрируемые сигналы в него как элементы номер один и два.
Используйте {} индексирующий на объекте Dataset присвоить элементы в соответствующие положения.
В каждом элементе Набора данных можно смешать ссылки на данные сигнала (e.g., объект SimulationDatastore) с данными в оперативной памяти (e.g. Объекты временных рядов. Изменить одно из верхнего насыщения ограничивает от 30 до 37:
Теперь симулируйте модель sldemo_mdlref_counter_bus
, на которую ссылаются,, и используйте Набор данных ds, как введено. Данные, на которые ссылаются объекты SimulationDatastore, передаются потоком в симуляцию без подавляющего система.
Данные для верхнего предела насыщения не передаются потоком, потому что тот сигнал задан как timeseries в оперативной памяти. Изменение в пределе насыщения отражается приблизительно во время 6 в осциллографе (сигнал теперь насыщает к значению 37 вместо 30).
Этот пример продемонстрировал рабочий процесс цикла обработки больших данных от и до симуляции. Логгирование к персистентному устройству хранения данных использовалось к потоковым данным из первой симуляции в MAT-файл. Вторая симуляция была затем установлена до потока данные из того файла, как введено. Более реалистический пример имел бы большее значение для параметра модели StopTime, приводящего к большему регистрируемому MAT-файлу. Второе моделирование могло также быть конфигурировано для более длинного StopTime. Однако даже с большими файлами данных для выхода и входа, требования к памяти для более длительных симуляций остаются то же самое!
SimulationDatastore позволяет вам анализировать записанные данные инкрементно в MATLAB. При возвращении к ссылке на второй регистрируемый сигнал присвойте datastore новой переменной, чтобы упростить доступ к нему.
SimulationDatastore позволяет инкрементное чтение справочных данных. Чтение делает во фрагментах и управляет свойство ReadSize. Значением по умолчанию для ReadSize являются 100 выборок (каждая выборка для сигнала является данными, регистрируемыми для одного временного шага симуляции). Измените его в 1 000 для этого примера. Каждое чтение datastore возвращает представление расписания данных.
Каждое чтение на datastore совершенствует счетчик чтения. Можно сбросить этот счетчик и начать читать с начала:
Используйте SimulationDatastore для инкрементного доступа к регистрируемым данным моделирования для большого анализа данных в MATLAB. Можно выполнить итерации по целой записи данных и фрагментам: