Appearance
时域分析:一阶、二阶系统响应
概念
上一章把系统写成了传递函数 G(s),但那还是一个"分式"。「好不好用」最终要在时间轴上衡量——所以时域分析做的事只有一件:
给系统一个标准输入,把输出画成时间曲线,再从曲线上读几个数。
一句话说清它是什么:时域分析就是用阶跃响应这条曲线上的几个特征量(超调量、峰值时间、调节时间、稳态误差)来量化"稳、准、快"三项指标。
为什么用阶跃做标准输入?三条理由:
- 它最容易在真机上产生(把开关一合就是阶跃);
- 它最苛刻:同时包含了高频(跳变沿)与低频(之后的恒定值)成分,最能暴露系统的全部毛病;
- 阶跃响应与传递函数一一对应:知道其中一个就能推出另一个(阶跃响应的导数是脉冲响应,脉冲响应的拉氏变换就是
G(s))。
| 输入 | 时域 | 拉氏变换 | 主要用来考什么 |
|---|---|---|---|
| 阶跃 | 1(t) | 1/s | 动态性能(超调、调节时间) |
| 斜坡 | t | 1/s² | 稳态误差(1 型系统) |
| 加速度 | t²/2 | 1/s³ | 稳态误差(2 型系统) |
| 脉冲 | δ(t) | 1 | 直接得到 G(s) |
| 正弦 | sin(wt) | w/(s²+w²) | 频域分析(下一章) |
这一层回答了上一层什么问题:上一章给出了模型 G(s),这一章回答"这个模型跑起来是什么样子、要读哪几个数"。它把 数学里的微分方程解 变成了工程上的几个指标——这就是控制理论把数学"工程化"的方式。
原理
一、一阶系统:一个时间常数定全部
惯性环节 G(s) = 1/(Ts+1) 在单位阶跃下:
整条曲线只由一个数 T 决定。T 叫时间常数,物理意义是"响应走完总变化量的 63.2% 所需的时间":
| 时刻 | t/T | 输出 | 与终值的差距 |
|---|---|---|---|
t = T | 1 | 0.632121 | 36.79% |
t = 2T | 2 | 0.864665 | 13.53% |
t = 3T | 3 | 0.950213 | 4.98%(已进 5% 带) |
t = 4T | 4 | 0.981684 | 1.83%(已进 2% 带) |
t = 5T | 5 | 0.993262 | 0.67% |
t = 6T | 6 | 0.997521 | 0.25% |
从这张表直接读出三条工程结论:
| 指标 | 公式 | 来历 |
|---|---|---|
| 调节时间(±5%) | ts = 3T | 1 - e^{-3} = 0.9502,正好进 5% 带 |
| 调节时间(±2%) | ts = 4T | 1 - e^{-4} = 0.9817,正好进 2% 带 |
| 上升时间(10%~90%) | tr = 2.1972 T | ln(0.9/0.1) = ln 9 = 2.1972 |
一阶系统永远不会超调——指数曲线单调上升,这是"无零点的一阶环节"的固有性质。
注意 2.1972 这个数的来历:上升时间定义为从 10% 到 90%,所以 t90 - t10 = T(ln 9 - ln 1) = T ln 9。记成 ln 9 就不会记错。
二、二阶系统:两个参数,四种情形
标准式 G(s) = wn²/(s² + 2ζwn s + wn²),特征方程的根是
根的位置决定了响应的形状:
| 阻尼比 | 根的形态 | 响应形状 | 能否振荡 |
|---|---|---|---|
ζ > 1 | 两个不相等的负实根 | 过阻尼,缓慢上升 | 否 |
ζ = 1 | 两个相等负实根 | 临界阻尼,最快且不超调 | 否 |
0 < ζ < 1 | 一对共轭复根(实部为负) | 欠阻尼,衰减振荡 | 是 |
ζ = 0 | 一对纯虚根 | 无阻尼,等幅振荡(临界稳定) | 是 |
ζ < 0 | 实部为正 | 发散(不稳定) | 是 |
"欠阻尼才有超调"这条是时域分析的分水岭:只有 0 < ζ < 1,曲线才会冲过 1 再荡回来,tp、σ% 这些指标才有意义。
三、欠阻尼的六个公式
欠阻尼下把 wn 与 ζ 组合成阻尼振荡角频率 wd = wn*sqrt(1 - ζ²),六个指标就都写得出来:
| 指标 | 公式 | 记忆要点 |
|---|---|---|
| 阻尼振荡频率 | wd = wn*sqrt(1 - ζ^2) | wd < wn,ζ 越大 wd 越小 |
| 峰值时间 | tp = π/wd | 半个阻尼振荡周期 |
| 最大超调量 | σ% = exp(-ζπ/sqrt(1 - ζ^2)) * 100% | 只与 ζ 有关,与 wn 无关 |
| 上升时间 | tr = (π - arccos ζ)/wd | 从 0 到首次到达 1 |
| 调节时间(±5%) | ts = 3/(ζwn) | 只与 ζwn 有关(实部绝对值) |
| 调节时间(±2%) | ts = 4/(ζwn) | 同上 |
| 衰减振荡周期 | Td = 2π/wd | — |
| 对数衰减率 | δ = 2πζ/sqrt(1 - ζ^2) | 相邻两个波峰的比值取对数 |
两条最该记住的"只与……有关":
σ%只取决于ζ:所以"要多大超调"直接决定"该取多少ζ",与快慢无关。ts只取决于ζwn(极点实部的绝对值):极点离虚轴越远,衰减越快。这就是"极点位置决定响应快慢"的定量表达。
关于调节时间系数的口径:本课程用 3/(ζwn)(±5%)与 4/(ζwn)(±2%),它们分别来自 e^{-3} = 5.0% 与 e^{-4} = 1.8% 两个数值。部分教材用 3.5 与 4.4(把包络线与实际曲线的差异算得更保守)——同一道题给出不同答案往往就是口径不同,答卷时写明用的是哪一个。
四、由超调量反求阻尼比
把 σ% 的公式反解出来:
(σ 用小数而不是百分数,例如 10% 代 0.1。)这是考试里最常见的反向题:给一个超调量要求,求阻尼比。
对照几个常用值:
超调量 σ% | 阻尼比 ζ |
|---|---|
| 5% | 0.690107 |
| 10% | 0.591155 |
| 16.3% | 0.500043 |
| 20% | 0.455950 |
| 30% | 0.357857 |
注意 σ% = 16.3% 对应 ζ = 0.5——所以"一半阻尼"这句话在数值上意味着"约 16% 超调"。
ζ = 0.707 为什么被叫做最佳阻尼:此时 σ% = 4.3214%(超调很小),而 ts = 4.2426/wn 也已经接近最小值。再往上加阻尼,超调改善不多而响应明显变慢——"最佳"是超调与快慢两条曲线的交点,不是某个数学极值。
五、稳定性与劳斯判据
时域的最后一块是稳定性。三条等价的说法:
- 时域:
t -> ∞时响应不发散; - 复域:闭环特征方程的根(闭环极点)全部具有负实部;
- 频域:
G(jw)H(jw)的曲线不包围临界点(下一章讲)。
判断根是否有负实部,最常用的手工方法是劳斯稳定判据:把特征方程系数排成劳斯表,第一列所有元素同号则稳定。
劳斯表最实用的两条推论(对三阶系统 s³ + a s² + b s + c = 0):
- 所有系数必须同号且不为 0——缺项或异号必不稳定;
- 还需
a*b > c——这是"系数全正不等于稳定"的经典反例。
"系数全正不等于稳定"是这一节最爱考的一句话:它说明稳定性不能靠"看系数符号"草率下结论,必须真的算。
六、主导极点与偶极子
真实系统的阶数往往很高,但离虚轴最近的极点主导响应——因为它的衰减最慢:
| 概念 | 定义 | 用途 |
|---|---|---|
| 主导极点 | 离虚轴最近的一对共轭极点(或一个实极点) | 用二阶指标近似高階系统 |
| 偶极子 | 一对距离很近的零点与极点 | 可以相互抵消,对消掉降阶 |
| 远极点 | 实部绝对值比主导极点大 5 倍以上 | 影响可以忽略 |
"用主导极点把高阶系统降成二阶"是工程上最常用的一招:先看哪个极点离虚轴最近,其余全丢掉,然后套用上一节的六个公式。这招有效的判据就是"其余极点的实部至少是主导极点的 5 倍"。
示例
例 1:一阶系统的三个时刻
T = 1 ms(R = 1 kΩ、C = 1 μF):
text
t = 1T = 1.0000 ms -> 63.2121%
t = 3T = 3.0000 ms -> 95.0213% (进 5% 带,ts = 3T)
t = 4T = 4.0000 ms -> 98.1684% (进 2% 带,ts = 4T)
上升时间 tr = ln9 * T = 2.1972 ms离散仿真时要注意 dt 与 T 的比例:dt 必须远小于 T(一般取 T/10 以下),否则数值解的"人为阻尼"会让指标失真。
例 2:二阶指标全表(wn = 10 rad/s)
ζ | σ% | tp (s) | tr (s) | ts 5% (s) | ts 2% (s) | wd (rad/s) |
|---|---|---|---|---|---|---|
| 0.100 | 72.9248 | 0.315742 | 0.167938 | 3.000000 | 4.000000 | 9.949874 |
| 0.200 | 52.6621 | 0.320637 | 0.180870 | 1.500000 | 2.000000 | 9.797959 |
| 0.300 | 37.2326 | 0.329328 | 0.196605 | 1.000000 | 1.333333 | 9.539392 |
| 0.400 | 25.3827 | 0.342776 | 0.216288 | 0.750000 | 1.000000 | 9.165151 |
| 0.500 | 16.3034 | 0.362760 | 0.241840 | 0.600000 | 0.800000 | 8.660254 |
| 0.600 | 9.4780 | 0.392699 | 0.276787 | 0.500000 | 0.666667 | 8.000000 |
| 0.707 | 4.3214 | 0.444288 | 0.333216 | 0.424264 | 0.565685 | 7.071068 |
| 0.800 | 1.5165 | 0.523599 | 0.416349 | 0.375000 | 0.500000 | 6.000000 |
对着表读三件事:
σ%随ζ单调下降,且降得比直觉快:ζ从 0.1 到 0.2(翻倍),超调从 72.9% 降到 52.7%;tp与tr随ζ增大而变大——要超调小,就得牺牲"快",这是不可能三角在二阶系统上的具体体现;ts只随ζwn变化:ζ = 0.4与ζ = 0.8的ts恰好差一倍(0.75 与 0.375)。
注意 ζ = 0.8 时 σ% 只有 1.52%,但 ts 的改善已经很有限——这就回到"ζ = 0.707 是折中点"的结论。
例 3:由超调量反求阻尼比
要求最大超调不超过 10%:
text
|ln 0.1| = 2.302585
sqrt(pi^2 + 2.302585^2) = sqrt(9.869604 + 5.301898) = 3.898654
zeta = 2.302585 / 3.898654 = 0.591155取 ζ >= 0.592。再要求 ts <= 1 s(±5% 口径),则由 ts = 3/(ζwn) 得 wn >= 3/(0.591155*1) = 5.0748 rad/s——两个要求一个定 ζ、一个定 wn,互不干扰,这正是"σ% 只看 ζ、ts 只看 ζwn"的实用价值。
例 4:C 实现——数值仿真与解析指标对照
/* resp.c —— 二阶系统阶跃响应:数值仿真与解析指标对照 */
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
#define WN 10.0
#define DT 0.0005
#define N 20000 /* 10 s */
static void run(double zeta)
{
double y = 0.0, v = 0.0;
double ymax = 0.0, tpeak = 0.0;
double ts5 = 0.0, ts2 = 0.0;
double wd = WN * sqrt(1.0 - zeta * zeta);
double sig = exp(-zeta * PI / sqrt(1.0 - zeta * zeta)) * 100.0;
int n;
for (n = 0; n < N; n++) {
double t = (n + 1) * DT;
double acc = WN * WN * (1.0 - y) - 2.0 * zeta * WN * v;
v += DT * acc;
y += DT * v;
if (y > ymax) { ymax = y; tpeak = t; }
if (fabs(y - 1.0) > 0.05) ts5 = t; /* 最后一次越出 5% 带 */
if (fabs(y - 1.0) > 0.02) ts2 = t; /* 最后一次越出 2% 带 */
}
printf(" zeta = %.3f\n", zeta);
printf(" num : sigma = %8.4f%%, tp = %.6f s, ts5 = %.6f s, ts2 = %.6f s\n",
(ymax - 1.0) * 100.0, tpeak, ts5, ts2);
printf(" ana : sigma = %8.4f%%, tp = %.6f s, ts5 = %.6f s, ts2 = %.6f s\n\n",
sig, PI / wd, 3.0 / (zeta * WN), 4.0 / (zeta * WN));
}
int main(void)
{
printf("=== 2nd order step response: wn = %.1f rad/s, dt = %.4f s, horizon %.0f s ===\n",
WN, DT, N * DT);
run(0.200);
run(0.500);
run(0.707);
return 0;
}
c 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
预期输出:
=== 2nd order step response: wn = 10.0 rad/s, dt = 0.0005 s, horizon 10 s ===
zeta = 0.200
num : sigma = 52.6445%, tp = 0.320000 s, ts5 = 1.373000 s, ts2 = 1.958000 s
ana : sigma = 52.6621%, tp = 0.320637 s, ts5 = 1.500000 s, ts2 = 2.000000 s
zeta = 0.500
num : sigma = 16.2540%, tp = 0.362000 s, ts5 = 0.528000 s, ts2 = 0.805500 s
ana : sigma = 16.3034%, tp = 0.362760 s, ts5 = 0.600000 s, ts2 = 0.800000 s
zeta = 0.707
num : sigma = 4.2775%, tp = 0.444000 s, ts5 = 0.292500 s, ts2 = 0.594500 s
ana : sigma = 4.3255%, tp = 0.444221 s, ts5 = 0.424328 s, ts2 = 0.565771 s三组数据放一起看能得出两条结论:
- 数值解的
σ%与tp与解析值高度吻合:σ%分别差 0.02、0.05、0.05 个百分点,tp只差不到 0.0003 s。这说明dt = 0.5 ms相对wn = 10 rad/s足够小,动态指标是可信的。 ts的两种口径给出的答案不一致,而且方向还不同:5% 带下仿真值一律小于解析值(0.2925 < 0.4243 等);而 2% 带下,ζ = 0.2时仿真值偏小(1.958 < 2.000),ζ = 0.707时反而偏大(0.5945 > 0.5658)。
为什么 ts 这么难对齐?因为它有两个不同的"近似层级":
- 解析式
3/(ζwn)、4/(ζwn)用的是简化包络e^{-ζwn t},而真实包络还要乘1/sqrt(1 - ζ²)——ζ越接近 1,这个因子越大,解析式就越乐观; - 欧拉法本身引入人为阻尼,会让振荡衰减得更快、仿真
ts偏小。
两个偏差方向相反、量级相近,所以哪一边大取决于 ζ。结论不是"哪个对",而是:ts 是三项指标里最"口径敏感"的一个,答卷和实测都必须写明怎么算的。
例 5:Python——一阶与二阶的全部指标
# 时域分析:一阶三个时刻、二阶六个指标、反求阻尼比、对数衰减率
import math
import unicodedata
def wpad(s, n):
"""按显示宽度右补空格:东亚宽字符算 2 列"""
w = sum(2 if unicodedata.east_asian_width(c) in "WF" else 1 for c in s)
return s + " " * max(0, n - w)
print("=== 一、一阶系统 y = 1 - exp(-t/T) ===")
for k in range(1, 7):
print(f" {k}T: {1 - math.exp(-k):.6f} 与终值差 {math.exp(-k) * 100:.4f}%")
print(f" 上升时间系数 ln9 = {math.log(9):.6f}")
print(f" 调节时间:5% 带 -> 3T;2% 带 -> 4T")
print("\n=== 二、二阶指标(wn = 10 rad/s)===")
wn = 10.0
head = wpad("zeta", 8) + f"{'sigma%':>10}{'tp':>11}{'tr':>11}{'ts5':>11}{'ts2':>11}{'wd':>11}"
print(" " + head)
for z in (0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.70710678, 0.8):
wd = wn * math.sqrt(1 - z * z)
sig = math.exp(-z * math.pi / math.sqrt(1 - z * z)) * 100
tp = math.pi / wd
tr = (math.pi - math.acos(z)) / wd
print(f" {wpad(f'{z:.3f}', 8)}{sig:10.4f}{tp:11.6f}{tr:11.6f}"
f"{3 / (z * wn):11.6f}{4 / (z * wn):11.6f}{wd:11.6f}")
print("\n=== 三、由超调量反求阻尼比 ===")
for s_pct in (5, 10, 16.3, 20, 30):
s = s_pct / 100
z = abs(math.log(s)) / math.sqrt(math.pi ** 2 + math.log(s) ** 2)
print(f" sigma% = {s_pct:5.1f}% -> zeta = {z:.6f}")
print("\n=== 四、对数衰减率 delta = 2*pi*zeta/sqrt(1-zeta^2) ===")
for z in (0.1, 0.2, 0.5, 0.70710678):
d = 2 * math.pi * z / math.sqrt(1 - z * z)
print(f" zeta = {z:.4f} -> delta = {d:.6f}")
print("\n=== 五、zeta 增大时的边际收益 ===")
prev = None
for z in (0.4, 0.5, 0.6, 0.70710678, 0.8, 0.9):
sig = math.exp(-z * math.pi / math.sqrt(1 - z * z)) * 100
ts = 3 / (z * wn)
line = f" zeta = {z:.3f}: sigma% = {sig:8.4f}, ts5 = {ts:.6f} s"
if prev:
line += f" (相比上一档:超调降 {prev[0] - sig:7.4f} 个百分点,ts 降 {(prev[1] - ts) / prev[1] * 100:5.2f}%)"
print(line)
prev = (sig, ts)
print(" 读法:越过 zeta = 0.707 之后超调已经很小(<5%),而每一档换来的改善迅速递减")
python 本站为静态站,不提供在线运行;可复制到本地用 gcc / python 执行
预期输出:
=== 一、一阶系统 y = 1 - exp(-t/T) ===
1T: 0.632121 与终值差 36.7879%
2T: 0.864665 与终值差 13.5335%
3T: 0.950213 与终值差 4.9787%
4T: 0.981684 与终值差 1.8316%
5T: 0.993262 与终值差 0.6738%
6T: 0.997521 与终值差 0.2479%
上升时间系数 ln9 = 2.197225
调节时间:5% 带 -> 3T;2% 带 -> 4T
=== 二、二阶指标(wn = 10 rad/s)===
zeta sigma% tp tr ts5 ts2 wd
0.100 72.9248 0.315742 0.167938 3.000000 4.000000 9.949874
0.200 52.6621 0.320637 0.180870 1.500000 2.000000 9.797959
0.300 37.2326 0.329328 0.196605 1.000000 1.333333 9.539392
0.400 25.3827 0.342776 0.216288 0.750000 1.000000 9.165151
0.500 16.3034 0.362760 0.241840 0.600000 0.800000 8.660254
0.600 9.4780 0.392699 0.276787 0.500000 0.666667 8.000000
0.707 4.3214 0.444288 0.333216 0.424264 0.565685 7.071068
0.800 1.5165 0.523599 0.416349 0.375000 0.500000 6.000000
=== 三、由超调量反求阻尼比 ===
sigma% = 5.0% -> zeta = 0.690107
sigma% = 10.0% -> zeta = 0.591155
sigma% = 16.3% -> zeta = 0.500043
sigma% = 20.0% -> zeta = 0.455950
sigma% = 30.0% -> zeta = 0.357857
=== 四、对数衰减率 delta = 2*pi*zeta/sqrt(1-zeta^2) ===
zeta = 0.1000 -> delta = 0.631484
zeta = 0.2000 -> delta = 1.282550
zeta = 0.5000 -> delta = 3.627599
zeta = 0.7071 -> delta = 6.283185
=== 五、zeta 增大时的边际收益 ===
zeta = 0.400: sigma% = 25.3827, ts5 = 0.750000 s
zeta = 0.500: sigma% = 16.3034, ts5 = 0.600000 s (相比上一档:超调降 9.0793 个百分点,ts 降 20.00%)
zeta = 0.600: sigma% = 9.4780, ts5 = 0.500000 s (相比上一档:超调降 6.8253 个百分点,ts 降 16.67%)
zeta = 0.707: sigma% = 4.3214, ts5 = 0.424264 s (相比上一档:超调降 5.1566 个百分点,ts 降 15.15%)
zeta = 0.800: sigma% = 1.5165, ts5 = 0.375000 s (相比上一档:超调降 2.8049 个百分点,ts 降 11.61%)
zeta = 0.900: sigma% = 0.1524, ts5 = 0.333333 s (相比上一档:超调降 1.3641 个百分点,ts 降 11.11%)
读法:越过 zeta = 0.707 之后超调已经很小(<5%),而每一档换来的改善迅速递减第五段是"ζ = 0.707 到底好在哪"的正面回答:从 0.4 到 0.707,超调每档能降 9.08、6.83、5.16 个百分点;越过 0.707 之后,每档只降 2.80、1.36 个百分点,而 ts 的改善也从 20% 掉到 11% 左右。"跨越 0.707 之后收益迅速递减"就是它成为惯例的原因——它不是一个数学上的最优点,而是"边际收益由陡转平"的那个拐点。
考点
- 一阶三个时刻:
ts = 3T(±5%)、ts = 4T(±2%)、tr = ln9 * T = 2.1972T(10%~90%)。1 - e^{-3} = 95.0%、1 - e^{-4} = 98.2%是这两个系数的全部来历。一阶永不超调。 - 二阶四种情形按
ζ分:>1过阻尼(两个不等负实根)、=1临界(相等负实根,最快且不超调)、0<ζ<1欠阻尼(共轭复根,有超调)、=0等幅振荡、<0发散。 ws与wn的关系:wd = wn*sqrt(1 - ζ^2),wd < wn恒成立。σ%只与ζ有关、与wn无关;ts只与ζwn(极点实部)有关。这两条是"拆分设计"的依据。- 六个公式:
wd、tp = π/wd、σ% = exp(-ζπ/sqrt(1-ζ^2))*100%、tr = (π - arccos ζ)/wd、ts = 3/(ζwn)或4/(ζwn)、Td = 2π/wd。 - 由
σ%反求ζ:ζ = |ln σ|/sqrt(π^2 + (ln σ)^2),σ代小数。 - 对数衰减率
δ = 2πζ/sqrt(1 - ζ^2),用于实验测阻尼(量两个相邻波峰的高度比)。 - 稳定性判据:闭环极点全部有负实部。劳斯判据看第一列同号;系数全正不等于稳定(三阶需
a*b > c)。 - 主导极点降阶:只看离虚轴最近的极点,其余极点的实部要大到至少 5 倍才能忽略。
- 易错:把
wd与wn混用(tp用的是wd);把ts的公式记成3/(ζwn)而忘了它是"±5%"口径;把"ζ越大越快"当成结论(简化公式3/(ζwn)确实随ζ单调减小,但改善幅度迅速递减,而且真实调节时间还要受1/sqrt(1 - ζ^2)因子影响——公式只是近似,别把它当物理定律);把"最佳阻尼"当成精确的数学最优。
小结
- 阶跃是最标准的输入,因为它既含高频又含低频,且阶跃响应与传递函数一一对应。
- 一阶系统只有一个数
T:ts = 3T / 4T、tr = 2.1972T,永不超调。 - 二阶系统的响应形状只由
ζ决定、时间尺度只由wn决定;ζ < 1才有超调。 σ%只看ζ,ts只看ζwn——这让"超调要求"与"速度要求"可以分开设计。ζ = 0.707是工程折中:超调约 4.3%,而越过它之后超调与ts的边际改善都迅速递减;"最佳"是拐点,不是数学极值。- 稳定性 = 闭环极点全在左半平面;劳斯判据给出手工判法,系数全正不等于稳定。
- 高阶系统可以用主导极点降成二阶,条件是其余极点实部至少大 5 倍。
- 解析式与实际仿真的
ts会有系统性差异(解析用的是包络线),报答案时要写清口径。
回到主线:这一章把上一章的传递函数变成了曲线和数字,用的正是 微积分 里的指数与三角函数;它也是 嵌入式实时控制 里"参数调起来抖不抖"的定量答案。到这里,"给一个具体系统算响应"已经能算了;但系统一改参数,极点就移动,难道每次都要重算一遍?
下一章引入一个把"所有可能的极点位置"一次画出来的工具——根轨迹。
下一篇:根轨迹法
评论(0)
当前浏览器不允许本地存储,评论无法保存。
还没有评论,来说两句。