[ANN] EquivalentCircuits.jl for impedance spectroscopy analysis in Julia

To my knowledge, Julia has no other libraries for conducting equivalent electrical circuit-based electrochemical impedance spectroscopy (EIS) data analysis.

EquivalentCircuits.jl 0.3.0 is a package allowing users to fit the parameters of equivalent electrical circuit models to EIS measurements. The circuit parameter fitting functionality uses differential evolution (which does not require an initial guess of the parameters), followed by Nelder-Mead Simplex fine-tuning. For more involved circuit fitting procedures, there is the option to add weights (thus adding more importance to specific regions of the frequency range during fitting), as well as the option to fix some of the parameters (which can be used for sequential fitting of parameter subsets).

Additionally, the package can recommend plausible equivalent circuit configurations, given a set of measurements. The latter is done either by evaluating a number of circuits collected from the literature within the application area of interest or through an evolutionary algorithm that searches for the simplest equivalent circuit model capable of fitting the measurements.

EquivalentCircuits.jl is my first Julia package, so feedback and suggestions are welcome. For future work, I am considering implementing other important EIS data analysis methods, such as the Distribution of Relaxation Times (DRT) method and data validation strategies (e.g., Kramers-Kronig transform).

Link to the Github repository: GitHub - MaximeVH/EquivalentCircuits.jl: A julia package to either fit the parameters of a specified equivalent electrical circuit to electrochemical impedance data, or to suggest a plausible circuit configuration for a given set of measurements (either through a comparison of circuits from the literature, or through an evolutionary algorithm approach).

10 Likes

Hello, thank you very much for sharing such an interesting library.
I am curious about the target application of your library. For example, the
equivalent circuits of fuel cells and lithium batteries differ. Do we have
a specific one here or can this package include all these application scenarios?

Hi, thanks for your interest in the library.

This package works for a range of application areas, including fuel cells and lithium-ion batteries.

That being said, I have once encountered a complex equivalent circuit that required a more bespoke parameter optimization procedure. This is why I’ve added an optional keyword argument (to be included in the next release), allowing users to adjust the optimization method for those rare cases where the differential evolution + simplex method isn’t sufficient.

1 Like

Thanks!
Cool! Looking forward to your future work and I will try it on Fuel cells (this is what I mainly working on).

1 Like

Nice. I haven’t looked at it properly yet, so I don’t know if there’s any overlap but if you want you can have anything off GitHub - gustaphe/Circuits.jl :slight_smile:

2 Likes

Thanks, it seems our packages serve different purposes, though I’m a fan of your generation of circuitikz figures in Julia :))

Thank you so much Maxime! :slight_smile:

I have used the package for the fitting of a complex EC-structure:

"R1-L2-[P3,R4]-[P5,R6]-[P7,R8]"

P stands for constant phase element.

The well established Python package impedance.py failed to provide a suitable fit.
But with this package in combination with the package BlackBoxOptim it was possible to find a suitable fit, even better then the one proposed by a commercial SW.

P.S.:
One example of an interactive plot based on this package that can be compiled as a standalone application can be found here.

Followup:
Current Status of the compiled project is: its only operational on the build machine :frowning:

1 Like