3. 参数辨识理论基础:最小二乘法(LS)原理、递推最小二乘法(RLS)、带遗忘因子的递推最小二乘法(FFRLS)
好,咱们进入正题。电机参数辨识,说白了就是给电机做“体检”。电阻、电感这些参数,你没法拿万用表直接量,因为电机在转,工况在变。那怎么办?就得靠算法从电压、电流这些能测到的信号里,把参数“算”出来。
今天要聊的最小二乘法,就是最经典、最基础的一套“体检工具”。我个人习惯把它比作“找一条最合适的线,穿过一堆散点”。你想想看,是不是这个理?
3.1 最小二乘法(LS)原理
先说说最原始的版本。假设我们测了一堆数据点,比如不同电流下的电压值。理论上,电压 = 电阻 × 电流。但实际测量总有噪声,点不会乖乖落在直线上。
最小二乘法的思路很简单:让所有点到这条直线的“垂直距离”的平方和最小。为什么是平方?因为正负误差不会抵消,而且数学上好处理。
用公式表达就是:
J = Σ (y_i - ŷ_i)²
其中 y_i 是实测值,ŷ_i 是模型预测值。我们要找一组参数,让 J 最小。
对于线性模型 y = θ₁x₁ + θ₂x₂ + ... + θₙxₙ,解起来其实有闭式解:
θ = (XᵀX)⁻¹ Xᵀ Y
嗯,这里要注意:XᵀX 必须可逆。我在项目中遇到过,数据量太少或者信号激励不够,矩阵就奇异了,算出来的参数直接飞掉。那次排查了好久,最后发现是电流采样频率太低,数据点都挤在一起。
核心要点:LS 是一次性处理所有数据,适合离线分析。但电机在线运行时,数据是源源不断来的,你不可能每次都重新算一遍全部数据——计算量太大,内存也扛不住。
3.2 递推最小二乘法(RLS)
这就引出了递推版本。RLS 的思路是:新数据来了,在旧参数基础上“微调”一下,不用从头算。
递推公式长这样:
K(k) = P(k-1) φ(k) / [λ + φᵀ(k) P(k-1) φ(k)]
θ(k) = θ(k-1) + K(k) [y(k) - φᵀ(k) θ(k-1)]
P(k) = [I - K(k) φᵀ(k)] P(k-1) / λ
看着有点吓人?其实拆开看就三件事:
- K(k) 是增益,决定新数据对参数修正的力度
- θ(k) 是更新后的参数
- P(k) 是协方差矩阵,代表当前参数估计的不确定性
我刚开始用 RLS 时犯过一个低级错误:忘记初始化 P 矩阵。P(0) 一般设成单位矩阵乘以一个大数,比如 1000。设太小了,算法收敛极慢;设太大了,初期参数会剧烈震荡。后来我总结了个经验:P(0) 取 100~1000 倍的单位阵,基本够用。
个人经验:RLS 的收敛速度跟 λ(遗忘因子)关系很大。λ=1 时,所有数据权重一样,适合稳态系统。λ<1 时,旧数据权重指数衰减,适合时变系统。但 λ 太小,参数会抖得厉害——我吃过这个亏。
3.3 带遗忘因子的递推最小二乘法(FFRLS)
FFRLS 其实就是 RLS 的一个变种,核心改动就一个:引入遗忘因子 λ(0 < λ ≤ 1)。
你看上面的递推公式里,P(k) 更新时多了一个除以 λ。这个 λ 的作用是:
- λ = 1:所有历史数据一视同仁,就是标准 RLS
- λ < 1:旧数据权重逐渐变小,新数据占主导
为什么需要遗忘因子?因为电机参数会变啊!电机发热,电阻能变 20%~30%;磁路饱和,电感也会变。如果你用标准 RLS,旧数据一直“赖着不走”,参数更新就迟钝了。
我做过一个对比实验:电机从冷态跑到热态,电阻从 0.5Ω 升到 0.62Ω。用 λ=0.99 的 FFRLS,大概 2 秒就跟踪上了;用标准 RLS(λ=1),跑了 10 秒还没跟上,误差一直有 5% 以上。
避坑指南:我曾经把 λ 设成 0.9,觉得这样跟踪快。结果参数抖得像心电图,根本没法用。后来才明白,λ 太小,等效于只用最近几个数据点做估计,噪声影响太大了。一般建议 λ 取 0.95~0.99,具体看系统时变速度。
3.4 三种方法的对比
我整理了个表格,方便你对比:
| 方法 | 适用场景 | 计算量 | 跟踪能力 | 内存需求 |
|---|---|---|---|---|
| LS | 离线分析、标定 | 高(一次计算) | 无 | 高(存所有数据) |
| RLS | 在线、参数缓慢变化 | 低(递推更新) | 弱 | 低(只存协方差矩阵) |
| FFRLS | 在线、参数快速变化 | 低(递推更新) | 强(可调) | 低 |
说白了,做电机在线辨识,FFRLS 是首选。但要注意:遗忘因子不是万能的。如果系统噪声很大,或者激励信号不够丰富,FFRLS 也会翻车。我建议你实际调试时,先跑一遍离线 LS 拿到基准值,再用 FFRLS 做在线跟踪,这样心里有底。
3.5 知识体系框架
下面这张图,是我自己画的一个结构图,帮你理清这三者的关系:
嗯,这张图把三者的关系讲得很清楚了。从 LS 到 RLS 再到 FFRLS,其实就是一条“从离线到在线、从静态到动态”的进化路线。你掌握了这个脉络,后面讲具体怎么用在电机上,就顺理成章了。