Этот пример показывает процесс, что команда линеаризует использование при извлечении линейной модели нелинейной многоскоростной модели Simulink. Чтобы проиллюстрировать концепции, процесс сначала выполняется с помощью функций от Control System Toolbox, прежде чем это будет повторено с помощью линеаризовать команды.
В модели 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.