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