haotianblog
dQ/dV Incremental Capacity Analyser
Search
Ask the AI

dQ/dV Incremental Capacity Analyser

Turn exported voltage-capacity cycling data into a dQ/dV incremental capacity curve. Peaks in dQ/dV correspond to phase transitions in the electrode materials; how those peaks shift, shrink and merge over a cell’s life is the most direct non-invasive way to identify the degradation mode – loss of active material, loss of lithium inventory, or impedance growth.

Nothing is uploaded. Parsing, differentiation, smoothing and plotting all happen in your own browser; this tool makes no network requests.

Why smoothing is part of the measurement

Arithmetically dQ/dV is just a finite difference. Differentiate real data point by point, though, and what comes out is close to pure noise: capacity has finite measurement precision, adjacent voltage samples are very close together, and dividing the first by the second amplifies the noise by orders of magnitude. The peaks that carry the diagnosis only emerge after smoothing.

That creates a trade-off you have to make yourself: a window wide enough to reveal a peak is wide enough to move it — and peak movement is exactly what people then read as degradation. So this tool always draws the raw curve underneath the smoothed one, and exposes the window and polynomial order rather than hiding them behind a fixed default that would make the peaks look cleaner than the data supports.

Smoothing uses Savitzky-Golay: a least-squares polynomial fit inside a sliding window. At order 0 it reduces exactly to a moving average; at order 2 or 3 it suppresses noise while preserving peak height, which a moving average flattens. Switching the order between 0 and 2 shows the difference in peak height directly.

The first and last half-window are smoothed too, by evaluating the same window’s fitted polynomial at an off-centre position. Many implementations copy the raw points through instead, which leaves unsmoothed noise inside a curve the peak finder treats as smoothed – and it duly reports that noise as phase transitions.

What counts as a peak

The criterion is prominence, not absolute height: a local maximum only counts if it rises more than 15% of the curve’s full range above the higher of the two valleys flanking it.

An absolute-height threshold looks more intuitive but conflates a peak’s height with the height of the baseline underneath it. Noise riding on the baseline can clear the threshold while barely rising above its own surroundings – which is not a phase transition at all. With prominence, noise bumps and real peaks are typically an order of magnitude apart, so the exact threshold stops mattering.

Which differentiation method to use

MethodSuitsFails when
Fixed-voltage binning (default) Ordinary cycler exports Too wide a bin merges peaks that sit close together
Point-wise central difference Evenly sampled, low-noise data Highly sensitive to uneven sampling; produces spurious spikes

Binning is the default because cycler voltage sampling is almost never even: during a constant-current segment voltage changes slowly and samples bunch up, while near cutoff it changes quickly and they thin out. A point-wise difference reads that change in sampling density as a change in slope and draws a spiky curve.

There is one detail in binning that is easy to get wrong: do not divide a bin’s capacity range by the nominal bin width. Where sampling is sparse, the samples inside a bin may span only 80% of its width, and dividing by the full width under-reads the slope by exactly that 20%. Accumulate the delta-Q and delta-V of adjacent sample pairs separately and then divide, so the denominator is always the span the data actually covers.

Input format

  • Two numeric columns: voltage (V) and capacity (Ah or mAh – the vertical axis follows whatever you supply).
  • Comma, tab and semicolon delimiters are detected automatically.
  • A header row is optional. When present, the voltage and capacity columns are guessed from the names and can be corrected in the dropdowns.
  • Comment and unit rows in the middle of the file are skipped – any row where a column is not numeric is dropped whole.
  • Supply a single charge or a single discharge. Mixing both makes capacity double back on itself, and the derivative is meaningless at the turning point.

Ways it can fail

  • The curve is all spikes: usually point-wise differentiation on unevenly sampled data. Switch to binning.
  • No peaks at all: the smoothing half-window is too wide and has flattened them. Reduce it and set the order to 2. It can also mean the whole curve has little range, since the prominence threshold scales with that range.
  • Peak positions drift noticeably with the smoothing settings: that peak is not robust at this data’s signal-to-noise ratio, so do not use it for quantitative comparison. The tool is reporting data quality honestly, not malfunctioning.
  • Nothing parses: check for multi-row headers in the export, or decimal commas instead of decimal points.
  • Voltage plateaus (delta-V = 0) are skipped, because the derivative is undefined there.

Related reading

Scroll down