4、参数辨识方法:最小二乘法、递推最小二乘法、卡尔曼滤波在参数辨识中的应用
说到电池SOH评估,参数辨识是个绕不开的坎儿。说白了,电池模型建得再好,参数不准也是白搭。我这些年做BMS项目,最头疼的就是怎么在线把电池的欧姆内阻、极化电容这些参数给揪出来。今天咱们就聊聊三种最常用的方法:最小二乘法、递推最小二乘法,还有卡尔曼滤波。
4.1 为什么需要参数辨识?
你想想看,电池的等效电路模型里,R0、R1、C1这些参数,可不是一成不变的。温度一变,它们就变;SOC一变,它们也变;老化程度不同,它们更是天差地别。我见过不少新手,直接拿手册上的固定参数去仿真,结果跟实测数据差了十万八千里。
所以,我们需要一种方法,能根据电池的端电压和电流数据,实时地把这些参数给算出来。这就是参数辨识要做的事。
核心思想: 利用输入(电流)和输出(电压)数据,反向推算出模型内部参数的最优估计值。
4.2 最小二乘法(Least Squares, LS)
最小二乘法是最基础的方法。它的思路很简单:让模型预测的电压和实际测量的电压之间的误差平方和最小。
假设我们有一个线性化的电池模型:
U(k) = θ₁ * I(k) + θ₂ * U(k-1) + θ₃
其中θ₁、θ₂、θ₃就是我们要辨识的参数。写成矩阵形式:
Y = Φ * Θ
最小二乘的解就是:
Θ = (ΦᵀΦ)⁻¹ Φᵀ Y
我在项目中用过一次离线最小二乘,效果还不错。但有个问题——它需要全部数据都采集完了才能算。也就是说,你得先把电池跑完一个完整的充放电周期,然后拿回来慢慢分析。这在实验室里没问题,但车上可不行。
注意: 最小二乘法对噪声敏感。如果电流传感器或电压传感器有较大的测量噪声,辨识出来的参数可能会严重偏离真实值。我曾经遇到过因为电流传感器零点漂移,导致内阻辨识结果偏大30%的情况。
4.3 递推最小二乘法(Recursive Least Squares, 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) / λ
这里λ是遗忘因子,一般取0.95到0.99之间。λ越小,算法对最新数据的响应越快,但估计值波动也越大。
我的经验: 遗忘因子λ的选取很关键。我习惯在电池静置时用λ=0.99,让参数稳定;在大电流动态工况下用λ=0.96,让算法快速跟踪参数变化。你可以试试自适应遗忘因子的方法,效果会更好。
RLS的优点是计算量小,适合嵌入式实现。我曾在STM32F4上跑过,一个参数更新周期只需要几十微秒,完全够用。
4.4 卡尔曼滤波在参数辨识中的应用
说到卡尔曼滤波,很多人第一反应是状态估计。没错,它确实擅长估计SOC。但你知道吗?卡尔曼滤波同样可以用来做参数辨识。
思路是这样的:把待辨识的参数也当成系统的状态变量。比如我们把电池的欧姆内阻R0和极化电阻R1都当作状态,然后和SOC一起估计。
扩展卡尔曼滤波(EKF)的流程:
- 预测步: 根据上一时刻的状态和输入,预测当前时刻的状态和协方差
- 更新步: 用实际测量值修正预测值,得到最优估计
代码实现的核心部分:
# 预测
x_pred = f(x_est, u)
P_pred = A @ P_est @ A.T + Q
# 更新
K = P_pred @ H.T @ inv(H @ P_pred @ H.T + R)
x_est = x_pred + K @ (z - h(x_pred))
P_est = (I - K @ H) @ P_pred
卡尔曼滤波的好处是能同时处理状态估计和参数辨识,而且对噪声有很好的鲁棒性。但缺点也很明显——调参是个技术活。Q矩阵和R矩阵的取值,直接决定了滤波效果的好坏。
避坑指南: 我曾经在一个项目中,把卡尔曼滤波的Q矩阵设得太小,结果参数收敛得特别慢,跑了半个小时还没稳定。后来把Q调大了一个数量级,几分钟就收敛了。记住,Q代表你对模型的信任程度,R代表你对传感器的信任程度。两者要平衡。
4.5 三种方法的对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 最小二乘法 | 原理简单,解唯一 | 离线计算,不能实时 | 实验室标定、离线分析 |
| 递推最小二乘法 | 实时性好,计算量小 | 对遗忘因子敏感 | 嵌入式在线辨识 |
| 卡尔曼滤波 | 鲁棒性强,可联合估计 | 调参复杂,计算量大 | 高精度要求、多状态联合估计 |
4.6 参数辨识的完整流程
下面这张图展示了参数辨识在BMS中的位置和流程:
4.7 实际项目中的选择建议
说了这么多,到底该用哪种方法?我个人的建议是这样的:
- 如果你在做实验室标定,用最小二乘法就够了。简单、可靠、容易调试。
- 如果你在做嵌入式BMS,优先考虑递推最小二乘法。计算量小,实时性好,而且参数调节相对直观。
- 如果你需要同时估计SOC和SOH,那就上卡尔曼滤波。虽然调参麻烦点,但联合估计的效果确实好。
一个小技巧: 在实际项目中,我经常把RLS和卡尔曼滤波结合起来用。先用RLS快速辨识出电池的静态参数,再用卡尔曼滤波做精细调整。这样既保证了收敛速度,又保证了精度。
嗯,参数辨识这块内容确实不少。但只要你理解了这三种方法的核心思想,再结合实际的电池数据跑一跑,很快就能上手。记住,没有万能的方法,只有最适合你应用场景的方法。
公众号:蓝海资料掘金营,微信deep3321