В этом примере показано, как увеличить линеаризацию блока с дополнительной динамикой с временной задержкой с помощью функции спецификации линеаризации блока.
Откройте модель Simulink.
mdl = 'scdFcnCall';
open_system(mdl)
Эта модель включает объект непрерывного времени и контроллер дискретного времени. Блок D/A дискретизирует объект выход с шагом расчета 0,1 с. Блок External Scheduler инициировал контроллер, чтобы выполниться с тем же периодом. Однако триггер имеет смещение 0,05 с относительно дискретизированного объекта выход. По этой причине контроллер не обрабатывает изменение в опорном сигнале до 0,05 с после того, как изменение произойдет. Это смещение вводит задержку 0,05 с в модель.
Линеаризуйте модель с обратной связью в рабочей точке модели, не задавая линеаризацию для блока Controller.
io = getlinio(mdl); sys_nd = linearize(mdl,io);
Проверяйте результат линеаризации по оценке частотной характеристики.
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, который включает задержку. Поскольку этот пример использует линеаризацию, заданную в scdAddDelayFcn.m
.
function sys = scdAddDelayFcn(BlockData) sys = BlockData.BlockLinearization*thiran(0.05,0.1); end
Вход к функции, BlockData
, структура, которую программное обеспечение автоматически создает каждый раз, когда оно линеаризует блок. Когда вы задаете функцию конфигурирования линеаризации блока, программное обеспечение автоматически передает BlockData
к функции. Поле BlockLinearization
содержит текущую линеаризацию блока.
Эта функция конфигурирования аппроксимирует задержку как фильтр Thiran. Фильтр указывает на приближение дискретного времени дробной задержки 0,5 периодов выборки. (0,05 задержки с имеют шаг расчета 0,1 с).
Задайте scdAddDelayFcn
как линеаризация для блока Controller.
Щелкните правой кнопкой по блоку Controller и выберите Linear Analysis> Specify Selected Block Linearization.
В диалоговом окне Block Linearization Specification выберите линеаризацию блока Specify с помощью одного из следующих.
В выпадающем списке выберите Configuration Function
.
В текстовом поле введите имя функции scdAddDelayFcn
. Эта функция не имеет никаких дополнительных параметров, поэтому оставьте незаполненную таблицу параметров.
Нажать ОК.
В качестве альтернативы можно задать функцию конфигурирования программно с помощью следующего кода.
block = 'scdFcnCall/Controller'; set_param(block,'SCDEnableBlockLinearizationSpecification','on') rep = struct('Specification','scdAddDelayFcn',... 'Type','Function',... 'ParameterNames','',... 'ParameterValues',''); set_param(block,'SCDBlockLinearizationSpecification',rep)
Линеаризуйте модель с помощью увеличенной линеаризации блока.
sys_d = linearize(mdl,io);
Сравните линеаризацию, которая включает задержку с предполагаемой частотной характеристикой.
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')
Линейная модель получила использование увеличенной линеаризации блока, теперь составляет задержку. Эта линейная модель более тесно совпадает с действительной частотной характеристикой модели.