В этом примере показано, как линеаризовать модель Simulink с задержками.
Можно линеаризовать модель Simulink с непрерывными блоками временных задержек, такими как Транспортная задержка (Transport Delay), Переменная транспортная задержка (Variable Transport Delay) и Переменная временная задержка (Variable Time Delay), используя одну из следующих опций.
Используйте аппроксимации Паде задержек, чтобы получить рациональную линейную систему через линеаризации.
Вычислите линеаризацию, где задержка представлена точно. Эта опция используется, когда требуется точное моделирование и частотные характеристики линеаризованной модели, а также при оценке точности аппроксимации Pade.
По умолчанию модуль Simulink Control Design использует аппроксимации Pade блоков задержки в модели Simulink.
Чтобы открыть модель частоты вращения двигателя, используемую в этом примере, введите
model = 'scdspeed';
open_system(model);

Модель частоты вращения двигателя содержит блок переменной задержки передачи с именем dM/dt в подсистеме «Задержка индукции до хода мощности». Для удобства можно сохранить путь к блоку в переменной MATLAB путем ввода
DelayBlock = 'scdspeed/Induction to Power Stroke Delay/dM//dt delay';
Чтобы вычислить линеаризацию с использованием аппроксимации первого порядка, используйте одну из следующих методик, чтобы установить порядок аппроксимации Паде равным 1:
В диалоговом окне «Блок переменной задержки переноса» введите 1 в поле «Порядок прокладки» (для линеаризации).
В командной строке введите следующую команду:
set_param(DelayBlock,'PadeOrder','1');
Затем задайте угол ввода/вывода линеаризации для дроссельной заслонки в качестве входного значения и частоту вращения двигателя в качестве выходного значения путем выполнения:
io(1) = linio('scdspeed/throttle (degrees)',1,'input'); io(2) = linio('scdspeed/rad//s to rpm',1,'output');
Вычислите линеаризацию с помощью следующей команды линеаризации:
sys_1st_order_approx = linearize(model,io);
Можно вычислить линеаризацию с помощью аппроксимации второго порядка, установив порядок Pade равным 2:
set_param(DelayBlock,'PadeOrder','2'); sys_2nd_order_approx = linearize(model,io);
Чтобы вычислить линейную модель с точным представлением задержки, задайте свойству UseExactDelayModel в объекте linoptions значение on:
opt = linearizeOptions;
opt.UseExactDelayModel = 'on';
Линеаризация модели с помощью следующей команды линеаризации:
sys_exact = linearize(model,io,opt);
Сравните отклик Бода модели аппроксимации Паде и точной модели линеаризации, выполнив:
p = bodeoptions('cstprefs'); p.Grid = 'on'; p.PhaseMatching = 'on'; p.XLimMode = {'Manual'}; p.XLim = {[0.1 1000]}; f = figure; bode(sys_1st_order_approx,sys_2nd_order_approx,sys_exact,p); h = legend('sys_1st_order_approx','sys_2nd_order_approx','sys_exact',... 'Location','SouthWest'); h.Interpreter = 'none';

В случае аппроксимации первого порядка фаза начинает расходиться около 50 рад/с и расходиться около 100 рад/с.
Закройте модель Simulink.
bdclose(model)
При линеаризации модели с дискретными блоками задержки, такими как (целочисленная) задержка и единичная задержка, используйте опцию точной задержки, чтобы учесть задержки без добавления состояний к динамике модели. Явный учет этих задержек повышает производительность моделирования для систем со многими дискретными задержками, поскольку в модели меньше состояний.
Чтобы открыть модель Simulink дискретной системы с блоком задержки с состоянием задержки 20, используемым в этом примере, выполните следующее.
model = 'scdintegerdelay';
open_system(model)

По умолчанию линеаризация включает все состояния, свернутые в линейную модель. Установите ввод/вывод линеаризации и линеаризуйте модель следующим образом:
io(1) = linio('scdintegerdelay/Step',1,'input'); io(2) = linio('scdintegerdelay/Discrete Filter',1,'output'); sys_default = linearize(model,io);
Интегрируйте результирующую модель, чтобы увидеть, что она имеет 21 состояние (1 - дискретный фильтр, 20 - целочисленная задержка).
size(sys_default)
State-space model with 1 outputs, 1 inputs, and 21 states.
Эту модель можно линеаризовать с помощью свойства UseExactDelayModel следующим образом:
opt = linearizeOptions;
opt.UseExactDelayModel = 'on';
sys_exact = linearize(model,io,opt);
Опрос новой результирующей модели показывает, что она имеет 1 состояние и задержки учитываются внутри линеаризованной модели.
size(sys_exact)
State-space model with 1 outputs, 1 inputs, and 1 states.
Выполните моделирование реакции шага для обеих линеаризованных моделей, чтобы убедиться, что они идентичны, выполнив следующие команды.
step(sys_default,sys_exact); h = legend('sys_default','sys_exact',... 'Location','SouthEast'); h.Interpreter = 'none';

Закройте модель Simulink и очистите фигуры.
bdclose(model) close(f)
Дополнительные сведения о манипулировании линеаризованными моделями с задержками см. в разделах Определение временных задержек и Анализ систем управления с задержками.