4、卡尔曼滤波入门:线性卡尔曼滤波(KF)推导、状态空间建模、在SOC估计中的应用

卡尔曼滤波,说白了就是一套“猜得准”的数学方法。

你想想看,电池的SOC(荷电状态)我们没法直接拿尺子量。只能靠电流积分(安时积分法)去估算,但电流传感器有噪声,积分时间长了误差会越滚越大。这时候,卡尔曼滤波就派上用场了——它能把“模型猜的值”和“测量看到的值”揉在一起,给出一个最优估计。

我个人习惯把卡尔曼滤波看作一个“智能加权平均器”。它不信任任何一个单一来源,而是根据不确定性动态调整权重。嗯,这里要注意,理解卡尔曼滤波的关键,不在于背公式,而在于理解它背后的“预测-校正”闭环逻辑。

4.1 状态空间模型:把电池装进数学框里

做卡尔曼滤波的第一步,是把物理系统写成状态空间形式。说白了,就是两个方程:

  • 状态方程:描述系统内部状态怎么随时间演变。
  • 观测方程:描述我们能测到的量(电压、电流)和内部状态的关系。

对于电池SOC估计,一个最简单的线性模型长这样:

状态方程:x(k) = A * x(k-1) + B * u(k-1) + w(k-1)
观测方程:z(k) = H * x(k) + v(k)

其中:

  • x(k):状态向量。这里我们只关心SOC,所以 x = [SOC]。
  • u(k):输入向量。这里就是电流 I。
  • z(k):观测向量。这里就是端电压 V。
  • w(k):过程噪声。代表模型不准带来的误差。
  • v(k):测量噪声。代表传感器本身的噪声。

矩阵A、B、H怎么定?

我记得第一次做这个的时候,卡在A矩阵上半天。其实很简单:

  • A = 1:因为SOC本身没有“自衰减”,上一时刻的SOC就是下一时刻的基础。
  • B = -η * Δt / Q:η是库仑效率,Δt是采样时间,Q是电池容量。这就是安时积分法的离散形式。
  • H = ∂V/∂SOC:这是开路电压(OCV)对SOC的导数。你需要先做OCV-SOC标定实验,然后拟合出一条曲线,求导得到H。

核心要点:状态空间模型是卡尔曼滤波的“骨架”。模型越准,滤波效果越好。但模型太复杂,计算量又扛不住。工程上需要在精度和实时性之间找平衡。

4.2 线性卡尔曼滤波的五步推导

卡尔曼滤波的推导,网上有各种花里胡哨的版本。我建议你抓住核心:预测 + 更新。一共五步,每一步都有明确的物理意义。

咱们先定义几个符号:

  • x̂(k|k-1):基于k-1时刻的信息,预测的k时刻状态。
  • x̂(k|k):融合了k时刻测量值后的最优估计。
  • P(k|k-1):预测状态的协方差矩阵(代表不确定性)。
  • P(k|k):更新后的协方差矩阵。
  • K(k):卡尔曼增益。这是整个算法的“灵魂”。

第一步:状态预测

x̂(k|k-1) = A * x̂(k-1|k-1) + B * u(k-1)

这一步就是“猜”。用上一时刻的最优估计,加上电流输入,算出这一时刻的SOC预测值。说白了,就是安时积分法走了一步。

第二步:误差协方差预测

P(k|k-1) = A * P(k-1|k-1) * A^T + Q

这一步是“评估猜得有多不准”。Q是过程噪声协方差,代表你对模型的信任程度。Q越大,说明你觉得模型误差大,后面会更依赖测量值。

第三步:卡尔曼增益计算

K(k) = P(k|k-1) * H^T * (H * P(k|k-1) * H^T + R)^(-1)

这是最核心的一步。K(k) 决定了“预测”和“测量”谁更可信。R是测量噪声协方差,代表你对传感器的信任程度。

你想想看:如果R很小(传感器很准),K就会很大,算法会更相信测量值。如果Q很小(模型很准),K就会很小,算法会更相信预测值。

第四步:状态更新

x̂(k|k) = x̂(k|k-1) + K(k) * (z(k) - H * x̂(k|k-1))

这一步是“纠偏”。括号里的 (z(k) - H * x̂(k|k-1)) 叫“新息”或“残差”——就是测量值和预测值之间的差距。用K乘以这个差距,加到预测值上,就得到了最优估计。

第五步:误差协方差更新

P(k|k) = (I - K(k) * H) * P(k|k-1)

这一步是“更新信心”。融合了测量信息后,不确定性应该降低。所以P(k|k) 一定比 P(k|k-1) 小。

避坑指南:我曾经在调试时发现P矩阵发散,怎么调Q和R都不收敛。后来发现是A矩阵写错了——我把A设成了0.99,导致SOC每步都在衰减。记住,对于纯积分过程,A=1,别乱改。

4.3 在SOC估计中的实战应用

理论说完了,咱们看看实际怎么用。我一般把卡尔曼滤波的SOC估计流程分成三步:

  1. 离线标定:做OCV-SOC实验,拟合曲线,求H矩阵。同时根据传感器手册和实验数据,确定Q和R的初值。
  2. 在线初始化:上电时,根据开路电压查表得到SOC初值 x̂(0|0),并设置P(0|0)为一个较大的值(比如1),表示初始估计不太准。
  3. 实时递推:每个采样周期,执行上述五步。输出 x̂(k|k) 作为当前SOC估计值。

这里有个工程细节:H矩阵不是常数。OCV-SOC曲线通常是非线性的,不同SOC点斜率不同。如果你用线性KF,H只能取一个固定值。我建议取SOC中间段(20%-80%)的平均斜率,这样整体误差最小。

注意事项:线性KF只适用于OCV-SOC曲线近似线性的电池体系(如LFP磷酸铁锂在中段就很平,线性KF效果差)。对于非线性强的体系,你需要用扩展卡尔曼滤波(EKF),那是下一章的内容。

4.4 知识体系与核心逻辑

下面这张图,是我自己总结的卡尔曼滤波在SOC估计中的完整逻辑链。你看一眼,就能把前面所有内容串起来。

卡尔曼滤波SOC估计核心逻辑 离线标定 OCV-SOC实验 → H矩阵 在线初始化 查表得SOC₀,设P₀ 预测步骤 状态预测 + 协方差预测 更新步骤 增益计算 + 状态更新 + 协方差更新 输出SOC(k) x̂(k|k) 作为当前估计值 下一时刻递推 图:线性卡尔曼滤波SOC估计流程(预测-校正闭环)

这张图里,最关键的闭环就是“预测→更新→输出→反馈到下一时刻预测”。你只要把这个循环跑通了,卡尔曼滤波就算入门了。

4.5 调参经验与常见问题

调Q和R,是卡尔曼滤波工程落地的核心。我分享几个经验:

参数 物理含义 调大效果 调小效果
Q(过程噪声) 对模型的信任程度 更相信测量值,响应快但噪声大 更相信模型,响应慢但平滑
R(测量噪声) 对传感器的信任程度 更相信模型,收敛慢 更相信测量值,易受噪声干扰
P₀(初始协方差) 对初始估计的信任程度 初始收敛快,但初期波动大 初始收敛慢,但更稳定

我曾经在一个项目中,把R设得太小,结果SOC估计值跟着电压噪声剧烈抖动,BMS直接报故障。后来把R调大了一个数量级,波形立刻平滑了。记住一个原则:宁可信模型,也别信传感器。因为模型误差是缓慢变化的,而传感器噪声是高频的。

一句话总结:线性卡尔曼滤波是SOC估计的“入门必修课”。它把安时积分法和电压修正法有机融合,通过动态加权给出最优估计。虽然实际工程中更多用EKF或UKF,但理解KF的预测-校正逻辑,是所有进阶算法的基础。


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