§5  调参指南

参数总览 · 推荐调参顺序 · 故障诊断
水箱液位控制实验 · 推荐初始值:p=40, pu=5, β=0.7, λ=2, α=0.9, λ_RLS=0.995
1. 参数总览
参数含义推荐初始值调节方向
$p$预测时域40一般不动;系统不稳定时可增大
$p_u$控制时域5一般不动
$\beta$阶梯衰减因子0.70.5~0.9;越小控制越激进
$\lambda$控制增量权重2控制量振荡→增大;响应太慢→减小
$\alpha$柔化因子0.9超调大→增大(0.9~0.95);响应慢→减小
$\lambda_\text{RLS}$RLS 遗忘因子0.995参数漂移→增大;跟踪慢→减小
$\Delta u_\text{max}$增量限幅0.1(归一化)控制冲击大→减小
2. 推荐调参顺序
★ 核心

按以下顺序调,每步只动一个参数,观察效果后再进行下一步:

  1. 确认稳态:SP 不变,观察 $y$ 是否稳定在 SP 附近(无静差)
  2. 调响应速度:给一个小阶跃(如 1V→1.5V),观察上升时间。调 $\lambda$
  3. 压超调:给较大阶跃(1V→2V),观察超调量。调 $\alpha$
  4. 平滑控制量:观察 $u$ 曲线是否有高频抖动。调 $\beta$ 或 $\Delta u_\text{max}$
  5. 验证抗扰:稳态时手动扰动水位,观察恢复速度
原则
先保证稳定(无振荡),再追求快速(响应速度),最后优化平滑(控制量)。不要同时调多个参数。
3. 第一步:确认稳态
○ 诊断

SP 固定,等待系统稳定后,观察 $y$ 是否收敛到 SP。

现象可能原因处理
$y$ 收敛但有静差CARIMA 积分未生效,或工作点估计偏差检查 $\tilde A$ 构造是否正确
$u$ 立刻打到上限(20mA)稳态增益估计错误,$b_0$ 太小检查归一化空间辨识是否正确
$y$ 持续振荡$\lambda$ 太小或 $\alpha$ 太小增大 $\lambda$(先试 5~10)
$y$ 完全不动丢番图递推 bug,$G_2$ 全零检查 $F_j$ 维度和 $G\_\text{mat}$ 索引
4. 第二步:调响应速度
○ 调节

给小阶跃(1V→1.5V),观察上升时间(从 10% 到 90% 的时间)。

水箱系统时间常数 $\tau \approx 64$ 步,加上 $k=24$ 步时延,理论上升时间约 100~150 步。

现象调节
上升太慢(>200步)减小 $\lambda$(从 2 → 1 → 0.5)
上升太快但振荡增大 $\lambda$(从 2 → 5 → 10)
上升正常但有超调进入第三步调 $\alpha$
$\lambda$ 的物理含义
$\lambda$ 越大,控制律越"保守",每步控制增量越小,响应越慢但越平稳。$\lambda=0$ 时退化为纯最小方差控制(可能不稳定)。
5. 第三步:压超调
○ 调节

给大阶跃(1V→2V 或 1V→3V),观察超调量(超过 SP 的最大偏差)。

超调的根本原因:$k=24$ 步时延,控制量推出去后要等 24 步才看到效果,容易冲过头。

超调量调节
>20%增大 $\alpha$(0.9 → 0.92 → 0.95)
10%~20%$\alpha=0.9$ 是合理范围,可接受
<5%$\alpha$ 可能过大,响应偏慢
$\alpha$ 与响应速度的 trade-off
$\alpha=0.9$:约 30 步逼近 SP,适中
$\alpha=0.95$:约 60 步逼近 SP,超调小但慢
$\alpha=0.98$:约 200 步逼近 SP,几乎无超调但非常慢
6. 第四步:平滑控制量
○ 调节

观察 $u(t)$ 曲线,理想情况是平滑的 S 形上升,不应有高频抖动。

现象调节
$u$ 高频抖动(每步大幅跳变)减小 $\Delta u_\text{max}$(0.1 → 0.05)或增大 $\lambda$
$u$ 在设定值切换时有大尖峰增大 $\alpha$(柔化设定值跳变)
$u$ 长时间饱和在 20mA检查 $b_0$ 是否太小(稳态增益问题)
$\beta$ 的作用
$\beta$ 控制控制序列的衰减速度,不直接影响超调,但影响控制量的平滑程度。$\beta=0.7$ 是经验最优值,一般不需要调。
7. 常见故障诊断
⚠ 故障排查
故障现象根本原因解决方法
控制量立刻打到 20mA 上限$b_0$ 太小(稳态增益不足),或归一化空间辨识错误重新在归一化空间辨识,验证 $K_{ss} = b_0/(1+a_1) \approx 1.5$
$y$ 完全不跟踪 SP$F_j$ 维度错误(2项而非3项)检查 na_t = len(A_tilde)-1 = 2
G2 数值异常(比 Python 大 4 倍)$G\_\text{mat}$ 索引偏移检查 G_new[jj] = e*b0(最高项在 jj,不是 jj+1)
RLS 参数持续漂移遗忘因子 $\lambda$ 太小$\lambda=0.98 \to 0.995$
MSVC C2374 编译错误同一函数作用域内多次声明 int i/j/k每个 for 循环用 { } 包裹
初始控制量爆到上限u_prev=0 对应 4mA,但系统需要更高电流维持水位u_prev 初始化为稳态电流对应的归一化值