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