Engee 文档
Notebook

连续开环模型中的时间延迟近似值

本例展示了如何使用 pade 近似计算开环连续时间系统中的延迟。

在使用不支持时延的分析或设计工具时,Pade 近似值非常有用。使用过高的近似阶数会导致数值错误,并可能产生不稳定极点。因此,应避免使用阶数为$n>10$ 的 Pade 近似值。

问题陈述

设计一个具有输出延迟的开环系统示例。

timedelayapproximationincontinuoustimeopenloopmodelexample_01.png

In [ ]:
Pkg.add(["ControlSystems"])
In [ ]:
using ControlSystems

默认情况下,延迟时间为 2.6,但您也可以设置自己的参数。因此,您将得到状态空间 (ss) 形式的 P - 对象,时间延迟为 2.6 c。

In [ ]:
s = tf('s');

L = 2.6 # @param {type:"slider", min:0, max:9, step:0.1}
P = exp(-L*s)/(s^2+0.9*s+1)
Out[0]:
DelayLtiSystem{Float64, Float64}

P: StateSpace{Continuous, Float64}
A = 
  0.0   1.0
 -1.0  -0.9
B = 
 0.0  0.0
 1.0  0.0
C = 
 0.0  0.0
 1.0  0.0
D = 
 0.0  1.0
 0.0  0.0

Continuous-time state-space model

Delays: [2.6]

一阶近似

计算 P 的一阶 Pade 近似值。

In [ ]:
Pnd1 = pade(P,1)
Out[0]:
StateSpace{Continuous, Float64}
A = 
  0.0   1.0   0.0
 -1.0  -0.9   0.0
  1.0   0.0  -0.7692307692307692
B = 
 0.0
 1.0
 0.0
C = 
 -1.0  0.0  1.5384615384615383
D = 
 0.0

Continuous-time state-space model

该命令用一阶近似值替换 P 中的所有时间延迟。因此,Pnd1 是一个没有延迟的三阶系统。

使用bodeplot 比较原始模型和近似模型的频率响应。

In [ ]:
bodeplot([P, Pnd1], label = ["P" "Pnd1"])
Out[0]:

P 和 Pnd1 的振幅特性完全一致。但是,Pnd1 的相位与 P 的相位相差约 1 拉德/秒。

三阶近似

增加帕代近似的阶数,以扩大相位近似效果良好的频率范围。

In [ ]:
Pnd3 = pade(P,3);

比较 P、Pnd1 和 Pnd3 的频率响应。

In [ ]:
bodeplot([P, Pnd1, Pnd3], label = ["P" "Pnd1" "Pnd3"])
Out[0]:

使用三阶 Pade 近似值时,相位响应误差会减小。

使用step 比较原始系统和近似系统在时域中的瞬态特性。

In [ ]:
plot(
    [step(P), step(Pnd1), step(Pnd3)], 
    label = ["P" "Pnd1" "Pnd3"]
)
Out[0]:

结论

使用帕代近似法会导致初始瞬态出现非最小相位。在一阶近似中,这种影响非常明显,在方向改变之前会明显降低到零以下。在高阶近似中,这种影响有所减弱,与系统的精确响应更加吻合。