Этот пример иллюстрирует, как ускорить оценку частотной характеристики моделей Simulink® с помощью параллельных вычислений. В некоторых сценариях функция frestimate
оценивает частотную характеристику модели Simulink путем выполнения нескольких симуляций Simulink. Можно распределить эти симуляции пулу работников MATLAB при помощи Parallel Computing Toolbox™.
Этот пример требует Parallel Computing Toolbox. Можно опционально запустить симуляции на компьютерном кластере с помощью MATLAB® Parallel Server™. Этот пример использует локальную функциональность рабочего, доступную в Parallel Computing Toolbox.
frestimate
Когда вы вычисляете частотную характеристику с помощью функции frestimate
, большинство времени вычисления обычно тратится в симуляциях Simulink. Чтобы уменьшать общее время симуляции, вы можете:
Используйте быстрый режим Accelerator. Используйте этот метод, когда frestimate
выполнит только одну симуляцию Simulink. Для примера смотрите Валидацию Линеаризации в Частотном диапазоне Используя FRESTIMATE.
Распределите симуляции на рабочих в пуле MATLAB. Используйте этот метод, когда frestimate
выполнит несколько симуляций Simulink. frestimate
выполняет больше чем одну симуляцию Simulink, когда вы задаете следующее:
sinestream входной сигнал с набором параметра SimulationOrder
к 'OneAtATime'
. В этом случае каждая частота в сигнале sinestream моделируется отдельно.
Линейный анализ указывает больше чем с одной точкой ввода или нескалярной точкой ввода. В этом случае каждая точка ввода линеаризации или каждый канал в нескалярной точке ввода линеаризации приводят к отдельной симуляции Simulink.
Используя функцию frestimate
с параллельными вычислениями также поддерживает нормальный, акселератор и быстрые режимы Accelerator.
Чтобы использовать параллельные вычисления, чтобы ускорить оценку частотной характеристики, сконфигурируйте и запустите пул работников 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).
Когда вы используете 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)
Когда количество точек ввода линеаризации или количество каналов в точке ввода линеаризации больше, чем один, команда 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.
frestimate
| frestimateOptions
| gcp
| parpool