Second-Life EV Battery EIS: Nyquist Fit and Grading

Fit measured impedance with a Randles–CPE–Warburg model. Inspect Nyquist and Bode plots, compare health indicators, and set transparent second-life battery grades.

#CPE #EIS #Randles circuit #second-life batteries #Warburg diffusion

Use this EIS battery analysis calculator to fit an impedance spectrum, compare a retired EV module with a matched reference, and assign an explicit screening grade for stationary storage. It is intended for engineers evaluating second-life batteries and for students learning how a Nyquist plot relates to an equivalent circuit.

Choose Enter module measurements, set the number of points, and open each measured row to enter your own frequency, real impedance Z′ and signed imaginary impedance Z″. Frequency is in Hz and impedance is in mΩ. Capacitive Z″ values are negative; the Nyquist plot displays −Z″ upward. Enter rows in increasing frequency order. Use 8–40 points spanning the diffusion tail, charge-transfer arc and approach to the ohmic intercept. Remove inductive high-frequency points only when the remaining window is physically represented by this circuit.

The secondary Tutorial spectrum (ungraded) option contains all 57 capacitive points from the public impedance.py example dataset. Its battery type, age, SOC and temperature are unspecified. It is loaded initially to show the fitting plots, while grading remains on hold. The matching assertion defaults to false, and tutorial mode cannot issue a module grade. No documented matched EV baseline is bundled; enter your module measurements and matched reference before grading.

This Randles circuit calculator fits ohmic resistance R₀, charge-transfer resistance Rct, CPE admittance and exponent, and the semi-infinite Warburg coefficient σ. The circuit places the CPE in parallel with the series combination of Rct and Warburg impedance. The Nyquist plot overlays measured points and the fitted curve with equal horizontal and vertical impedance scales. Bode magnitude and phase plots show frequency behavior; the residual chart reveals systematic departures from the model.

Enter reference R₀, Rct and the real Warburg resistance at ω=1 rad/s from the same module design at the same temperature and SOC, using consistent connections and the same circuit. The normalized Warburg input in mΩ has the same numeric value as σ in mΩ·s⁻½. Set the maximum growth ratios for grades A, B and C. Every indicator must meet a tier’s limit. Grade C denotes a restricted-duty candidate; values outside C are rejected under the entered policy. These thresholds are yours to validate against the intended storage application.

If a discharge-capacity test is available, enable it and enter measured and rated capacity. Capacity SOH is then calculated directly, and its grade can downgrade the EIS result. EIS alone does not provide a universal capacity estimate. A hold replaces the grade when fit quality, Jacobian rank, parameter bounds, measured response, frequency coverage or reference matching is inadequate. Optimizer damping is excluded from the reported covariance.

Second life battery testing also needs checks of self-discharge, cell imbalance, insulation, thermal behavior and usable power at the intended duty cycle. The tool does not certify safety, predict remaining life, distinguish overlapping electrode processes or replace these tests. Installation work belongs to a qualified person.

How it is calculated

The topology is R0+[CPE∥(Rct+ZW)]R_0 + [\mathrm{CPE}\parallel(R_{ct}+Z_W)], with the Warburg element inside the faradaic branch. With ω=2πf\omega=2\pi f:

ZW=σ(1−j)/ω,Z=R0+[Q(jω)α+1Rct+ZW]−1.Z_W=\sigma(1-j)/\sqrt{\omega},\qquad Z=R_0+\left[Q(j\omega)^\alpha+\frac{1}{R_{ct}+Z_W}\right]^{-1}.

The CPE is represented numerically by its admittance at ω0=1 rad/s\omega_0=1\ \mathrm{rad/s}, so its displayed unit is S. Conventional Q has the same SI numerical value but units S·sᵅ, which vary with α. The Warburg convention is σ in Ω·s⁻½; it differs by √2 from the coefficient of 1/jω1/\sqrt{j\omega}. The reference input is the real Warburg resistance at ω=1 rad/s, in mΩ; its numeric value equals σ expressed in mΩ·s⁻½. This normalization keeps the complete editable reference value visible.

A three-start bounded Levenberg–Marquardt fit uses analytic complex derivatives, logarithmic positive parameters and 0.2 ≤ α ≤ 1. Each complex residual is divided by the measured |Z|; real and imaginary parts receive equal weight. Up to 65 iterations per start are used. The RMS is ∑∣(Zfit−Zmeas)/∣Zmeas∣∣2/N\sqrt{\sum |(Z_{fit}-Z_{meas})/|Z_{meas}||^2/N}. Local one-sigma uncertainties use the inverse of the unregularized weighted information matrix, with 2N−5 degrees of freedom. Optimizer damping is used only to take fit steps; it contributes no measurement information. The smallest/largest information eigenvalue ratio must exceed 10⁻¹² before covariance is evaluated. Rank-deficient covariance is unavailable rather than regularized into a finite uncertainty. Positive parameters within 0.1 log units of either numerical bound (−24 or +24), and α at its lower bound, are unresolved; α=1 remains the valid ideal-capacitor limit.

The diffusion-free arc frequency is fa=(RctQ)−1/α/(2π)f_a=(R_{ct}Q)^{-1/\alpha}/(2\pi) and its equivalent capacitance is 1/(2πfaRct)1/(2\pi f_a R_{ct}). These describe the isolated CPE arc; the actual full-spectrum peak can shift with diffusion. The diffusion indicator is σ, not a material diffusion constant D.

The largest of R₀/reference, Rct/reference and σ/reference selects the EIS tier. If capacity is supplied, the worse capacity tier governs. A hold takes precedence over any tier. Gamry’s application note (s4, pp. 6–7) supplies the circuit benchmarks; Rastegarpanah et al. (s3, pp. 1–2, 7–9) supports the use and limitations of EIS screening.

Assumptions

Small-signal, linear, stable measurements of one module design at fixed SOC and temperature; reproducible contacts and four-wire compensation. One depressed charge-transfer arc and semi-infinite diffusion describe the selected frequency window. Inductive points are excluded before fitting.

The secondary, ungraded tutorial measurements are the public impedance.py fitting sample, all 57 capacitive points, with unspecified cell provenance and conditions. They are not documented retired-EV measurements. The reference resistances, σ and grading limits are illustrative user policy, not published universal acceptance thresholds. No capacity SOH is inferred from EIS.

The matched-reference assertion defaults to false. Tutorial mode never yields an EV module grade, even if this box is checked. Select entered module measurements, provide a documented matched reference, and confirm matching to enable grading. The cited EV study identifies an open Nissan Leaf dataset (DOI 10.6084/m9.figshare.12227282); its raw files could not be retrieved here, so no matched EV baseline is claimed.

Where it applies

A storage candidate means the entered EIS policy is met; it does not establish fitness or certify a module. Confirm capacity, self-discharge, cell imbalance, insulation, thermal behavior and the intended current/duty cycle before reuse. Installation work belongs to a qualified person.

Use a matched reference with the same chemistry, series/parallel arrangement, SOC, temperature and contact method. No automatic temperature correction is applied. Poor residuals, a rank-deficient Jacobian, a fit at a numerical bound, unavailable or excessive parameter uncertainty, sensitivity inflation ≥10⁶, nonconvergence or missing arc/diffusion coverage withhold grading. Coverage requires at least a decade on either side of the diffusion-free arc frequency, σ/√ωmin ≥ 0.2 Rct, and measured real-impedance span and reactive magnitude each exceeding the entered response floor times max |Z|. The default response floor is 0.0001 (0.01%); set it using the measurement resolution. These are explicit screening heuristics, not universal identifiability guarantees.

Local uncertainty assumes independent relative measurement errors. Model mismatch and correlated errors can make it optimistic; inspect residual patterns even if the fit passes. A low residual does not prove the model is unique or satisfy a Kramers–Kronig validation. EIS data quality must be checked experimentally.

Finite diffusion, multiple arcs, SEI separation and lead inductance require an expanded circuit or a justified measurement window. This tool keeps the full stated Randles–CPE–semi-infinite-Warburg topology. It does not estimate D without electrode geometry and thermodynamic information. User entry supports 8–40 points because of the catalog’s input-field limit; retain measurements across the whole fitted window. All 57 sample points are fitted at defaults. The fitted curves use 360 directly evaluated frequencies without interpolation.

The cited study describes a 2011 Nissan Leaf pack (s3, p. 8), while the dataset’s public DataCite metadata describes a 2012 Leaf. Resolve that provenance discrepancy and verify test conditions before adopting a matched EV baseline.

References

  • Barsoukov & Macdonald (eds.), Impedance Spectroscopy: Theory, Experiment, and Applications, 2nd ed., Wiley, 2005. https://doi.org/10.1002/0471716243 (general bibliographic reference; no paywalled full text used).
  • Gamry Instruments, Basics of Electrochemical Impedance Spectroscopy, equivalent circuits and mixed kinetic/diffusion control. https://www.gamry.com/application-notes/EIS/basics-of-electrochemical-impedance-spectroscopy/
  • Rastegarpanah, Hathaway & Stolkin, Rapid Model-Free State of Health Estimation for End-of-First-Life Electric Vehicle Batteries Using Impedance Spectroscopy, Energies 14 (2021) 2597. https://doi.org/10.3390/en14092597
  • Murbach et al., impedance.py: A Python package for electrochemical impedance analysis, JOSS 5 (2020) 2349. https://doi.org/10.21105/joss.02349 ; sample data: https://github.com/ECSHackWeek/impedance.py/blob/main/data/exampleData.csv
  • Independent numerical comparison: Python 3 / NumPy 2.0.2 / SciPy 1.15.3 and the public impedance.py element functions; attached source s6.
  • Rastegarpanah, EIS Dataset & NN code, Figshare, DOI 10.6084/m9.figshare.12227282. https://doi.org/10.6084/m9.figshare.12227282 ; public dataset metadata verified at https://api.datacite.org/dois/10.6084/m9.figshare.12227282 ; raw spectra and a matched screening baseline not retrieved or substituted.

Inputs

InputSymbolUnitDefault
Spectrum sourcedata_sourceTutorial spectrum (ungraded)
Number of measured points
Enter increasing frequencies, with signed Z″ (capacitive values are negative).
n_points32
Reference ohmic resistanceRs_refmohm14
Reference charge-transfer resistanceRct_refmohm14
Reference Warburg resistance
Real Warburg impedance at ω=1 rad/s; its numeric value equals σ in mΩ·s⁻½.
sigma_refmohm2.3
Same design, SOC and temperature
Confirm only after supplying a reference measured on the same module design at the same SOC and temperature.
reference_matchedfalse
Grade A: maximum growth ratio
Each of R₀, Rct and σ must stay below this multiple of its reference.
limit_A1.25
Grade B: maximum growth ratiolimit_B1.75
Grade C: maximum growth ratiolimit_C2.5
Maximum relative fit RMS
A fraction of impedance magnitude; 0.05 means 5% complex RMS error.
rms_limit0.05
Maximum relative parameter uncertainty
Maximum local one-sigma uncertainty of R₀, Rct or σ, divided by its fitted value.
uncertainty_limit0.5
Minimum spectral response fraction
Both measured real span and reactive magnitude must exceed this fraction of max |Z|.
response_floor0.0001
Include measured discharge capacitycapacity_knownfalse
Rated capacitycapacity_ratedA*h60
Measured capacitycapacity_measuredA*h48
Grade A: minimum capacity fractioncap_A0.8
Grade B: minimum capacity fractioncap_B0.7
Grade C: minimum capacity fractioncap_C0.6
Measured point 1
Choose “Enter your own values” to type this row; use the units shown.
p01P01
Measured point 2p02P03
Measured point 3p03P05
Measured point 4p04P06
Measured point 5p05P08
Measured point 6p06P10
Measured point 7p07P12
Measured point 8p08P14
Measured point 9p09P15
Measured point 10p10P17
Measured point 11p11P19
Measured point 12p12P21
Measured point 13p13P23
Measured point 14p14P24
Measured point 15p15P26
Measured point 16p16P28
Measured point 17p17P30
Measured point 18p18P32
Measured point 19p19P34
Measured point 20p20P35
Measured point 21p21P37
Measured point 22p22P39
Measured point 23p23P41
Measured point 24p24P43
Measured point 25p25P44
Measured point 26p26P46
Measured point 27p27P48
Measured point 28p28P50
Measured point 29p29P52
Measured point 30p30P53
Measured point 31p31P55
Measured point 32p32P57
Measured point 33p33P57
Measured point 34p34P57
Measured point 35p35P57
Measured point 36p36P57
Measured point 37p37P57
Measured point 38p38P57
Measured point 39p39P57
Measured point 40p40P57

Results

With the default inputs above, the calc gives:

ResultValue
Screening gradeHold: resolve screening issue
Governing indicatorMatch reference conditions
Ohmic resistance R₀15.554 mohm
Charge-transfer resistance Rct17.084 mohm
Warburg coefficient σ2.664 mohm/s⁰.5
CPE admittance at 1 rad/s4.59428 S
CPE exponent α0.5605
Effective arc capacitance0.62458 F
Diffusion-free arc frequency14.916 Hz
Ohmic growth ratio1.111
Charge-transfer growth ratio1.22
Warburg growth ratio1.158
Complex fit RMS (%)2.53
Largest local uncertainty (%)2.41

It also shows: Measured capacity SOH (%).

Checked against sources

Each case below was calculated by this calc and agrees with the value from its source (within the tolerance where one is shown).

Gamry mixed kinetic and diffusion benchmark

Source: Gamry, Basics of EIS, mixed kinetic and diffusion control, Fig. 20: Rs=20 Ω, Rct=250 Ω, Cdl=40 μF, σ≈150 Ω·s⁻½. Spectrum generated independently with impedance.py elements (s6); this checks parameter recovery from a published benchmark, not a battery measurement.

Inputs: Spectrum source = Enter module measurements; Measured point 1 = own values; Measured point 2 = own values; Measured point 3 = own values; Measured point 4 = own values; Measured point 5 = own values; Measured point 6 = own values; Measured point 7 = own values; Measured point 8 = own values; Measured point 9 = own values; Measured point 10 = own values; Measured point 11 = own values; Measured point 12 = own values; Measured point 13 = own values; Measured point 14 = own values; Measured point 15 = own values; Measured point 16 = own values; Measured point 17 = own values; Measured point 18 = own values; Measured point 19 = own values; Measured point 20 = own values; Measured point 21 = own values; Measured point 22 = own values; Measured point 23 = own values; Measured point 24 = own values; Measured point 25 = own values; Measured point 26 = own values; Measured point 27 = own values; Measured point 28 = own values; Measured point 29 = own values; Measured point 30 = own values; Measured point 31 = own values; Measured point 32 = own values; Same design, SOC and temperature = yes; the others as above.

ResultSourceThis calc
Ohmic resistance R₀20,000 mohm20,000 mohm
Charge-transfer resistance Rct250,000 mohm250,000 mohm
CPE admittance at 1 rad/s4 × 10⁻⁵ S4 × 10⁻⁵ S
CPE exponent α11
Warburg coefficient σ150,000 mohm/s⁰.5150,000 mohm/s⁰.5
Screening hold reason00

Gamry ideal-RC limit of full Randles fit

Source: Gamry, Basics of EIS, simplified Randles, Fig. 15: Rs=20 Ω, Rp=250 Ω, 1 cm² electrode with 40 μF/cm². Independent element-library spectrum (s6), σ=0; f_arc=1/(2πRC), Ceff=C. Diffusion is intentionally not gradeable in this limit. The unregularized Jacobian is rank deficient for σ=0, so grading is held for unidentifiable diffusion.

Inputs: Spectrum source = Enter module measurements; Measured point 1 = own values; Measured point 2 = own values; Measured point 3 = own values; Measured point 4 = own values; Measured point 5 = own values; Measured point 6 = own values; Measured point 7 = own values; Measured point 8 = own values; Measured point 9 = own values; Measured point 10 = own values; Measured point 11 = own values; Measured point 12 = own values; Measured point 13 = own values; Measured point 14 = own values; Measured point 15 = own values; Measured point 16 = own values; Measured point 17 = own values; Measured point 18 = own values; Measured point 19 = own values; Measured point 20 = own values; Measured point 21 = own values; Measured point 22 = own values; Measured point 23 = own values; Measured point 24 = own values; Measured point 25 = own values; Measured point 26 = own values; Measured point 27 = own values; Measured point 28 = own values; Measured point 29 = own values; Measured point 30 = own values; Measured point 31 = own values; Measured point 32 = own values; Same design, SOC and temperature = yes; the others as above.

ResultSourceThis calc
Ohmic resistance R₀20,000 mohm20,000 mohm
Charge-transfer resistance Rct250,000 mohm250,000 mohm
CPE admittance at 1 rad/s4 × 10⁻⁵ S4 × 10⁻⁵ S
CPE exponent α11
Effective arc capacitance4 × 10⁻⁵ F4 × 10⁻⁵ F
Diffusion-free arc frequency15.915 Hz15.915 Hz
Screening hold reason33

All 57 published sample points: independent SciPy fit

Source: Measured public impedance.py exampleData.csv (s5), capacitive points only, independently fitted using SciPy 1.15.3 least_squares and impedance.py elements with numerical derivatives. Full setup and results in s6. This is a cross-solver check; sample EV provenance and test conditions are unspecified.

Inputs: the default inputs above.

ResultSourceThis calc
Ohmic resistance R₀15.554 mohm15.554 mohm
Charge-transfer resistance Rct17.084 mohm17.084 mohm
CPE admittance at 1 rad/s4.594 S4.594 S
Warburg coefficient σ2.664 mohm/s⁰.52.664 mohm/s⁰.5
CPE exponent α0.56050.5605
Relative complex RMS residual0.02530.0253

Measured capacity can downgrade an acceptable EIS grade

Source: Definition of capacity SOH: measured discharge capacity / rated capacity; grading uses the user's explicit thresholds. Policy regression, not an experimental capacity prediction.

Inputs: Include measured discharge capacity = yes; Measured capacity = 39 A·h; Same design, SOC and temperature = yes; Spectrum source = Enter module measurements; the others as above.

ResultSourceThis calc
Discharge capacity state of health0.650.65
Combined entered-policy tier33
Screening hold reason00

All growth ratios must meet the entered limits

Source: Policy logic regression with explicit user-entered limits; default fitted resistance growth exceeds 1.03.

Inputs: Grade A: maximum growth ratio = 1.01; Grade B: maximum growth ratio = 1.02; Grade C: maximum growth ratio = 1.03; Same design, SOC and temperature = yes; Spectrum source = Enter module measurements; the others as above.

ResultSourceThis calc
Combined entered-policy tier44
Screening hold reason00

Mismatched reference withholds the grade

Source: Rastegarpanah et al., Energies 2021, DOI 10.3390/en14092597, §1.1: SOC and temperature confound EIS health comparisons. Deterministic screening policy regression.

Inputs: Spectrum source = Enter module measurements; the others as above.

ResultSourceThis calc
Screening hold reason11

Flat resistor cannot establish arc or diffusion parameters

Source: Reviewer-specified identifiability regression: 32 log-spaced frequencies 10⁻⁶…10⁴ Hz, Z′=10 mΩ and Z″=0. A pure resistor contains no information identifying a charge-transfer arc and diffusion coefficient. Reference matching and capacity are deliberately enabled to isolate the spectral failure.

Inputs: Spectrum source = Enter module measurements; Same design, SOC and temperature = yes; Include measured discharge capacity = yes; Measured point 1 = own values; Measured point 2 = own values; Measured point 3 = own values; Measured point 4 = own values; Measured point 5 = own values; Measured point 6 = own values; Measured point 7 = own values; Measured point 8 = own values; Measured point 9 = own values; Measured point 10 = own values; Measured point 11 = own values; Measured point 12 = own values; Measured point 13 = own values; Measured point 14 = own values; Measured point 15 = own values; Measured point 16 = own values; Measured point 17 = own values; Measured point 18 = own values; Measured point 19 = own values; Measured point 20 = own values; Measured point 21 = own values; Measured point 22 = own values; Measured point 23 = own values; Measured point 24 = own values; Measured point 25 = own values; Measured point 26 = own values; Measured point 27 = own values; Measured point 28 = own values; Measured point 29 = own values; Measured point 30 = own values; Measured point 31 = own values; Measured point 32 = own values; the others as above.

ResultSourceThis calc
Screening hold reason33

Defaults withhold grade until a matched EV baseline is supplied

Source: Review regression: the tutorial has unspecified battery provenance and conditions, so the default matched-reference assertion must be false.

Inputs: the default inputs above.

ResultSourceThis calc
Screening hold reason11

Tutorial cannot become a module grade by checking the match box

Source: Review regression: measurements with undocumented provenance cannot establish an EV module grade.

Inputs: Same design, SOC and temperature = yes; Include measured discharge capacity = yes; the others as above.

ResultSourceThis calc
Screening hold reason11

Warburg reference normalization preserves the full 2.3 input

Source: Dimensional normalization: Re(ZW)=σ/√ω; at ω=1 rad/s a 2.3 mΩ diffusion resistance corresponds to σ=2.3 mΩ·s⁻½. No numerical rounding or value change is applied.

Inputs: the default inputs above.

ResultSourceThis calc
Reference diffusion resistance at 1 rad/s0.0023 Ω0.0023 Ω
Reference Warburg coefficient σ0.0023 Ω/s⁰.50.0023 Ω/s⁰.5

Related Resources

Responses

Your email address will not be published. Required fields are marked *

L ading...