RBF-UKF径向基神经网络结合无迹卡尔曼滤波估计锂离子电池SOC(附MATLAB代码)

目录

RBFNN训练结果

UKF估计SOC

文章的结尾红色部分有彩蛋

RBFNN训练结果

这篇文章主要介绍如何使用RBF神经网络训练出的参数并结合UKF算法完成锂离子电池SOC的估计,有关RBF参数训练过程的代码分析放在2天后的下一篇文章,这里只给出训练完成后的结果图片。

图1 神经网络训练

图2 神经网络结构 

 图3 真实电压与神经网络预测电压对比(a)

 图4 真实电压与神经网络预测电压对比(b)

UKF估计SOC

1.导入数据

close all
clear,clc
addpath('F:\锂电池数据')
load('data.1.mat')
addpath('F:\神经网络训练\RBF训练参数')
load('M73.mat')

 导入的数据如图5所示:

图5 

 从上到下依次是电流、SOC、温度、电压。

2.使用length函数求取数据的长度并返回给参数Tfinal1;分别将保存在.mat格式的电压、电流、SOC数据分别赋值给x1、x2、x3

Tfinal1=length(I.data);
x1=V.data(1:2:Tfinal1)';
x2=SOC.data(1:2:Tfinal1)'; 
x3=I.data(1:2:Tfinal1)';
Tfinal2=length(x1);
x1=x1(1:Tfinal2-1);
x2=x2(2:Tfinal2);
x3=x3(2:Tfinal2);
V_0=x1(1);SOC_0=x2(1);

使用plot以及subplot命令绘图。 subplot(311)表示在本区域里显示3行1列个图像,最后的1表示本图像显示在第一个位置。

figure(1)
subplot(311)
plot(x1)
subplot(312)
plot(x2)
subplot(313)
plot(x3)

 绘图的结果如下图所示:

图6 

 设定状态方程的维度为3,即下式:

同时设置UKF的Q矩阵以及R 矩阵

n=3;            %number of state
q=0.001;    
r=0.1;  
Q=q^2*eye(n);
R=r^2;

 初始化w0、sigma、迭代次数M、采样时间t_sample、电池容量Cn,并自定义函数F、g。

w0=2.4195;sigma=0.8326;M=73; 
t_sample=2;Cn=3.45*3600; 
F=@(X,u,i)wi(i)*exp(-(sigma*norm([X(1),X(2),u-X(3)]-ti(i,:)))^2);
g=@(X,u)w0;

 执行for循环,73次后结束。

for i=1:M
    g=@(X,u)g(X,u)+F(X,u,i);
end
f=@(X,u)[g(X,u);X(2)-(u-X(3))*t_sample/Cn;X(3)];
h=g;

s=[V_0;SOC_0;I_bias_0]; % initial state
x=0.9*s; % initial state with noise
P = 1*eye(n);                              
N=Tfinal2-2;                                    
xV = zeros(n,N);   %estmate       
sV = zeros(n,N);   %actual state       
zV = zeros(1,N);

 这里调用了无迹卡尔曼滤波估计SOC的一个function函数:ukf_sunli,这个函数的功能是给它输入输入参数:f,x,P,h,z,Q,R,u,既可以得到x, P, K,具体的function函数也放在下一篇文章。

for k=1:N
    u=x3(k);
    z = h(s,u);     % model output measurments  
    sV(:,k)= s;                   % save actual state         
    zV(k)  = z;                   % save measurment   
    [x, P, K] = ukf_sunli(f,x,P,h,z,Q,R,u);           
    xV(:,k) = x;                  % save estimate         
    %    s = f(s,u)+q*randn(2,1);
    s = f(s,u);                 % state update process
end

最后进行绘图

% plot results
figure(2)
subplot(2,1,1)
%plot(1:N, sV(2,:), '-', 1:N, xV(2,:), '--',1:N+1,x2,'k')
%legend('RBFNN Model SOC output','UKF SOC estimation','actual SOC')
plot(1:N, xV(2,:), '--',1:N+1,x2,'k')
legend('extended RBFNN-UKF estimation','actual SOC')
subplot(2,1,2)
plot(1:N, xV(3,:), '--',[1,N],[bias,bias],'k')
legend('extended RBFNN-UKF estimation','actual bias')

figure(3)
subplot(2,1,1)
plot( xV(2,:)-x2(1:length(x2)-1))
legend('SOC error')
subplot(2,1,2)
plot( xV(3,:)-bias)
legend('I bias error')

绘图结果:

 图7 SOC估计结果

 图8 SOC估计误差

从上图可以发现,当SOC的初始值不准确的时候,UKF算法仍能迅速收敛到真实SOC,证明该算法的鲁棒性较好,SOC估计的平均误差小于0.6%,具有较高的估计精度。

参考文献:

[1] Sun W ,  Qiu Y ,  Sun L , et al. Neural network-based learning and estimation of batterystate-of-charge: A comparison study between direct and indirect methodology[J]. International journal of energy research, 2020(13):44.

硕博期间所有的程序代码,一共2个多g,可以给你指导,赠送半个小时的语音电话答疑。电池数据+辨识程序+各种卡尔曼滤波算法都在里面了,后续还会有新模型的更新。快速入门BMS软件。某鹅:2629471989

猜你喜欢

转载自blog.csdn.net/m0_60354177/article/details/129960569