Моделирование моделей с множеством временных шагов и сигналов может включать в себя большие данные, которые слишком велики для размещения в оперативной памяти компьютера. К таким ситуациям относятся:
Данные моделирования регистрации (регистрация сигнала, регистрация выходного порта и регистрация состояния)
Загрузка данных входного сигнала для моделирования модели
Выполнение нескольких или параллельных имитаций
Для работы с большими данными для моделирования сохраните данные в постоянном хранилище в 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 для первого моделирования. Для второго моделирования в примере кода создается сигнал со значениями a 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 объект. Входные данные хранилища данных постепенно загружаются из 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 объект. read функция считывает часть данных. readall функция считывает все данные.
tt = dst1.Values.read;
Установите сеанс MATLAB в качестве глобальной среды выполнения (mapreducer) для работы с высоким timetable. Создать высокий timetable от SimulationDatastore объект и прочтите timetable объект с данными в памяти.
mapreducer(0); ttt = tall(dst1.Values);
Совет
Другой пример работы с большими данными моделирования см. в разделе Работа с большими данными.
matlab.io.datastore.SimulationDatastore | Simulink.SimulationData.Dataset | Simulink.SimulationData.DatasetRef | timeseries