Работа с Большими данными для симуляций

Симуляция моделей со многими временными шагами и сигналами может включить большие данные, которые являются слишком большими, чтобы поместиться в RAM вашего компьютера. Такие ситуации включают:

  • Регистрируя данные моделирования (журналирование сигнала, журналирование выходного порта и журналирование состояния)

  • Загрузка данных о входном сигнале для симуляции модели

  • Выполнение нескольких или параллельных симуляций

Чтобы работать с большими данными для симуляций, храните данные к персистентному устройству хранения данных в MAT-файле. Используя большие методы данных для симуляций требует дополнительных шагов вне того, что вы делаете, когда данные являются достаточно маленькими, чтобы поместиться в память рабочей области. Когда вы разрабатываете модель, рассматриваете журналирование и загрузку данных моделирования, не используя персистентное устройство хранения данных, если вы не обнаруживаете, что ваша модель имеет большие требования к данным та память перегрузки.

Рабочий процесс Больших данных

Этим примером является высокоуровневый рабочий процесс для обработки больших данных, которые одна симуляция производит и что другая симуляция использует в качестве входа. Для более подробной информации о главных задачах рабочего процесса см.:

Совет

Этот пример использует объект SimulationDatastore для потоковой передачи данных в модель. Также можно передать потоком объект DatasetRef непосредственно в модель.

  1. Сконфигурируйте две модели, чтобы регистрировать несколько сигналов.

  2. Моделируйте модели, регистрируя данные к персистентному устройству хранения данных для каждой модели.

    sim(mdl1,'LoggingToFile','on','LoggingFileName','data1.mat');
    sim(mdl2,'LoggingToFile','on','LoggingFileName','data2.mat');

    Журналирование, которое включает большие данные, требует сохранения данных к персистентному устройству хранения данных как v7.3 MAT-файл. Только данные вошли в систему, формат Dataset сохранен в файл. Данные вошли в систему, другие форматы, такие как Structure with time, сохранены в памяти в базовом рабочем пространстве.

    Данные, которые вы регистрируете к персистентному устройству хранения данных, передаются потоком во время симуляции в маленьких фрагментах, чтобы минимизировать требования к памяти. Данные хранятся в файле, который содержит объекты Dataset для каждого набора записанных данных (например, logsout и xout).

  3. Создайте объекты 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};
  4. Используйте объекты 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');
  5. Используйте MATLAB® большой анализ данных, чтобы работать с объектами SimulationDatastore. Создайте объект timetable путем чтения значений объекта SimulationDatastore. Функция read читает фрагмент данных. Функция readall считывает все данные.

    tt = dst1.Values.read;
  6. Установите сеанс работы с MATLAB как глобальную среду выполнения (mapreducer) для работы с высоким timetable. Создайте высокий timetable из объекта SimulationDatastore и считайте объект timetable с данными в оперативной памяти.

    mapreducer(0);
    ttt = tall(dst1.Values);
    

Совет

Для другого примера, показывающего, как работать с большими данными моделирования, смотрите Работу с Большими данными.

Смотрите также

Функции

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте