基于
双卡尔曼滤波(KF+UKF)算法的电池SOC估算
前文讲述了基于扩展卡尔曼滤波(EKF)的双卡尔曼滤波(KF+EKF)算法电池SOC估算方法,本期带来基于无迹卡尔曼滤波(Unscented Kalman Filter,UKF)的双卡尔曼滤波(KF+UKF)算法的电池SOC估算。
无迹卡尔曼滤波是一种采样策略逼近非线性分布的滤波方法,UKF的核心是一种通过计算非线性变换中变量的统计特征进行估计称为无迹变换(Unscented Transform,UT)的新方法,采用Kalman滤波算法的框架,UKF利用UT变换在估计点附近确定采样,将一个状态估计点转换为多个估计点,根据权值的不同将状态估计点的值传递给后面的观测值,按照观测值以及真实测量值的误差,通过反馈不断对相应的权值做出修正,以此逼近函数的概率密度分布,这可以使得非线性变换后的均值和协方差的精度更高,最终得到相对比较理想的状态值。
1、无迹卡尔曼滤波
卡尔曼滤波算法的基本步骤是以“预测—实际测量—校正”的顺序向后进行递推运算,利用系统的测量值作为反馈来消除夹杂的随机干扰,其状态方程以及观测方程可以表示为:
式中,xk代表k时刻的系统状态向量值,它可以是一个多参数矩阵。
第一个式子为状态表达式,这个式子主要用来表达系统在所测的各个时刻的特性,所求参数的稳定性、能控性和能观性均由该方程决定;
uk代表k时刻的系统输入值。参数估计系统的随机噪声用wk表示,该值用来表述参数估计系统的一些不精确或者未知参数引起的噪声。
输出值yk由系统观测方程得到。由上述方程明显看出,线性系统的输出是系统状态、系统输入以及某些随机噪声的线性组合。
随机干扰vk用于描述一些由于传感器噪声引起的观测误差,这些噪声并不直接影响系统的状态。状态空间表达式中,Ak,Bk,Ck,Dk完全描述整个系统,而且可能是实时变化的。
给定系统的状态空间表达式以及系统所测得的输入uk、输出yk,可以根据卡尔曼滤波算法在动态条件下实时地估计系统的内部状态。
卡尔曼滤波算法的基本推导过程:
首先计算k+1时刻的状态变量的先验估计值以及状态变量由k时刻递推到k+1时刻的先验误差协方差矩阵:
然后计算卡尔曼增益系数:
当前系统的状态变化使得先验估计值带有一定的不确定性,这种不确定性会通过误差协方差矩阵传递到卡尔曼增益系数K(k+1),先验估计值与测量值的误差越大,系统估计的不确定性越高,误差协方差矩阵P(k+1|k)就会变大,同时卡尔曼增益系数K(k+1)就会越大,它对于先验估计值的修正作用就会越大;反之,卡尔曼增益系数K(k+1)的修正作用越小。
最后,利用卡尔曼增益对先验估计值以及先验误差协方差矩阵作出修正:
X(k+1|k+1)为当前时刻经过修正之后的最优估计结果。将电池的端电压作为观测变量,故Y(k+1)就是k+1时刻的电池端电压。
为了将卡尔曼滤波非线性系统领域,大家提出了扩展卡尔曼滤波(Extended Kalman Filter,EKF)。在线性Kalman滤波的基础上,EKF通过将非线性离散模型在状态估计值附近作泰勒级数展开,但是实际运用中一般对泰勒展开公式做一阶截断而略去二阶以及以上高阶项以减小计算量,扩展卡尔曼滤波虽然得到广泛地应用。
但是EKF在线性过程中存在一些缺点。(1)泰勒级数展开公式因忽略其高阶项会使得卡尔曼滤波算法在高度非线性系统的应用中滤波结果发散;(2)EKF需要计算较为繁琐的雅可比矩阵(Jacobian);(3)只有在状态方程和观测方程都接近线性且连续时EKF才能最终较好的收敛于全局最优。
为了解决EKF算法存在的上述问题,大家又提出了一种新的改进算法,称为无迹卡尔曼滤波(Unscented Kalman Filter,UKF)。UKF将非线性系统函数的近似线性化转换为对系统状态变量的概率密度分布的近似,相对于EKF通过线性化忽略高阶项而带来的误差以及繁琐的雅克比矩阵计算,具有更高的效率!
2、UT变换
UT变换是根据当前时刻的状态变量x的均值和方差,按照某种采样规则选取一定的采样点(Sigma),然后对构造的每个采样点进行非线性变换,得到变换后的新的点集,以及变换后的点集的均值和方差。
在后续的求解过程中使用UT变换中得到的样本点集作为前一时刻的状态值,UKF依赖加权的Sigma点对n维状态变量近似表示,通过非线性状态方程对估计值进行更新,有效的克服了EKF估算精度比较低、应用于强非线性系统时稳定性差等不足。
首先构建Sigma点,根据输入的状态变量X的统计值x和P,采用构造2n+1个Sigma点的对称采样策略,每个采样点与变量X具有相同的统计特性:
λ是用来衡量Sigma点分布的换算参数,通常是一个极小的正数,定义为:
x和P分别为状态变量X的均值和方差,k为次级比例因子,在无迹变换(UT)中通常取0,假如状态分布为高斯时,取k=n-3,α为表示采样点与均值之间的接近程度的比例缩放因子,确定了采样点与均值之间的接近程度,通常取值为0-1之间。
第i个Sigma点相对应的权值Wm,Wc为:
3、UKF算法流程
无迹卡尔曼滤波算法是以UT变换为估算基础,并且采用标准卡尔曼滤波的递推公式为框架的离散滤波算法,构建Sigma采样点以及相对应的加权权重,将构造的采样点集带入到系统方程和状态方程中并且加以分析。
(1)算法初始化
(2)状态方程更新
(3)测量方程更新
采用Kalman滤波算法对动力锂电池的SOC进行估计,主要的递推运算包括滤波器计算以及滤波器增益计算。所谓滤波器计算就是将采集到的电池的工作电流I、温度T(今后的工作会考虑)作为输入量,根据这些输入变量得出SOC的估计值;滤波器增益计算则是根据状态变量的统计特性进行递推运算,计算出滤波器增益系数,与此同时也可以得出估计值的误差。利用卡尔曼滤波估计算法的电池等效电路模型必须能够准确地描述电池的动态性能,与此同时模型阶数不能太高,否则运算量会大大增加,实现起来会变得困难。
卡尔曼滤波算法的优点在于整个估算过程中能够不断通过测量值的反馈对SOC的估计值进行实时的修正,同时对于SOC初始值的误差具有非常强的修正作用,对随机噪声也有很强的抑制作用,所以能够保持很好的精度。
4、基于UKF的电池SOC估算
SOC预测阶段:以k时刻的状态变量SOC(Xk)为例,状态空间的状态变量X(k)=[SOC(k),U1(k),U2(k)]为3维变量,通过UT变换构建2n+1个Sigma点,根据k时刻的SOC值,输入电流I(k)以及SOC的误差Pk,通过系统的状态方程计算出k+1时刻的SOC估计值SOC(k+1)1、SOC(k+1)2、SOC(k+1)3、SOC(k+1)4、SOC(k+1)5、SOC(k+1)6、SOC(k+1)7,利用均值加权权值wm可以得到k+1时刻的估计值SOC(k+1)平均,根据方差加权权值wc可以得到k+1时刻的误差估计值Pk+1,同时还要根据系统的观测方程来计算k+1时刻观测值端电压估计值yk−。
SOC更新阶段:首先,利用设备采集到的k时刻端电压观测值yk和端电压的估计值yk−计算得到差值∆U,然后,根据系统方程以及Pk+1计算k 时刻的卡尔曼增益Kk,最后对k+1时刻的先验估计值做出校正从而可以得到当前时刻的SOC真实值SOCk+1 = SOCk+1− + Ke × ∆U,同时更新误差方差矩阵Pk+1。
SOC估算递推过程中的电池模型参数通过卡尔曼滤波算法递推得到。将KF算法辨识的电池模型参数结合UKF进行SOC估算递推,这就是基于双卡尔曼滤波(KF+UKF)算法的电池SOC估算流程。
5、算法验证
我们将DEKF算法与DUKF算法的电池SOC估算结果进行比较。
由仿真结果可知,DUFK算法相对于DEKF算法具有更高的精度!符合电池管理系统的使用及开发要求。