电池SOC估计实战:从EKF到UKF,手把手教你用卡尔曼滤波搞定锂电池电量估算

张开发
2026/4/17 7:11:43 15 分钟阅读

分享文章

电池SOC估计实战:从EKF到UKF,手把手教你用卡尔曼滤波搞定锂电池电量估算
电池SOC估计实战从EKF到UKF手把手教你用卡尔曼滤波搞定锂电池电量估算准确估计电池剩余电量是电动车、储能系统的核心技术难题。本文带你深入理解扩展卡尔曼滤波EKF和无迹卡尔曼滤波UKF在锂电池SOC估算中的应用附完整MATLAB代码实现。一、为什么SOC估算这么难锂电池的荷电状态State of ChargeSOC无法直接测量只能通过电流积分安时积分法或电压查表法间接推算。然而安时积分法受初始误差和累积误差困扰开路电压法需要电池静置数小时实时性差电池内部复杂的电化学特性、温度、老化等因素使SOC估算成为一项“看不见、摸不着”的挑战卡尔曼滤波家族正是解决这类动态系统状态估计问题的利器。本文将展示如何基于Thevenin等效电路模型分别用扩展卡尔曼滤波EKF和无迹卡尔曼滤波UKF实现高精度SOC估计。二、电池建模一阶RC等效电路我们采用最常见的一阶Thevenin模型结构简单又能捕捉电池动态特性电路方程电流放电方向为正UL(t) UOC - Up(t) - Ro·I(t) I(t) Up(t)/Rp Cp·dUp(t)/dt其中UL– 负载端电压可测量UOC– 开路电压与SOC是非线性函数Up– 极化电容两端电压状态量Ro– 欧姆内阻Rp,Cp– 极化电阻和电容离散化后的状态方程采样间隔ΔtSoC(k) SoC(k-1) - η·Δt/Qn · I(k-1) Up(k) exp(-Δt/τ)·Up(k-1) Rp·(1-exp(-Δt/τ))·I(k-1)其中τ Rp·Cpη为库伦效率Qn为额定容量。写成矩阵形式X(k) A·X(k-1) B·I(k-1)状态向量X [SoC; Up]矩阵A、B由模型参数构成。三、扩展卡尔曼滤波EKF核心步骤EKF的核心思想对非线性函数做一阶泰勒展开将其线性化。3.1 预测阶段根据上一时刻状态和当前电流预测当前状态States_preA*States_upd(:,T-1)B*I_ob;P_CovA*P_Cov*A[Qs0;0Qu];同时预测端电压UL_preUOC_pre-Up_pre-I_ob*Ro_pre;3.2 线性化对观测方程UL g(SoC, Up, I)求偏导C1dUOC/dSoC;% 由UOC-SoC拟合多项式求导得到C[C1-1];% 观测矩阵3.3 更新阶段计算卡尔曼增益融合实际测量电压UL_ob修正状态KP_Cov*C/(C*P_Cov*CR);States_updStates_preK*(UL_ob-UL_pre);P_CovP_Cov-K*C*P_Cov;整个过程清晰明了就像“预测→修正”的智慧闭环。四、无迹卡尔曼滤波UKF更高阶的替代方案EKF的线性化会引入截断误差对于高度非线性的UOC-SoC关系UKF通过Sigma点采样直接传递概率分布精度更高。UKF关键步骤构造Sigma点集围绕当前状态均值按一定规则生成2n1个采样点非线性传播每个Sigma点通过状态方程和观测方程计算预测均值和协方差更新类似卡尔曼滤波但增益基于Sigma点统计量核心代码片段% Sigma点采样sigma[Xsigma,Xsigmasqrt((nlambda)*P),Xsigma-sqrt((nlambda)*P)];% 预测状态forks1:2*n1sigma(ks)sigma(ks)-I_ob*ts/(Capacity*3600);sxkWm(ks)*sigma(ks)sxk;end% 计算卡尔曼增益并更新SoC_UKF(T)sxkkgs*(UL_ob_UKF-syk);UKF不需要显式计算雅可比矩阵实现起来反而更简洁且对强非线性系统更鲁棒。五、参数辨识与工况验证5.1 模型参数拟合通过HPPC混合脉冲功率特性测试数据将UOC,Ro,Rp,Cp拟合为SOC的多项式函数6次多项式效果最佳。例如UOC的拟合公式UOC3.440031.71448*SoC-3.51247*SoC^25.70868*SoC^3-5.06869*SoC^41.86699*SoC^5;5.2 动态工况测试采用BBDST作为输入电流电流波形剧烈变化接近真实行车场景。5.3 仿真结果对比在MATLAB中运行主函数main(1,1)得到以下结果蓝色实线真实SOC紫色点划线安时积分法误差随时间累积绿色点划线EKF估计迅速收敛橙色点划线UKF估计精度最高抖动小误差统计典型运行结果方法平均误差标准差安时积分0.02340.0312EKF0.00510.0076UKF0.00380.0053UKF在SOC初始值错误比如设为1而实际为0.8的情况下仍能快速收敛到真值展现出强大的鲁棒性。六、Simulink与脚本双实现项目提供了两种实现方式Simulink模型Improved_EKFSim.slx适合快速原型验证模块化清晰MATLAB脚本EKF_UKF_Thev.mmain.m便于参数调优和算法对比运行方式main(1,1)% 工况1BBDST初始SOC1main(2,0.8)% 工况2恒流间歇初始SOC0.8脚本会输出估计误差的平均值和标准差并自动绘制SOC曲线和误差曲线。七、总结与工程建议方法优点缺点适用场景安时积分简单计算量极小累积误差需频繁校准短时估算低成本BMSEKF成熟稳定计算适中线性化引入误差大多数车载BMSUKF精度高无需雅可比矩阵计算量稍大Sigma点高精度需求、强非线性系统工程实践小贴士过程噪声协方差Q和观测噪声协方差R需要根据实际传感器特性调试不是固定值电池参数随温度、老化变化建议加入在线辨识如递推最小二乘UKF的Sigma点参数α, β, κ可参考标准文献α0.01~1β2高斯分布最优本项目完整代码可以直接下载运行修改参数、对比算法快速搭建自己的电池SOC估计器。思考当电池老化后模型参数会偏移卡尔曼滤波还能保持精度吗欢迎在评论区留言讨论后续我们将带来自适应卡尔曼滤波和电池健康状态SOH联合估计的干货内容。完整代码私信电池SOC估计实战从EKF到UKF手把手教你用卡尔曼滤波搞定锂电池电量估算

更多文章