基于卡尔曼滤波算法的电池SOC估算项目
项目简介
本项目实现了一个基于扩展卡尔曼滤波(Extended Kalman Filter, EKF)算法的锂离子电池荷电状态(SOC)估算仿真系统。通过MATLAB脚本构建了电池的一阶RC等效电路模型(Thevenin模型),模拟了电池在动态电流工况下的运行数据,并利用EKF算法在存在电流和电压传感器噪声的情况下,实现对SOC的高精度实时跟踪与估算。
项目旨在演示如何利用控制理论中的状态观测器技术,解决BMS(电池管理系统)中无法直接测量电池内部SOC的难题,同时验证算法对初始SOC偏差的修正能力。
功能特性
- 电池建模:基于经典的一阶RC(Thevenin)等效电路模型,包含欧姆内阻、极化电阻和极化电容参数。
- 非线性OCV特性:内置6阶多项式拟合曲线,精确描述开路电压(OCV)与SOC之间的非线性关系。
- 动态工况仿真:自动生成包含脉冲放电和静置休息的动态电流工况,模拟真实电池使用场景。
- 传感器噪声模拟:在生成的仿真数据中叠加高斯白噪声,模拟电流传感器和电压传感器的测量误差。
- EKF核心算法:实现完整的扩展卡尔曼滤波迭代过程,包含雅可比矩阵计算、卡尔曼增益更新及状态协方差修正。
- 鲁棒性验证:程序特意设置了错误的初始SOC估计值(真实值95%,初始估计值80%),以验证算法的收敛速度和纠偏能力。
- 全面可视化:提供包含6个子图的综合分析图表,展示SOC跟踪效果、误差界限、端电压预测及卡尔曼增益变化。
系统要求
- MATLAB R2016a 或更高版本
- 无需额外工具箱(仅使用基础矩阵运算与绘图功能)
核心算法与实现逻辑
本项目的主程序是一个单文件脚本,其内部逻辑严格按照控制理论的仿真流程执行,主要包含以下四个阶段:
1. 模型参数初始化
程序首先定义了锂离子电池的物理参数,包括电池容量(2.0Ah)、库伦效率以及等效电路中的电阻电容参数(R0, Rp, Cp)。同时设定了离散化系统状态方程所需的系数矩阵 ($A_d$, $B_d$),将连续时间的微分方程转化为适合数字计算机处理的离散状态空间方程。
2. 生成仿真数据(真值与测量值)
为了验证算法,程序自行构建了“真实世界”的数据:
- 真实状态计算:根据预设的脉冲放电电流序列,利用状态方程迭代计算每一步真实的SOC和极化电压。
- 真实电压计算:结合当前SOC对应的OCV、极化电压和欧姆压降,计算真实的电池端电压。
- 测量噪声注入:在真实的电流和电压数据上叠加随机噪声(电流标准差0.05A,电压标准差0.01V),生成模拟传感器读取的测量数据。
3. 扩展卡尔曼滤波(EKF)迭代
这是程序的核心部分,执行“预测-校正”循环:
- 初始化:设定错误的初始状态估计值和初始误差协方差矩阵 $P$。
- 时间更新(预测步骤):
* 根据上一时刻的最佳估计值和当前电流输入,预测当前时刻的状态(SOC和极化电压)。
* 更新先验误差协方差矩阵。
*
线性化:计算观测方程的雅可比矩阵 $H$。由于OCV与SOC是非线性关系,程序通过辅助函数计算OCV曲线对SOC的导数来实现线性化。
*
计算增益:基于预测协方差和测量噪声矩阵 $R$,计算卡尔曼增益 $K$。
*
状态修正:利用实测端电压与预测电压的差值(创新值),结合卡尔曼增益修正SOC估计值。
*
协方差更新:更新后验误差协方差矩阵,用于下一次迭代。
- 边界约束:在每次迭代末尾,强制限制SOC数值在 [0, 1] 范围内,防止算法发散。
4. 辅助函数
脚本末尾包含了两个关键函数:
- OCV拟合:输入SOC,输出对应的开路电压,采用6阶多项式模型。
- OCV导数:计算OCV多项式的导数,这是EKF中构建雅可比矩阵 $H$ 的关键,直接影响滤波器的收敛性能。
使用方法
- 确保MATLAB环境已安装。
- 打开包含代码的
.m 文件。 - 点击运行(Run)。
- 程序将在控制台输出最终的 RMSE(均方根误差)以及收敛状态判定。
- 程序将弹出一个包含6个子图的窗口,分别显示:
* 真实SOC与估计SOC的对比曲线。
* SOC估算误差与 $3sigma$ 置信区间。
* 端电压的测量值、真实值与预测值对比。
* 电压预测误差。
* 仿真使用的电流工况。
* SOC卡尔曼增益的实时变化情况。