# margindata


增益裕度、相位裕度以及对应的交叉频率数据

函数库: TyControlSystems

# 语法

GainMargin, PhaseMargin, GMFrequency, PMFrequency = margindata(sys; allMargins)

# 说明

GainMargin, PhaseMargin, GMFrequency, PMFrequency = margindata(sys; allMargins) 返回增益裕度 GainMargin(绝对单位),相位裕度 PhaseMargin,以及 sys 的相应频率 GMFrequency 和 PMFrequency。GMFrequency 是计算增益裕度的对应频率,即 –180° 相位交叉频率。PMFrequency 是计算相位裕度的对应频率,即 0 dB 增益交叉频率。这些频率以 rad/TimeUnit 表示,其中 TimeUnit 是 sys 的时间单位。当系统有多个交叉时,若 allMargins=true,margin 返回所有增益和相位裕度以及相应的频率,否则 margindata 返回最小的增益和相位裕度以及相应的频率。

如果系统内部不稳定,即系统不是闭环稳定,或者在左半平面外包含零极点抵消,则 margindata 将返回警告。 示例

# 示例

传递函数的相位裕量和增益裕量

对于这个例子,创建一个离散时间传递函数。

using TyControlSystems
sys = tf([0.04798, 0.0464], [1, -1.81, 0.9048], 0.1)
   0.04798z + 0.0464
-----------------------
1.0z^2 - 1.81z + 0.9048

Delay: 0.0

Sample Time: 0.1 (seconds)
离散时间传递函数模型

计算增益裕度和相位裕度及频率。

Gm, Pm, Wcg, Wcp = margindata(sys)
(gm = [2.051808569832053;;], pm = [13.563374813216184;;], wgm = [5.437490073818537;;], wpm = [4.354745736913195;;])

结果表明,在相位交叉频率为 5.43 rad/s 时,增益变化超过 2.05 (6.24 dB) 将导致系统不稳定。类似地,在增益交叉频率为 4.35 rad/s 时,相位变化超过 13.57° 将导致系统失去稳定性。

模型数组的相位裕量和增益裕量

对于本例,加载 invertedPendulumArray.jl,其中包含 3 × 3 的倒立摆模型阵列。当沿着系统的单列从一个模型移动到另一个模型时,钟摆的质量会发生变化,当沿着单行移动时,钟摆的长度也会发生变化。使用的质量值为 100 g,200 g 和 300 g,使用的摆长分别为 3 m,2 m 和 1 m。

using TyControlSystems
pkg_dir = pkgdir(TyControlSystems)
source_path = pkg_dir * "/examples/resources/System Attributes/pole/invertedPendulumArray.jl"
include(source_path)
sys;
size(sys)
(3, 3)

找出数组中所有模型的增益和相位裕度,暂不支持。

Gm, Pm, Wcg, Wcp = margindata.(sys)
3×3 Matrix{NamedTuple{(:gm, :pm, :wgm, :wpm), NTuple{4, Matrix{Float64}}}}:
 (gm = [0.979891;;], pm = [-11.4109;;], wgm = [0.0;;], wpm = [0.0336373;;])  …  (gm = [0.979636;;], pm = [-11.5475;;], wgm = [0.0;;], wpm = [0.034047;;])
 (gm = [0.979958;;], pm = [-11.418;;], wgm = [0.0;;], wpm = [0.0288544;;])      (gm = [0.980198;;], pm = [-11.3962;;], wgm = [0.0;;], wpm = [0.0287894;;])
 (gm = [0.979979;;], pm = [-11.4288;;], wgm = [0.0;;], wpm = [0.0252717;;])     (gm = [0.979876;;], pm = [-11.4948;;], wgm = [0.0;;], wpm = [0.0254237;;])

margindata 返回多个数组 Gm 和 Pm,其中每项都是 sys 中相应项的增益和相位裕度值。

# 输入参数

sys - 动态系统
传递函数模型 | 零极点增益模型 | 状态空间模型

线性动态系统,指定为 SISO 动态系统模型。可以使用的动态系统包括:

连续时间或离散时间数值 LTI 模型,例如 tfzpkss 模型。

# 名称-值对组参数

allMargins - 是否返回所有裕度
布尔值

计算所有交叉频率及裕度的标志位,指定为布尔值。

数据类型: Bool

# 输出参数

GainMargin - 增益裕度
矩阵

增益裕度,返回为矩阵,以绝对单位表示。

Gm 是在相位角为 –180° 的频率 Wcg 下使环路增益为 1 所需的增益绝对值。换句话说,如果 g 是 –180° 相位频率下的增益,则增益裕度为 1/g。负增益裕度表示增益减小会失去稳定性,而正增益裕度表示增加增益会失去稳定性。

数据类型: Float | Int

PhaseMargin - 相位裕度
矩阵

相位裕度,返回为矩阵,以度为单位表示。

相位裕度是当环路增益为 1.0 时,响应相位与 –180° 之间的差值。

数据类型: Float | Int

GMFrequency - 相位交叉频率
矩阵

–180° 相位交叉频率,返回为矩阵,以 rad/TimeUnit 为单位进行表示,其中 TimeUnit 是 sys 的时间单位。

数据类型: Float | Int

PMFrequency - 增益交叉频率
矩阵

0 dB 增益交叉频率,返回为矩阵,以 rad/TimeUnit 为单位进行表示,其中 TimeUnit 是 sys 的时间单位。

数据类型: Float | Int

# 其他描述

  • 使用 margindata(mag, phase, w) 时,margindata 依赖于插值来近似裕度,通常会产生不太准确的结果。例如,如果在 w 范围内没有 0 dB 交叉,则 margindata 返回 Inf 的相位裕量。因此,对于具体模型 sys ,使用 GainMargin, PhaseMargin, GMFrequency, PMFrequency = margindata(sys) 是获取裕量的一种更可靠的方法;
  • margin 兼容 margindata 的所有功能,其中 margindata 只返回响应数据,不具备绘图效果。

# 另请参阅

margin | bode | allmargin