主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

SOC Estimator (Kalman Filter)

基于卡尔曼滤波器的荷电状态估计器

自 R2022b 起

库:
Simscape / Battery / BMS / Estimators

描述

SOC Estimator (Kalman Filter) 模块实现了一个估计器,该估计器通过卡尔曼滤波器算法计算电池的荷电状态 (SOC)。

SOC 是释放容量 C 可释放与额定容量 C 额定的比值。制造商会提供每块电池的额定容量值,该值代表电池的最大充电量:

SOC=CreleasableCrated.

此模块支持单精度和双精度浮点仿真。

注意

要启用继承的单精度浮点仿真,除采样时间(-1 表示继承) 参数外,所有输入和参数的数据类型必须为 single

对于连续时间仿真,将滤波器类型参数设置为扩展卡尔曼-布西滤波器无迹卡尔曼-布西滤波器

注意

此模块的连续时间实现仅适用于双精度浮点仿真。如果您提供单精度浮点参数和输入,此模块会将它们转换为双精度浮点值,以防止出现错误。

对于离散时间仿真,将滤波器类型参数设置为扩展卡尔曼滤波器无迹卡尔曼滤波器,并将采样时间(-1 表示继承) 参数设置为一个正值或 -1

方程

这些图分别显示了具有单一时间常数动态特性和双时间常数动态特性的电池的等效电路:

具有两个时常动态的等效电路方程为:

dSOCdt=i3600AHdV1dt=iC1(SOC,T)V1R1(SOC,T)C1(SOC,T)dV2dt=iC2(SOC,T)V2R2(SOC,T)C2(SOC,T)Vt=V0(SOC,T)iR0V1V2

,其中

  • SOC 是荷电状态。

  • i 是电流。

  • V 0 是空载电压。

  • V t 是端电压。

  • AH 是安时额定值。

  • R 1 是第一极化电阻。

  • C 1 是第一个并联的 RC 电容。

  • R 2 是第二个极化电阻。

  • C 2 是第二个并联的 RC 电容。

  • T 是温度。

  • V 1 是施加在第一个 RC 网络上的极化电压。

  • V 2 是施加在第二个 RC 网络上的极化电压。

第一个并联段的时间常数 τ 1 通过关系式 C1=τ1/R1. 将第一极化电阻 R 1 与第一并联 RC 电容 C 1 相联系。

第二个并联支路的时间常数 τ 2 通过关系式 C2=τ2/R2. 关联了第二个极化电阻 R 2 与第二个并联 RC 电容 C 2

对于卡尔曼滤波器算法,该模块使用此状态以及这些处理和观测函数:

x=[SOCV1]Tf(x,i)=[i3600AHiC1(SOC,T)V1R1(SOC,T)C1(SOC,T)]h(x,i)=V0(SOC,T)iR0V1

若将电荷动态特性参数设置为双时间常数动态特性,对于卡尔曼滤波器算法,此模块将采用此状态及以下过程与观测函数:

x=[SOCV1V2]Tf(x,i)=[i3600AHiC1(SOC,T)V1R1(SOC,T)C1(SOC,T)iC2(SOC,T)V2R2(SOC,T)C2(SOC,T)]h(x,i)=V0(SOC,T)iR0V1V2

扩展卡尔曼滤波器

该图展示了扩展卡尔曼滤波器 (EKF) 的结构:

EKF 技术依赖于在每个时间步进行线性化,以近似描述非线性系统。为在线实现系统线性化,算法实时计算以下雅可比矩阵:

F=fxH=hx

EKF 是一种离散时间算法。离散化后,电池开路电压估计的雅可比矩阵为:

Fd=[100eTSR1C1]Hd=[VOCSOC1]

,其中 T S 为采样时间,V OC 为开路电压。

EKF 算法包含以下阶段:

  • 初始化

    • x^(0|0) - 在时间步 0 时,基于时间步 0 的测量值对状态的估计。

    • P^(0|0) - 使用时间步 0 的测量值,表示时间步 0 的状态估计误差协方差矩阵。

  • 预测

    • 提前预测状态(基于先验信息):

      x^(k+1|k)=f(x^(k|k),i).

    • 将误差协方差向前工程:

      P^(k+1|k)=Fd(k)P^(k|k)FdT(k)+Q,

      ,其中 Q 是过程噪声的协方差。

  • 校正

    • 计算卡尔曼增益:

      K(k+1)=P^(k+1|k)HdT(k)(Hd(k)P^(k+1|k)HdT(k)+R)1,

      ,其中 R 是测量噪声的协方差。

    • 使用测量值 y(k) 更新估计值(后验):

      x^(k+1|k+1)=x^(k+1|k)+K(k+1)(Vt(k)h(x^(k|k),i)).

    • 更新误差协方差:

      P^(k+1|k+1)=(IK(k+1)Hd)P^(k+1|k).

扩展卡尔曼-布西滤波器

该图展示了扩展卡尔曼-布西滤波器 (EKBF) 的结构:

EKBF 是卡尔曼滤波器的连续时间变体。在连续时间中,预测与修正步骤是耦合的。

  • 初始化

    • x^(t0) - 时间 t 0 时的状态估计值。

    • P^(t0) - 时间 t 0 时的状态估计误差协方差矩阵。

  • Prediction-Correction EKBF algorithm

    K(t)=P(t)HT(t)R1(t)dx^(t)dt=f(x^(t),i(t))+K(t)(Vt(t)h(x^(t),i(t)))dP(t)dt=F(t)P(t)+P(t)FT(t)+Q(t)K(t)H(t)P(t)

    其中:

    F(t)=fxH(t)=hx

无迹卡尔曼滤波器

该图展示了无迹卡尔曼滤波器 (UKF) 的结构:

扩展卡尔曼滤波器通过仅使用泰勒展开式的第一项,利用泰勒展开式获得的线性方程对非线性函数进行局部逼近。在高度非线性系统中,这些解的准确性并不高。

UKF 对一组由算法确定性选择的西格玛点集进行非线性变换。该技术被称为无迹变换。变换后点的均值与协方差矩阵精确至泰勒级数展开的二阶项。

UKF 算法遵循以下步骤:

  • 初始化

    • x^(0|0) - 在时间步 0 时,基于时间步 0 的测量值对状态的估计。

    • P^(0|0) - 使用时间步 0 的测量值,表示时间步 0 的状态估计误差协方差矩阵。

  • 生成 sigma 点,并计算每个点的均值权重和协方差权重。

    • 选择 sigma 点 x(i)(k|k)

      x(i)(k|k)={x^(k+1|k)i=1x^(k+1|k)+((n+λ)P(k|k))ii=2,,n+1x^(k+1|k)((n+λ)P(k|k))ii=n+2,,2n+1Wm(i)={λn+λi=112(n+λ)i1Wc(i)={λn+λ+(1α2+β)i=112(n+λ)i1

      ,其中:

      • n 是状态向量 x 的维度。

      • λ=α2(n+κ)n,α[0,1] 描述了 sigma 点与均值点之间的距离。在正态分布中,β = 2 和 κ = 0。

      • ((n+λ)P)icP 的第 i 行或列。此模块采用数值高效且稳定的方法(如 Cholesky 分解)计算矩阵平方根。

  • 对系统状态矩阵

    x^(i)(k+1|k)=f(x^(i)(k|k),i(k))x^(k+1|k)=i=12n+1Wm(i)x^(i)(k+1|k)

    进行首次估计:

  • 对状态变量的协方差矩阵进行首次估计:

    P(k+1|k)=i=12n+1Wc(i)(x^(i)(k+1|k)x^(k+1|k))(x^(i)(k+1|k)x^(k+1|k))T+Q

  • 估计测量变量:

    Vt(i)(k+1|k)=h(x^(i)(k+1|k),i(k))V^t(k+1|k)=i=12n+1Wm(i)V^t(i)(k+1|k)

  • 估计测量值的协方差 (Py) 以及测量值与状态之间的协方差 (Pxy):

    Py=i=12n+1Wc(i)(V^t(i)(k+1|k)V^t(k+1|k))(V^t(i)(k+1|k)V^t(k+1|k))T+RPxy=i=12n+1(x^(i)(k+1|k)x^(k+1|k))(V^t(i)(k+1|k)V^t(k+1|k))T

  • 计算卡尔曼滤波器增益:

    K(k+1)=PxyPy1

  • 执行状态矩阵和状态变量协方差的第二次更新:

    x^(k+1|k+1)=x^(k+1|k)+K(k+1)(Vt(k+1)V^t(k+1|k))P(k+1|k+1)=P(k+1|k)K(k+1)PyKT(k+1)

无迹卡尔曼-布西滤波器

该图展示了无迹卡尔曼-布西滤波器 (UKBF) 的整体结构:

UKBF 推导出的连续时间滤波方程与 EKBF 方程相似。

由于 UKF 在西格玛点中使用矩阵平方根,该算法通过将滤波器表述为西格玛点的微分方程,从而获得 UKBF 的平方根版本。平方根 UKBF 的方程为:

K(t)=X(t)WhT(X(t),t)R1(t)M(t)=A1(t)[X(t)WfT(X(t),t)+f(X(t),t)WXT(t)+Q(t)K(t)R(t)KT(t)]AT(t)dXi(t)dt=f(X(t),t)wm+K(t)(Vt(t)h(X(t),t)wm)+c[0A(t)Φ(M(t))A(t)Φ(M(t))]i

,其中

  • X(t)=[m(t)m(t)]+c[0A(t)A(t)] 是 sigma 点矩阵。

  • Φij(M(t))={Mij(t),i>j0.5Mij(t),i=j0,i<j 是一个函数,它返回参量的下对角线部分。

  • wm=[Wm(1)Wm(2n+1)]T

  • W=(1[wmwm])diag(Wc(1)Wc(2n+1))(I[wmwm])T

  • c=α2(n+κ)

  • [0A(t)Φ(M(t))A(t)Φ(M(t))]i 是参量矩阵的第 i 列。

示例

端口

输入

全部展开

电池电流(以安培为单位),指定为标量(对于单个电芯)或向量(对于多个电芯)。要将此输入指定为电芯电流向量,请选择指定电流输入作为电芯电流参数。

电芯电压,以伏特为单位,对于单个电芯指定为标量,对于多个电芯指定为向量。此输入端口的大小必须与 CellTemperatureInitialSOC 输入端口的大小相等。

电芯温度,以标量形式表示单个电芯,以向量形式表示多个电芯。此输入端口的大小必须等于 CellVoltageInitialSOC 输入端口的大小。

初始荷电状态,指定为范围为 [0, 1] 的标量或向量。此输入端口的大小必须等于 CellVoltageCellTemperature 输入端口的大小。

输出

全部展开

电池的荷电状态,以标量或向量形式返回。该输出端口的尺寸等于 CellVoltageCellTemperatureInitialSOC 输入端口的尺寸。

参数

全部展开

自 R2023b 起

以电芯电流向量的形式指定电流输入端口值的选项。如果选择此参数,电流输入端口的值可以是标量或向量,其大小与模块输入的大小相等。

此模块用于估计电池荷电状态的卡尔曼滤波器类型。

控制西格玛点扩散的系数。该模块在实现无迹卡尔曼滤波器和无迹卡尔曼-布西滤波器的方程时使用此参数。

依赖关系

要启用此参数,请将滤波器类型设置为无迹卡尔曼滤波器无迹卡尔曼-布西滤波器

与分布相关的系数。此模块在其实现的无迹卡尔曼滤波器及无迹卡尔曼-布西滤波器中使用此参数。

依赖关系

要启用此参数,请将滤波器类型设置为无迹卡尔曼滤波器无迹卡尔曼-布西滤波器

控制西格玛点扩散的系数。该模块在实现无迹卡尔曼滤波器和无迹卡尔曼-布西滤波器的方程时使用此参数。

依赖关系

要启用此参数,请将滤波器类型设置为无迹卡尔曼滤波器无迹卡尔曼-布西滤波器

2×2 状态中噪声的协方差矩阵。

测量中噪声的协方差。

初始状态误差的 2×2 协方差矩阵。该参数定义了状态初始化过程中的偏差。

连续模块执行之间的时间。在执行过程中,模块会产生输出,并酌情更新其内部状态。有关详细信息,请参阅什么是采样时间?指定采样时间

对于继承的离散时间运行,请将此参数指定为 -1。对于离散时间操作,请将该参数指定为正整数。对于连续时间运行,将该参数指定为 0

如果此模块位于支持在连续操作和离散操作之间切换的封装子系统或变体子系统中,则提升采样时间参数。提升采样时间参数可确保在模块的连续实现和离散实现之间正确切换。有关详细信息,请参阅Promote Block Parameters to a Mask

依赖关系

要启用此参数,请将滤波器类型设置为扩展卡尔曼滤波器无迹卡尔曼滤波器

系统模型

自 R2024a 起

电池充电动态建模选项。该参数决定等效电路中并联 RC 节段的数量:

  • 单时间常数动态特性 - 等效电路包含一个并联的 RC 电路段。使用第一极化电阻,R1(SOC,T),(ohm)第一时间常数,tau1(SOC,T),(s) 参数指定极化电阻和时间常数。

  • 双时间常数动态特性 - 等效电路包含两个并联的 RC 分路。使用第一极化电阻,R1(SOC,T),(ohm)第一时间常数,tau1(SOC,T),(s)第二极化电阻,R2(SOC,T),(ohm)第二时间常数,tau2(SOC,T),(s) 参数指定极化电阻和时间常数。

荷电状态断点向量,用于定义指定查找数据的点位。该向量的元素必须严格按升序排列。此模块根据电芯容量,AH (A*Hr) 参数中指定的电池标称容量计算荷电状态值。SOC 是可用电池电量 q battery 与标称电池容量 q nom(T,n) 之比。在建模全新电池时(循环次数 N 为 1 且 δAH(n = 1, Tfade) 为 0),必须确保对于每个温度值,SOC 值为 1 时对应的电池电量容量与电芯容量,AH (A*Hr) 参数的对应元素一致。

SOC=qbatteryqnom(T,n)forN=1andδAH(n,Tfade)=0,qnom(T,n)=AH.

温度断点向量,用于定义您指定查找数据的点。该向量必须严格递增且大于 0 K。此参数的物理单位必须与 CellTemperature 输入端口的物理单位一致。

在指定 SOC 和温度临界点下,查询电池串联电阻的数据。

在指定电量状态 (SOC) 和温度临界点下,查阅首个并联 RC 电阻的欧姆值数据。该矩阵的行数等于荷电状态值向量,SOC (-) 参数的大小。该矩阵的列数等于温度向量,T 参数的大小。

在指定 SOC 和温度断点处,以秒为单位查询首个并联 RC 电路时间常数的对应数据。该矩阵的行数等于荷电状态值向量,SOC (-) 参数的大小。该矩阵的列数等于温度向量,T 参数的大小。

自 R2024a 起

在指定 SOC 和温度临界点下,查阅第二个并联 RC 电阻的欧姆数值。该矩阵的行数等于荷电状态值向量,SOC (-) 参数的大小。该矩阵的列数等于温度向量,T 参数的大小。

依赖关系

要启用此参数,请将电荷动态特性设置为双时间常数动态特性

自 R2024a 起

在指定 SOC 和温度断点处,查询第二并联 RC 电路时间常数的对应数据(单位:秒)。该矩阵的行数等于荷电状态值向量,SOC (-) 参数的大小。该矩阵的列数等于温度向量,T 参数的大小。

依赖关系

要启用此参数,请将电荷动态特性设置为双时间常数动态特性

在指定 SOC 状态下,查阅基本电池模型两端开路电压的电压值数据。该矩阵的行数等于荷电状态值向量,SOC (-) 参数的大小。该矩阵的列数等于温度向量,T 参数的大小。

电芯的容量,单位为安培小时。该模块通过将累积电荷除以该值来计算荷电状态。该模块通过积分电池电流来计算累积电荷。

信号属性

自 R2025a 起

选择模块算法的数据类型的选项,指定为以下值之一:

  • 继承: 自动 - 您可以采用 singledouble 两种精度仿真模块。您必须以 singledouble 的形式明确提供输入和参数。

  • double - 模块算法将所有输入和参数转换为 double 数据类型。

  • single - 模块算法将所有输入和参数转换为 single 数据类型。

  • <数据类型表达式> - 模块算法将所有输入和参数转换为您指定的数据类型对象。

点击显示数据类型助手按钮 以显示数据类型助手,它可以帮助您设置数据类型属性。有关详细信息,请参阅使用数据类型助手指定数据类型控制信号的数据类型

参考

[1] Grewal, Mohinder S., and Angus P. Andrews. Kalman Filtering: Theory and Practice Using MATLAB. New York: Wiley Intersci., 2001.

[2] Van der Merwe, R., and E. A. Wan, The Square-Root Unscented Kalman Filter for State and Parameter-Estimation. 2001 IEEE International Conference on Acoustics, Speech, and Signal Processing. Proceedings (Cat. No.01CH37221), vol. 6, IEEE, 2001, pp. 3461–64.

[3] Sarkka, Simo On Unscented Kalman Filtering for State Estimation of Continuous-Time Nonlinear Systems. IEEE Transactions on Automatic Control, vol. 52, no. 9, pp. 1631-1641, Sept. 2007, doi: 10.1109/TAC.2007.904453.

[4] Huria, Tarun, et al. Simplified Extended Kalman Filter Observer for SOC Estimation of Commercial Power-Oriented LFP Lithium Battery Cells.2013, pp. 2013-01–1544.

扩展功能

全部展开

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2022b 中推出

全部展开