双卡尔曼滤波算法的电池SOC估算

1、DEKF算法

  由于SOC无法直接测量,只能通过观测信号来估计SOC的变化。常用的电池SOC估算方法有安时积分法、开路电压法和卡尔曼滤波算法。而卡尔曼滤波算法正是利用前一时刻的状态估计值和当前时刻的输出观测值来推出当前时刻的状态估计值。该算法能够有效降低测量过程中噪声的干扰,从而提高精确度。

  安时积分法作为一种开环估计方法,在短时间内能够较好的跟踪电池SOC的变化,但由于没有校正反馈功能,误差会随着时间的累积越来越大且自身不能够获得电池SOC初始值,而SOC初始值对其估计结果影响很大。

  扩展卡尔曼滤波算法作为一种滤波算法,能够在一定程度上降低系统误差与测量误差,能够较好的通过电池电压修正估计的SOC,但其估计精度十分依赖电池模型,当电池模型参数精度较高时,估计结果较为精确且很快就能够收敛,但是当模型参数精确度不高时,估计精度会变得很差。

  针对上述问题,本文提出一种基于双卡尔曼滤波算法的电池SOC估算方法,进而获得更加稳定、准确的估计值。DEKF可用来同时估计系统的状态和参数,广泛应用于非线性系统中。非线性系统可以表示为:

锂电池SOH估计 python_初始化


  其中,x是k时刻的状态向量,u是输入向量,θ是参数向量,y和d是测量向量。

  为了方便描述,设:

锂电池SOH估计 python_锂电池SOH估计 python_02

2、DEKF算法流程

2.1、参数初始化

  其中系统状态及其误差协方差的初始化如下:

锂电池SOH估计 python_卡尔曼滤波_03


  系统参数及其误差协方差的初始化如下:

锂电池SOH估计 python_锂电池SOH估计 python_04

2.2、状态和参数的时间更新

  状态的时间更新:

锂电池SOH估计 python_卡尔曼滤波_05

x1_hat_prev = Ad(1,1)*x1_hat(k-1) + Bd(1,1)*I(k-1);
  P_prev = A_ek*P(k-1)*A_ek'+ E_ek*Q*E_ek';

  参数的时间更新如下:

锂电池SOH估计 python_卡尔曼滤波_06

theta_hat_prev = theta_hat(k-1);
  PT_prev = PT(k-1)+ E_ek*Wp*E_ek';

2.3、计算卡尔曼增益

  状态和参数的卡尔曼增益计算:

锂电池SOH估计 python_初始化_07

L = P_prev*C_ek'*inv(C_ek*P_prev*C_ek'+ F_ek*R*F_ek');
  LT = PT_prev*CT_ek(k)'*inv(CT_ek(k)*PT_prev*CT_ek(k)'+ F_ek*R*F_ek');

2.4、状态和参数的测量更新

  状态的测量更新如下:

锂电池SOH估计 python_卡尔曼滤波_08

x1_hat(k) = x1_hat_prev + L*(V(k)-V_hat(k));
  P(k) = P_prev - L*C_ek*P_prev;

  参数的测量更新如下:

锂电池SOH估计 python_卡尔曼滤波_09

theta_hat(k) = theta_hat_prev + LT*(V(k)-V_hat(k));
  PT(k) = PT_prev - LT*CT_ek(k)*PT_prev;

3、基于DEKF算法的SOC估算

  二阶RC模型的离散状态空间形式可表示为:

锂电池SOH估计 python_锂电池SOH估计 python_10


  其中,

锂电池SOH估计 python_初始化_11

4、仿真结果

锂电池SOH估计 python_锂电池SOH估计 python_12

EKF算法误差

DEKF算法误差

0.0278

0.0114

  实验结果表明:DEKF算法亦始终能够较好的跟踪SOC的变化,估计过程较为稳定,误差始终控制在2%以内且趋向收敛。