主要内容

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

Battery Capacity Estimator (Kalman Filter)

基于卡尔曼滤波器的电池容量估算器

自 R2023b 起

库:
Simscape / Battery / BMS / Estimators

描述

Battery Capacity Estimator (Kalman Filter) 模块实现了一个估算器,该估算器利用卡尔曼滤波算法计算电池的电芯容量。

请将此模块与另一个用于估算电池电荷状态 (SOC) 的模块(例如 SOC Estimator (Kalman Filter)SOC Estimator (Adaptive Kalman Filter))配合使用。

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

注意

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

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

注意

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

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

方程

为了估算电池容量,Battery Capacity Estimator (Kalman Filter) 模块从容量和 SOC 的导数方程出发:

dQdt=00=dSOCdt+i3600Q

,其中

  • SOC 是荷电状态。

  • i 是电池电芯的电流。

  • Q 表示以安培小时为单位的容量。

第一个方程是状态方程。第二个方程是输出方程。

对于卡尔曼滤波算法,Battery Capacity Estimator (Kalman Filter) 模块使用 Q 作为状态,并采用以下过程函数和观测函数:

f(Q)=0h(Q,SOC)=dSOCdt+i3600Q

扩展卡尔曼滤波器

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

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

F=fQ=0H=hQ=i3600Q2

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

Fd=1Hd=iTs3600Q2

,其中 TS 为采样时间。

有关 EKF 算法各步骤实现的更多信息,请参阅 SOC Estimator (Kalman Filter) 模块中的 Extended Kalman Filter 部分。

扩展卡尔曼-布西滤波器

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

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

有关 EKF 算法各步骤实现的更多信息,请参阅 SOC Estimator (Kalman Filter) 模块中的 Extended Kalman-Bucy Filter 部分。

无迹卡尔曼滤波器

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

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

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

有关 EKF 算法各步骤实现的更多信息,请参阅 SOC Estimator (Kalman Filter) 模块中的 Unscented Kalman Filter 部分。

无迹卡尔曼-布西滤波器

该图说明了无迹卡尔曼-布西滤波器 (UKBF) 的结构:

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

有关 EKF 算法各步骤实现的更多信息,请参阅 SOC Estimator (Kalman Filter) 模块中的 Unscented Kalman-Bucy Filter 部分。

示例

端口

输入

全部展开

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

一个或多个电芯的电荷状态,指定为标量或向量,其各元素值在 [0, 1] 范围内。该输入端口的尺寸必须与 InitialCellAH 输入端口的尺寸相同。

电池的初始电芯容量(以安时为单位),对于单个电池电芯,以标量形式指定;对于多个电池电芯,以向量形式指定。该输入端口的尺寸必须与 CellSOC 输入端口的尺寸相同。

输出

全部展开

电池的估计电芯容量(以安时为单位),以标量或向量形式返回。该输出端口的尺寸与 InitialCellAH 输入端口的尺寸相同。

参数

全部展开

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

该模块用于估计电池电芯容量的卡尔曼滤波器类型。

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

依赖关系

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

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

依赖关系

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

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

依赖关系

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

状态中噪声的协方差。

测量中噪声的协方差。

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

连续两次模块执行之间的时间。在执行期间,模块产生输出,并在需要时更新其内部状态。有关详细信息,请参阅什么是采样时间?指定采样时间

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

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

依赖关系

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

自 R2025a 起

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

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

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

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

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

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

扩展功能

全部展开

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

版本历史记录

在 R2023b 中推出

全部展开