Этот пример показывает, как преобразовать временную задержку в модели дискретного времени в факторы 1/_z_.
В модели в дискретном времени временная задержка одного интервала дискретизации эквивалентна коэффициенту 1/_z_ (полюсу в z = 0) в модели. Поэтому задержки, сохраненные в InputDelay
, OutputDelay
, или IODelay
свойства модели в дискретном времени могут быть переписаны в динамике модели путем переписывания их как полюсов в z = 0. Однако дополнительные полюса увеличивают порядок работы системы. В частности, для больших временных задержек это может привести к системам очень высокого порядка, что приведет к длительным временам расчета или численным неточностям.
Чтобы проиллюстрировать, как исключить задержки в дискретное время модели с обратной связью и наблюдать эффекты этого, создайте следующую систему с обратной связью:
G является системой дискретного времени первого порядка с задержкой на входе, а C является ПИ-контроллер.
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
является моделью пространства состояний второго порядка. Одно состояние вносит объект первого порядка, а другое - один полюс ПИ-контроллера. Задержки не увеличивают порядок 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')