跳转到内容
新建笔记

伯德图与奈奎斯特图:频响、方向与稳定判据

伯德图(Bode plot,也译波特图)和奈奎斯特图(Nyquist plot)描述同一个复频率响应的不同方面。先选对要画的传递函数,再决定图形:看滤波、增益和相位随频率如何变化,用伯德图;分析反馈闭环稳定性时,要把环路传递函数的奈奎斯特曲线与开环不稳定极点数一起考虑。

对实系数连续时间系统 G(s)G(s),在 G(jω)G(j\omega) 存在的频率处定义

M(ω)=20log⁡10∣G(jω)∣,ϕ(ω)=arg⁡G(jω).M(\omega)=20\log_{10}\lvert G(j\omega)\rvert,\qquad \phi(\omega)=\arg G(j\omega).

幅值使用 20log⁡1020\log_{10},适用于这里的幅值比;相位可以用度或弧度,但必须标注。若输入、输出物理量不同,分贝幅值还隐含了所采用的单位/参考尺度,不能不加说明地解释成无量纲功率增益。零响应处的相位没有定义。

图形横轴纵轴常见用途
伯德幅频图对数频率幅值,常为 dB滚降、共振峰、截止频率、增益交越
伯德相频图对数频率相位,常为度相位滞后、相位交越及补偿设计
奈奎斯特图Re⁡G(jω)\operatorname{Re}G(j\omega)Im⁡G(jω)\operatorname{Im}G(j\omega)在复平面检查轨迹及对临界点的绕行

奈奎斯特图常用实部—虚部直角坐标轴。复数当然也能用模和辐角描述,但不能因此把这种常见绘图坐标称为“极坐标轴”。频率是沿曲线变化的参数,需要箭头、标签或交互读数辅助识别。

频率换算为 ω=2πf\omega=2\pi f。SciPy 连续系统的 bode、freqresp 接收 rad/s,不是 Hz。对数横轴不能包含零频率,直流响应应单独求值。

用同一个二阶系统对照

跳转到“用同一个二阶系统对照”

原笔记使用

G(s)=1s2+2s+1=1(s+1)2.G(s)=\frac{1}{s^2+2s+1}=\frac{1}{(s+1)^2}.

因此

G(jω)=1−ω2−j2ω(1+ω2)2,∣G(jω)∣=11+ω2,ϕ=−2arctan⁡ω(ω≥0).G(j\omega)=\frac{1-\omega^2-j2\omega}{(1+\omega^2)^2},\quad \lvert G(j\omega)\rvert=\frac{1}{1+\omega^2},\quad \phi=-2\arctan\omega\quad(\omega\geq0).
角频率复响应幅值相位
00110 dB0∘0^\circ
11 rad/s−j/2-j/2约 −6.0206-6.0206 dB−90∘-90^\circ
趋于无穷趋于原点趋于 −∞-\infty dB趋于 −180∘-180^\circ

两个重合极点使高频幅频斜率趋于 −40-40 dB/decade。该系统半功率频率约为 0.64360.6436 rad/s,不能把极点尺度 11 rad/s 直接当作 −3-3 dB 截止频率。

原笔记的二阶系统伯德图:角频率为0.01至100 rad/s

上图保留原图,用于观察幅值下降和相位趋近 −180∘-180^\circ。它显示的最低频率是 0.01 rad/s,不含精确的直流点。

原笔记的二阶系统复平面响应:正频率曲线及其镜像

上图保留原轨迹示例,但没有频率方向箭头,也没有完整展示临界点 −1-1。只凭这幅有限频段截图不能完成奈奎斯特稳定性论证。

奈奎斯特稳定判据:先声明绕行方向

跳转到“奈奎斯特稳定判据:先声明绕行方向”

对负反馈环路,令 L(s)L(s) 为环路传递函数,闭环特征条件为 1+L(s)=01+L(s)=0。以下约定适用于无虚轴开环极点、闭环也不落在虚轴上的常见有理情形,并要求不存在被忽略的不稳定内部相消:

  • PP:L(s)L(s) 在右半平面的极点数,按重数计。
  • ZZ:1+L(s)1+L(s) 在右半平面的零点数,即该特征方程对应的不稳定闭环极点数。
  • NCCWN_{\rm CCW}:完整奈奎斯特曲线对 −1-1 点的净逆时针绕行次数,逆时针记正。

采用包围右半平面的顺时针 ss 平面轮廓,则

Z=P−NCCW.Z=P-N_{\rm CCW}.

闭环稳定需要 Z=0Z=0,即 NCCW=PN_{\rm CCW}=P。若教材把顺时针绕行记正,公式会变为 Z=P+NCWZ=P+N_{\rm CW};符号约定必须成套使用。尤其当 P>0P>0 时,“不包围 −1-1”反而不满足闭环稳定条件。

对本页例子 L(s)=1/(s+1)2L(s)=1/(s+1)^2,P=0P=0,完整轨迹不绕行 −1-1。单位负反馈后

T(s)=L1+L=1s2+2s+2,T(s)=\frac{L}{1+L}=\frac{1}{s^2+2s+2},

闭环极点为 −1±j-1\pm j,与判据一致。另一个简单校验是 L(s)=2/(s−1)L(s)=2/(s-1):开环有一个不稳定极点,但完整曲线逆时针绕 −1-1 一次,闭环 T(s)=2/(s+1)T(s)=2/(s+1) 稳定。这说明开环极点数是必要信息。

曲线穿过 −1-1 时对应边界情况,不能继续按“严格稳定”计数。开环有积分器等虚轴极点时,必须采用绕避极点的修正轮廓。严格真有理系统的无穷远弧映到原点;其他系统应单独分析闭合部分,不能机械补一条直线。

对实系数系统,G(−jω)=G(jω)‾G(-j\omega)=\overline{G(j\omega)},所以负频率支路可由共轭得到。完整轮廓沿虚轴的频率方向是 −∞→0→+∞-\infty\to0\to+\infty;镜像支路的遍历方向需要反转。实系数条件不成立时,应直接计算负频率响应。

补充示例图:负频率和正频率的遍历箭头、直流点及临界点-1

这张补充图由下文代码实际生成,标出了原图缺少的方向和临界点;它仍是有限频段的解析模型图。

下面保留原来的 NumPy、SciPy、Matplotlib 工作流,同时补上直流点、两个支路的方向、−1-1 标记及数值自检。分子、分母系数按 ss 的降幂排列。程序生成 bode-example.png 和 nyquist-example.png。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
system = signal.TransferFunction([1.0], [1.0, 2.0, 1.0])
w = np.logspace(-3, 3, 1200) # rad/s;对数轴不放零
_, magnitude_db, phase_deg = signal.bode(system, w=w)
fig, axes = plt.subplots(2, 1, figsize=(8, 6), sharex=True)
axes[0].semilogx(w, magnitude_db)
axes[0].set_ylabel("Magnitude (dB)")
axes[1].semilogx(w, phase_deg)
axes[1].set_ylabel("Phase (deg)")
axes[1].set_xlabel("Angular frequency (rad/s)")
for ax in axes:
ax.grid(True, which="both", alpha=0.3)
fig.suptitle("G(s) = 1 / (s + 1)^2")
fig.tight_layout()
fig.savefig("bode-example.png", dpi=160)
plt.close(fig)
wp = np.r_[0.0, w]
_, hp = signal.freqresp(system, w=wp) # 正频率 0 -> w_max
hn = np.conj(hp[::-1]) # 实系数系统:负频率 -w_max -> 0
fig, ax = plt.subplots(figsize=(8, 5))
ax.plot(hn.real, hn.imag, "--", label="Negative frequency -> 0")
ax.plot(hp.real, hp.imag, label="Positive frequency -> +infinity")
ax.plot(-1.0, 0.0, "rx", markersize=9, label="Critical point -1")
ax.plot([1.0, 0.0], [0.0, 0.0], "ko", markersize=3)
# 两支路均按数组顺序放箭头;它们在直流点相接。
kp = int(np.argmin(np.abs(wp - 0.5)))
kn = len(hp) - 1 - kp
for curve, k in ((hp, kp), (hn, kn)):
ax.annotate("", xy=(curve[k + 18].real, curve[k + 18].imag),
xytext=(curve[k].real, curve[k].imag),
arrowprops={"arrowstyle": "->", "color": "black"})
ax.axhline(0, color="gray", linewidth=0.6)
ax.axvline(0, color="gray", linewidth=0.6)
ax.set(xlabel="Real", ylabel="Imaginary", xlim=(-1.25, 1.2))
ax.set_aspect("equal", adjustable="box")
ax.grid(True, alpha=0.3)
ax.legend(fontsize=8)
fig.tight_layout()
fig.savefig("nyquist-example.png", dpi=160)
plt.close(fig)
_, check = signal.freqresp(system, w=[0.0, 1.0])
assert np.allclose(check, [1.0 + 0j, -0.5j])
assert np.isclose(20 * np.log10(abs(check[1])), -6.0205999133)
closed_loop_poles = np.roots([1.0, 2.0, 2.0])
assert np.all(closed_loop_poles.real < 0)
print("G(j*1) =", check[1], "; closed-loop poles =", closed_loop_poles)

这段代码画的是有限频率网格,曲线末端接近原点但不是数学上的无穷远;没有虚轴极点绕避处理,也不是通用奈奎斯特判稳程序。网格可能漏掉窄峰、快速相位变化或临界点附近的细节,应结合解析极点、频率加密和适用的控制分析工具检查。

若画的是稳定滤波器或某个测量通道,可以检查通带、带宽、共振与噪声放大。若要读反馈裕度,应画对应环路 LL,并标明负反馈约定:

  • 增益交越频率满足 ∣L(jωgc)∣=1\lvert L(j\omega_{gc})\rvert=1,在常见的单交越情形,相位裕度为 180∘+arg⁡L(jωgc)180^\circ+\arg L(j\omega_{gc}),相位需按一致分支展开。
  • 相位交越处满足相位为 −180∘-180^\circ 模 360∘360^\circ,增益裕度因子为 1/∣L(jωpc)∣1/\lvert L(j\omega_{pc})\rvert,对应 dB 为 −20log⁡10∣L(jωpc)∣-20\log_{10}\lvert L(j\omega_{pc})\rvert。
  • 多个交越、开环不稳定、时延或特殊环路结构,需要检查全部相关交越及奈奎斯特条件。仅看到一个正相位裕度不能据此宣布任意系统稳定。

本页例子的幅值在任何正频率都小于 1,且相位只在无穷频率趋近 −180∘-180^\circ,没有常见的有限正频率交越点。不要为了套公式,硬把 11 rad/s 当作增益交越频率。

本页完整保留了原始笔记的两类图、两个绘图流程及两幅原图;合并重复代码后补充了单位、方向、临界点和稳定判据的条件。两幅原图的字节未修改,示例运行只验证模型和绘图,不代表实测系统。

基础模型见传递函数。