基于Matlab的NASA锂电池数据集分析

一、分析结果

电池容量衰减曲线

(左边#5、6、7、18,右边#25、26、27、28的)

电池阻抗曲线

数据分析

  1. 电池循环老化过程中会出现容量衰减和阻抗上升的现象。是由于电化学反应活性逐渐下降
  2. 曲线下降过程中突然回升再继续下降:容量增生和恢复现象。是由于在循环周期中的静置阶段时,电极附近的反应物有机会消散使得容量恢复;也可能是由于SEI层的修复改善了锂离子传输通道,或是电极材料的结构重组或改变孔隙使得锂离子嵌入和脱嵌效率短暂提高。

  

二、数据准备

NASA官方所有数据库链接:Prognostics Center of Excellence Data Set Repository - NASA

更多锂电池数据链接转:锂电池常用公开数据集链接-CSDN博客

注:笔者使用的是第5条美国宇航局卓越预测中心PCoE提供的B0005等型号电池充放电数据

该数据集下载链接:https://data.nasa.gov/download/brfb-gzcv/application%2F.zip

数据说明:

电池数据被分为9组,组内3~4节电池,额定容量均为2Ah

  1. 充电过程:这是一组四节锂离子电池(型号B#5、6、7 和 18)在室温下运行得到 3 种不同的曲线(充电charge、放电discharge和阻抗impedance)运行。在1.5A的恒流(CC)模式下进行充电至4.2V,然后继续以恒压(CV)模式进行充电,直到充电电流降至20mA。
  2. 放电过程:在2A的恒流(CC)水平下进行放电,直到电池5、6、7和18的电池电压分别降至2.7V、2.5V、2.2V和2.5V。
  3. 阻抗测量:是通过电化学阻抗谱(EIS)从0.1Hz到5kHz的频率扫描进行的。重复的充电和放电循环会导致电池加速老化,而阻抗测量可以深入了解随着老化过程而变化的电池内部参数。当电池达到寿命终止(EOL)标准时,实验停止,即额定容量下降30%(从2Ahr下降到1.4Ahr)。考虑到EIS测量对容量的影响,#5、6、7做了278次EIS测量,#18只做了53次。

        该数据集可用于预测剩余电荷(对于给定的放电循环)和剩余使用寿命(RUL)

数据结构:

  • 充电数据

  • 放电数据

  • 阻抗数据

三、Matlab程序

注:若要绘制不同数据曲线,只需将if最后一行语句的最后一个单词改为上述数据结构的名称即可

  • 解压第一个文件夹,将B0005,B0006,B0007,B00018数据放在总文件夹目录下,可以像我这样
  • 进如Matlab,打开文件夹路径,空白处右键新建脚本,命名test
  • 程序如下,为了方便理解,不太熟悉软件的用以下代码即可,熟悉的可以试试Cell

clear clc

load('B0005.mat');
load('B0006.mat');
load('B0007.mat');
load('B0018.mat');
load('B0025.mat');
load('B0026.mat');
load('B0027.mat');
load('B0028.mat');

capacity_B5 = [];
capacity_B6 = [];
capacity_B7 = [];
capacity_B18 = [];
capacity_B25 = [];
capacity_B26 = [];
capacity_B27 = [];
capacity_B28 = [];
for i = 1:length(B0005.cycle)
    if strcmp(B0005.cycle(i).type,'discharge')
        capacity_B5 = [capacity_B5, B0005.cycle(i).data.Capacity];
    end
end

for i = 1:length(B0006.cycle)
    if strcmp(B0006.cycle(i).type,'discharge')
        capacity_B6 = [capacity_B6, B0006.cycle(i).data.Capacity];
    end
end

for i = 1:length(B0007.cycle)
    if strcmp(B0007.cycle(i).type,'discharge')
        capacity_B7 = [capacity_B7, B0007.cycle(i).data.Capacity];
    end
end

for i = 1:length(B0018.cycle)
    if strcmp(B0018.cycle(i).type,'discharge')
        capacity_B18 = [capacity_B18, B0018.cycle(i).data.Capacity];
    end
end

for i = 1:length(B0025.cycle)
    if strcmp(B0025.cycle(i).type,'discharge')
        capacity_B25 = [capacity_B25, B0025.cycle(i).data.Capacity];
    end
end

for i = 1:length(B0026.cycle)
    if strcmp(B0026.cycle(i).type,'discharge')
        capacity_B26 = [capacity_B26, B0026.cycle(i).data.Capacity];
    end
end

for i = 1:length(B0027.cycle)
    if strcmp(B0027.cycle(i).type,'discharge')
        capacity_B27 = [capacity_B27, B0027.cycle(i).data.Capacity];
    end
end

for i = 1:length(B0028.cycle)
    if strcmp(B0028.cycle(i).type,'discharge')
        capacity_B28 = [capacity_B28, B0028.cycle(i).data.Capacity];
    end
end

figure
plot(capacity_B5)
hold on
grid on
plot(capacity_B6,'color',[1,0.1,0.1])
plot(capacity_B7,'color',[1,0.5,0])
plot(capacity_B18,'k-')
legend('B0005','B0006','B0007','B0018')
xlabel('循环次数')
ylabel('容量')

figure
plot(capacity_B25)
hold on
plot(capacity_B26)
plot(capacity_B27)
plot(capacity_B28)
legend('B0025', 'B0026', 'B0027', 'B0028');

xlabel('循环次数')
ylabel('容量')
grid on;

部分内容参考:

锂电池数据集介绍:NASA_哔哩哔哩_bilibili

深度学习分析NASA电池数据(1 数据读取)_nasa电池数据集-CSDN博客

NASA电池数据集信息提取(ICA曲线) - 简书 (jianshu.com)

### 使用MATLAB实现NASA锂电池特征提取 #### 数据准备 在开始特征提取之前,需先准备好所需的电池数据。解压下载的数据文件夹,并将`B0005`, `B0006`, `B0007`, 和 `B0018` 文件放置于工作目录下[^2]。 #### 加载数据 使用MATLAB加载这些.mat格式的文件,可以通过读取循环次数、电压、电流等参数来进行初步处理: ```matlab % 设置路径到包含电池数据的文件夹 dataPath = 'path_to_your_data_folder'; % 替换为实际路径 files = dir(fullfile(dataPath, '*.mat')); for k = 1:length(files) load(fullfile(dataPath, files(k).name)); end ``` #### 特征定义与计算 针对每组充电/放电周期中的时间序列信号(如电压V(t),电流I(t)),可从中抽取多个有意义的时间域或频率域能反映电池性能变化趋势的关键指标作为特征向量的一部分。例如最大最小值差、均方根(RMS)、峰峰值(Peak-to-Peak)以及频谱特性等等。 对于单次充放电工况下的原始测量值,可以采用以下方式获取一些基本统计学描述性的特征: ```matlab function features = extractBasicFeatures(signal) meanVal = mean(signal); stdDev = std(signal); maxVal = max(signal); minVal = min(signal); rmsValue = sqrt(mean(signal.^2)); % 均方根 peakToPeak = maxVal - minVal; skewnessVal = skewness(signal); % 偏度 kurtosisVal = kurtosis(signal); % 峰度 features = [meanVal; stdDev; maxVal; minVal; rmsValue; ... peakToPeak; skewnessVal; kurtosisVal]; end ``` 此函数接收一个表示某物理量随时间变化的一维数组作为输入,并返回一组由八个数值构成的新矩阵,代表该变量的不同方面属性。 #### 应用实例 假设已经获得了某个特定工况期间内所有时刻对应的端口开路电压OCV,则可以直接调用上述自定义好的辅助工具来完成具体操作: ```matlab ocvData = ... ; % 获取开放电路电压数据 basicOcvFeatures = extractBasicFeatures(ocvData); disp('Open Circuit Voltage Features:'); disp(basicOcvFeatures'); ``` 以上过程展示了怎样利用简单的数学运算从实验记录里挖掘出潜在有用的信息片段用于后续建模分析或其他目的。当然,在实际情况当中可能还需要考虑更多复杂的因素,比如温度影响、老化效应等,这取决于研究的具体需求和目标。
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值