Ускорьте оценку частотной характеристики Используя параллельные вычисления

Этот пример иллюстрирует, как ускорить оценку частотной характеристики моделей 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. Для примера смотрите, Подтверждают Линеаризацию в Частотном диапазоне в Командной строке.

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

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

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

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

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

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

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

if isempty(gcp)
   parpool local
end

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

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

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

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

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

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

В этой модели существует одна точка ввода линеаризации и одна выходная точка линеаризации. В сигнале sinestream существует 50 частот. 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 Computing Toolbox) | (Parallel Computing Toolbox)

Похожие темы