找回密码
 会员注册
查看: 24|回复: 0

XJTU电池数据集详细分析(附代码)——XJTUbatterydatasetanalysis

[复制链接]

7

主题

0

回帖

22

积分

新手上路

积分
22
发表于 2024-9-10 14:18:24 | 显示全部楼层 |阅读模式
电池和实验介绍本实验的实验对象为“力神”制造的18650型镍钴锰酸锂电池,其化学成分为LiNi0.5Co0.2Mn0.3O2\text{LiNi}_{0.5}\text{Co}_{0.2}\text{Mn}_{0.3}\text{O}_2LiNi0.5​Co0.2​Mn0.3​O2​。电池的标称容量为2000mAh,标称电压为3.6V,充电截止电压和放电截止电压分别为4.2V和2.5V。整个实验在室温下进行。一共包括55只电池,分成6个批次。充放电设备为ACTS-5V10A-GGS-D,所有数据的采样频率为1Hz。数据集链接:XJTUbatterydataset论文链接:Physics-informedneuralnetworkforlithium-ionbatterydegradationstablemodelingandprognosisGitHub链接:Battery-dataset-preprocessing-code-librarySOH估计的Benchmark:Benchmark所有batch的图片总览每一行分别是1个batch中的第一个电池的数据,从左到右分别是电压、电流、温度和容量。代码importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.ioimportloadmatfromscipyimportinterpolateimportosimportfunctools123456插值重采样装饰器definterpolate_resample(resample=True,num_points=128):'''插值重采样装饰器,如果resample为True,那么就进行插值重采样,点数为num_points,默认为128;否则就不进行重采样:paramresample:bool:是否进行重采样:paramnum_points:int:重采样的点数:return:'''defdecorator(func)functools.wraps(func)defwrapper(self,*args,**kwargs):data=func(self,*args,**kwargs)ifresample:x=np.linspace(0,1,data.shape[0])f1=interpolate.interp1d(x,data,kind='linear')new_x=np.linspace(0,1,num_points)data=f1(new_x)returndatareturnwrapperreturndecorator1234567891011121314151617181920Battery类,它可以用于读取XJTU电池数据集所有batch的数据classBattery:def__init__(self,path):mat=loadmat(path)self.data=mat['data']self.battery_name=path.split('/')[-1].split('.')[0]self.summary=mat['summary']self.cycle_life=self.summary[0][0][8][0][0]self.description=self.summary[0][0][9][0]self.variable_name=['system_time','relative_time_min','voltage_V','current_A','capacity_Ah','power_Wh','temperature_C','description']print(f'电池寿命:{self.cycle_life},电池描述:{self.description}')defprint_variable_name(self):print('0:system_time,''1:relative_time_min,''2:voltage_V,''3:current_A,''4:capacity_Ah,''5:power_Wh,''6:temperature_C,''7:description')defget_descriptions(self):'''电池每个cycle都有一个描述,这个函数返回所有的描述种类:return:'''descriptions=[]foriinrange(self.data.shape[1]):description=self.data[0][i][7][0]ifdescriptionnotindescriptions:descriptions.append(description)returndescriptionsdefget_one_cycle_description(self,cycle):'''获取某个cycle的描述:paramcycle:int:电池的循环次数:return:'''#如果cycle大于电池的循环次数,或者小于1,那么就报错,并提示用户ifcycle>self.data.shape[1]orcycle=voltage_range[0])&(voltage=4.199)[0]else:index=np.where((current>=np.min(current_range))&(current
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-3 02:19 , Processed in 0.453307 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表