NASA 锂电池数据集,基于 Python 的锂电池寿命预测(Remaining Useful Life,RUL)& (End Of Life,EOF)
原创博客,转载请注明出处,谢谢!
代码下载地址:https://github.com/XiuzeZhou/NASA
1. 需求
近几年,随着智能手机和电动汽车的广泛应用,锂电池的话题越来越多,研究也越来越丰富,总之一句话:新能源很热。于是,趁最近一个空段,我也加入了新能源的研究大军。
花了几个月时间,看了百来篇与锂电池相关的论文。大部分有关锂电池寿命预测的论文用到两个数据集:NASA 和 CALCE。NASA 是美国宇航局 NASA 埃姆斯研究中心提供的锂电池老化实验数据,CALCE 是马里兰大学高级生命周期工程中心的电池循环测试数据集。今天我分析 NASA 这个数据集,CALCE 数据集下次另开博文来分析。
NASA 这个数据集比较老了,2007年发布,数据格式是 mat。而现在大部分人都用 Python 来做实验,mat 文件没办法直接使用,使用的话需要先读取和解析。既然要写论文,那就自己动手写个程序从这个数据集中来提取必要的内容吧。
2. NASA 数据集
I. 数据集
原始下载地址:https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/#battery
(我的程序中已经包括下载好的数据集:B0005.mat,B0006.mat,B0007.mat,B0018.mat)
II. 测试内容
温度:室温 24 度
充电:以 1.5A 的恒定电流(CC)模式进行充电,直到电池电压达到 4.2V,然后以恒定电压(CV)模式充电,直到充电电流降至 20mA。
放电:以 2A 的恒定电流(CC)模式进行放电,直到电池 5、6、7 和 18的电压降到 2.7V,2.5V,2.2V 和 2.5V。
终止条件:当电池达到寿命终止(End Of Life, EOF)标准——额定容量下降到它的30%,即电池 5、6、7 和 18 的额定容量从 2Ahr 到 1.4Ahr。
III. 数据介绍
提取数据之前,我们需要先了解这个数据集的结构和内容。首先,我们用 matlab 打开其中一个数据集,查看一下数据。
数据集有 4 个列:type
,ambient_temperature
,time
,data
type
:数据类型,包括 3 个类,分别为充电、放电和阻抗:charge
, discharge
和 impedance
ambient_temperature
:电池的工作温度,常温 24 度
time
:充放电的时间,字符串格式
data
:实时采集与电池性能相关的 6-7 组数据
a. type 为 'charge',即充电状态下:
- Voltage_measured:测量的电压
- Current_measured:测量的电流
- Temperature_measured:工作温度
- Current_charge:充电器充电电流
- Voltage_charge:充电器充电电压
- Time:工作时间
b. type 为 'discharge',即放电状态下:
- Voltage_measured:测量的电压
- Current_measured:测量的电流
- Temperature_measured:工作温度
- Current_load:在负载下测量的电流
- Voltage_load:在负载下测量的电压
- Time:工作时间
- Capacity:放电至 2.7V 的电池容量 (Ahr)
c. type 为 'impedance',即阻抗状态下:
- Sense_current:传感器支路电流
- Battery_current:电池支路电流
- Current_ratio:以上电流的比率
- Battery_impedance:根据原始数据计算的电池阻抗
- Rectified_impedance:校准和平滑的电池阻抗
- Re:估计电解液电阻
- Rct:估计充电转移电阻
3. 数据处理
I. mat 文件读取
用scipy.io.loadmat
读取 mat 文件,然后将 mat 对应的数据另存为 python 的数据格式。
# 加载 mat 文件
def loadMat(matfile):
data = scipy.io.loadmat(matfile)
filename = matfile.split(".")[0]
col = data[filename]
col = col[0][0][0][0]
size = col.shape[0]
data = []
for i in range(size):
k = list(col[i][3][0].dtype.fields.keys())
d1, d2 = {}, {}
if str(col[i][0][0]) != 'impedance':
for j in range(len(k)):
t = col[i][3][0][0][j][0];
l = [t[m] for m in range(len(t))]
d2[k[j]] = l
d1['type'], d1['temp'] = str(col[i][0][0]), int(col[i][1][0])
d1['time'], d1['data'] = str(convert_to_time(col[i][2][0])), d2
data.append(d1)
return data
II. 数据分析
做锂电池分析,最重要的三个参数是:容量,电流和电压。接下来,我们分别对提取它们的数据,并查看它们的变化趋势。
容量
锂电池寿命预测,最重要的是对放电时的电池容量衰减曲线进行建模和分析。
# 提取锂电池容量
def getBatteryCapacity(Battery):
cycle, capacity = [], []
i = 1
for Bat in Battery:
if Bat['type'] == 'discharge':
capacity.append(Bat['data']['Capacity'][0])
cycle.append(i)
i += 1
return [cycle, capacity]
电流和电压
正如前面提到的,锂电池的测试条件如下:
充电:以 1.5A 的恒定电流(CC)模式进行充电,直到电池电压达到 4.2V,然后以恒定电压(CV)模式充电,直到充电电流降至 20mA。
放电:以 2A 的恒定电流(CC)模式进行放电,直到电池 5、6、7 和 18的电压降到 2.7V,2.5V,2.2V 和 2.5V。
# 获取锂电池充电或放电时的测试数据
def getBatteryValues(Battery, Type='charge'):
data=[]
for Bat in Battery:
if Bat['type'] == Type:
data.append(Bat['data'])
return data
我们接下来,查看这两个条件下电池的充放电曲线变化。
更多内容
1. NASA 锂电池数据集,基于 python 的 MLP 锂电池寿命预测: https://snailwish.com/427/
2. 马里兰大学锂电池数据集 CALCE,基于 Python 的锂电池寿命预测: https://snailwish.com/437/
3. 马里兰大学锂电池数据集 CALCE,MLP 锂电池寿命预测: https://snailwish.com/464/
4. NASA 和 CALCE 锂电池数据集,基于 Pytorch 的 RNN、LSTM、GRU 寿命预测: https://snailwish.com/497/
5. 基于 Pytorch 的 Transformer 锂电池寿命预测: https://snailwish.com/555/
6. 锂电池研究之七——基于 Pytorch 的高斯函数拟合时间序列数据: https://snailwish.com/576/