exponenta event banner

Линеаризация с использованием различных методов преобразования скоростей

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

Пример проблемы

В модели 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 в функции linearaseOptions. Следующая команда показывает, что 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 в объекте options. Метод преобразования скорости по-прежнему создает линеаризованную модель дискретного времени, но затем преобразует модель дискретного времени в модель непрерывного времени.

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');