exponenta event banner

Загрузка больших данных для моделирования

Моделирование моделей с множеством временных шагов и сигналов может использовать и создавать данные, которые слишком велики, чтобы поместиться в рабочую память компьютера. Если входные данные моделирования не помещаются в память, можно выбрать одну из нескольких стратегий использования этих данных в качестве входных данных моделирования с блоками ввода на корневом уровне. Эти стратегии работают для загрузки данных, хранящихся в Dataset формат в MAT-файле версии 7.3, включая данные, записанные из другого моделирования.

  1. Если отдельные входные сигналы слишком велики для размещения в памяти, можно использовать matlab.io.datastore.SimulationDatastore объект для доступа к данным сигнала. Данные из SimulationDatastore объект загружается в симуляцию инкрементно в части, которые помещаются в память.

  2. Когда входные данные моделирования задаются Simulink.SimulationData.Dataset объект в файле, который слишком велик для загрузки в память, можно перетекать все содержимое Dataset объект в модели с использованием Simulink.SimulationData.DatasetRef объект.

  3. Когда сигналы помещаются в память и хранятся в файле, который слишком велик для загрузки в память, можно загрузить отдельные сигналы из файла в память с помощью Simulink.SimulationData.DatasetRef объект.

Примечание

Если необходимо использовать данные, зарегистрированные в одном моделировании, в качестве входных данных для другого моделирования, можно также передавать данные в модель с помощью matlab.io.datastore.sdidatastore объект. sdidatastore объект ссылается на данные в репозитории Simulation Data Inspector на диске, поэтому нет необходимости сохранять записанные данные в файл. Рассмотрите возможность использования sdidatastore объект в качестве ввода моделирования для итеративных рабочих процессов.

Все стратегии загрузки больших данных предназначены для особого случая, когда данные не помещаются в память и могут потребовать дополнительных шагов. В этих примерах используются данные, которые полностью помещаются в память, чтобы проиллюстрировать шаги, необходимые для загрузки больших данных. Когда входные данные моделирования поместятся в память, рассмотрите возможность использования других методов загрузки.

Потоковая передача отдельных сигналов с использованием SimulationDatastore Объекты

Когда отдельные сигналы во входных данных слишком велики, чтобы поместиться в память, можно создать matlab.io.datastore.SimulationDatastore объекты для этих сигналов и потоковая передача их в модель. Создание SimulationDatastore объект для сигнала, который требуется перетекать в модель, сначала создайте Simulink.SimulationData.DatasetRef объект для ссылки на Dataset объект, содержащий интересующий сигнал. Например, создайте DatasetRef для зарегистрированных данных из моделирования slexAircraftExample модель.

logsout_DSR = Simulink.SimulationData.DatasetRef('aircraftData.mat','logsout');

Можно создать SimulationDatastore объект для требуемого сигнала путем индексации в DatasetRef объект с фигурными скобками или с использованием getAsDatastore метод для DatasetRef объект. В обоих случаях SimulationDatastore существует в Values свойство возвращенного Simulink.SimulationData.Signal объект.

Когда вы знаете индекс сигнала в Dataset , можно индексировать в DatasetRef объект с фигурными скобками для создания SimulationDatastore для вашего сигнала.

alphaRad_ds = logsout_DSR{4}
alphaRad_ds = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'alpha, rad'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 4
            Values: [1x1 matlab.io.datastore.SimulationDatastore]


  Methods, Superclasses

Создание SimulationDatastore для сигнала, используя индекс сигнала, имя или путь блока, используйте getAsDatastore способ. Например, создайте SimulationDatastore объект для Stick сигнал.

stick_ds = logsout_DSR.getAsDatastore('Stick')
stick_ds = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'Stick'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1x1 matlab.io.datastore.SimulationDatastore]


  Methods, Superclasses

Потому что Values свойства stick_ds и alphaRad_ds Simulink.SimulationData.Signal объекты являются SimulationDatastores, сигнальные потоки данных в вашу модель. Можно включить SimulationDatastore поддержал Signal объект как элемент в Dataset или как элемент в Input список, разделенный запятыми.

Потоковая передача в целом Dataset Использование DatasetRef Объект

Если входные данные моделирования указаны в Dataset в файле, который слишком велик для загрузки в память, можно создать Simulink.SimulationData.DatasetRef объект для потоковой передачи входных данных моделирования в модель. При указании DatasetRef для параметра Input на панели Импорт/экспорт данных, все сигналы в Dataset используется для создания DatasetRef поток в модель. Используйте один из других методов загрузки больших данных для загрузки или потоковой передачи отдельных сигналов из Dataset объект.

Когда файл, в который введено моделирование Dataset хранится содержит другое Datasets и данные, вы можете использовать Simulink.SimulationData.DatasetRef.getDatasetVariableNames для просмотра списка Dataset объекты, содержащиеся в файле. Предварительный просмотр имен переменных в Dataset особенно полезен, когда содержимое файла не помещается в память.

datasetNames = Simulink.SimulationData.DatasetRef.getDatasetVariableNames('aircraftData.mat')
datasetNames = 1x3 cell
    {'logsout'}    {'xout'}    {'yout'}

Создать DatasetRef объект для logsout.

logsout_DSR = Simulink.SimulationData.DatasetRef('aircraftData.mat','logsout');

Можно загрузить logsout_DSR с использованием Input параметр таким же образом, как загружается Simulink.SimulationData.Dataset объект. Каждый сигнал в Dataset используется для создания DatasetRef потоки в модель в кусках, которые вписываются в память.

Загрузка отдельных сигналов из DatasetRef Объект

Когда входные сигналы моделирования по отдельности помещаются в память и сохраняются в Dataset объект в файле, который не помещается в память, используйте Simulink.SimulationData.DatasetRef объект для загрузки каждого интересующего сигнала в память. Затем можно загрузить сигналы в качестве входных данных моделирования для модели.

Сначала создайте DatasetRef объект для ссылки на Dataset в файле, содержащем сигналы, которые требуется загрузить. Например, создайте DatasetRef для данных, зарегистрированных в файле из моделирования slexAircraftExample модель.

logsout_DSR = Simulink.SimulationData.DatasetRef('aircraftData.mat','logsout');

Вы можете использовать get или getElement способы загрузки отдельных сигналов в память с помощью DatasetRef объект. Оба метода загружают указанный элемент в память, используя один и тот же синтаксис. Вы можете указать сигнал, который вы хотите загрузить в память, используя его индекс в Dataset объект или его имя. Если вы не знаете имя сигнала, который вы хотите загрузить, используйте getElementNames для просмотра имен элементов в Dataset объект, на который ссылается DatasetRef объект.

elNames = logsout_DSR.getElementNames
elNames = 15x1 cell
    {0x0 char    }
    {0x0 char    }
    {0x0 char    }
    {'alpha, rad'}
    {'q, rad/sec'}
    {0x0 char    }
    {'qGust'     }
    {'wGust'     }
    {0x0 char    }
    {0x0 char    }
    {0x0 char    }
    {'Stick'     }
    {0x0 char    }
    {0x0 char    }
    {0x0 char    }

Загрузить qGust сигнал в память с использованием его имени.

qGust = logsout_DSR.getElement('qGust')
qGust = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'qGust'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 2
            Values: [1x1 timeseries]


  Methods, Superclasses

Вы можете добавить qGust сигнал на Dataset объект моделирования входных сигналов для загрузки в блоки ввода корневого уровня в модели, или можно указать qGust как элемент в Input список, разделенный запятыми.

См. также

| |

Связанные темы