Ускорение оценки частотной характеристики с помощью параллельных вычислений

Этот пример иллюстрирует, как ускорить оценку частотной характеристики моделей Simulink ® с помощью параллельных вычислений. В некоторых сценариях frestimate функция оценивает частотную характеристику модели Simulink путем выполнения нескольких симуляций Simulink. Можно распределить эти симуляции в пул работников MATLAB ® с помощью программного обеспечения Parallel Computing Toolbox™.

Этот пример требует программного обеспечения Parallel Computing Toolbox. Можно опционально запустить симуляции на компьютерный кластер с помощью программного обеспечения MATLAB Parallel Server™. В этом примере используются локальные рабочие функции, доступные в программном обеспечении Parallel Computing Toolbox.

Ускорение симуляций Simulink, выполняемых frestimate

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

  1. Используйте быстрый режим Accelerator. Используйте этот метод при frestimate выполняет только одну симуляцию Simulink. Для получения примера смотрите Валидацию линеаризации в Частотный диапазон с использованием FRESTIMATE.

  2. Распределите симуляции между работниками в пуле MATLAB. Используйте этот метод при frestimate выполняет несколько симуляций Simulink. frestimate Выполняет более одной симуляции Simulink, когда вы задаете следующее:

  • Входной сигнал синестрима с SimulationOrder набор параметров установлен в 'OneAtATime'. В этом случае каждая частота в сигнале синестреама моделируется отдельно.

  • Линейные точки анализа с более чем один вход точкой или нескаляром входа точкой. В этом случае каждая входная точка линеаризации или каждый канал в нескалярной входной точке линеаризации приводит к отдельной симуляции Simulink.

Использование frestimate функция с параллельными вычислениями также поддерживает normal, accelerator и rapid режимов Accelerator.

Сконфигурируйте пул MATLAB

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

Чтобы проверить, открыт ли пул MATLAB, используйте gcp функция. Если пул не открыт, откройте пул с помощью parpool функция.

if isempty(gcp)
   parpool local
end
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

Распределите симуляции Simulink для каждой частоты во входе Sinestream

Когда вы используете входной сигнал sinestream со frestimate и вы устанавливаете SimulationOrder параметр в 'OneAtATime'каждая частота в сигнале синестреама моделируется в отдельной симуляции Simulink. Если вы включите опцию параллельных вычислений, симуляции, соответствующие отдельным частотам, распределяются между работниками пула MATLAB.

Откройте модель и получите точки линейного анализа, сохраненные в модели.

mdl = 'scdengine';
open_system(mdl)
io = getlinio(mdl);

Создайте входной сигнал синестрейма с 'OneAtATime' порядок симуляции.

in = frest.Sinestream('Frequency',logspace(-1,1,50),'Amplitude',1e-3,...
    'SimulationOrder','OneAtATime');

В этой модели существует одна входная точка линеаризации и одна выходная точка линеаризации. В сигнале sinestream 50 частоты. The frestimate команда выполняет 50 отдельных симуляций Simulink, потому что SimulationOrder параметру задано значение 'OneAtATime'.

Чтобы распределить эти симуляции среди рабочих, включите параллельные вычисления для frestimate. Создайте frestimateOptions Объекту и установите UseParallel опция для 'on'. Используйте этот объект как входной параметр для frestimate.

opt = frestimateOptions('UseParallel','on');
sysest = frestimate(mdl,io,in,opt);
bode(sysest,'r*')

В целом параллельные вычисления значительно ускоряют оценку частотной характеристики с помощью frestimate. Фактические времена вычислений и степень улучшения будут зависеть от настройки компьютера и вашего строения Parallel Computing Toolbox. Для примера на объем улучшения могут влиять различные факторы, включая накладные расходы от передачи данных от клиента к работнику и конкуренцию ресурсов между рабочими процессами и процессами ОС.

Закройте модель.

bdclose(mdl)

Симуляции распределения Simulink для входных каналов

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

Откройте модель и получите точки линейного анализа, сохраненные в модели.

mdl = 'scdplane';
open_system(mdl)

io(1) = linio('scdplane/Sum1',1,'input');
io(2) = linio('scdplane/Actuator Model',1,'input');
io(3) = linio('scdplane/Gain5',1,'output');

С linio функция, вы задаете две входные точки линеаризации, которые обе расположены на скалярных сигналах Simulink. Если вы запускаете frestimate команда для оценки частотной характеристики для этой модели, происходят две симуляции Simulink, по одной для каждого входа.

Линеаризируйте модель и создайте входной сигнал с помощью результата линеаризации.

sys = linearize(mdl,io);
in = frest.Sinestream(sys);

Перед оценкой частотной характеристики найдите все исходные блоки в сигнальных путях выходов линеаризации, которые генерируют изменяющиеся во времени сигналы, используя findSources функция. Такие изменяющиеся во времени сигналы могут мешать сигналу в выходных точках линеаризации и приводить к неточным результатам оценки. Чтобы отключить изменяющиеся во времени исходные блоки, создайте frestimateOptions опция устанавливает и задает BlocksToHoldConstant опция.

srcblks = frest.findSources('scdplane',io);
opt = frestimateOptions('BlocksToHoldConstant',srcblks);

Включите параллельные вычисления с помощью UseParallel опция оценки, которая распределяет симуляции среди рабочих.

opt.UseParallel = 'on';

Выполняйте frestimate использование параллельных вычислений.

sysest = frestimate(mdl,io,in,opt);

Постройте график результата оценки относительно аналитической линеаризации

bodeopts = bodeoptions;
bodeopts.PhaseMatching = 'on';
bodeplot(sys,sysest,'r*',bodeopts);

Закройте модель, открытый рисунок и параллельный пул.

bdclose(mdl)
close(gcf)
delete(gcp)
Parallel pool using the 'local' profile is shutting down.

См. также

| | (Parallel Computing Toolbox) | (Parallel Computing Toolbox)

Похожие темы