batteryTestDataParser
Convert data produced by battery lab testing into a format that is compatible with analysis and feature extraction
Since R2024b
Description
batteryTestDataParser encapsulates measurement and operational
data from battery cycler testing. The object contains properties that identify critical
variables for battery data parsing and feature extraction.
Creating a batteryTestDataParser object is the first step in extracting
predefined sets of operation-focused features using batteryTestFeatureExtractor and extract. You
can also extract your own customized features by using segmentData to
add cycle and step information to the data that the parser encapsulates. For more information
on using these items together, see Characterize Battery Health Using Cycler-Based Test Data.
Creation
Syntax
Description
encapsulates the data bdp = batteryDataParser(data,CurrentVariable=cv,VoltageVariable=vv,TimeVariable=tt,CycleIndexVariable=civ,StepIndexVariable=siv)data in a
batteryTestDataParser object bdp and configures
bdp with the data variable names specified by the remaining
arguments.
The variable properties in this syntax must be set before you can use any of the
object functions such as segmentData or extract features using batteryTestFeatureExtractor. Alternatively, you can use the simpler
construction syntax of the form bdp = batteryTestDataParser(data), and
then use dot notation to assign the variable names. For example, use the following set of
commands to achieve the same results as the previous
syntax.
bdp = batteryTestDataParser(data) bdp.CurrentVariable = cv bdp.VoltageVariable = vv bdp.TimeVariable = tt bdp.CycleIndexVariable = civ bdp.StepIndexVariable = siv
specifies additional object properties using name-value arguments. For example,
bdp = batteryDataParser(___,Name=Value)Tolerance=0.001 sets the variance threshold for identifying cycling
modes.
As with the required properties in the first syntax, you can also set these properties
using dot notation. For example, set Tolerance using
bd.Tolerance = 0.001.
Input Arguments
Unsegmented battery data, specified as a table or timetable. Each column contains
a variable name and the values corresponding to that variable. The following table
describes the variables in data that batteryTestDataParser has corresponding variable-name properties for and
uses. Other data variables are ignored.
| Variable Type | Data Description |
|---|---|
| Current | Current value, specified as numeric value in amperes. |
| Voltage | Voltage value, specified as a numeric value in volts. |
| Time | Time value, specified as a datetime or duration value. |
| Cycle Index | Cycle Index, specified as an integer. The cycle index represents the complete sequence of phases, including charging, discharging, and resting phases, that a battery undergoes during a single cycle of its testing protocol. The value increments with each completed cycle. |
| Step Index | Step index, specified as an integer that identifies a specific operation within a battery cell test. Each step index corresponds to a distinct set of operational parameters and conditions. |
| Temperature (Optional) | Temperature, specified as a numeric value in degrees Celsius. |
Properties
Variable name for current values, specified as a string that is identical to the
corresponding column name in data. This property is required for
follow-on processing.
Variable name for voltage values, specified as a string that is identical to the
corresponding column name in data. This property is required for
follow-on processing.
Variable name for current values, specified as a string that is identical to the
corresponding column name in data. This property is required when
data is a table. When data is a timetable,
the software uses the rowTimes property of the timetable for the
variable name "DateTime" and the time values.
Variable name for current values, specified as a string that is identical to the
corresponding column name in data. This property is required for
follow-on processing.
Variable name for current values, specified as a string that is identical to the
corresponding column name in data. This property is required for
follow-on processing.
Variable name for current values, specified as a string that is identical to the
corresponding column name in data. This variable is optional for
follow-on processing.
Cycles to exclude, specified as a vector of cycle indices. The values in this vector should correspond to a subset of the existing cycle indices. Values that fall outside this range are ignored.
Threshold for allowable variance for accurately identifying cycling modes, specified as a numeric value.
Number of interpolation points to use in the curve calculations, specified as an integer.
Number of interpolation points to use in the curve calculations, specified as an integer.
This property is read-only.
Data segmentation flag, specified as false before segmentation
and true after applying segmentData to bdp.
If you reset any variable names after segmenting the data, the software resets
IsSegmented to false.
This property is read-only.
Temperature availability flag, specified as false or
true. This property is set to true if
TemperatureVariable has been set.
Object Functions
segmentData | Classify and organize raw battery measurement data by identifying cycling phase, cycling mode, and data validity |
computeDifferentialCurves | Compute incremental capacity, differential voltage, and differential temperature curves that can be used to analyze battery behavior under constant-current conditions |
Examples
Load the data cleanData10, which contains cleaned battery data through the tenth test cycle. It is known that Cycle 0 contains incorrectly collected data. Display the first five lines.
This example data represents only a small portion of battery life, at the beginning of the cycling test.
load clean_bat_data cleanData10 head(cleanData10,5)
Data_Point DateTime Step_Index Cycle_Index Current Voltage Charge_Capacity Discharge_Capacity Charge_Energy Discharge_Energy dV/dt Internal_Resistance Temperature
__________ ____________________ __________ ___________ _______ _______ _______________ __________________ _____________ ________________ ___________ ___________________ ___________
1 13-May-2017 03:21:40 0 0 0 3.3018 0 0 0 0 -1.5259e-05 0.022012 30.457
2 13-May-2017 03:21:40 0 0 0 3.3018 0 0 0 0 -1.5259e-05 0.022012 30.457
3 13-May-2017 03:21:50 0 0 0 3.3018 0 0 0 0 -2.6703e-05 0.022012 30.445
4 13-May-2017 03:22:00 0 0 0 3.3018 0 0 0 0 -1.5259e-05 0.022012 30.501
5 13-May-2017 03:22:10 0 0 0 3.3018 0 0 0 0 -8.5831e-06 0.022012 30.501
The table includes current, voltage, and temperature measurements, as well as indices for step and cycle index. The table also includes other measurements, such as Internal_Resistance.
Create Battery Test Data Parser
Create the batteryTestDataParser object bdp. Use dot notation to assign variable names in the table to properties. In this example, the battery cycle is temperature controlled to a roughly constant value, and can be excluded from the analysis. Therefore, do not set the TemperatureVariable property name.
bdp = batteryTestDataParser(cleanData10); bdp.CurrentVariable = "Current"; bdp.VoltageVariable = "Voltage"; bdp.TimeVariable = "DateTime"; bdp.CycleIndexVariable = "Cycle_Index"; bdp.StepIndexVariable = "Step_Index"
bdp =
BatteryTestDataParser with properties:
CurrentVariable: "Current"
VoltageVariable: "Voltage"
TimeVariable: "DateTime"
CycleIndexVariable: "Cycle_Index"
StepIndexVariable: "Step_Index"
TemperatureVariable: ""
ExcludedCycles: [1×0 double]
Tolerance: 5.0000e-05
NumInterpolatedPoints: 1000
WindowSize: 10
IsSegmented: 0
IsTemperatureAvailable: 0
bdp contains the properties that you set, and ignores other table columns.
Exclude Known Erroneous Cycle Data
Exclude Cycle-0 data from processing by setting the ExcludedCycles property to 0.
bdp.ExcludedCycles = 0;
Segment Data
Segment the data so that it can be analyzed by cycle and step.
bdpseg = segmentData(bdp); head(bdpseg,5)
Data_Point DateTime Step_Index Cycle_Index Current Voltage Charge_Capacity Discharge_Capacity Charge_Energy Discharge_Energy dV/dt Internal_Resistance Temperature CyclingModes CyclingPhases IsValid
__________ ____________________ __________ ___________ _______ _______ _______________ __________________ _____________ ________________ ___________ ___________________ ___________ ____________ _____________ _______
1 13-May-2017 03:21:40 0 0 0 3.3018 0 0 0 0 -1.5259e-05 0.022012 30.457 Undefined Undefined false
2 13-May-2017 03:21:40 0 0 0 3.3018 0 0 0 0 -1.5259e-05 0.022012 30.457 Undefined Undefined false
3 13-May-2017 03:21:50 0 0 0 3.3018 0 0 0 0 -2.6703e-05 0.022012 30.445 Undefined Undefined false
4 13-May-2017 03:22:00 0 0 0 3.3018 0 0 0 0 -1.5259e-05 0.022012 30.501 Undefined Undefined false
5 13-May-2017 03:22:10 0 0 0 3.3018 0 0 0 0 -8.5831e-06 0.022012 30.501 Undefined Undefined false
The software adds columns for Step_Index, Cycle_Index, and IsValid. Because the data begins with Cycle 0 and you are excluding this cycle, IsValid is set to false for this data. The data table encapsulated by bdp also contains these new columns.
Create Battery Test Feature Extractor
Create a batteryTestFeatureExtractor object bft.
bft = batteryTestFeatureExtractor()
bft =
BatteryTestFeatureExtractor with properties:
CyclingPhase: "Charge"
Statistics: 1
CycleCumulative: 1
CC: 1
CV: 1
CCCV: 1
IC: 1
DV: 0
DT: 0
Using dot notation, specify that both charge and discharge cycles be used for features. Accept the default settings for the feature set selections.
bft.CyclingPhase = "Both";Extract Features
Use extract to extract the specified features into the feature table ft.
ft = extract(bft,bdp);
Display the first five rows of ft.
head(ft,5)
Cycle_Index Charge_cumulativeCapacity Charge_cumulativeEnergy Charge_duration Charge_startVoltage Charge_Voltage_max Charge_Voltage_min Charge_Voltage_mean Charge_Voltage_std Charge_Voltage_skewness Charge_Voltage_kurtosis Charge_Current_max Charge_Current_min Charge_Current_mean Charge_Current_std Charge_Current_skewness Charge_Current_kurtosis Charge_Step5_IC_peak Charge_Step5_IC_peakWidth Charge_Step5_IC_peakLocation Charge_Step5_IC_peakProminence Charge_Step5_IC_peaksArea Charge_Step5_IC_peakLeftSlope Charge_Step5_IC_peakRightSlope Charge_Step5_IC_area Charge_Step5_IC__max Charge_Step5_IC__min Charge_Step5_IC__mean Charge_Step5_IC__std Charge_Step5_IC__skewness Charge_Step5_IC__kurtosis Charge_Step5_CC_duration Charge_Step5_CC_currentMedian Charge_Step5_CC_slope Charge_Step5_CC_energy Charge_Step5_CC_skewness Charge_Step5_CC_kurtosis Charge_Step6_IC_peak Charge_Step6_IC_peakWidth Charge_Step6_IC_peakLocation Charge_Step6_IC_peakProminence Charge_Step6_IC_peaksArea Charge_Step6_IC_peakLeftSlope Charge_Step6_IC_peakRightSlope Charge_Step6_IC_area Charge_Step6_IC__max Charge_Step6_IC__min Charge_Step6_IC__mean Charge_Step6_IC__std Charge_Step6_IC__skewness Charge_Step6_IC__kurtosis Charge_Step6_CC_duration Charge_Step6_CC_currentMedian Charge_Step6_CC_energy Charge_Step6_CC_skewness Charge_Step6_CC_kurtosis Charge_Step9_IC_peak Charge_Step9_IC_peakWidth Charge_Step9_IC_peakLocation Charge_Step9_IC_peakProminence Charge_Step9_IC_peaksArea Charge_Step9_IC_peakLeftSlope Charge_Step9_IC_peakRightSlope Charge_Step9_IC_area Charge_Step9_IC__max Charge_Step9_IC__min Charge_Step9_IC__mean Charge_Step9_IC__std Charge_Step9_IC__skewness Charge_Step9_IC__kurtosis Charge_Step9_CC_duration Charge_Step9_CC_currentMedian Charge_Step9_CC_energy Charge_Step9_CC_skewness Charge_Step9_CC_kurtosis Charge_Step9_CV_duration Charge_Step9_CV_voltageMedian Charge_Step9_CV_slope Charge_Step9_CV_energy Charge_Step9_CV_skewness Charge_Step9_CV_kurtosis Charge_Step9_CCCV_energyRatio Charge_Step9_CCCV_energyDifference Charge_Step5_CC_tInv Discharge_cumulativeCapacity Discharge_cumulativeEnergy Discharge_duration Discharge_startVoltage Discharge_Voltage_max Discharge_Voltage_min Discharge_Voltage_mean Discharge_Voltage_std Discharge_Voltage_skewness Discharge_Voltage_kurtosis Discharge_Current_max Discharge_Current_min Discharge_Current_mean Discharge_Current_std Discharge_Current_skewness Discharge_Current_kurtosis Discharge_Step10_IC_peak Discharge_Step10_IC_peakWidth Discharge_Step10_IC_peakLocation Discharge_Step10_IC_peakProminence Discharge_Step10_IC_peaksArea Discharge_Step10_IC_peakLeftSlope Discharge_Step10_IC_peakRightSlope Discharge_Step10_IC_area Discharge_Step10_IC__max Discharge_Step10_IC__min Discharge_Step10_IC__mean Discharge_Step10_IC__std Discharge_Step10_IC__skewness Discharge_Step10_IC__kurtosis Discharge_Step10_CC_duration Discharge_Step10_CC_currentMedian Discharge_Step10_CC_slope Discharge_Step10_CC_energy Discharge_Step10_CC_skewness Discharge_Step10_CC_kurtosis Discharge_Step10_CC_tInv Discharge_Step10_CV_duration Discharge_Step10_CV_voltageMedian Discharge_Step10_CV_slope Discharge_Step10_CV_energy Discharge_Step10_CV_skewness Discharge_Step10_CV_kurtosis Discharge_Step10_CCCV_energyRatio Discharge_Step10_CCCV_energyDifference ___________ _________________________ _______________________ _______________ ___________________ __________________ __________________ ___________________ __________________ _______________________ _______________________ __________________ __________________ ___________________ __________________ _______________________ _______________________ ____________________ _________________________ ____________________________ ______________________________ _________________________ _____________________________ ______________________________ ____________________ ____________________ ____________________ _____________________ ____________________ _________________________ _________________________ ________________________ _____________________________ _____________________ ______________________ ________________________ ________________________ ____________________ _________________________ ____________________________ ______________________________ _________________________ _____________________________ ______________________________ ____________________ ____________________ ____________________ _____________________ ____________________ _________________________ _________________________ ________________________ _____________________________ ______________________ ________________________ ________________________ ____________________ _________________________ ____________________________ ______________________________ _________________________ _____________________________ ______________________________ ____________________ ____________________ ____________________ _____________________ ____________________ _________________________ _________________________ ________________________ _____________________________ ______________________ ________________________ ________________________ ________________________ _____________________________ _____________________ ______________________ ________________________ ________________________ _____________________________ __________________________________ ____________________ ____________________________ __________________________ __________________ ______________________ _____________________ _____________________ ______________________ _____________________ __________________________ __________________________ _____________________ _____________________ ______________________ _____________________ __________________________ __________________________ ________________________ _____________________________ ________________________________ __________________________________ _____________________________ _________________________________ __________________________________ ________________________ ________________________ ________________________ _________________________ ________________________ _____________________________ _____________________________ ____________________________ _________________________________ _________________________ __________________________ ____________________________ ____________________________ ________________________ ____________________________ _________________________________ _________________________ __________________________ ____________________________ ____________________________ _________________________________ ______________________________________
1 1.0912 3.8091 1837.2 3.2889 3.6004 3.2889 3.5127 0.076284 -0.26567 2.0059 6.6013 0.064569 2.1754 2.3511 0.94798 2.3503 5.7922 0.0035305 3.5354 1.0442 0.017545 455.73 -156.9 0.47685 5.7922 0.20359 1.8285 1.8935 0.92129 2.2916 260.48 6.5999 NaN 1.6668 -1.1606 3.3064 205.55 0.00032391 3.4848 202.29 0.05434 5.7674e+05 -6.4963e+05 0.29419 205.55 -155.16 5.5596 23.701 1.2326 34.729 289.56 3.96 1.1145 0.23118 1.8814 2.995 0.038488 3.4137 2.5201 0.086013 114.72 -27.805 0.17715 2.995 0.14983 0.83697 0.83355 1.2133 3.0573 579.99 1.1 0.61058 1.401 4.4162 610.01 3.6002 -0.00073938 0.11516 1.8343 5.892 5.3022 0.49542 NaN 1.0858 3.3053 1186.2 3.3297 3.3297 1.9996 2.7518 0.46306 -0.69494 1.7957 -0.021996 -4.4004 -3.6203 1.6577 1.6544 3.741 6.7938 0.11998 3.1504 6.6838 0.53179 39.956 -124.97 1.0703 6.7938 -0.014509 0.80702 1.5432 2.3837 7.765 875.8 -4.4 0.00030465 3.2745 -1.363 3.6784 760.95 300.43 1.9999 0.00093293 0.016935 -2.3131 9.8519 193.36 3.2575
2 1.1011 3.8354 1846.4 3.1837 3.6004 3.1837 3.5029 0.088036 -0.73117 3.6177 6.6015 0.05476 2.2175 2.3674 0.90434 2.2705 5.836 0.0030023 3.5316 0.68589 0.016269 213.15 -250.16 0.44404 5.836 0.13184 1.2512 1.6785 1.544 3.9793 242.78 6.6003 0.013906 1.5463 -0.96454 2.5803 246.89 0.00025026 3.4836 243.78 0.044018 7.4402e+05 -9.5271e+05 0.29516 246.89 -171.99 5.735 24.116 1.8446 43.434 289.6 3.96 1.1142 0.3299 1.9009 3.2962 0.035999 3.4169 2.8106 0.092468 74.392 -44.561 0.18327 3.2962 0.14598 0.8614 0.89265 1.2528 3.1663 600 1.1 0.6313 1.5064 4.9068 590 3.6002 -0.00069836 0.10311 2.1156 7.6634 6.1227 0.52819 0.7253 1.0876 3.3111 1191.7 3.3199 3.3199 1.9996 2.7293 0.46952 -0.62182 1.679 -0.022033 -4.4006 -3.5379 1.7243 1.4985 3.249 6.7992 0.11954 3.1471 6.6772 0.54781 38.502 -127.78 1.0721 6.7992 -0.019529 0.81345 1.5523 2.3741 7.7121 877.32 -4.4 0.00030269 3.2804 -1.3602 3.6885 761.05 304.33 1.9999 0.00088585 0.016846 -2.3857 10.332 194.73 3.2635
3 1.1268 3.9237 1851.9 3.0906 3.6004 3.0906 3.4951 0.099424 -1.171 5.1736 6.6013 0.051631 2.3933 2.4829 0.78503 1.9785 5.6697 0.016443 3.5325 0.78925 0.085603 26.599 -25.654 0.52629 5.6697 0.091083 1.1412 1.7003 1.6585 4.2436 287.82 6.5999 0.016691 1.8347 -1.0243 2.7645 267.61 0.00023141 3.4833 264.23 0.045419 1.6242e+06 -6.446e+05 0.2942 267.61 -123.61 5.7734 24.827 3.291 46.434 289.61 3.96 1.1141 0.3022 1.9029 3.2141 0.0366 3.415 2.7198 0.094457 94.884 -39.55 0.18629 3.2141 0.13535 0.87375 0.91302 1.2725 3.2106 609.99 1.1 0.64142 1.6531 5.6046 580 3.6002 -0.00073569 0.097314 1.6633 5.2229 6.5913 0.54411 6.0581 1.0972 3.3433 1198.5 3.4424 3.4424 1.9996 2.7497 0.47889 -0.6258 1.7303 -0.022201 -4.4005 -3.5499 1.7126 1.5172 3.3065 6.784 0.12162 3.1536 6.7494 0.53094 40.957 -120.68 1.0818 6.784 -0.021832 0.75001 1.5018 2.5311 8.5466 885.19 -4.4 0.00030422 3.3127 -1.3307 3.7906 760.88 303.26 1.9999 0.00094755 0.016758 -2.4133 9.9184 197.68 3.296
4 1.1285 3.9265 1854 3.0425 3.6004 3.0425 3.4886 0.10833 -1.4374 6.0532 6.6018 0.053802 2.4518 2.4836 0.73677 1.9175 5.7409 0.009714 3.526 0.75229 0.050046 78.213 -36.467 0.51466 5.7409 0.077484 1.0179 1.6221 1.8547 4.9973 281.47 6.6 0.017771 1.7912 -0.8937 2.4507 284.71 0.0002261 3.483 281.22 0.048138 1.1692e+06 -1.2026e+06 0.29395 284.71 -102.46 5.8213 24.828 3.8645 49.474 289.63 3.96 1.114 0.43977 1.9856 3.3632 0.038079 3.4125 2.8494 0.095633 120.64 -33.348 0.18632 3.3632 0.13527 0.88511 0.93232 1.2628 3.1856 610 1.1 0.64157 1.5256 4.9396 575.01 3.6002 -0.00071665 0.094806 1.8886 6.4618 6.7672 0.54677 8.4167 1.097 3.3423 1197.7 3.4182 3.4182 1.9996 2.735 0.481 -0.57359 1.6517 -0.022873 -4.4004 -3.5176 1.739 1.4618 3.1404 6.7845 0.12091 3.1502 6.7385 0.54007 40.191 -127.15 1.0815 6.7845 -0.0079904 0.76353 1.5115 2.4977 8.364 884.95 -4.4 0.00029715 3.3115 -1.2773 3.5595 765.91 302.74 2 0.00085562 0.016897 -2.5036 11.241 195.99 3.2946
5 1.1089 3.8666 1840.9 3.2517 3.6004 3.2517 3.5057 0.080206 -0.28465 2.2471 6.6012 0.054041 2.2484 2.3956 0.88864 2.2173 5.8282 0.0027343 3.5326 0.87356 0.013627 462.29 -321.82 0.51181 5.8282 0.17263 1.6991 1.9009 1.0239 2.4585 279.64 6.6 NaN 1.7887 -1.0714 3.0945 266.87 0.00025179 3.4829 263.3 0.046322 1.4141e+06 -5.3883e+05 0.29153 266.87 -99.447 5.7487 25.36 3.6798 43.967 289.6 3.96 1.1139 0.31689 1.8507 3.3702 0.036075 3.4174 2.8835 0.097699 65.705 -57.197 0.18785 3.3702 0.14183 0.87871 0.93491 1.2898 3.2579 615 1.1 0.64671 1.6549 5.3183 575.01 3.6002 -0.00070527 0.09545 2.0023 7.0948 6.7754 0.55126 NaN 1.0899 3.3189 1191.5 3.319 3.319 1.9957 2.7191 0.47534 -0.57212 1.6031 -0.022711 -4.4004 -3.5032 1.7484 1.4358 3.0653 6.7791 0.12181 3.1534 6.6528 0.53007 40.813 -124.92 1.0744 6.7791 -0.013775 0.81196 1.5549 2.3807 7.7342 879.13 -4.4 0.00030022 3.2881 -1.3286 3.5449 760.85 302.39 1.9999 0.00089706 0.017049 -2.309 9.7528 192.86 3.271
The feature table starts at Cycle 1.
Plot the charge voltage kurtosis.
plot(ft.Cycle_Index,ft.Charge_Voltage_kurtosis)
title("Charge Voltage Kurtosis by Cycle")
Version History
Introduced in R2024b
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)