Этот пример показывает процесс, который используется командой linearize при извлечении линейной модели нелинейной многоразовой модели Simulink. Чтобы проиллюстрировать концепции, процесс сначала выполняется с помощью функций из Control System Toolbox, прежде чем он будет повторен с помощью команды linearize.
В модели Simulink scdmrate.slx
Существует три различных частоты дискретизации, заданных в пяти блоках. Эти блоки:
sysC
- непрерывный линейный блок,
Integrator
- непрерывный интегратор,
sysTs1
- блок, который имеет шаг расчета 0,01 секунды,
sysTs2
- блок, который имеет шаг расчета 0,025 секунд, и
Zero-Order Hold
- блок, который дискретизирует входящий сигнал в 0,01 секунде.
sysC = zpk(-2,-10,0.1); Integrator = zpk([],0,1); sysTs1 = zpk(-0.7463,[0.4251 0.9735],0.2212,0.01); sysTs2 = zpk([],0.7788,0.2212,0.025);
Модель ниже показывает, как блоки соединяются.
scdmrate
В этом примере мы линеаризируем модель между выходом блока Constant и выходом блока sysTs2
.
Первый шаг линеаризации - линеаризация каждого блока в модели. Линеаризация блоков Насыщения и Удержания Нулевого Порядка равна 1. Блоки LTI уже линейны и поэтому остаются прежними. Новая модель с линеаризированными блоками показана ниже.
scdmratestep1
Поскольку блоки в модели содержат различные частоты дискретизации, невозможно создать линейную модель с одной скоростью для системы, не используя сначала функции преобразования скорости для преобразования различных частот дискретизации в репрезентативную одну скорость. Функции преобразования скорости используют итерационный метод. Итерации начинаются с наименее распространённых кратных шагов расчета в модели. В этом примере шаги расчета составляют 0, 0,01 и 0,025 секунд, что приводит к наименьшему общему кратному 0,05. Функции преобразования скорости затем берут комбинацию блоков с самой быстрой частотой дискретизации и повторяют их с следующей самой быстрой частотой дискретизации. В этом примере первая итерация преобразует комбинацию линеаризированных непрерывных временных блоков, sysC
и integrator
во шаг расчета 0,01 с использованием удержания нулевого порядка непрерывно в дискретное преобразование.
sysC_Ts1 = c2d(sysC*Integrator,0.01);
Блоки sysC
и Integrator
теперь заменены sysC_Ts1
.
scdmratestep2
Следующая итерация преобразует все блоки со шаг расчета 0,01 во шаг расчета 0,025. Во-первых, следующая команда представляет комбинацию этих блоков путем закрытия цикла обратной связи.
sysCL = feedback(sysTs1*sysC_Ts1,1);
Затем метод удержания нулевого порядка преобразует систему замкнутого цикла sysCL со скорости дискретизации 0,01 в 0,025.
sysCL_Ts2 = d2d(sysCL,0.025);
Система sysCL_Ts2
затем заменяет цикл обратной связи в модели.
scdmratestep3
Окончательная итерация переопределяет комбинацию системы замкнутого цикла и блока sysTs2
от скорости 0,025 секунд до скорости 0,05 секунд.
sys_L = d2d(sysCL_Ts2*sysTs2,0.05)
sys_L = 0.0001057 (z+22.76) (z+0.912) (z-0.9048) (z+0.06495) ------------------------------------------------------- (z-0.01373) (z-0.6065) (z-0.6386) (z-0.8588) (z-0.9754) Sample time: 0.05 seconds Discrete-time zero/pole/gain model.
Мы можем воспроизвести эти результаты с помощью интерфейса командной строки Simulink Control Design.
model = 'scdmrate'; io(1) = linio('scdmrate/Constant',1,'input'); io(2) = linio('scdmrate/sysTs2',1,'openoutput'); sys = zpk(linearize(model,io))
sys = From input "Constant" to output "sysTs2": 0.0001057 (z+22.76) (z+0.912) (z-0.9048) (z+0.06495) ------------------------------------------------------- (z-0.6065) (z-0.6386) (z-0.8588) (z-0.9754) (z-0.01373) Sample time: 0.05 seconds Discrete-time zero/pole/gain model.