(C语言版)扩展卡尔曼滤波器EKF的锂电池SoC计算仿真模型 容积卡尔曼滤波CKF进行锂电池SOC估计的C语言版本实现,包含定参和FFRLS两种情况,已在VS2019和Ubuntu 20.04.4版本中运行成功,根据输出文件数据在origin中绘图如图2,3所示

该代码实现了基于扩展卡尔曼滤波(EKF)和遗忘因子递归最小二乘(FFRLS)算法的电池荷电状态(SOC)估算功能,主要用于电池管理系统中对电池剩余电量的精准估计。

核心功能模块

1. 电池模型相关函数

  • OCVfromSOC函数:通过9阶多项式SOC-OCV多项式拟合公式,根据当前SOC值计算电池开路电压(OCV)。
  • dOCVfromSOC函数:计算OCV对SOC的导数,用于EKF算法中的观测矩阵更新。

2. 矩阵运算工具函数

实现了矩阵的基本运算,为EKF和FFRLS算法提供数学支持:

  • 矩阵加法(Madd)、减法(Msubstract)
  • 矩阵乘法(Mmultiple)、数乘(MxN)、数除(MdivN)
  • 矩阵转置(Mtranspose)

3. 扩展卡尔曼滤波(EKF)模块

  • EKF函数:实现SOC估算的核心算法,包括:
  • 时间更新:根据系统模型预测当前状态和协方差矩阵
  • 测量更新:利用电池端电压观测值修正预测结果,得到最优SOC估计
  • 状态矩阵和协方差矩阵的迭代更新

4. 参数辨识模块

  • FFRLS函数:采用遗忘因子递归最小二乘算法,在线辨识电池模型参数
  • xita2RC函数:将辨识得到的参数转换为电池等效电路模型中的电阻(R0、R1、R2)和电容(C1、C2)参数

5. 主程序(FFRLS+EKF)

  • 读取输入数据(SOC真实值、电流、电压)
  • 初始化EKF和FFRLS算法的参数(协方差矩阵、初始状态等)
  • 迭代执行参数辨识和SOC估算:
  • 利用FFRLS算法实时更新电池模型参数
  • 基于更新后的参数,通过EKF算法估算SOC
  • 将估算结果写入输出文件,同时计算并显示程序运行时间

算法流程

  1. 从CSV文件读取电池测试数据(SOC真实值、电流、电压)
  2. 初始化系统参数和状态变量
  3. 对于每一组数据:
    - 构建FFRLS算法的回归向量H
    - 调用FFRLS算法更新模型参数
    - 将辨识参数转换为等效电路参数(R0、R1、C1、R2、C2)
    - 更新EKF的状态转移矩阵A和输入矩阵B
    - 调用EKF算法估算当前SOC
    - 保存估算结果并更新历史数据
  4. 输出运行时间和完成信息

应用场景

该代码可应用于电池管理系统(BMS)中,通过融合电流、电压等可测量信息,实现对电池荷电状态(SOC)的精准估算,为电池充放电管理、剩余续航预测等提供关键依据。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐