1. 一阶惯性系统时间常数辨识
问题设定与数据来源
一阶惯性系统的阶跃响应为 y(t) = K·(1 − e^(−t/T)),其中 K 为稳态增益,T 为时间常数。辨识任务是从采样序列 (t_i, y_i) 中反推 K 与 T。本例构造一组教学示例数据:设真实参数 K = 2.0、T = 1.5 s,采样周期 0.1 s,采样 60 点,并叠加标准差 0.03 的零均值高斯噪声(示例数据,非实测)。
两种方法的核心差异在于:两点法只取响应曲线上 63.2% 与 28.3%(或 86.5%)两个特征点,计算量极小但对噪声敏感;最小二乘拟合利用全部采样点,通过线性化把非线性问题转为线性回归,抗噪性更好。下面先给出可运行的实现,再对比精度。
最小二乘拟合的实现
对 y = K − K·e^(−t/T) 做变量替换:令 a = K,b = −K/T,则 y = a + b·e^(−t/T) 仍含未知 T。更稳妥的做法是固定 T 做一维搜索:对每个候选 T,令 x_i = 1 − e^(−t_i/T),模型变为 y_i = K·x_i,此时 K 的最小二乘解为闭式 K = Σ(x_i·y_i) / Σ(x_i²),残差平方和 SSE(T) = Σ(y_i − K·x_i)²。在 T 的搜索区间上取 SSE 最小者即为估计值。这样避免了非线性迭代,且结果可复现。
import numpy as np
rng = np.random.default_rng(7)
K_true, T_true = 2.0, 1.5
t = np.arange(0, 6.0, 0.1)
y_clean = K_true * (1 - np.exp(-t / T_true))
y = y_clean + rng.normal(0, 0.03, t.size)
def ls_fit(t, y, T_grid):
best = None
for T in T_grid:
x = 1 - np.exp(-t / T)
K = np.sum(x * y) / np.sum(x * x)
sse = np.sum((y - K * x) ** 2)
if best is None or sse < best[2]:
best = (K, T, sse)
return best
T_grid = np.linspace(0.2, 5.0, 4801)
K_ls, T_ls, sse_ls = ls_fit(t, y, T_grid)
print(f"LS: K={K_ls:.4f} T={T_ls:.4f} SSE={sse_ls:.5f}")
示例运行预期输出约为 K≈1.99、T≈1.52(具体数值取决于随机种子,属示例结果)。搜索步长 0.001 s 已足够,若需更高精度可在最优点附近二次细化。
两点法的实现与误差来源
两点法利用一阶响应的固定比例点:t 时刻响应达到稳态值的 63.2% 时 t = T;达到 28.3% 时 t = 0.333T;达到 86.5% 时 t = 2T。工程上常用 28.3% 与 63.2% 两点:T = 1.5·(t_63.2 − t_28.3)。稳态值 K 取末段均值。噪声会直接平移特征点位置,因此需要先做轻度平滑或对穿越点做线性插值。
def two_point(t, y):
K_est = np.mean(y[-10:]) # 末段均值作稳态值
y_n = y / K_est
def cross(level):
idx = np.where(y_n >= level)[0][0]
t0, t1 = t[idx-1], t[idx]
y0, y1 = y_n[idx-1], y_n[idx]
return t0 + (level - y0) * (t1 - t0) / (y1 - y0)
t63 = cross(0.632)
t28 = cross(0.283)
T_est = 1.5 * (t63 - t28)
return K_est, T_est
K_tp, T_tp = two_point(t, y)
print(f"2P: K={K_tp:.4f} T={T_tp:.4f}")
示例中两点法通常给出 T 偏差在 0.05~0.15 s 量级,明显大于最小二乘。原因有二:一是稳态值用末段均值估计,噪声直接进入 K;二是两个穿越点各带插值误差,且被放大 1.5 倍。
两种方法的精度对比
为量化比较,用同一噪声模型重复 200 次蒙特卡洛(示例仿真,非实测),统计两种方法对 T 的偏差与标准差:
| 方法 | T 均值 (s) | T 偏差 (s) | T 标准差 (s) | K 偏差 |
|---|---|---|---|---|
| 最小二乘 | ≈1.50 | ≈0.00 | ≈0.02 | ≈0.005 |
| 两点法 | ≈1.53 | ≈+0.03 | ≈0.09 | ≈0.02 |
结论:含噪声时最小二乘的 T 标准差约为两点法的 1/4,且几乎无系统偏差;两点法在无噪声或极低噪声下与最小二乘接近,适合现场快速估算。若数据含明显稳态漂移,应先扣除基线再辨识。
结果判读与选用建议
- 看残差:最小二乘拟合后应检查残差是否围绕零随机分布;若残差呈单调趋势,说明模型阶次或稳态值设定有误。
- 看特征点一致性:用辨识出的
T反算 63.2% 时刻,应与实测穿越点接近;偏差大说明噪声或采样过粗。 - 选用原则:离线数据处理优先最小二乘;现场仪表整定、数据点极少时用两点法快速估算,再用最小二乘复核。
T/10,否则两点法插值误差显著增大;本例 T=1.5 s、采样 0.1 s,满足该条件。