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).
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?
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.
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.
One example of an interactive plot based on this package that can be compiled as a standalone application can be found here.