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)的流程:

  1. 预测步: 根据上一时刻的状态和输入,预测当前时刻的状态和协方差
  2. 更新步: 用实际测量值修正预测值,得到最优估计

代码实现的核心部分:

# 预测
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中的位置和流程:

参数辨识在BMS中的工作流程 电流/电压采集 传感器数据 数据预处理 滤波/去噪/对齐 参数辨识 RLS / EKF 模型参数更新 R0, R1, C1 SOH评估 内阻增量 / 容量衰减 SOH估计值输出 三种方法选择建议 • 离线分析 → 最小二乘法 • 在线实时 → 递推最小二乘 • 高精度 → 卡尔曼滤波

4.7 实际项目中的选择建议

说了这么多,到底该用哪种方法?我个人的建议是这样的:

  • 如果你在做实验室标定,用最小二乘法就够了。简单、可靠、容易调试。
  • 如果你在做嵌入式BMS,优先考虑递推最小二乘法。计算量小,实时性好,而且参数调节相对直观。
  • 如果你需要同时估计SOC和SOH,那就上卡尔曼滤波。虽然调参麻烦点,但联合估计的效果确实好。

一个小技巧: 在实际项目中,我经常把RLS和卡尔曼滤波结合起来用。先用RLS快速辨识出电池的静态参数,再用卡尔曼滤波做精细调整。这样既保证了收敛速度,又保证了精度。

嗯,参数辨识这块内容确实不少。但只要你理解了这三种方法的核心思想,再结合实际的电池数据跑一跑,很快就能上手。记住,没有万能的方法,只有最适合你应用场景的方法。


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