课程导论与预备知识:电池模型基础、卡尔曼滤波回顾、为什么需要UKF?

大家好,我是你们这门课的主讲。在BMS(电池管理系统)这个行当里摸爬滚打了十几年,说实话,踩过的坑比吃过的盐还多。今天咱们要聊的这门课,核心就是怎么用无迹卡尔曼滤波(UKF)把电池状态估得准、算得快。

在正式动手写代码之前,有些地基得先打牢。我个人习惯,讲算法之前,一定先把模型和基础滤波讲透。不然你后面代码跑飞了,都不知道问题出在哪。

1. 电池模型基础:等效电路模型

电池这东西,内部化学反应极其复杂。你想想看,要实时估算它的SOC(荷电状态)和SOH(健康状态),总不能把电化学方程搬进单片机里跑吧?

所以工程上,我们用一个折中的办法——等效电路模型。说白了,就是把电池当成一个黑箱子,用电阻、电容这些元件搭一个电路,模拟它的外特性。

我最常用的是一阶RC模型。结构很简单:一个开路电压源(OCV),一个欧姆内阻(R0),再加一个RC并联环节(R1、C1),用来模拟极化效应。

一阶RC模型数学表达式:

状态方程:
  Vc(k+1) = exp(-Δt/τ) * Vc(k) + R1 * (1 - exp(-Δt/τ)) * I(k)
  
  观测方程:
  Vt(k) = OCV(SOC(k)) - Vc(k) - R0 * I(k)
  
  其中 τ = R1 * C1,是时间常数

我在项目中遇到过一个问题:有人把时间常数τ设得太小,结果模型对电流脉冲反应过度,滤波反而发散。嗯,这里要注意,τ一般取几秒到几十秒,具体看电池类型。

当然,还有二阶RC模型、PNGV模型等。但我的建议是:初学者先从一阶RC入手。它计算量小,参数辨识也简单,对于大部分BMS应用场景,精度已经够用了。

2. 卡尔曼滤波回顾

卡尔曼滤波,说白了就是一个“预测+修正”的循环。你想想看,我们做电池估计,本质上就是:

  • 预测:根据上一时刻的状态,猜一下当前时刻的状态
  • 修正:用当前时刻的测量值,把猜的结果修正一下

标准卡尔曼滤波(KF)只适用于线性系统。它的核心公式,我建议你记在心里:

预测步骤:
  x_pred = A * x_est + B * u
  P_pred = A * P_est * A^T + Q
  
  更新步骤:
  K = P_pred * H^T * (H * P_pred * H^T + R)^(-1)
  x_est = x_pred + K * (z - H * x_pred)
  P_est = (I - K * H) * P_pred

这里Q是过程噪声协方差,R是测量噪声协方差。这两个参数怎么调?我曾经为了调Q和R,在实验室里熬了三个通宵。后来发现一个规律:Q越大,滤波器越相信测量值;R越大,滤波器越相信模型预测

避坑指南: 我曾经把Q设得特别小,觉得模型很准。结果电池老化后,模型偏差越来越大,滤波直接发散。后来我学乖了,Q稍微给大一点,让滤波器保持对测量的敏感度。

3. 为什么需要UKF?

好,问题来了。标准KF要求系统是线性的。但电池模型呢?你看看观测方程里的OCV(SOC)这一项——OCV和SOC的关系是非线性的!

有人会说:那用扩展卡尔曼滤波(EKF)啊,把非线性函数泰勒展开,取一阶近似不就行了?

嗯,理论上可以。但我在实际项目中发现,EKF有两个硬伤:

  1. 雅可比矩阵计算麻烦:OCV-SOC曲线通常是用查表法实现的,导数不连续。你强行求导,误差很大。
  2. 一阶近似精度有限:对于强非线性系统,泰勒展开只取一阶项,截断误差会累积,最终导致估计偏差。

这时候,UKF就登场了。它的核心思想很巧妙:既然直接处理非线性函数难,那我就不处理函数,而是处理概率分布

具体怎么做?UKF选取一组确定性采样点(称为Sigma点),让这些点经过非线性函数传播,然后用加权统计的方法,算出变换后的均值和协方差。

UKF的核心优势:

  • 不需要计算雅可比矩阵,省心省力
  • 对非线性函数的逼近精度可达三阶(EKF只有一阶)
  • 实现起来反而比EKF更简单,不容易出错

你想想看,在BMS这种实时性要求高的嵌入式系统里,少算一个雅可比矩阵,能省多少CPU周期?

注意: UKF不是万能的。如果系统维数很高(比如超过10维),Sigma点的数量会爆炸(2n+1个点)。但对于电池估计这种低维问题(通常2-4维),UKF是绝佳选择。

知识体系总览

下面这张图,是我自己画的本章知识结构。你可以把它当成一张地图,后面每讲一个知识点,都能在这张图上找到位置。

UKF电池估计知识体系(第1章) 电池等效电路模型 标准卡尔曼滤波 无迹卡尔曼滤波 一阶RC模型 OCV-SOC非线性关系 参数辨识方法 预测-修正循环 Q/R参数调优 线性系统假设 Sigma点采样 无迹变换 无需雅可比矩阵 核心逻辑:模型驱动 + 滤波修正 = 准确估计 从线性KF到非线性UKF,解决电池SOC/SOH估计难题

这张图把本章的三个核心模块串起来了。从左到右,你会发现:电池模型是基础,卡尔曼滤波是方法,UKF是升级版。三者缺一不可。

我的个人建议: 学UKF之前,一定先把标准KF的代码手写一遍。别用现成的库,自己从矩阵运算开始写。我当年就是这么干的,虽然费时间,但后面理解Sigma点传播时,一点就通。

好了,地基打到这里。后面几章,我们会一步步把UKF的每个环节拆开,配合Python代码,让你真正掌握这个工具。记住,做BMS算法,理论要扎实,动手要勤快。


专注资料整理