第 4 章 频率域与鲁棒性¶
第 3 章「PID 工程」把整定收敛到"仿真核验闭环指标",但一句句试错看不到全局。频率域给出全局视角:把开环传递函数画成 bode 图,稳定与否、稳得多快、能忍多大摄动,都读自两条曲线。本章建立增益裕度与相位裕度的读图法,讲清"带宽换鲁棒性"这条硬权衡,把第 1 章「线性系统与时域分析」埋下的"延迟侵蚀相位"这条线收口,并用一个不稳定对象说明"GM>1 就稳"的直觉何时失效。最后给出工程前置件——一阶/二阶加纯滞后(FOPDT)模型的最小二乘辨识。运行环境 python 3.11 + control 0.10.2。
裕度从开环曲线读出,延迟在相位上直接扣分:
flowchart LR
l["开环 L(s) = C(s)P(s)"] --> bode["bode:幅频 + 相频"]
bode --> gm["增益裕度 GM"]
bode --> pm["相位裕度 PM"]
gm --> judge["稳定裕度 → 超调 / 振荡"]
pm --> judge
delay["纯延迟 e^(−sT)"] -.->|"相位随频率线性侵蚀"| bode
judge --> trade["带宽 ↔ 鲁棒性权衡"]
1. 开环频率特性与 bode 图¶
分析对象是回路传递函数 \(L(s)=C(s)P(s)\)(控制器 × 对象,单位负反馈)。把 \(s=j\omega\) 代入,取模与相角画成两张对数图即 bode 图(Bode plot):幅值 \(20\log_{10}|L(j\omega)|\)(dB)与相位 \(\angle L(j\omega)\)(度)随 \(\omega\)(rad/s,对数轴)变化。三条读图基线:
- 每个一阶极点 \(\frac{1}{\tau s+1}\) 在转折频率 \(1/\tau\) 之后贡献 −20 dB/dec 斜率与最多 −90° 相位;零点反之。
- 积分环节 \(1/s\) 全程 −20 dB/dec、恒 −90°。
- 纯滞后 \(e^{-Ls}\) 幅值恒 0 dB、相位 \(-\omega L\) 线性下垂——它只消耗相位、不动幅值,这是它比任何极点都阴险的根源(见「延迟对相位的侵蚀」一节)。
2. 增益裕度与相位裕度¶
两个穿越点定义两条裕度:
- 增益穿越频率 \(\omega_{pc}\):幅值过 0 dB(\(|L|=1\))处。此处相位距 −180° 的余量叫相位裕度 PM。
- 相位穿越频率 \(\omega_{gc}\):相位过 −180° 处。此处幅值距 0 dB 的下量叫增益裕度 GM。
对第 3 章「PID 工程」那个 FOPDT 对象配 PI(\(T_i=1\) s),扫比例增益:
Kp= 1.0: 穿越 0.58Hz 相位裕度 82.6deg 增益裕度 12.3dB 超调 0.0% 稳定=True
Kp= 2.0: 穿越 1.24Hz 相位裕度 52.3deg 增益裕度 6.3dB 超调 16.2% 稳定=True
Kp= 3.5: 穿越 2.21Hz 相位裕度 14.8deg 增益裕度 1.4dB 超调 74.5% 稳定=True
Kp= 5.0: 穿越 3.17Hz 相位裕度 -19.4deg 增益裕度 -1.6dB 超调 289.7% 稳定=False
一眼三事:\(K_p\) 每翻一倍,穿越频率(带宽)几乎同步升、相位裕度单调降;相位裕度跌破 0 的同一档,闭环极点进右半平面(Kp=5 失稳);超调是相位裕度的镜像——PM≈50°对应约 16% 超调、PM<15°超调冲到 74%。工程经验值由此定量:相位裕度 45°–60° 是"够快又不砸"的窗口,PM=15°(Kp=3.5)已在脆边。
3. 带宽与鲁棒性的权衡¶
裕度是"摄动多少倍才失稳"的度量:GM 说增益可再放大的倍数,PM 说相位可再吃多少度。把增益往上推=要快=带宽升=两条裕度同时缩水,这是控制的第一条硬权衡,没有免费午餐。比单点裕度更稳的鲁棒性读数是灵敏度峰值 \(M_s=\max_\omega|1/(1+L)|\)(灵敏度函数 \(S=1/(1+L)\) 的峰)与补灵敏度峰 \(\max|T|=\max|L/(1+L)|\):它们直接给出"对象不确定性 \(|\Delta|<1/M_s\) 时闭环仍稳"的保证半径。同一 PI 回路稳定区三档:
Kp= 1.0: Ms=1.39 (|Ms|<=2 合格) Tr peak=1.00
Kp= 2.0: Ms=2.12 (偏脆) Tr peak=1.32
Kp= 3.5: Ms=7.47 (偏脆) Tr peak=6.62
\(M_s\) 从 1.39 飙到 7.47:\(K_p\) 从 1 到 3.5 只涨了 3.5 倍带宽,鲁棒半径 \(1/M_s\) 却从 0.72 塌到 0.13。业界把 \(M_s\le2\)(对应约 PM≥45°、GM≥6 dB)作为可整定目标,正因为它是单一数字、比"两个裕度都要看"更少歧义。快与稳是同一预算的两头,量化它就别只用带宽一个数说话。
4. 延迟对相位的侵蚀¶
第 1 章「线性系统与时域分析」给出零阶保持附加 \(\omega\,dt/2\) 相位滞后,本节把它一般化为纯滞后 \(L\):相位直接吃 \(-\omega L\),幅值不动。固定 PI(\(K_p=3.5,T_i=1\))在 \(\tau=0.5\) s 对象上扫滞后:
延迟 L=0.00s (L/tau=0.00): 相位裕度 94.1deg
延迟 L=0.05s (L/tau=0.10): 相位裕度 54.3deg
延迟 L=0.10s (L/tau=0.20): 相位裕度 14.8deg
延迟 L=0.20s (L/tau=0.40): 相位裕度 -57.1deg(已失稳)
同样的控制器增益,仅把对象滞后从 0 加到 0.1 s,相位裕度从 94°崩到 15°;加到 0.2 s 直接失稳。斜率粗算约"每 \(0.05\) s 滞后、在 2 Hz 附近吃掉 40°"。这解释了为什么 \(L/\tau\) 是对象"好控/难控"的一级分类:\(L/\tau\lesssim0.1\) 从容、\(\gtrsim0.3\) 时任何高增益都付相位税。
机器人回路的滞后来源清单——总线传输(fieldbus-note 各章)、计算与缓冲、采样保持(第 1 章「线性系统与时域分析」)、驱动器等效延迟——都在往这个 \(L\) 里加码。「带宽越高越稳」经此彻底否证:带宽越高,同样的 \(L\) 在穿越点吃掉的相位 \(\omega_{pc}L\) 越大,越快反而越脆。
5. Nyquist 判据与它纠正的直觉¶
bode 裕度是 Nyquist 判据的工程投影,但投影会失真。Nyquist:闭环右半平面极点数 \(Z=N+P\),\(P\) 是开环右半平面极点数,\(N\) 是 \(L(j\omega)\) 曲线顺时针包围 \(-1\) 点的圈数。稳定要求 \(Z=0\)。对开环已稳定的对象(\(P=0\)),"曲线不包围 −1"等价于前面那套 GM/PM 直觉。陷阱在开环不稳定的对象。取 \(P(s)=\frac{1}{s-2}\)(一个右半平面极点,\(P=1\))配纯比例:
Kp=1.0: 闭环极点实部=[ 1.] 稳定=False | 线性增益裕度=2.00
Kp=3.0: 闭环极点实部=[-1.] 稳定=True | 线性增益裕度=0.67
结论反直觉:\(K_p=1\) 时增益裕度 2.0(>1,看似"有裕度")却失稳,\(K_p=3\) 时增益裕度 0.67(<1,看似"不够")反而稳定。原因在包围数:\(P=1\) 时稳定需要曲线对 −1 产生一次逆时针包围(\(N=-1\) 使 \(Z=0\)),而增益不足时包围方向恰好相反。
因此简单"GM>1、PM>0 即稳"仅对开环稳定对象成立;一旦对象自身含右半平面极点(倒立摆、某些柔顺机构线性化后),就必须回到 Nyquist 包围数,或直接查闭环极点(第 1 章「线性系统与时域分析」的特征值路线)。这也回收第 2 章「执行器与刚体模型」摄动讨论的边界——独立 PID 耐受的是增益摄动,前提是标称回路开环稳定。
6. FOPDT 建模与最小二乘辨识¶
前面全建立在"已知 \(P(s)\)"上;真实做法是先辨识。工程中最小可用的对象模型是 FOPDT \(\frac{K}{\tau s+1}e^{-Ls}\)——三参数 \(K,\tau,L\) 足以覆盖多数单回路整定。最小辨识样:对幅值+相位数据做非线性最小二乘(scipy.optimize.curve_fit),真值 \(K=2,\tau=0.5,L=0.12\),含 5% 幅值噪声:
def model(w, K, tau, L):
mag = 20*np.log10(K/np.sqrt(1+(tau*w)**2))
ph = -np.arctan(tau*w) - L*w # 相位含 -L*w 线性项
return np.concatenate([mag, ph])
## 数据侧相位须 np.unwrap 展开,否则缠绕破坏拟合
data = np.concatenate([20*np.log10(np.abs(Gn)), np.unwrap(np.angle(Gn))])
popt, _ = curve_fit(model, w, data, p0=[1, 1, 0.05])
## 拟合 K=1.953 tau=0.489 L=0.120 —— 与真值三参数全对上
辨识的命门是把 \(L\) 从相位斜率里分离出来:只用幅值 \(L\) 与 \(\tau\) 简并(都压低高频幅值),必须有相位参与才能定 \(L\);而相位一旦跨过 −180° 会被 np.angle 缠绕回正,不 unwrap 就会把 \(L\) 拟合到 0(本脚本第一版即栽在此,\(L\) 收敛到 −0.016)。另一条时域路:开环阶跃响应的"切线法"从拐点画切线直接读 \(L\)(起跳延迟)与 \(\tau\)(截距),适合只有阶跃数据的现场。二阶加延迟(SO-PDT)辨识同法加两个参数,用于第 3 章「PID 工程」那个明显欠阻尼的关节对象。
7. 根轨迹:本章按名目处理¶
根轨迹(root locus)是把某参数(通常是开环增益)从 0 扫到 ∞、画闭环极点在复平面轨迹的方法,直观展示"增益升→极点走向右半平面"的分叉过程。本章不展开:它服务的是"单参数变化下极点去向"的教学图像,而这与前述 bode 裕度、Nyquist 包围数信息重叠;工程整定用频率域两裕度 + \(M_s\) 已足够决策,闭环极点核验交给 np.linalg.eigvals。需要时再另立专题。
8. 要点¶
- 裕度读自 \(L=C\,P\) 的 bode 图:增益穿越点的相位余量=PM,相位穿越点的幅值下量=GM;本例 \(K_p\) 翻倍则带宽近翻倍、PM 单调降,PM 45–60° 是可整定窗口。
- 快与稳是同一预算:\(K_p\) 从 1→3.5 带宽仅 3.5×,灵敏度峰 \(M_s\) 从 1.39 飙到 7.47、鲁棒半径 \(1/M_s\) 塌到 0.13;用 \(M_s\le2\) 做单目标比"两裕度都盯"更少歧义。
- 纯滞后只消耗相位(\(-\omega L\))不动幅值:同增益下 \(L\):0→0.2 s 使 PM 从 94° 崩到 −57°;「带宽越高越稳」被否证——越高越吃相位。
- "GM>1 即稳"只对开环稳定对象成立:含右半平面极点的对象须回到 Nyquist 包围数或直接解闭环极点(本例 GM=2.0 失稳、GM=0.67 稳定的反转)。
- FOPDT 三参数是最小可用对象模型,辨识须用相位定 \(L\) 且必须
np.unwrap;\(L/\tau\) 是对象好控/难控的一级分类。
参考文献与延伸阅读¶
- Åström, K. J., & Murray, R. M. Feedback Systems: An Introduction for Scientists and Engineers (2nd ed.). Princeton University Press, 2021. 书籍主页
- Doyle, J. C., Francis, B. A., & Tannenbaum, A. R. Feedback Control Theory. Macmillan, 1992.
- Skogestad, S., & Postlethwaite, I. Multivariable Feedback Control: Analysis and Design (2nd ed.). Wiley, 2005.