电池SOC仿真系列-基于RNN的电池SOC估算研究
基于RNN算法的电池SOC估算
循环神经网络(Recurrent Neural Networks,RNN)是一种深度学习的神经网络框架,其与普通神经网络最本质上的区别在于,RNN可以保留上一时刻的隐藏层的状态。因此,RNN具有十分强大的学习能力。RNN网络的递推公式如下所示:
式中,ot表示RNN在t时刻的输出值,V表示输出层和隐含层之间的权重矩阵,st表示RNN在t时刻隐含层的数值,xt表示RNN在t时刻的输入值,U表示输入层和隐含层之间的权重矩阵,W表示st和st-1之间的权重矩阵,f表示隐含层的激活函数。将两式合并一下:
式中,ot(输出值)与输入量x1,x2,…,xt均有关系。由此可见,循环神经网络根据前期的输入量递推出当前时刻的最佳输出。
基于循环神经网络的电池SOC估算包含3个输入层、1个隐含层、1个输出层。
(1)输入层:t时刻的电压Vt、电流It,温度Tt作为模型的输入。
(2)隐含层:t时刻的隐含层节点为St。
式中,tanh表示隐含层的激活函数。
(3)输出层:t时刻的SOC作为模型的输出。
基于循环神经网络的电池SOC估算方法的原理即通过当前时刻及历史时刻的Vt、It和Tt映射出电池SOC的数值。具体代码如下所示:
clc
clear
%% 数据读取
M = readmatrix('电池测试数据.xlsx');
% 第一列为电池SOC 第二列→第四列依次为电压,电流,温度
M = shuffle(M);
Y = M(:,1);
X = M(:,2:4);
% 训练
test_size = 0.2;
[train_X,train_Y,test_X,test_Y] = test_train_split(X,Y,test_size);
%% RNN启动
% 训练数据,测试数据
norm_train_X = normalize(train_X);
norm_train_Y = train_Y/100;
norm_test_X = normalize(test_X);
norm_test_Y = test_Y/100;
% 定义网络结构
numResponses = size(norm_train_Y,2);
featureDimension = size(norm_train_X,2);
numHiddenUnits = 1;
layers = [ ...sequenceInputLayer(featureDimension)lstmLayer(numHiddenUnits,'OutputMode','sequence')dropoutLayer(0.4)fullyConnectedLayer(numResponses)regressionLayer];maxEpochs = 100;
miniBatchSize = 10;options = trainingOptions('adam', ...'MaxEpochs',maxEpochs, ...'MiniBatchSize',miniBatchSize, ...'InitialLearnRate',0.01, ...'GradientThreshold',0.01, ...'Plots','training-progress',...'Verbose',0);% 训练网络
net = trainNetwork(norm_train_X',norm_train_Y',layers,options);% 测试网络
pred_y = predict(net, norm_test_X');%% 评估
pred_y = pred_y';
residual=zeros(size(test_Y));
for i=1:length(test_Y)residual(i)=norm_test_Y(i)-pred_y(i);
end% 均方根误差
rmse = sqrt(mean((pred_y - norm_test_Y).^2));
MAE = mae(residual);
Rsq = 1 - sum((norm_test_Y - pred_y).^2)/sum((norm_test_Y - mean(norm_test_Y)).^2);
figure()
plot(test_Y)
hold on
plot(pred_y*100)
xlabel('observations')
ylabel('SOC')
legend('True','Prediction')
从结果可以看出,误差精度满足要求,证明了基于循环神经网络的电池SOC估算方法的有效性。
想了解更过相关仿真,可以关注我的微信公众号。
电池SOC仿真系列-基于RNN的电池SOC估算研究相关推荐
- ## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)***
## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)*** ## 1 研究背景 电池的荷电状态(SOC)代表的是电池当前的剩余容量,数值定义是电池剩余电量与电池额 ...
- 电池SOC仿真系列-基于UKF算法的电池SOC估算研究
基于UKF算法的电池SOC估算 1.UKF算法 无迹卡尔曼滤波是将数据变化(UT变换)与卡尔曼滤波结合起来的一种算法,通过UT变换将一个状态点转换为多个状态点,依据一定的权重传递给后面观测值,再根 ...
- 电池SOC仿真系列-基于遗忘因子的最小二乘法电池参数辨识(二阶RC)
基于遗忘因子的最小二乘法电池参数辨识 最小二乘法是系统辨识中最常用的一种估算方法.为了克服最小二乘法存在"数据饱和"的问题,我们通常采用含有遗忘因子的递推最小二乘法(Forge ...
- 电动SOC仿真系列-考虑电池老化影响的电池UKF-SOC估算研究
考虑电池老化影响的电池UKF-SOC估算研究(无迹卡尔曼滤波算法) 传统的电池模型往往将电池容量设定为定值.然后在实际情况中,电池的容量会随着电池循环充放电次数的增加而减少.因此有必要在建立电池模 ...
- 电动汽车仿真系列-基于Simulink的并联混合动力汽车建模分析
基于Simulink的并联混合动力汽车建模分析 本期介绍一种基于Simulink的并联混合动力汽车的建模方法.并联混合动力汽车的工作模式可以分为六种.纯电动模式.纯发动机模式.混合驱动模式.充电模 ...
- 电机仿真系列-基于最小二乘法的永磁同步电机参数辨识
基于最小二乘法的永磁同步电机参数辨识 永磁同步电机具有体积小.转动惯量低.结构简单等优点,被广泛应用于控制系统中.然而在实际应用过程中,控制系统会受到高温.负载等外界因素的影响,永磁同步电机的电感 ...
- 风力发电仿真系列-基于Simulink搭建的DFIG仿真模型
基于Simulink搭建的DFIG仿真模型 双馈式感应发电机(DFIG)是在同步电机和异步电机的基础上发展起来的一种新型发电机.DFIG的主要优点是其足够宽的速度范围,能使组合式风力涡轮机以最佳的 ...
- 电机仿真系列-基于LabVIEW的电机测试系统研究
基于LabVIEW的电机测试系统研究 本设计基于LabVIEW设计一个直流有刷电机PID调试及控制助手,实现PID参数调节及电机转速及位置的控制.系统下位机采用STM32F103作为直流有刷电机控 ...
- 风力发电仿真系列-基于Simulink搭建的双馈风力发电(DFIG)模型
基于Simulink搭建的双馈风力发电(DFIG)模型 1.双馈风力发电机 双馈异步风力发电机(DFIG)是一种绕线式感应发电机,是变速恒频风力发电机组的核心部分.DFIG主要由两大部分组成,分别 ...
- 超声仿真 matlab,基于Matlab的超声场可视化研究及GUI仿真模拟
谭智源 沈洋 游泳 [摘 要]利用超声场理论及对其数学计算,对常用圆形活塞换能器的声轴线声压分布.轴向横截面的声压分布及声场指向性的理论计算进行推导得出数学函数表达式,再通过Matlab数学软件模拟仿 ...
最新文章
- html中的框架frameset和frame及iframe
- svn提交怎么全选_做外贸怎么精准开发国外客户?终于有答案了
- 电子商务平台支付接口开发原理及流程
- 2000年考研英语阅读理解文章五
- python编写抢座位软件_程序员硬核Python抢票教程”,帮你抢回家车票
- 断开式绑定ComboBox 关键命令 1201
- 【转】总结oninput、onchange与onpropertychange事件的用法和区别
- 如何制作一款HTML5 RPG游戏引擎——第二篇,烟雨+飞雪效果
- 19【推荐系统9】WideDeep和DeepCross模型
- 怎样杀计算机病毒,如何彻底查杀计算机病毒
- 沟通CTBS常见问题
- 小程序云开发添加html页面,微信小程序云开发js抓取网页内容
- 琼瑶称于正抄袭,心力交瘁已病倒
- 周报,当前是第几周 ?
- Linux 常用基本命令 ps top kill
- Java LocalDateTime给当前时间加半小时
- 我的发明20220723
- 看了下大厂程序员的工资表,我酸了.....
- 基于VB的COM编程入门教程
- linux通过无线网卡上网,在Kubuntu Linux下轻松使用无线上网卡