Four batteries of the same type, each a single 1.1 Ah lithium-cobalt-oxide prismatic cell, were repeatedly charged by a constant-current/constant-voltage protocol and discharged at room temperature from 2010-08-16 to 2011-02-03.
This page follows the data from the cycler to the SOH series: what was measured, what the cycler wrote, and how 1,119,328 logged samples become one state-of-health value per retained discharge. The same raw data also feeds a second feature set, the voltage-shape matrix, which has its own Dataset page.
CALCE Battery Research Group, University of Maryland; per-cycle SOH extraction from a PC5251 student project (National University of Singapore, 2024).
Each battery sat on its own channel of an Arbin battery tester and was cycled under one repeating schedule. CALCE documents the charge as constant current at 0.5 C until 4.2 V, then 4.2 V held until the current falls below 0.05 A, and a constant-current discharge to a 2.7 V cut-off. The logs show the same schedule for all four batteries: about +0.55 A during constant-current charge and −1.1 A (1 C) during discharge.
From the test bench to this page
- DocumentedTest bench (CALCE)
Four 1.1 Ah lithium-cobalt-oxide batteries on an Arbin tester, CC–CV cycling from 2010-08-16 to 2011-02-03
- HeldRaw workbooks
4 archives, 106 workbooks, 1,119,328 samples
- ReproducedNotebook recipe
Discharge-step integral ÷ 4,100 A·s, then a 40-discharge ± 2 SD filter; rerun here
- HeldSupplied SOH series
4 CSVs, 3,786 rows; the rerun gives 881 / 933 / 972 / 1,002 rows, not exactly the supplied 882 / 936 / 972 / 996
Documented: described by CALCE, not rerun here. Reproduced: rerun here on the raw workbooks. Held: the bytes this page reads.
The basic unit: one cycle
A cycle is one charge followed by one discharge, with rests in between. The figure shows one early cycle of CS2_35, exactly as logged.
Two panels share one time axis. Current is positive while charging and negative while discharging.
What each sample records
| Column | Unit | Meaning |
|---|---|---|
Test_Time(s) | s | Time since the test in this workbook started; restarts in every workbook |
Step_Time(s) | s | Time since the current schedule step started |
Date_Time | date-time | Wall-clock timestamp |
Step_Index | — | Schedule step number |
Cycle_Index | — | Cycle counter; restarts in every workbook |
Current(A) | A | Battery current; positive = charge, negative = discharge |
Voltage(V) | V | Terminal voltage |
Charge_Capacity(Ah) | Ah | Charge passed, cumulative within the workbook |
Discharge_Capacity(Ah) | Ah | Charge removed, cumulative within the workbook |
Internal_Resistance(Ohm) | Ω | Resistance value reported by the tester |
Samples arrive about every 30 s, further apart while the voltage is held at 4.2 V. Later workbooks also carry a per-cycle Statistics sheet.
A workbook, opened
The first rows of the data sheet in CS2_35_10_15_10.xlsx (battery CS2_35): one row per logged sample.
| Test_Time(s) | Step_Time(s) | Date_Time | Step_Index | Cycle_Index | Current(A) | Voltage(V) | Charge_Capacity(Ah) | Discharge_Capacity(Ah) | Internal_Resistance(Ohm) |
|---|---|---|---|---|---|---|---|---|---|
| 30.00052 | 30.00053 | 2010-10-08 14:29:45 | 1 | 1 | 0.0 | 3.42422 | 0.0 | 0.0 | 0.0 |
| 60.0157 | 60.0157 | 2010-10-08 14:30:15 | 1 | 1 | 0.0 | 3.42438 | 0.0 | 0.0 | 0.0 |
| 90.03081 | 90.03081 | 2010-10-08 14:30:45 | 1 | 1 | 0.0 | 3.42438 | 0.0 | 0.0 | 0.0 |
| 120.01435 | 120.01435 | 2010-10-08 14:31:15 | 1 | 1 | 0.0 | 3.42438 | 0.0 | 0.0 | 0.0 |
| 150.03051 | 30.01573 | 2010-10-08 14:31:46 | 2 | 1 | 0.55012 | 3.56749 | 0.00459 | 0.0 | 0.0 |
| 180.04531 | 60.03053 | 2010-10-08 14:32:16 | 2 | 1 | 0.5503 | 3.61136 | 0.00917 | 0.0 | 0.0 |
| 210.06057 | 90.0458 | 2010-10-08 14:32:46 | 2 | 1 | 0.55012 | 3.64681 | 0.01376 | 0.0 | 0.0 |
| 240.07559 | 120.06081 | 2010-10-08 14:33:16 | 2 | 1 | 0.55012 | 3.6766 | 0.01835 | 0.0 | 0.0 |
One workbook as a signal
The same workbook holds 50 cycles and 17,139 samples, starting 2010-10-08 14:29. Its first 48 hours are drawn; every tooth is one charge/discharge cycle.
How the workbooks cover each battery’s life
Each bar is one workbook, placed by the timestamps inside it. Hover for the file name and contents.
What the raw record does not give you directly
- Cycle numbers restart in every workbook. A cycle count across a battery’s life has to be built by offsetting each file.
- File names carry the export date, not the data date.
CS2_35_10_15_10.xlsxstarts on 2010-10-08. Files must be ordered by their first timestamp. - 2 workbooks are duplicate final exports (CS2_35_2_4_11.xlsx, CS2_38_2_4_11.xlsx): different files holding the same samples.
- Capacity columns are cumulative within a workbook, so a cycle’s capacity is a difference, not a value.
- Not every logged cycle is a complete, on-protocol cycle. Interrupted, resumed and sparsely logged cycles sit in the same sheets.
The submitted preprocessing notebook reduces every discharge to one number, then removes values that stray from their neighbours. Each step below runs on the raw workbooks described above.
| Step | Evidence | Operation | Result |
|---|---|---|---|
| 0 | Documented | CALCE cycles the batteries on an Arbin tester and exports dated workbooks | 4 archives |
| 1 | Reproduced | Order workbooks by their first timestamp. Duplicate exports are not removed | 106 workbooks |
| 2 | Reproduced | Within each workbook and Cycle_Index, keep rows with Step_Index 7, the discharge step | 932 / 973 / 1,038 / 1,078 discharges |
| 3 | Reproduced | Charge removed: −Σ I·Δt over those rows, divided by a fixed 4,100 A·s (≈ 1.14 Ah, above the 1.1 Ah rating) | one dimensionless value per discharge |
| 4 | Reproduced | Split into windows of 40 discharges, starting at the second; in each, keep values within mean ± 2 SD. The first discharge and the final partial window are never examined, so they are dropped | 881 / 933 / 972 / 1,002 values |
| 5 | Reproduced | Renumber the survivors 1…N | SOH series |
Where the discharges go
Counts by battery
| Battery | Found | First | Final partial window | Outside ± 2 SD | Kept | Kept from a duplicate export |
|---|---|---|---|---|---|---|
| CS2_35 | 932 | 1 | 11 | 39 | 881 | 35 |
| CS2_36 | 973 | 1 | 12 | 27 | 933 | 0 |
| CS2_37 | 1,038 | 1 | 37 | 28 | 972 | 0 |
| CS2_38 | 1,078 | 1 | 37 | 38 | 1,002 | 12 |
Follow one discharge
Pick a discharge to see it at each step, from the samples the cycler wrote to its place in the series.
The supplied SOH series: one value per retained discharge, renumbered 1…N. The stored column is named capacity, but it is dimensionless SOH. No smoothing or resampling is applied in this view.
The axes stay the same for every battery: supplied cycle index and dimensionless SOH. Every supplied row is drawn. The table contains the same values.
All observations for the selected battery
| Column | Unit | Meaning |
|---|---|---|
cycle | — | Position after filtering and renumbering, 1…N; not a raw cycle number |
capacity | — | SOH: charge removed in the discharge step ÷ 4,100 A·s |
- Re-running the recipe on the current archives gives 881/933/972/1,002 rows, not the supplied 882/936/972/996. The demo pages use the supplied files.
- Because duplicate exports are not removed, the rebuild keeps 35 (CS2_35) and 12 (CS2_38) values that repeat discharges already counted.
cycleis renumbered after filtering, so it is not a join key to raw cycles, and gaps left by removed values are erased.- The 4,100 A·s denominator (about 1.14 Ah) is fixed and differs from the 1.1 Ah rating, so SOH here is a fraction of that fixed reference, not of the rated capacity. The curve-shape matrix’s
sohlabel divides by the 1.1 Ah rating instead.
CALCE Battery Data Archive, CS2 samples and tests; CALCE Battery Research Group, University of Maryland. Derived per-cycle extraction: PC5251 final project, National University of Singapore (2024).
Battery SOH forecast explorer: forecasting SOH with an LSTM and two simple baselines, with battery CS2_38 held out for testing; and its Key Findings page.