4. 参数辨识问题建模

好,咱们进入第四讲。说实话,参数辨识这个事儿,很多人一上来就急着跑数据、调参数。我见过不少项目,数据采集了一大堆,结果辨识出来的模型根本没法用。为什么?因为问题本身就没建模清楚。

这一讲,我们就来聊聊怎么把辨识问题“说清楚”。说白了,就是回答四个问题:

  • 我们要解一个什么样的数学问题?
  • 这个问题的解存在且唯一吗?
  • 怎么设计实验才能让数据“喂饱”模型?
  • 模型长什么样,参数藏在哪儿?

嗯,一个一个来。

4.1 辨识问题的数学描述

参数辨识,本质上是一个优化问题。我习惯把它写成这样:

给定系统输入 u(t) 和输出 y(t),
寻找参数向量 θ,使得模型输出 ŷ(t|θ) 与实测输出 y(t) 的误差最小。

数学上,我们通常用预测误差法(Prediction Error Method, PEM)来建模。目标函数是:

θ̂ = argmin J(θ) = (1/N) * Σ || y(k) - ŷ(k|θ) ||²

这里有几个关键点:

  • N 是采样点数。N 太小,统计意义不够;N 太大,计算量吃不消。我个人习惯取 N = 500~2000,具体看系统动态。
  • ŷ(k|θ) 是模型在参数 θ 下的预测输出。注意,这个预测可以是一步预测,也可以是多步预测。我在项目中遇到过,用一步预测辨识出来的模型,做多步仿真时发散得一塌糊涂。所以,我建议根据最终用途来选择预测步长。
  • 范数通常取 2-范数,也就是最小二乘。但如果数据中有野点(outlier),我会改用 Huber 损失函数,鲁棒性更好。
我的小技巧: 如果系统噪声是高斯白噪声,最小二乘就是最优的。但如果噪声有偏或者有色,记得用广义最小二乘或辅助变量法。别问我怎么知道的——有一次我偷懒用了普通最小二乘,结果辨识出来的阻尼比偏了 30%,飞控调参调了一整晚。

4.2 可辨识性分析

你可能会问:是不是只要数据够多,参数就一定能辨识出来?不一定。

可辨识性,说白了就是:给定输入输出数据,参数 θ 能否被唯一确定?

我把它分成两类:

  • 结构可辨识性:模型结构本身是否允许参数唯一确定?比如,两个参数以乘积形式出现(θ₁·θ₂),你只能辨识出它们的乘积,无法分开。
  • 实践可辨识性:即使结构上可辨识,但受限于数据质量、信噪比、激励条件,实际中还是辨识不出来。

怎么分析?我常用的方法是灵敏度分析

S_ij(t) = ∂ŷ_i(t|θ) / ∂θ_j

如果某个参数的灵敏度在所有时刻都接近零,那这个参数基本就是“死”的——数据对它不敏感,辨识不出来。

避坑指南: 我曾经在一个六自由度飞行器模型里,把气动导数 a 和 b 设成了 a·b 的形式。结果辨识算法怎么都不收敛。后来一查灵敏度矩阵,发现 a 和 b 的灵敏度曲线几乎完全线性相关。嗯,这就是典型的“结构不可辨识”。解决办法:重新参数化,把 a·b 合并成一个参数 c。

还有一个实用方法:Fisher 信息矩阵。如果信息矩阵奇异,说明参数之间存在冗余。我一般会计算信息矩阵的条件数,条件数超过 1000 的,基本就不可辨识了。

4.3 激励轨迹设计原则

数据是辨识的“粮食”。粮食不好,再好的算法也白搭。激励轨迹设计,就是解决“怎么喂数据”的问题。

我总结了三条原则:

  1. 充分激励:输入信号必须能激发系统的所有模态。对于六自由度飞行器,这意味着俯仰、滚转、偏航通道都要有足够的能量。
  2. 频率覆盖:信号的频谱要覆盖系统的带宽。我习惯用扫频信号(chirp signal),从 0.1 Hz 扫到 10 Hz,覆盖飞行器的短周期和长周期模态。
  3. 幅值适中:幅值太小,信噪比低;幅值太大,可能进入非线性区或损坏设备。我一般取最大允许幅值的 70%~80%。

常用的激励信号有:

信号类型优点缺点我的用法
PRBS(伪随机二进制序列)频谱宽,实现简单高频能量衰减快地面测试,初步辨识
扫频信号频率可控,能量集中需要较长时间飞行试验,精细辨识
多正弦叠加可定制频谱设计复杂学术研究,高精度需求
我个人最推荐: 对于六自由度飞行器,先用 PRBS 做一次粗辨识,得到系统的大致带宽和模态频率。然后根据这个信息,设计一个扫频信号,把能量集中在关键频段。这样既高效又准确。

4.4 参数化模型形式

模型形式选对了,辨识就成功了一半。我见过太多人把模型搞得太复杂,结果参数多到没法辨识。

常用的参数化模型有:

  • 传递函数模型:适合 SISO 系统,参数少,物理意义明确。比如:
G(s) = K / (s² + 2ζω_n s + ω_n²)

这里要辨识的参数就是 K, ζ, ω_n。三个参数,干净利落。

  • 状态空间模型:适合 MIMO 系统,能描述内部状态。但参数多,容易过参数化。我一般会先用子空间辨识法(如 N4SID)得到一个初始模型,再降阶。
ẋ = A(θ)x + B(θ)u
y = C(θ)x + D(θ)u
  • 非线性模型:比如神经网络、模糊模型。说实话,我在工程中很少用纯黑箱的非线性模型,因为可解释性差。我更喜欢灰箱模型——物理结构已知,只有少数参数需要辨识。

举个例子,对于四旋翼飞行器的俯仰通道,我常用的参数化形式是:

J_yy * θ̈ = τ_θ - b_θ * θ̇

这里要辨识的参数是转动惯量 J_yy 和阻尼系数 b_θ。两个参数,物理意义清晰,辨识结果可以直接用于控制器设计。

选型建议: 如果你做的是控制器设计,我建议用传递函数或状态空间模型。如果你做的是故障诊断或健康管理,可以考虑非线性模型。但无论如何,奥卡姆剃刀原则在这里同样适用——如无必要,勿增参数。

好了,这一讲的内容就是这些。参数辨识问题建模,说白了就是:把问题说清楚,把参数找出来,把数据喂好,把模型选对。做到这四点,辨识工作就成功了一大半。


专注资料整理