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.
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 , with the Warburg element inside the faradaic branch. With :
The CPE is represented numerically by its admittance at , 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 . 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 . 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 and its equivalent capacitance is . 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
| Input | Symbol | Unit | Default |
|---|---|---|---|
| Spectrum source | data_source | Tutorial spectrum (ungraded) | |
| Number of measured points Enter increasing frequencies, with signed Z″ (capacitive values are negative). | n_points | 32 | |
| Reference ohmic resistance | Rs_ref | mohm | 14 |
| Reference charge-transfer resistance | Rct_ref | mohm | 14 |
| Reference Warburg resistance Real Warburg impedance at ω=1 rad/s; its numeric value equals σ in mΩ·s⁻½. | sigma_ref | mohm | 2.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_matched | false | |
| Grade A: maximum growth ratio Each of R₀, Rct and σ must stay below this multiple of its reference. | limit_A | 1.25 | |
| Grade B: maximum growth ratio | limit_B | 1.75 | |
| Grade C: maximum growth ratio | limit_C | 2.5 | |
| Maximum relative fit RMS A fraction of impedance magnitude; 0.05 means 5% complex RMS error. | rms_limit | 0.05 | |
| Maximum relative parameter uncertainty Maximum local one-sigma uncertainty of R₀, Rct or σ, divided by its fitted value. | uncertainty_limit | 0.5 | |
| Minimum spectral response fraction Both measured real span and reactive magnitude must exceed this fraction of max |Z|. | response_floor | 0.0001 | |
| Include measured discharge capacity | capacity_known | false | |
| Rated capacity | capacity_rated | A*h | 60 |
| Measured capacity | capacity_measured | A*h | 48 |
| Grade A: minimum capacity fraction | cap_A | 0.8 | |
| Grade B: minimum capacity fraction | cap_B | 0.7 | |
| Grade C: minimum capacity fraction | cap_C | 0.6 | |
| Measured point 1 Choose “Enter your own values” to type this row; use the units shown. | p01 | P01 | |
| Measured point 2 | p02 | P03 | |
| Measured point 3 | p03 | P05 | |
| Measured point 4 | p04 | P06 | |
| Measured point 5 | p05 | P08 | |
| Measured point 6 | p06 | P10 | |
| Measured point 7 | p07 | P12 | |
| Measured point 8 | p08 | P14 | |
| Measured point 9 | p09 | P15 | |
| Measured point 10 | p10 | P17 | |
| Measured point 11 | p11 | P19 | |
| Measured point 12 | p12 | P21 | |
| Measured point 13 | p13 | P23 | |
| Measured point 14 | p14 | P24 | |
| Measured point 15 | p15 | P26 | |
| Measured point 16 | p16 | P28 | |
| Measured point 17 | p17 | P30 | |
| Measured point 18 | p18 | P32 | |
| Measured point 19 | p19 | P34 | |
| Measured point 20 | p20 | P35 | |
| Measured point 21 | p21 | P37 | |
| Measured point 22 | p22 | P39 | |
| Measured point 23 | p23 | P41 | |
| Measured point 24 | p24 | P43 | |
| Measured point 25 | p25 | P44 | |
| Measured point 26 | p26 | P46 | |
| Measured point 27 | p27 | P48 | |
| Measured point 28 | p28 | P50 | |
| Measured point 29 | p29 | P52 | |
| Measured point 30 | p30 | P53 | |
| Measured point 31 | p31 | P55 | |
| Measured point 32 | p32 | P57 | |
| Measured point 33 | p33 | P57 | |
| Measured point 34 | p34 | P57 | |
| Measured point 35 | p35 | P57 | |
| Measured point 36 | p36 | P57 | |
| Measured point 37 | p37 | P57 | |
| Measured point 38 | p38 | P57 | |
| Measured point 39 | p39 | P57 | |
| Measured point 40 | p40 | P57 |
Results
With the default inputs above, the calc gives:
| Result | Value |
|---|---|
| Screening grade | Hold: resolve screening issue |
| Governing indicator | Match reference conditions |
| Ohmic resistance R₀ | 15.554 mohm |
| Charge-transfer resistance Rct | 17.084 mohm |
| Warburg coefficient σ | 2.664 mohm/s⁰.5 |
| CPE admittance at 1 rad/s | 4.59428 S |
| CPE exponent α | 0.5605 |
| Effective arc capacitance | 0.62458 F |
| Diffusion-free arc frequency | 14.916 Hz |
| Ohmic growth ratio | 1.111 |
| Charge-transfer growth ratio | 1.22 |
| Warburg growth ratio | 1.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.
| Result | Source | This calc |
|---|---|---|
| Ohmic resistance R₀ | 20,000 mohm | 20,000 mohm |
| Charge-transfer resistance Rct | 250,000 mohm | 250,000 mohm |
| CPE admittance at 1 rad/s | 4 × 10⁻⁵ S | 4 × 10⁻⁵ S |
| CPE exponent α | 1 | 1 |
| Warburg coefficient σ | 150,000 mohm/s⁰.5 | 150,000 mohm/s⁰.5 |
| Screening hold reason | 0 | 0 |
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.
| Result | Source | This calc |
|---|---|---|
| Ohmic resistance R₀ | 20,000 mohm | 20,000 mohm |
| Charge-transfer resistance Rct | 250,000 mohm | 250,000 mohm |
| CPE admittance at 1 rad/s | 4 × 10⁻⁵ S | 4 × 10⁻⁵ S |
| CPE exponent α | 1 | 1 |
| Effective arc capacitance | 4 × 10⁻⁵ F | 4 × 10⁻⁵ F |
| Diffusion-free arc frequency | 15.915 Hz | 15.915 Hz |
| Screening hold reason | 3 | 3 |
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.
| Result | Source | This calc |
|---|---|---|
| Ohmic resistance R₀ | 15.554 mohm | 15.554 mohm |
| Charge-transfer resistance Rct | 17.084 mohm | 17.084 mohm |
| CPE admittance at 1 rad/s | 4.594 S | 4.594 S |
| Warburg coefficient σ | 2.664 mohm/s⁰.5 | 2.664 mohm/s⁰.5 |
| CPE exponent α | 0.5605 | 0.5605 |
| Relative complex RMS residual | 0.0253 | 0.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.
| Result | Source | This calc |
|---|---|---|
| Discharge capacity state of health | 0.65 | 0.65 |
| Combined entered-policy tier | 3 | 3 |
| Screening hold reason | 0 | 0 |
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.
| Result | Source | This calc |
|---|---|---|
| Combined entered-policy tier | 4 | 4 |
| Screening hold reason | 0 | 0 |
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.
| Result | Source | This calc |
|---|---|---|
| Screening hold reason | 1 | 1 |
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.
| Result | Source | This calc |
|---|---|---|
| Screening hold reason | 3 | 3 |
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.
| Result | Source | This calc |
|---|---|---|
| Screening hold reason | 1 | 1 |
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.
| Result | Source | This calc |
|---|---|---|
| Screening hold reason | 1 | 1 |
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.
| Result | Source | This calc |
|---|---|---|
| Reference diffusion resistance at 1 rad/s | 0.0023 Ω | 0.0023 Ω |
| Reference Warburg coefficient σ | 0.0023 Ω/s⁰.5 | 0.0023 Ω/s⁰.5 |
Related Resources
Related articles
Related courses
IEC Electrical Schematics and Industrial Control Panels
Basic Electrical Controls & Diagram Reading

Responses