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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/6977.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于async/await、promise和setTimeout执行顺序

关于async/await、promise和setTimeout执行顺序 async function async1() {console.log(async1 start);await async2();console.log(asnyc1 end); } async function async2() {console.log(async2); } console.log(script start); setTimeout(() > {console.log(setTimeOut…

springboot(01)项目搭建与启动

01,项目搭建与启动 一,项目搭建 有多种方式可以搭建Spring Boot项目,包括: 使用Spring Boot CLI命令行工具使用Spring Initializr网站或IDE插件生成项目模板使用Maven或Gradle手动配置项目 每种方式都有其优缺点,具…

Android IPC Binder机制学习(一)

一、多进程系统设计及意义Android系统分为5层,不过Android一般岗位只关注上三层就够用了即:应用层、framework层、native层。Android中的应用层和系统服务层不在同一个进程,系统服务在单独的进程中。Android中不同的应用属于不同的进程中Andr…

ChatGPT遭禁用、抵制后又停止Plus付费发生了?

ChatGPT相关信息 2023年2月27日消息,Snapchat 正在推出一个基于 OpenAI 的 ChatGPT 最新版本的聊天机器人。 这款名为“My AI”的机器人将被固定在应用界面的聊天选项卡上,虽然最初仅适用于每月3.99美元的SnapchatPlus付费订阅用户,但最终目…

图像分类综述

一、图像分类介绍 什么是图像分类,核心是从给定的分类集合中给图像分配一个标签的任务。实际上,这意味着我们的任务是分析一个输入图像并返回一个将图像分类的标签。标签来自预定义的可能类别集。 示例:我们假定一个可能的类别集categories …

Vue3+vite2 博客前端开发

Vue3vite2 博客前端开发 文章目录Vue3vite2 博客前端开发前言页面展示代码设计卡片设计背景(Particles.js粒子效果)右侧个人信息与公告内容页友链总结前言 大家是否也想拥有一个属于自己的博客?但是如何去开发博客,怎样去开发一个…

毫升 | 主成分分析(PCA)

这种方法是由Karl Pearson 介绍的。它的工作条件是,当高维空间中的数据映射到低维空间中的数据时,低维空间中数据的方差应最大。 主成分分析 (PCA) 是一种用于降低大型数据集维数的统计技术。它是机器学习、数据科学和其他处理大型数据集的领域中常用的…

如何通过C++ 将数据写入 Excel 工作表

直观的界面、出色的计算功能和图表工具,使Excel成为了最流行的个人计算机数据处理软件。在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最有效手段之一。这样不仅可以方便整理数据,还可以方便…

aspnet030高校学生团体管理系统sqlserver

net030高校学生团体管理系统 . 1.用户基本信息管理模块:录入、修改、删除、查询、统计、打印等功能 2.学生成绩管理模块:录入、修改、删除、查询、统计、打印等功能 3.学生团体信息管理模块:录入、修改、删除、查询、统计、打印等功能 4.教…

Excel技能之查找筛选排序,同事竖起大拇指

每天面对大量的数据,眼睛都看花了。头疼、脱发、颈椎病、胸闷、腰间盘突出,一系列并发症严重影响打工人的心情。同事看在眼里,痛在心里。 救救打工人吧!打工人的福音来了,自从学会了查找筛选排序,手脚利索…

动态规划(一) part1

T1:一个数组 中的最长 升序 子序列 的长度 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组…

C 非线性结构——树 万字详解(通俗易懂)

目录 一、树的介绍 1.定义 : 2.相关概念 : 3.简单分类 : 4.相关应用 : 二、树的存储 1.二叉树的存储 : 1 二叉树连续存储 2 二叉树链式存储(常用) 2.普通树和森林的存储 : 1 普通树的存储 2 森林的存储 三、树的遍历 1.二叉树先序遍历 : 2.二叉…

深度学习训练营之yolov5训练自己的数据集

深度学习训练营之训练自己的数据集原文链接环境介绍准备好数据集划分数据集运行voc_train.py遇到问题完整代码创建new_data.yaml文件模型训练时遇到的报错模型训练结果可视化参考链接原文链接 🍨 本文为🔗365天深度学习训练营 中的学习记录博客&#x1f…

正则表达式

一、正则表达式的概述 1、概念 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操…

JVM 程序计数器(PC)

PC寄存器的概念 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器&#…

【蓝桥杯冲刺】日期类专题特训

目录 1. 日期累加 题目描述 输入 输出 代码 2. 日期差值 题目描述 输入 输出 代码 3. 打印日期 题目描述 输入 输出 代码 写在最后: 1. 日期累加 题目链接:日期累加 题目描述 输入 1 2008 2 3 100 输出 2008-05-13 代码 #include…

如何在 Linux 中查找所有符号链接,这几个命令得会!

在Linux中,符号链接(Symbolic Link)是一种非常常见的文件类型,也称为软链接。符号链接是指向另一个文件的指针,而不是实际的数据。它允许用户创建一个指向另一个文件的虚拟文件,这样用户可以在不改变实际文…

JVM解析原理

目录1.JVM内存结构2.JIT及时编译器的原理,优化以及切换编译器类型2.1解释型语言和编译语言2.2JIT即时编译器(Just In Time Compiler)3.类的加载机制和类的加载器3.1类的加载机制3.2类的加载器4.双亲委派机制4.1定义4.2优点4.3总结5.虚拟机栈详…

读破万卷,神交古人,突破ChatGPT4096的Token限制,建立自己的垂直领域资料人工智能助理

ChatGPT的泛用性极高,上知天文,下通地理,参考古今,博稽中外,几乎无所不知,无所不晓。但如果涉及垂直领域的专业知识点,ChatGPT难免也会有语焉不详,闪烁其词的毛病,本次我…

16从零开始学Java之Java里的输入与输出语句有哪些?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们在前面的文章中,学习了如何创建Java文件,也学习了Java里的标识符、运算符、进制等内容。有些…