Линеаризация моделей с задержками

В этом примере показано, как линеаризовать модель 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 наряду с примерами, "Задающими Задержки" и "Анализирующими Системы управления с Задержками".