В этом примере показано, как линеаризовать модель Simulink с задержками его.
Можно линеаризовать модель Simulink с непрерывными блоками задержек, такими как Транспортная Задержка, Переменная Транспортная Задержка и Переменная Задержка с помощью одной из следующих опций:
Используйте аппроксимации Паде задержек, чтобы получить рациональную линейную систему через линеаризацию.
Вычислите линеаризацию, где задержка точно представлена. Используйте эту опцию, когда вам будут нужны точная симуляция и частотные характеристики из линеаризовавшей модели и при оценке точности аппроксимации Паде.
По умолчанию Simulink Control Design использует аппроксимации Паде блоков задержки в модели Simulink.
Чтобы открыть модель скорости вращения двигателя, используемую в этом примере, ввести
model = 'scdspeed';
open_system(model);
Модель скорости вращения двигателя содержит блок Variable Transport Delay, названный dM/dt в Индукции подсистемы к Задержке Диапазона Степени. Для удобства можно сохранить путь к блоку в переменной MATLAB путем ввода
DelayBlock = 'scdspeed/Induction to Power Stroke Delay/dM//dt delay';
Чтобы вычислить линеаризацию с помощью приближения первого порядка, используйте один из следующих методов, чтобы установить порядок аппроксимации Паде к 1:
В Переменном Транспортном диалоговом окне блока Задержки войдите 1 в Порядок Pade (для линеаризации) поле.
В командной строке введите следующую команду:
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 к на:
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)
Когда линеаризация модели с дискретными блоками задержки, такими как (Целочисленная) Задержка и блоки Unit Delay использует точную опцию задержки, чтобы составлять задержки, не добавляя состояния в динамику модели. Явным образом составление этих задержек улучшает вашу производительность симуляции для систем со многими дискретными задержками потому что ваше меньше состояний в вашей модели.
Чтобы открыть модель Simulink дискретной системы с блоком Delay с 20 состояниями задержки, используемыми в этом примере, запустите следующее.
model = 'scdintegerdelay';
open_system(model);
По умолчанию линеаризация включает все состояния, свернутые в линейную модель. Установите линеаризацию I/Os и линеаризуйте модель можно следующим образом:
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)
Для получения дополнительной информации об управлении линеаризовавшими моделями с задержками см. документацию Control System Toolbox наряду с примерами, "Задающими Задержки" и "Анализирующими Системы управления с Задержками".