UKF
对于一个非线性系统:

其中,w是系统噪声值,是v测量噪声值。
UKF算法过程如下:
1)确定状态值初始值和后验状态误差协方差初始值;
2)计算采样点。

其中,L为状态向量的长度,本文中状态向量长度为3,权重值计算如下所示:




代码如下:
模型代码
load('R0.mat');
load('R1.mat');
load('C1.mat');
load('discharge.mat');%放电数据
load('OCV_SOC.mat');%OCV-SOC关系
系统矩阵
A=[1-1*Ts/R1/C1 0;0 1];%系统矩阵
B=[1*Ts/C1;-1*Ts/Qn];
C=[-1 0];
D=0;
初始值
Q=0.00000001*eye(2);
R=1;
P0=0.01*[0.01 0;0 1];%状态误差协方差初始值
赋值
tm=discharge(1,:)';
Cur=-discharge(2,:)';
Vot=discharge(3,:)';
RSOC=discharge(4,:)';
T=length(tm);
模型估计得到的电压值
Xekf=[0;0.8];%[U1,U2,SOC]初始值
L=length(Xekf);
Uoc(1)=p(1)*Xekf(2)^8+p(2)*Xekf(2)^7+p(3)*Xekf(2)^6+p(4)*Xekf(2)^5+p(5)*Xekf(2)^4+p(6)*Xekf(2)^3+p(7)*Xekf(2)^2+p(8)*Xekf(2)+p(9);%OCV
Vekf(1)=Uoc(1)+C*Xekf-Cur(1)*R0;%估计得到的端电压值
m=length(Vekf);
alpha=0.01;
ki=0;
beta=2;
lamba=alpha^2*(L+ki)-L;
迭代
for i=1:T-1
delta=c*chol(P0)';
Xekf_i=Xekf(:,i);
Y=Xekf_i(:,ones(1,numel(Xekf_i)));
X=[Xekf_i Y+delta Y-delta];
LL=length(X);
xx=zeros(2,1);
XX=zeros(2,LL);
for k=1:LL
XX(:,k)=A*X

该文通过UKF(UnscentedKalmanFilter)和EKF(ExtendedKalmanFilter)算法对二阶RC等效电路模型的电池进行状态估计,包括端电压和SOC(StateofCharge)。文中详细展示了两个算法的实现步骤,包括系统矩阵、观测矩阵的设定,以及状态更新和误差分析。通过比较两种方法的估计结果,评估其性能。
最低0.47元/天 解锁文章
970

被折叠的 条评论
为什么被折叠?



