把EKF和LSTM揉在一起,SOC估计精度反而更高了
基于残差融合WOA-LSTM-EKF的锂电池SOC估计方法
MATLAB实现 | BBDST工况数据 | 完整代码可复现
#电池管理 #SOC估计 #EKF #LSTM #WOA优化
最近在做一个电池SOC估计的项目,把EKF(扩展卡尔曼滤波)和LSTM(长短期记忆网络)两种方法做了个融合,效果比单独用任何一种都好不少。过程中踩了几个坑,也找到了一个很有意思的改进思路,想跟你聊聊。
如果你也在做BMS相关的工作,或者对锂电池状态估计感兴趣,这篇文章应该能给你一些启发。
先看结果。融合后的RMSE降到了 0.0224 ,比单独EKF提升了 20.6% ,比单独WOA-LSTM提升了 51.5% 。R²达到了 0.9936。
1. SOC估计为什么这么重要
SOC的全称是State of Charge,就是电池的剩余电量百分比。你手机显示还剩多少电,电动车仪表盘告诉你还能跑多远,背后都是SOC在说话。
但问题在于,SOC没办法直接测量。你不能像测电压一样拿个表笔往电池上一搭就读出SOC。它只能靠算法估计。
目前主流的SOC估计方法分两派:
模型派(EKF为代表):基于等效电路模型,用卡尔曼滤波做状态估计。优点是理论基础扎实、鲁棒性好,缺点是依赖模型精度,模型一偏误差就大。
数据派(LSTM为代表):用深度学习直接从电流电压数据中学习SOC映射。优点是精度天花板高,缺点是依赖训练数据质量、可解释性差、外推能力弱。
两个阵营各有长短,但很少有人把它们 真正融合 起来。常见的做法是简单加权平均,或者用EKF的结果去修正LSTM,效果并不理想。
我们的思路不一样。我们让EKF和LSTM各管一段、取长补短------低SOC区间信任EKF,高SOC区间信任LSTM,中间平滑过渡。这个思路叫 SOC自适应卡尔曼滤波融合。
2. 整体技术路线:一个双通道并行框架
整个框架分成三个层次:
第一层 · 数据准备:BBDST工况数据,电流和电压做输入,SOC做输出,70%训练、30%测试,数据归一化到0,1。
第二层 · 双通道并行估计 :
通道A:WOA优化LSTM超参数 → 训练LSTM → SOC测量估计
通道B:一阶RC等效电路模型 → EKF递推 → SOC先验估计
第三层 · SOC自适应融合:根据SOC水平动态调整EKF和LSTM的权重,融合结果反馈回EKF作为下一时刻的初值。

图 / 基于残差融合WOA-LSTM-EKF的SOC估计技术路线
代码用MATLAB实现,总共8个函数文件,主程序main.m串联整个流程,从数据导入到结果输出大约需要 17秒 跑完。
3. 通道A:WOA喂出来的LSTM
LSTM做SOC估计不算新鲜。把电流和电压作为输入序列,LSTM层提取时序特征,最后一层全连接输出SOC,标准套路。
新鲜的是我们用 鲸鱼优化算法(WOA) 来调LSTM的两个关键超参数:隐含层单元数和学习率。
为什么用WOA?因为LSTM超参数搜索空间大,手动调参效率低。WOA模拟鲸鱼捕食的三种行为来搜索最优解:
包围猎物:X(t+1) = X* - A·|C·X* - X(t)|,A=2a·r1-a,a从2线性递减到0
气泡网攻击:X(t+1) = |X* - X(t)|·e^(bl)·cos(2πl) + X*
随机搜索:当|A|≥1时,跳出局部最优,全局探索
搜索范围设的是隐含层10,80、学习率0.0005,0.02,鲸群规模5,迭代3轮。WOA最终找到的最优组合是 隐含层25、学习率0.01545,验证集RMSE为0.1189。
用这个参数在完整训练集上训练30轮,batch size 128,Adam优化器,L2正则化1e-4。

图 / WOA鲸鱼优化算法收敛曲线,3轮迭代RMSE从0.206降至0.118
LSTM在测试集上的表现:RMSE=0.0462,R²=0.9725。精度尚可,但 在高SOC区间误差明显偏大,最大误差MaxAE高达0.2622。这说明纯数据驱动方法在训练数据覆盖不足的区域容易失准。
4. 通道B:一阶RC模型 + 扩展卡尔曼滤波
EKF这条路走的是物理模型。我们用的是一阶RC等效电路模型(Thevenin模型),它把电池简化为一个电压源串联一个欧姆内阻和一个RC并联网络。
模型参数:R0=0.003Ω(欧姆内阻),R1=0.001Ω(极化内阻),C1=20000F(极化电容),Q=25Ah(额定容量),库仑效率η=1,采样间隔Δt=1s。
OCV和SOC的关系用5阶多项式拟合,从训练数据中学习。这个关系决定了EKF的观测方程能不能准确预测端电压。
EKF的核心是两个公式:
状态方程(预测) :
SOC(k+1) = SOC(k) + η·Δt·I(k)/(Q·3600)
U1(k+1) = exp(-Δt/τ)·U1(k) - R1·(1-exp(-Δt/τ))·I(k)
观测方程(更新):Ut = OCV(SOC) - U1 + I·R0
过程噪声协方差Q_ekf=diag(1e-8, 1e-6),测量噪声方差R_ekf=0.004。初始SOC故意设偏5%,用来验证算法的收敛性。

)
图 / OCV-SOC关系曲线拟合(一阶RC等效电路模型)
EKF在测试集上的表现:RMSE=0.0282,R²=0.9898。最大误差MaxAE仅为0.0396,远优于LSTM的0.2622。但 EKF的MAE偏高(0.0276),说明存在系统性偏差。
5. 核心创新:SOC自适应融合
EKF和LSTM各有优劣,把两者融合起来是顺理成章的想法。但简单的加权平均效果很差。
传统固定R的问题:经典卡尔曼融合中,测量噪声R是固定的。EKF在运行过程中,协方差矩阵P会不断收缩,导致卡尔曼增益K趋近于0。融合结果实际退化为纯EKF,LSTM的信息完全被丢弃了。
我们换个思路。不去调R,而是根据SOC水平 动态分配权重:
SOC < 0.7:完全信任EKF先验。低SOC区间EKF的模型精度更高,误差更稳定。
SOC > 0.9:完全信任WOA-LSTM测量。高SOC区间LSTM的预测能力更强。
0.7 ≤ SOC ≤ 0.9:线性过渡,权重从0平滑增加到1。
融合公式:SOC_fused = SOC_ekf + K·(SOC_lstm - SOC_ekf)
其中K = min(1, max(0, (SOC - 0.7)/(0.9 - 0.7)))。
关键设计:融合后的SOC值会反馈回EKF,作为下一时刻的SOC初值,但协方差P保持不变。这个设计避免了融合导致协方差过度收缩,让EKF在下一时刻仍然能有效利用电压量测信息。

图 / SOC自适应融合权重曲线(低SOC信任EKF,高SOC信任WOA-LSTM)
6. 实验结果:三个梯队,一目了然
测试集上的结果,直接看这一组数字:
| 指标 | EKF先验 | WOA-LSTM | 卡尔曼融合 |
|---|---|---|---|
| RMSE | 0.0282 | 0.0462 | 0.0224 |
| MAE | 0.0276 | 0.0346 | 0.0190 |
| R² | 0.9898 | 0.9725 | 0.9936 |
| MaxAE | 0.0396 | 0.2622 | 0.0395 |
融合后的R²达到了 0.9936 ,意味着模型的拟合优度已经非常接近完美。MAE从EKF的0.0276降到 0.0190,降幅31.2%。
更关键的是 最大误差。WOA-LSTM的最大误差高达0.2622,这是数据驱动方法难以避免的短板。融合后MaxAE回落到0.0395,与EKF持平,说明融合模型在极端工况下也很可靠。
与优化前(固定R融合)的对比更能说明问题:
| 指标 | 优化前(固定R) | 优化后(自适应) | 相对提升 |
|---|---|---|---|
| RMSE | 0.0281 | 0.0224 | ↓20.32% |
| MAE | 0.0275 | 0.0190 | ↓30.99% |
| R² | 0.9899 | 0.9936 | +0.0037 |
MAE提升 30.99%,这个数字说明自适应权重策略确实有效。固定R融合的问题在于卡尔曼增益K被协方差过度收缩锁死,LSTM的信息根本进不去。自适应权重相当于绕开了这个陷阱,让EKF和LSTM各展所长。








图 / 全序列SOC在线估计对比(EKF先验 / WOA-LSTM测量 / 卡尔曼融合)
图 / 测试集SOC估计结果对比
7. 代码结构:8个文件,各司其职
整个项目用MATLAB实现,代码结构非常清晰:
main.m --- 主程序,串联整个流程。数据导入、WOA寻优、LSTM训练、EKF递推、融合估计、性能评估、可视化,全在这一份文件里。
woa_optimize.m --- 鲸鱼优化算法核心实现。包围猎物、气泡网攻击、随机搜索三种策略,5只鲸鱼迭代3轮。
trainLSTMModel.m --- 构建LSTM网络。sequenceInput→LSTM→FC→Regression,极简结构,主程序调用时传入隐含层数、学习率、正则化系数。
predictLSTM.m --- LSTM预测函数,把cell格式的输出转换为数值向量。
lstmFitness.m --- WOA适应度函数,用给定超参数训练LSTM并返回验证集RMSE。
calcMetrics.m --- 计算RMSE、MAE、R²、MAPE、MaxAE五个评估指标。
cellToRow.m 和 addHover.m --- 两个辅助工具函数。
数据文件是BBDST25.xlsx,包含BBDST工况下的电流、电压、SOC数据,共8054个样本点。运行后结果保存在WOA_LSTM_EKF_SOC_Results.mat中,方便后续分析。



图 / 锂电池BBDST工况数据特征分析
8. 反思与下一步
这个项目做下来,有几个体会:
模型融合的方向是对的。EKF和LSTM的误差在统计上表现为低相关性,说明它们捕捉了SOC的不同特征。融合的本质是让两个不同的信息源互相补充,而不是互相覆盖。
简单融合没用,要聪明地融合。固定R的卡尔曼融合本质上等于没融合------EKF的协方差收缩机制把LSTM堵在了门外。SOC自适应权重这个思路,在BBDST工况上验证了有效性。
WOA的搜索效率还有提升空间。当前只用了5只鲸鱼3轮迭代,收敛速度较快但可能错过了更优解。后续可以增加种群规模和迭代次数,或者引入自适应参数调整策略。
下一步可以往几个方向走:把这个方法推广到其他工况数据(DST、FUDS等)验证泛化能力;把SOC自适应权重中的阈值参数也纳入WOA的优化范围;扩展到SOH(健康状态)估计,实现电池全生命周期的状态监测。
以上代码和实验全部可复现,项目放在我的GitHub上,欢迎交流。
运行环境:MATLAB (Deep Learning Toolbox) | 运行时间约17秒 | 普通PC即可运行
应用场景:电动汽车BMS实时SOC估计 / 储能系统状态监测 / 便携式设备电源管理
数据来源:BBDST25工况数据,8054个样本点,电流+电压+SOC三通道