В этом примере показано, как задать метод преобразования скорости для линеаризации многоскоростной модели. Методология выбора преобразования скорости может повлиять на полученную линеаризированную модель. Этот пример иллюстрирует извлечение дискретной линейной модели инварианта времени с помощью двух различных методов преобразования скорости.
В модели Simulink scdmrate.mdl
Существует три различных частоты дискретизации, заданных в пяти блоках. Эти блоки
sysC
- непрерывный линейный блок,
Integrator
- непрерывный интегратор,
sysTs1
- блок, который имеет шаг расчета 0,01 секунды,
sysTs2
- блок, который имеет шаг расчета 0,025 секунд, и
Zero-Order Hold
- блок, который дискретизирует входящий сигнал в 0,01 секунде.
Откройте модель Simulink.
scdmrate
В этом примере вы линеаризируете модель между выходом блока sysTs1
и блок Zero-Order Hold
. Кроме того, вы добавляете открытие цикла в блоке Zero-Order Hold
для извлечения модели объекта управления для системы.
model = 'scdmrate'; io(1) = linio('scdmrate/sysTs1',1,'input'); io(2) = linio('scdmrate/Zero-Order Hold',1,'openoutput');
Использование этих точек линеаризации эффективно приводит к линеаризации модели scdmrate_ol
.
scdmrate_ol
При линеаризации модели, которая содержит как непрерывные, так и дискретные сигналы, программное обеспечение сначала преобразует непрерывные сигналы в дискретные сигналы, используя метод преобразования скорости. Метод преобразования ставок по умолчанию является удержанием нулевого порядка. Чтобы просмотреть или изменить метод преобразования скорости, используйте RateConversionMethod
свойство в функции linearizeOptions. Следующая команда показывает, что RateConversionMethod
установлено значение по умолчанию, zoh
:
opt = linearizeOptions
Options for LINEARIZE: LinearizationAlgorithm : blockbyblock SampleTime (-1 Auto Detect) : -1 UseFullBlockNameLabels (on/off): off UseBusSignalLabels (on/off) : off StoreOffsets (true/false) : false StoreAdvisor (true/false) : false Options for 'blockbyblock' algorithm BlockReduction (on/off) : on IgnoreDiscreteStates (on/off) : off RateConversionMethod (zoh/tustin/prewarp/ : zoh upsampling_zoh/ upsampling_tustin/ upsampling_prewarp PreWarpFreq : 10 UseExactDelayModel (on/off) : off AreParamsTunable (true/false) : true Options for 'numericalpert' algorithm NumericalPertRel : 1.000000e-05 NumericalXPert : [] NumericalUPert : []
Следующая команда выполняет линеаризацию с помощью метода удержания нулевого порядка. Потому что линеаризация включает в себя Zero-Order Hold
блок, шаг расчета линеаризации 0,01.
sys_zoh = linearize(model,io,opt);
Следующие команды изменяют метод преобразования скорости на метод Тастина (Билинейное преобразование), а затем линеаризируются с помощью этого метода. Шаг расчета этой линеаризированной модели также составляет 0,01.
opt.RateConversionMethod = 'tustin';
sys_tust = linearize(model,io,opt);
Можно также создать линейную модель непрерывного времени, задав шаг расчета как 0 в объекте опции. Метод преобразования скорости все еще создает линейную модель дискретного времени, но затем преобразует модель дискретного времени в модель непрерывного времени.
opt.SampleTime = 0; sys_c = linearize(model,io,opt);
Диаграммы Боде для трех линеаризаций показывают эффекты двух методов преобразования скорости. В этом примере метод преобразования скорости Тастина дает наиболее точное представление фазовому отклику непрерывной системы, а удержание нулевого порядка дает лучшее соответствие величины ответу.
p = bodeoptions('cstprefs'); p.YLimMode = {'manual'}; p.YLim = {[-100 0];[-180 -30]}; p.Grid = 'on'; bodeplot(sys_c,sys_zoh,sys_tust,p); h = legend('sys_c','sys_zoh','sys_tust','Location','SouthWest'); h.Interpreter = 'none';
Закройте модели:
bdclose('scdmrate'); bdclose('scdmrate_ol');