Этот пример показывает, как преобразовать задержку модели дискретного времени к факторам 1 / _ z_.
В модели дискретного времени задержка одного интервала выборки эквивалентна фактору 1 / _ z_ (полюс в z = 0) в модели. Поэтому задержки, сохраненные в InputDelay
, OutputDelay
или свойствах IODelay
модели дискретного времени, могут быть переписаны в образцовой динамике путем перезаписи их как полюсов в z = 0. Однако дополнительные полюса увеличивают порядок системы. Особенно для больших задержек, это может привести к системам очень старшего разряда, ведя к долгому времени вычисления или числовым погрешностям.
Чтобы проиллюстрировать, как устранить задержки в дискретное время, модель, с обратной связью, и наблюдать эффекты выполнения так, создает следующую систему с обратной связью:
G является системой дискретного времени первого порядка с входной задержкой, и C является контроллером PI.
G = ss(0.9,0.125,0.08,0,'Ts',0.01,'InputDelay',7); C = pid(6,90,0,0,'Ts',0.01); T = feedback(C*G,1);
Закрытие обратной связи на объекте с входными задержками дает начало внутренним задержкам системы с обратной связью. Исследуйте порядок и внутреннюю задержку T
.
order(T)
ans = 2
T.InternalDelay
ans = 7
T
является моделью в пространстве состояний второго порядка. Одно состояние внесено объектом первого порядка и другим одним полюсом контроллера PI. Задержки не увеличивают порядок T
. Вместо этого они представлены как внутренняя задержка семи временных шагов.
Замените внутреннюю задержку .
Tnd = absorbDelay(T);
Эта команда преобразовывает внутреннюю задержку с семью полюсами в z = 0. Чтобы подтвердить это, исследуйте порядок и внутреннюю задержку Tnd
.
order(Tnd)
ans = 9
Tnd.InternalDelay
ans = 0x1 empty double column vector
Tnd
не имеет никакой внутренней задержки, но это - модель девятого порядка, из-за семи дополнительных полюсов, введенных путем поглощения семи единичных задержек в образцовую динамику.
Несмотря на это различие в представлении, ответы Tnd
точно совпадают с теми из T
.
stepplot(T,Tnd,'r--') legend('T','Tnd')
bodeplot(T,Tnd,'r--') legend('T','Tnd')