В этом примере показано, как увеличить линеаризацию блока с помощью дополнительной динамики временной задержки, используя функцию спецификации линеаризации блока.
Откройте модель Simulink ®.
mdl = 'scdFcnCall';
open_system(mdl)
Эта модель включает установку непрерывного времени, Plantи контроллер дискретного времени, Controller. D/A блок дискретизирует выход установки со временем выборки 0,1 с. External Scheduler блок инициирует выполнение контроллера с тем же периодом, 0,1 с. Однако триггер имеет смещение 0,05 с относительно дискретизированного выхода установки. По этой причине контроллер не обрабатывает изменение опорного сигнала до 0,05 с после этого изменения. Это смещение вводит в модель временную задержку 0,05 с.
(Необязательно) Линеаризация модели с замкнутым контуром в рабочей точке модели без указания линеаризации для Controller блок.
io = getlinio(mdl); sys_nd = linearize(mdl,io);
getlinio функция возвращает входные и выходные точки линеаризации, которые уже определены в модели.
(Необязательно) Проверьте результат линеаризации по оценке частотной характеристики.
input = frest.Sinestream(sys_nd); sysest = frestimate(mdl,io,input); bode(sys_nd,'g',sysest,'r*',{input.Frequency(1),input.Frequency(end)}) legend('Linearization without delay',... 'Frequency Response Estimation','Location','SouthWest')

Точная линеаризация не учитывает временную задержку, введенную смещением выполнения контроллера. Существует расхождение в результатах между линеаризованной моделью и расчетной моделью, особенно на более высоких частотах.
Запишите функцию, чтобы задать линеаризацию Controller блок, который включает в себя временную задержку.
Следующая конфигурационная функция определяет линейную систему, которая равна линеаризации блоков по умолчанию, умноженной на временную задержку. Сохраните эту функцию конфигурации в местоположении на пути MATLAB ®. (В этом примере функция уже сохранена какscdAddDelayFcn.m.)
function sys = scdAddDelayFcn(BlockData)
sys = BlockData.BlockLinearization*thiran(0.05,0.1);Вход в функцию, BlockData, - структура, которую программное обеспечение создает автоматически каждый раз при линеаризации блока. При указании функции конфигурации линеаризации блоков программное обеспечение автоматически проходит BlockData к функции. Область BlockData.BlockLinearization содержит текущую линеаризацию блока.
Эта функция конфигурации аппроксимирует временную задержку как thiran фильтр. Фильтр указывает дискретную временную аппроксимацию дробной временной задержки 0,5 периодов выборки. (Задержка 0,05 с имеет время выборки 0,1 с).
Укажите функцию конфигурации scdAddDelayFcn в качестве линеаризации для Controller блок.
Щелкните правой кнопкой мыши Controller и выберите «Линейный анализ» > «Задать линеаризацию выбранного блока».
Установите флажок Задать линеаризацию блока (Specify block linearization), используя один из следующих флажков. Затем в раскрывающемся списке выберите Configuration Function.
Введите имя функции scdAddDelayFcn в текстовом поле. scdAddDelayFcn не имеет параметров, поэтому оставьте таблицу параметров пустой.
Нажмите кнопку ОК.

Линеаризация модели с использованием указанной линеаризации блока.
sys_d = linearize(mdl,io);
Линейная модель sys_d является линеаризацией модели с замкнутым контуром, которая учитывает временную задержку.
(Необязательно) Сравните линеаризацию, которая включает задержку, с расчетной частотной характеристикой.
bode(sys_d,'b',sys_nd,'g',sysest,'r*',... {input.Frequency(1),input.Frequency(end)}) legend('Linearization with delay','Linearization without delay',... 'Frequency Response Estimation','Location','SouthWest')

Линейная модель, полученная с помощью указанной линеаризации блоков, теперь учитывает временную задержку. Поэтому эта линейная модель намного лучше соответствует реальной частотной характеристике модели Simulink.