Этот пример показывает, как задать метод преобразования уровня для линеаризации многоскоростной модели. Выбор методологии преобразования уровня может влиять на получившуюся линеаризовавшую модель. Этот пример иллюстрирует экстракцию дискретной линейной независимой от времени модели с помощью двух различных методов преобразования уровня.
В модели 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');