4、参数辨识方法:最小二乘法、带遗忘因子的递推最小二乘法、卡尔曼滤波入门

说到电池SOP预测,核心问题是什么?说白了,就是电池模型里的那些参数——内阻、开路电压、极化电容——我们没法直接测量。你拿万用表量不出R0,也量不出R1、C1。那怎么办?只能靠算法去“猜”,去“辨识”。

我个人习惯把参数辨识比作“盲人摸象”。你摸到的是系统的输入输出数据(电流、电压),但你要反推出大象的形状(模型参数)。今天我们就聊聊三种最常用的“摸象”方法:最小二乘法、带遗忘因子的递推最小二乘法,还有卡尔曼滤波的入门思路。

4.1 最小二乘法:最朴素的“拟合”思想

先讲最基础的。最小二乘法,英文叫Least Squares。它的思想特别简单:让模型预测值和实际测量值之间的误差平方和最小。

举个例子。假设我们有一个简单的电池模型:

U(t) = OCV + R * I(t) + e(t)

其中U是端电压,OCV是开路电压,R是内阻,I是电流,e是误差。我们采集了一堆(U, I)数据点,想找到最合适的R和OCV。最小二乘法就是干这个的。

数学上,它解一个线性方程组:

θ = (X^T * X)^{-1} * X^T * Y

其中θ是待辨识的参数向量,X是输入矩阵,Y是输出向量。

核心要点:最小二乘法是一次性处理所有数据。你采集完一整段数据,然后离线计算。优点是稳定、精度高;缺点是需要存储所有数据,计算量大,不适合实时系统。

我在项目中遇到过一个问题:用最小二乘法辨识出来的参数,在实验室静态工况下表现很好,但一上车载动态工况就崩了。为什么?因为电池参数是时变的,而最小二乘法假设参数是常数。这就引出了下一种方法。

4.2 带遗忘因子的递推最小二乘法

递推最小二乘法(RLS)解决了“实时更新”的问题。它不需要存储所有历史数据,而是每来一个新数据点,就更新一次参数估计。

但普通的RLS有个毛病:随着时间推移,旧数据的影响会一直累积,导致算法对新数据的变化不敏感。说白了,就是“记性太好”,忘了电池参数是会老化的。

所以就有了带遗忘因子的递推最小二乘法(FFRLS)。核心思想是:给旧数据打个折扣,让算法更关注新数据。

遗忘因子λ的取值范围是(0, 1],通常取0.95到0.99之间。λ越小,遗忘越快,算法对参数变化越敏感,但噪声也越敏感。λ=1时退化为普通RLS。

递推公式如下:

K(k) = P(k-1) * φ(k) / [λ + φ(k)^T * P(k-1) * φ(k)]
θ(k) = θ(k-1) + K(k) * [y(k) - φ(k)^T * θ(k-1)]
P(k) = [I - K(k) * φ(k)^T] * P(k-1) / λ

其中K是增益矩阵,P是协方差矩阵,φ是数据向量。

实战技巧:我建议遗忘因子不要固定。在电池SOC变化剧烈时(比如急加速),用较小的λ(0.95);在稳态工况下,用较大的λ(0.99)。这叫“变遗忘因子RLS”,效果比固定值好很多。

我曾经踩过一个坑:遗忘因子设得太小(0.9),结果参数估计值跟着噪声剧烈抖动,SOP预测值忽高忽低,控制器都不敢用。后来改成0.97,稳多了。

4.3 卡尔曼滤波入门:从“状态估计”角度看参数辨识

卡尔曼滤波(KF)是另一个思路。它不直接辨识参数,而是估计系统的“状态”。在电池领域,状态可以是SOC,也可以是极化电压,甚至可以把内阻也当作状态来估计。

卡尔曼滤波的核心是“预测-更新”两步走:

  1. 预测步:根据上一时刻的状态和系统模型,预测当前时刻的状态和误差协方差。
  2. 更新步:用当前时刻的测量值,修正预测值,得到最优估计。

数学上,它假设系统是线性的,噪声是高斯白噪声。公式如下:

预测:
x̂(k|k-1) = A * x̂(k-1|k-1) + B * u(k)
P(k|k-1) = A * P(k-1|k-1) * A^T + Q

更新:
K(k) = P(k|k-1) * H^T * [H * P(k|k-1) * H^T + R]^{-1}
x̂(k|k) = x̂(k|k-1) + K(k) * [z(k) - H * x̂(k|k-1)]
P(k|k) = [I - K(k) * H] * P(k|k-1)

其中Q是过程噪声协方差,R是测量噪声协方差。这两个参数怎么调?嗯,这里要注意:Q和R的比值决定了滤波器的“信任倾向”。Q大,说明模型不可靠,更相信测量值;R大,说明测量噪声大,更相信模型预测。

避坑指南:我曾经把Q设得太小,R设得太大,结果卡尔曼滤波器几乎不更新,完全跟着模型走。电池SOC估计误差越来越大,最后系统报警了。调Q和R没有捷径,建议用实际数据跑一遍,观察残差分布,再手动微调。

卡尔曼滤波和RLS有什么关系?你想想看,如果把参数也当作状态变量,那么参数辨识问题就变成了状态估计问题。这就是“扩展卡尔曼滤波”(EKF)的思路——把参数扩进状态向量里,一起估计。

4.4 三种方法的对比与选择

我把这三种方法的特点整理了一下,方便你对比:

方法 适用场景 优点 缺点
最小二乘法 离线标定、实验室测试 稳定、精度高、理论成熟 不能实时更新、存储量大
FFRLS 在线参数辨识、实时系统 计算量小、跟踪时变参数 对遗忘因子敏感、噪声放大
卡尔曼滤波 状态估计、联合估计 可同时估计状态和参数、有噪声模型 调参复杂、非线性系统需扩展

我个人习惯是:在BMS量产项目中,FFRLS用得最多。为什么?因为它计算量小,嵌入式MCU跑得动,而且参数辨识效果足够好。卡尔曼滤波更适合做SOC估计,或者做“参数+状态”联合估计的进阶方案。

一句话总结:离线标定用最小二乘法,在线实时用FFRLS,追求精度和鲁棒性用卡尔曼滤波。没有最好的方法,只有最合适的场景。

4.5 知识体系总览

下面这张图帮你理清本章的知识脉络:

参数辨识方法知识体系 参数辨识方法 最小二乘法 递推最小二乘法(RLS) 卡尔曼滤波 离线批量处理 参数恒定假设 遗忘因子λ 递推更新 实时在线 预测-更新 状态估计 噪声模型 核心:从数据中反推模型参数,为SOP预测提供基础 → 输出给SOP预测模块

好了,参数辨识这块就聊到这儿。三种方法各有千秋,你实际用的时候,建议先从FFRLS入手,跑通了再考虑要不要上卡尔曼滤波。毕竟,在嵌入式系统里,稳定和简单往往比花哨更重要。


公众号:蓝海资料掘金营,微信deep3321