Симуляция моделей с множеством временных шагов и сигналов может включать большие данные, которые являются слишком большими, чтобы помещаться в оперативную память вашего компьютера. Такие ситуации включают:
Данные моделирования логгирования (логгирование сигналов, выход портов и логгирование состояний)
Загрузка входного сигнала данных для симуляции модели
Выполнение нескольких или параллельных симуляций
Чтобы работать с большими данными для симуляций, сохраните данные в постоянном хранилище в MAT-файле. Использование методов больших данных для симуляций требует дополнительных шагов сверх того, что вы делаете, когда данные достаточно малы, чтобы помещаться в памяти рабочей области. Когда вы разрабатываете модель, рассмотрите логгирование и загрузку данных моделирования без использования постоянного хранилища, если вы не обнаружите, что ваша модель имеет требования к большим данным, которые перегружают память.
Этот пример является высокоуровневым рабочим процессом для обработки больших данных, которые производит одна симуляция и которые другая симуляция использует в качестве входов. Для получения дополнительной информации о основных задачах рабочего процесса смотрите:
Совет
Этот пример использует SimulationDatastore
объект для потоковой передачи данных в модель. Также можно транслировать DatasetRef
объект непосредственно в модель.
Сконфигурируйте две модели, чтобы записать несколько сигналов.
Симулируйте модели, регистрируя данные в постоянном хранилище для каждой модели.
sim(mdl1,'LoggingToFile','on','LoggingFileName','data1.mat'); sim(mdl2,'LoggingToFile','on','LoggingFileName','data2.mat');
Логгирование, которое включает большие данные, требует сохранения данных в постоянном хранилище как MAT-файл версии 7.3. Только данные, зарегистрированные в Dataset
формат сохраняется в файле. Данные, регистрируемые в других форматах, таких как Structure with time
, сохраняется в памяти, в базовом рабочем пространстве.
Данные, которые вы записываете в постоянное хранилище, передаются во время симуляции небольшими фрагментами, чтобы минимизировать требования к памяти. Данные хранятся в файле, который содержит Dataset
объекты для каждого набора записанных данных (для примера, logsout
и xout
).
Создание DatasetRef
объекты (dsr1
и dsr2
) для конкретных наборов записанных сигналов. Затем создайте SimulationDatastore
объекты (dst1
и dst2
) для значений элементов DatasetRef
объекты. Этот пример кода создает SimulationDatastore
для 12-го элемента logsout
для первой симуляции. Для второй симуляции код примера создает сигнал со значениями SimulationDatastore
объект для седьмого элемента logsout
. Для индексации можно использовать фигурные скобки.
dsr1 = Simulink.SimulationData.DatasetRef('data1.mat','logsout'); dsr2 = Simulink.SimulationData.DatasetRef('data2.mat','logsout'); dst1 = dsr1{12}; dst2 = dsr2{7};
Использование SimulationDatastore
объекты как внешний вход для другой симуляции. Чтобы загрузить SimulationDatastore
данные, включите его в Dataset
объект. Вход datastore постепенно загружается из MAT-файла. Третий вход является timeseries
объект, который загружается в память как единое целое, не постепенно.
input = Simulink.SimulationData.Dataset; input{1} = dst1; input{2} = dst2; ts = timeseries(rand(5,1),1,'Name','RandomSignals'); input{3} = ts; sim(mdl3,'ExternalInput','input');
Использование MATLAB® анализ больших данных для работы с SimulationDatastore
объекты. Создайте timetable
объект путем чтения значений SimulationDatastore
объект. The read
функция считывает фрагмент данных. The readall
функция считывает все данные.
tt = dst1.Values.read;
Установите сеанс работы с MATLAB как глобальное окружение выполнения (mapreducer
) для работы с высокими timetable
. Создайте tall timetable
из SimulationDatastore
объект и чтение timetable
объект с данными в памяти.
mapreducer(0); ttt = tall(dst1.Values);
Совет
Другой пример, показывающий, как работать с большими данными моделирования, см. в Работе с большими данными.
matlab.io.datastore.SimulationDatastore
| Simulink.SimulationData.Dataset
| Simulink.SimulationData.DatasetRef
| timeseries