本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:双扩展卡尔曼滤波(DEKF)是一种适用于非线性系统的先进状态估计算法,在电池管理系统中被用于联合估计电池的荷电状态(SOC)和健康状态(SOH)。SOC反映电池剩余电量,SOH表征电池性能退化程度,二者相互影响且对电池安全与寿命预测至关重要。DEKF通过泰勒展开近似线性化非线性模型,结合物理模型(如等效电路模型)与数据驱动方法,实现对SOC和SOH的高精度动态估计。本仿真项目涵盖电池建模、状态方程与观测方程构建、参数初始化、预测更新流程及结果分析,全面展示DEKF在电池状态联合估计中的应用过程与优化效果。

双扩展卡尔曼滤波(DEKF)在电池状态联合估计中的深度实践与工程落地

你有没有遇到过这种情况:明明给电动车充了一整晚的电,早上出发时仪表盘却显示“续航仅剩60%”?或者某天突然发现充电速度变慢、动力响应迟钝——这背后很可能不是故障,而是电池“老了”。而这一切的核心问题,是如何精准感知电池的两个灵魂指标: 现在还有多少电(SOC) 这块电池还剩几分青春(SOH)

传统的做法是靠经验公式或简单查表法来估算,但锂离子电池可不是个线性元件啊!它的电压-电量关系像一条蜿蜒山路,内阻随老化悄悄爬升,温度一变整个行为模式都可能翻转……这时候,如果算法不能自适应地“读懂”电池的语言,结果就会越来越离谱。

那么,有没有一种方法,既能实时跟踪当前电量,又能同步捕捉电池的老化脉搏呢?

答案是:有。而且它已经在高端BMS中悄然服役多年——这就是我们今天要深挖的主角: 双扩展卡尔曼滤波(Dual Extended Kalman Filter, DEKF)


从理论到实战:为什么需要“双”滤波器?

想象一下你要同时追踪两个人:一个短跑运动员和一位徒步旅行者。前者每秒都在变速冲刺,后者几天才挪动几公里。如果你用同一个望远镜去观察他们,要么看不清运动员的动作细节,要么错过旅行者的路径变化。

这正是传统单EKF在电池估计中的困境:把SOC(快变量)和模型参数如内阻R₀、容量Qₙ(慢变量)拼在一起做增广状态估计,相当于让它们共享同一套协方差矩阵。问题是,SOC的变化尺度可能是0.01/秒,而R₀可能几个月才增加5mΩ。这种量级差异会导致数值不稳定、滤波发散,甚至出现“虚假修正”。

于是,聪明的研究者提出了 解耦策略 ——用两个独立的EKF并行工作:

  • 主EKF :专注估计 快速变化的状态量 ,比如SOC;
  • 辅EKF :专门辨识 缓慢演化的模型参数 ,比如R₀、R₁、C₁等;
  • 两者通过 信息交互接口 实现闭环反馈:主EKF为辅EKF提供残差输入,辅EKF将更新后的参数反哺给主EKF优化模型。

数学上,这个过程是在贝叶斯框架下递推计算联合后验概率密度:
$$
p(\mathbf{x} k, \boldsymbol{\theta}_k | \mathcal{Z} {1:k}) \propto p(\mathbf{z} k | \mathbf{x}_k, \boldsymbol{\theta}_k) \int p(\mathbf{x}_k | \mathbf{x} {k-1}, \boldsymbol{\theta} {k-1}) p(\boldsymbol{\theta}_k | \boldsymbol{\theta} {k-1}) p(\mathbf{x} {k-1}, \boldsymbol{\theta} {k-1} | \mathcal{Z} {1:k-1}) d\mathbf{x} {k-1}d\boldsymbol{\theta} {k-1}
$$
其中 $\mathbf{x}_k$ 是状态向量(如SOC),$\boldsymbol{\theta}_k$ 是时变参数(如内阻、极化时间常数),$\mathcal{Z}
{1:k}$ 表示截至第$k$步的所有观测数据。

别被公式吓到 😅,其实它的本质很简单: 一边猜我现在有多少电,一边偷偷学习这块电池最近是不是变得更“虚弱”了

下面是简化版的MATLAB风格伪代码,看看它是怎么跑起来的:

for k = 1:N
    % 状态EKF:估计SOC
    [x_state_pred, P_state_pred] = state_prediction(x_state_prev, P_state_prev, theta_param);
    [x_state_upd, P_state_upd] = state_update(z_k, x_state_pred, P_state_pred, theta_param);

    % 参数EKF:辨识反映SOH的参数
    [theta_pred, P_theta_pred] = param_prediction(theta_prev, P_param_prev);
    [theta_upd, P_param_upd] = param_update(z_k, x_state_upd, theta_pred, P_theta_pred);

    % 信息交互更新
    x_state_prev = x_state_upd;
    theta_param = theta_upd;  % 将更新后的参数反馈给状态滤波器
end

看到了吗?两个滤波器交替执行,形成一个闭环系统。这种设计不仅提升了数值稳定性,更重要的是支持了 多时间尺度建模 ——快的归快的,慢的归慢的,各司其职,协同进化 🔄。


构建你的电池“数字孪生”:基于RC模型的SOC估算

要让DEKF发挥作用,首先得有个靠谱的电池模型。毕竟,再好的滤波器也救不了一个错误的前提假设。

选择合适的等效电路结构

我们不可能把每一粒正极材料都建模进去,但也不能太粗糙。最常用的折中方案就是 Thevenin一阶RC等效电路模型 ,因为它既保留了关键动态特性,又足够简洁可用于在线估计。

来看这张经典的图示:

graph LR
    A[电压源 Uoc(SOC)] --> B
    C[串联电阻 R0] --> D
    E[RC并联回路: R1 || C1] --> D
    D --> F[输出端电压 Ut]
    subgraph "Thevenin 等效电路"
        A
        C
        E
        D((Ut = Uoc - I*R0 - Ur1))
    end

这里面每个元件都有明确物理意义:

  • Uoc(SOC) :开路电压,取决于当前荷电状态,是非线性的;
  • R₀ :欧姆内阻,代表电子传输路径上的瞬时压降;
  • R₁||C₁ :极化支路,模拟电极表面双电层效应引起的暂态响应;
  • I :负载电流(通常放电为正);
  • Ut :实际测得的端电压。

相比零阶模型(只有R₀),一阶RC能很好地拟合充放电切换瞬间的电压弛豫现象。实验表明,在FUDS城市驾驶循环下,其电压预测误差RMSE可控制在5mV以内 ✅。

虽然更高阶模型(如二阶或三阶RC)精度更高,但会带来参数冗余、辨识困难、计算负担重等问题。所以综合考虑, 一阶RC模型是目前工业界最受欢迎的选择之一

⚠️ 小贴士:如果你的应用场景对精度要求极高(如航空航天),可以考虑二阶模型;但在车载BMS中,往往更看重实时性和鲁棒性。


建立离散状态空间表达式

为了让这个模拟世界能在数字芯片里运行,必须把它转换成离散形式。

定义状态向量:
$$
\mathbf{x} k =
\begin{bmatrix}
z_k \
U
{r1,k}
\end{bmatrix}
=
\begin{bmatrix}
\text{SOC}_k \
\text{极化电压}
\end{bmatrix}
$$

根据电化学原理:

  1. SOC的变化由安时积分决定:
    $$
    z_k = z_{k-1} - \frac{\Delta t}{3600 \cdot Q_n} I_k
    $$
    (若单位用A·s则无需除以3600)

  2. 极化电压满足一阶微分方程:
    $$
    \frac{dU_{r1}}{dt} = -\frac{1}{R_1 C_1} U_{r1} + \frac{1}{C_1} I
    $$

离散化解得:
$$
U_{r1,k} = \alpha U_{r1,k-1} + \beta I_k
$$
其中 $\alpha = e^{-\Delta t / (R_1 C_1)}$, $\beta = R_1(1 - \alpha)$。

最终得到完整的状态转移方程:
$$
\mathbf{x} k =
\begin{bmatrix}
1 & 0 \
0 & \alpha
\end{bmatrix}
\mathbf{x}
{k-1} +
\begin{bmatrix}
-\frac{\Delta t}{3600 Q_n} \
\beta
\end{bmatrix}
I_k
+ \mathbf{w} {k-1}
$$
其中 $\mathbf{w}
{k-1} \sim \mathcal{N}(0, \mathbf{Q})$ 是过程噪声,用来表征模型不确定性。

观测方程则是:
$$
y_k = U_{t,k} = U_{oc}(z_k) - R_0 I_k - U_{r1,k} + v_k
$$
注意这里的 $U_{oc}(z_k)$ 是非线性的!这正是引入EKF的关键原因—— 允许我们在非线性系统中进行局部线性化处理

下面是一段典型的MATLAB函数实现:

function [x_next, y] = battery_model(x_prev, I, params, dt)
    % 参数提取
    Qn = params.Qn;
    R0 = params.R0;
    R1 = params.R1;
    C1 = params.C1;
    tau = R1 * C1;
    alpha = exp(-dt / tau);
    beta  = R1 * (1 - alpha);

    % 状态更新
    z_prev = x_prev(1);
    Ur1_prev = x_prev(2);

    z_next = z_prev - (dt / 3600 / Qn) * I;
    Ur1_next = alpha * Ur1_prev + beta * I;

    x_next = [z_next; Ur1_next];

    % 输出计算
    Uoc = OCV_SOC_lookup(z_next);  % 查表或拟合函数
    y = Uoc - R0*I - Ur1_next;
end
逐行解读一下:
  1. Qn = params.Qn; —— 提取标称容量(Ah);
  2. tau = R1 * C1; —— 计算RC回路的时间常数;
  3. alpha = exp(-dt / tau); —— 指数衰减因子,决定了极化电压的记忆长度;
  4. beta = R1 * (1 - alpha); —— 极化电压对电流的增益项;
  5. z_next = ... —— 安时积分更新SOC,负号表示放电使SOC下降;
  6. Ur1_next = ... —— 极化电压按一阶系统规律演化;
  7. Uoc = OCV_SOC_lookup(...) —— 调用预标定的OCV-SOC查表函数(见下文);
  8. y = Uoc - R0*I - Ur1_next; —— 根据基尔霍夫电压定律计算端电压。

这个模型已经完全适配EKF框架,可以在每个时间步完成预测与更新。关键是,所有参数都可以随着SOH变化动态调整,从而实现老化补偿!


非线性难题破解:如何准确建模OCV-SOC关系?

OCV-SOC曲线的本质是什么?

开路电压(OCV)是电池静置无电流时的电动势,它与SOC之间存在一一对应的热力学平衡关系。这条曲线就像电池的“指纹”,不同材料体系(LFP、NMC、LTO)形状各异。

典型数据如下:

SOC (%) 0 10 20 40 60 80 90 100
OCV (V) 3.0 3.2 3.4 3.55 3.65 3.75 3.85 4.2

整体呈“S”形,尤其在中间区域斜率平缓,两端陡峭。这意味着同样的电压误差,在SOC=50%附近可能导致±10%的估计偏差,而在10%或90%区间的误差反而较小。

那怎么把这个映射关系写进程序里呢?常见方法对比:

方法 特点
多项式拟合 形式简单,但外推不稳定,容易振荡 ❌
分段线性插值 实现快,内存占用大,精度有限 ❌
三次样条插值 平滑、高精度、支持任意分辨率查询 ✅ 推荐!
神经网络拟合 黑箱模型,训练成本高,适合多变量融合 🔮 未来方向

实践中, 三次样条插值是最优折中方案 。MATLAB实现非常简洁:

soc_data = [0, 10, 20, 40, 60, 80, 90, 100]/100;
ocv_data = [3.0, 3.2, 3.4, 3.55, 3.65, 3.75, 3.85, 4.2];
pp = spline(soc_data, ocv_data);  % 生成样条结构
Uoc = ppval(pp, z_k);             % 在任意z_k处求值

这样就能实现任意精度的SOC输入,避免量化误差,非常适合在线调用。


温度影响不可忽视!

上面的OCV-SOC关系通常是在标准温度(25°C)下标定的。但现实使用中,环境温度可能从-20°C到60°C波动,显著改变电极反应的平衡电位。

实验证明,每升高10°C,OCV整体偏移约1–3 mV,低SOC区域尤其敏感。

解决方案:引入温度修正项!

构建广义OCV模型:
$$
U_{oc}(z, T) = U_{oc}^{ref}(z) + \gamma(T - T_{ref})
$$
其中 $\gamma$ 是温度灵敏度系数(单位:V/°C),可通过多温区实验辨识获得。例如某NMC电池的 $\gamma \approx -0.5 \times 10^{-3}$ V/°C。

改进后的观测方程变为:
$$
y_k = U_{oc}(z_k, T_k) - R_0 I_k - U_{r1,k} + v_k
$$

也就是说,每次迭代都要读取当前温度传感器数据 $T_k$,动态调整 $U_{oc}$ 值。这种补偿机制可以使极端温度下的SOC估计误差减少30%以上 💪。


传感器噪声该怎么处理?

真实系统中,电压、电流、温度传感器都不是理想的:

传感器 量程 精度 噪声分布 采样频率
电压表 0–5 V ±10 mV 高斯白噪声 1 Hz
电流表 ±300 A ±0.5% FS 白噪声+偏移漂移 1 Hz
温度计 -40~85°C ±1°C 缓慢漂移+突跳 0.1 Hz

我们假设测量噪声 $v_k \sim \mathcal{N}(0, R)$,其中 $R = \sigma_v^2$ 可通过空载静置实验估计。比如在恒温静置条件下采集1000组电压数据,计算方差作为 $R$ 的初值。

但也得防着点异常情况:

  • 电流零漂(zero-drift) :长期使用导致零点漂移,表现为虚假SOC变化;
  • 电压尖峰 :接触不良或EMI引起瞬态脉冲;
  • 温度滞后 :热惯性导致响应延迟。

应对措施包括:

  • 中值滤波或滑动平均预处理;
  • 设置阈值检测机制剔除野值;
  • 对电流信号去趋势处理(detrending)消除缓慢漂移。

这些虽不直接参与EKF运算,却是保障稳定性的前置条件:

flowchart TD
    A[原始电压信号] --> B{是否存在异常值?}
    B -->|是| C[中值滤波替换]
    B -->|否| D[保留原值]
    D --> E[送入EKF观测更新]
    C --> E

这套流程能有效防止残差过大引发滤波发散。


EKF实战四步走:从预测到更新全解析

现在终于到了动手环节!让我们一步步拆解EKF的具体实现。

第一步:状态预测(Time Update)

基于上一时刻的最优估计 $(\hat{\mathbf{x}} {k-1|k-1}, \mathbf{P} {k-1|k-1})$ 进行先验预测:

$$
\hat{\mathbf{x}} {k|k-1} = f(\hat{\mathbf{x}} {k-1|k-1}, I_k)
$$
$$
\mathbf{P} {k|k-1} = \mathbf{F} {k-1} \mathbf{P} {k-1|k-1} \mathbf{F} {k-1}^T + \mathbf{Q}
$$

其中雅可比矩阵 $\mathbf{F}_{k-1}$ 是状态转移函数关于状态的偏导:

$$
\mathbf{F} {k-1} = \left. \frac{\partial f}{\partial \mathbf{x}} \right| {\hat{\mathbf{x}}_{k-1|k-1}} =
\begin{bmatrix}
1 & 0 \
0 & \alpha
\end{bmatrix}
$$

由于状态方程中两个变量几乎解耦,雅可比是对角阵,有利于数值稳定性。

过程噪声协方差设为:
$$
\mathbf{Q} =
\begin{bmatrix}
q_z & 0 \
0 & q_{ur}
\end{bmatrix}
$$
一般取 $q_z \in [10^{-6}, 10^{-5}]$,$q_{ur}$ 表示极化电压建模误差。


第二步:观测更新(Measurement Update)

利用实际测量电压 $y_k$ 来修正预测结果。

先算观测预测:
$$
\hat{y} k = h(\hat{\mathbf{x}} {k|k-1}) = U_{oc}(\hat{z} k) - R_0 I_k - \hat{U} {r1,k}
$$

再计算观测函数的雅可比矩阵:
$$
\mathbf{H} k = \left. \frac{\partial h}{\partial \mathbf{x}} \right| {\hat{\mathbf{x}} {k|k-1}} =
\begin{bmatrix}
\frac{dU
{oc}}{dz}\big|_{\hat{z}_k} & -1
\end{bmatrix}
$$

这里 $\frac{dU_{oc}}{dz}$ 可通过 fnder(pp) 快速获取样条导数。⚠️ 注意当该值接近0(如SOC≈0.5平坦区),会导致可观测性退化,滤波器难以纠正误差。

然后计算卡尔曼增益:
$$
\mathbf{K} k = \mathbf{P} {k|k-1} \mathbf{H} k^T (\mathbf{H}_k \mathbf{P} {k|k-1} \mathbf{H}_k^T + R)^{-1}
$$

最后更新状态与协方差:
$$
\hat{\mathbf{x}} {k|k} = \hat{\mathbf{x}} {k|k-1} + \mathbf{K} k (y_k - \hat{y}_k)
$$
$$
\mathbf{P}
{k|k} = (\mathbf{I} - \mathbf{K} k \mathbf{H}_k) \mathbf{P} {k|k-1}
$$


第三步:残差反馈与自适应调整

残差 $r_k = y_k - \hat{y} k$ 是衡量模型匹配程度的关键指标。理想情况下应服从均值为0、方差为 $\mathbf{H}_k \mathbf{P} {k|k-1} \mathbf{H}_k^T + R$ 的高斯分布。

为了增强鲁棒性,可以引入 自适应协方差调整机制 ,动态更新 $R$ 或 $\mathbf{Q}$。一种常见做法是基于新息序列的统计检验:

residual = y_measured - y_predicted;
innovation_cov = H*P_pred*H' + R;
normalized_innovation = residual^2 / innovation_cov;

if normalized_innovation > chi2inv(0.95,1)
    R = R * 1.1;  % 增加测量噪声方差,降低信任度
else
    R = max(R * 0.99, 1e-6);  % 缓慢恢复
end

这招在传感器故障或剧烈工况突变时特别有用,能防止过调导致发散。


第四步:初始值敏感性怎么办?

EKF是递推算法,性能强烈依赖初始设置。若初始SOC设错,可能会导致长达1–2小时的震荡收敛期。

比如真实SOC为0.8,误设为0.5,在平坦区(dUoc/dz ≈ 0)缺乏足够观测信息,会出现“锁定”现象。

解决策略:

  • 利用静置电压反查OCV表粗略估计初始SOC;
  • 结合开路电压与温度查表法提供可靠初值;
  • 启动阶段启用高增益滤波或多模型切换。

初始协方差建议设置:

参数 推荐初值
$P_{z,0}$ $(0.1)^2$ (对应±10% SOC误差)
$P_{ur,0}$ $(0.05)^2$ (对应±50 mV极化电压误差)

太小会“自信过度”,太大则初期震荡。调参口诀:

  1. 固定 $\mathbf{Q}, R$,观察残差是否白化;
  2. 若持续偏移 → 增大 $\mathbf{Q}$;
  3. 若响应迟钝 → 减小 $R$;
  4. 全工况测试验证。

目标达成 ✅:
- RMSE < 2%
- 最大误差 < 5%
- 收敛时间 < 30分钟


SOH估计的艺术:从参数辨识到健康度映射

如果说SOC是“此刻的生命体征”,那SOH就是“生命的倒计时”。我们无法直接测量它,只能通过间接方式推断。

SOH的多维视角

常见的SOH表征方式包括:

  • 容量衰减率 :$\text{SOH} C = \frac{Q {\text{current}}}{Q_{\text{nominal}}}$
  • 内阻增长比 :$\text{SOH}_R = 1 - \frac{R_0^{\text{current}} - R_0^{\text{initial}}}{R_0^{\text{EoL}} - R_0^{\text{initial}}}$

它们分别反映储能能力和输能效率,互为补充。

典型老化趋势如下:

循环次数 容量保持率 内阻增长率
0 100% 0%
500 92% 36%
1000 82% 92%
1500 74% 148%

可见容量线性下降,而内阻呈非线性加速上升。因此联合使用更全面。

老化路径可视化:

graph TD
    A[新电池: SOH≈100%] --> B{老化类型}
    B --> C[日历老化]
    B --> D[循环老化]
    C --> E[SEI膜缓慢增厚 → 内阻渐增]
    D --> F[活性物质脱落 → 容量衰减加快]
    E --> G[早期: 内阻↑为主, 容量↓平缓]
    F --> H[中后期: 容量↓加速, 内阻↑显著]
    G --> I[SOH综合评估值下降]
    H --> I
    I --> J[EoL判定: SOH<80% 或 R_increase > 100%]

参数辨识子滤波器设计

在DEKF中,第二个EKF专门用于估计缓慢变化的参数,如 $[R_0, R_1, C_1]^T$。

其输入是主EKF的电压残差,输出是更新后的参数,并反馈回主模型。

闭环结构如下:

graph LR
    A[SOC-EKF 输出电压残差 e_k] --> B[构建观测方程 h(θ)]
    B --> C[第二EKF: 参数预测 θ̂ₖ|ₖ₋₁]
    C --> D[雅可比矩阵 ∂h/∂θ 计算]
    D --> E[协方差 P 更新]
    E --> F[参数校正 θ̂ₖ|ₖ]
    F --> G[反馈至SOC模型更新 R₀,R₁,C₁]
    G --> A

关键在于“多时间尺度”处理:参数更新频率远低于状态估计,避免高频噪声干扰。


雅可比矩阵怎么求?

观测函数:
$$
V_k = OCV(\text{SOC} k) - R_0 I_k - V {\text{polar},k}
$$
其中极化电压满足:
$$
V_{\text{polar},k} = V_{\text{polar},k-1} e^{-\Delta t / (R_1 C_1)} + R_1 I_k \left(1 - e^{-\Delta t / (R_1 C_1)}\right)
$$

对 $R_0, R_1, C_1$ 求偏导需用链式法则。MATLAB实现如下:

function H = compute_jacobian(theta, dt, Ik, Vpol_prev)
    R0 = theta(1); R1 = theta(2); C1 = theta(3);
    tau = R1 * C1;
    alpha = exp(-dt / tau);
    beta = 1 - alpha;

    Vpol = Vpol_prev * alpha + R1 * Ik * beta;

    dV_dR0 = -Ik;

    dalpha_dR1 = (dt / (R1^2 * C1)) * alpha;
    dbeta_dR1 = -dalpha_dR1;
    dV_dR1 = - (Vpol_prev * dalpha_dR1 + Ik * (beta + R1 * dbeta_dR1));

    dalpha_dC1 = (dt / (R1 * C1^2)) * alpha;
    dbeta_dC1 = -dalpha_dC1;
    dV_dC1 = - Vpol_prev * dalpha_dC1;

    H = [dV_dR0, dV_dR1, dV_dC1];
end

解析求导比数值微分更精确,推荐使用。


打破耦合陷阱:SOC与SOH的双向影响与对策

很多人忽略了这一点: SOC估计不准会影响SOH估计,反过来SOH不准也会误导SOC!

SOH变化导致OCV曲线下移

老化后同一SOC下的OCV普遍偏低,可达5–10mV。如果不修正,EKF会误判为SOC下降,造成系统性偏差。

建模方式:
$$
\Delta V_{\text{ocv}} = a(1 - e^{-b N}) \cdot \text{shape}(SOC)
$$
其中 $N$ 是循环次数,shape(SOC) 表示不同区间的不均匀退化。

可在软件中动态修正OCV查找表,避免阶梯状跳变。


SOC误差反向干扰参数辨识

一旦SOC估计出错,OCV查找就偏了,进而导致电压残差异常增大。此时参数EKF可能误以为是R₀突增,从而错误更新参数,进一步恶化模型——形成恶性循环!

流程图揭示真相:

graph TD
    A[SOC Estimation Error δSOC] --> B[Incorrect OCV Lookup]
    B --> C[Biased Model Voltage Prediction]
    C --> D[Large Observation Residual in Parameter EKF]
    D --> E[Misinterpreted as Parameter Change]
    E --> F[Wrong R0/R1/C1 Update]
    F --> G[Worsened Voltage Model Accuracy]
    G --> A
    style A fill:#f9f,stroke:#333
    style F fill:#fdd,stroke:#333

解决方案:

  • 设定参数更新阈值,抑制突变;
  • 引入交叉验证机制;
  • 使用滑动窗平均平滑输出。

工程落地:从Simulink仿真到嵌入式部署

MATLAB/Simulink平台搭建

使用Subsystem封装SOC-EKF和SOH-EKF模块,提升复用性。

通过 From Workspace 导入实测数据, To Workspace 导出结果分析。

主控脚本示例:

model_name = 'DEKF_Battery_Estimation';
load('experimental_data.mat');
simOut = sim(model_name, [0 max(time)]);
SOC_est = simOut.get('SOC_Estimator').signals.values;
SOH_est = simOut.get('SOH_Estimator').signals.values;

支持多种工况切换(FUDS、DST等),便于测试。


数据预处理技巧

  • 小波去噪 + 样条插值提升信噪比;
  • 多源数据对齐(timetable + synchronize);
  • 归一化处理消除量纲差异。

性能评估指标

工况 RMSE_SOC (%) MAE_SOC (%) RMSE_SOH (%) 收敛时间(s)
新电池 0.82 0.61 1.34 120
中期老化 1.05 0.79 1.67 150
严重老化 1.43 1.12 2.05 180
低温启动 2.01 1.63 2.89 230

总体表现优秀,满足实用需求 ✅。


轻量化与定点化改造

为适应ECU资源限制,可采取:

  1. 有限差分近似代替解析求导;
  2. 降低更新频率(SOC: 100ms, SOH: 5min);
  3. 查表法加速OCV查找;
  4. 定点数转换(Q12格式损失<0.3%)。

展望:未来的智能BMS什么样?

设想一个“云-边-端”协同架构:

graph TD
    A[Battery Pack] --> B[Edge Node: DEKF Estimation]
    B --> C[Local MCU: Real-time SOC/SOH Output]
    C --> D[CAN Bus to Vehicle Controller]
    B --> E[5G/UWB Transmission]
    E --> F[Cloud Platform: Fleet-wide Aging Analytics]
    F --> G[Predictive Maintenance Alerts]
    G --> H[OTA Parameter Update to Edge Nodes]

这样的系统不仅能自我学习,还能群体进化,真正实现从“被动保护”到“主动健康管理”的跃迁 🚀。


🎯 结语

DEKF不仅仅是一个算法,它是理解电池内在规律的一种思维方式。当你学会用两个滤波器的眼睛去看世界,你会发现很多看似复杂的系统,其实都有迹可循。

下次当你看到仪表盘上的“剩余电量”时,不妨想一想:那一串数字背后,有多少数学之美正在默默运转?🔋✨

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:双扩展卡尔曼滤波(DEKF)是一种适用于非线性系统的先进状态估计算法,在电池管理系统中被用于联合估计电池的荷电状态(SOC)和健康状态(SOH)。SOC反映电池剩余电量,SOH表征电池性能退化程度,二者相互影响且对电池安全与寿命预测至关重要。DEKF通过泰勒展开近似线性化非线性模型,结合物理模型(如等效电路模型)与数据驱动方法,实现对SOC和SOH的高精度动态估计。本仿真项目涵盖电池建模、状态方程与观测方程构建、参数初始化、预测更新流程及结果分析,全面展示DEKF在电池状态联合估计中的应用过程与优化效果。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

Logo

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

更多推荐