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估计流程分成三步:
- 离线标定:做OCV-SOC实验,拟合曲线,求H矩阵。同时根据传感器手册和实验数据,确定Q和R的初值。
- 在线初始化:上电时,根据开路电压查表得到SOC初值 x̂(0|0),并设置P(0|0)为一个较大的值(比如1),表示初始估计不太准。
- 实时递推:每个采样周期,执行上述五步。输出 x̂(k|k) 作为当前SOC估计值。
这里有个工程细节:H矩阵不是常数。OCV-SOC曲线通常是非线性的,不同SOC点斜率不同。如果你用线性KF,H只能取一个固定值。我建议取SOC中间段(20%-80%)的平均斜率,这样整体误差最小。
注意事项:线性KF只适用于OCV-SOC曲线近似线性的电池体系(如LFP磷酸铁锂在中段就很平,线性KF效果差)。对于非线性强的体系,你需要用扩展卡尔曼滤波(EKF),那是下一章的内容。
4.4 知识体系与核心逻辑
下面这张图,是我自己总结的卡尔曼滤波在SOC估计中的完整逻辑链。你看一眼,就能把前面所有内容串起来。
这张图里,最关键的闭环就是“预测→更新→输出→反馈到下一时刻预测”。你只要把这个循环跑通了,卡尔曼滤波就算入门了。
4.5 调参经验与常见问题
调Q和R,是卡尔曼滤波工程落地的核心。我分享几个经验:
| 参数 | 物理含义 | 调大效果 | 调小效果 |
|---|---|---|---|
| Q(过程噪声) | 对模型的信任程度 | 更相信测量值,响应快但噪声大 | 更相信模型,响应慢但平滑 |
| R(测量噪声) | 对传感器的信任程度 | 更相信模型,收敛慢 | 更相信测量值,易受噪声干扰 |
| P₀(初始协方差) | 对初始估计的信任程度 | 初始收敛快,但初期波动大 | 初始收敛慢,但更稳定 |
我曾经在一个项目中,把R设得太小,结果SOC估计值跟着电压噪声剧烈抖动,BMS直接报故障。后来把R调大了一个数量级,波形立刻平滑了。记住一个原则:宁可信模型,也别信传感器。因为模型误差是缓慢变化的,而传感器噪声是高频的。
一句话总结:线性卡尔曼滤波是SOC估计的“入门必修课”。它把安时积分法和电压修正法有机融合,通过动态加权给出最优估计。虽然实际工程中更多用EKF或UKF,但理解KF的预测-校正逻辑,是所有进阶算法的基础。
公众号:蓝海资料掘金营,微信deep3321