I started to use a technique called electrochemical impedance spectroscopy (EIS) for biosensing since my undergraduate research. For analyzing EIS data, an equivalent circuit must be constructed for modeling the reaction mechanism. Physical parameters can be extracted by fitting the data using the model. However, for most software, the circuit elements being provided and their corresponding combined circuit couldn’t necessarily meet my needs for finding the physical parameters in a symmetric electrode system. Therefore, I developed a circuit fitting program for customized analysis of impedance data. The fitting and impedance calculation program are used in a first-author journal paper of mine. In the following paragraphs, the development of the fitting program, another program that assists data visualization, and a program for calculating the diffusion impedance of interdigitated array (IDA) electrodes are detailed.

Figure 1. (a) The Nyquist plot for visualizing impedance values, and (b) an equivalent circuit with several circuit elements for modeling electrode surface reactions.

**Electrochemical Impedance Circuit Fitting Program**

The algorithm for finding all the element parameters in a given circuit is by implementing the Levenberg-Marquardt non-linear fitting method. This is a general and popular method for solving the minimum value of function E(x), where

$$E(x)={1 \over 2} \sum_{i=1}^m [f_i(x)]^2 $$

For impedance data fitting, a complex non-linear least square process (CNLS) is implemented, and the above equation can be specialized as

$$S=\sum_{i=1}^{N_f} [w_{i,\mathrm{Re}}( \mathrm{Re}(Z_{i,cal}) – \mathrm{Re}(Z_{i,exp}) )^2+w_{i,\mathrm{Im}}( \mathrm{Im}(Z_{i,cal}) – \mathrm{Im}(Z_{i,exp}) )^2]$$

where *S* is the weighted sum of squares of error, *N _{f}* is the number of frequencies within an experiment,

*Z*is the impedance of the

_{i}*i*–th frequency, and

*w*

_{i,}_{Re}and

*w*

_{i,}_{Im}are the statistical weights for the real and imaginary parts of the impedance of the

*i*–th frequency. The subscript

*exp*indicates experimental value and the subscript

*cal*indicates the calculated value while fitting.

For any kind of circuit, *Z _{i,cal}* can be calculated by the set of element parameters and the frequency (e.g.

*R*for a resistor,

*C*and

*f*for a capacitor), then

*S*can be calculated using its defined equation. By minimizing

*S*, the fitted element parameters can be modified so that the result impedance (

*Z*) can be as close as possible to the experimental value (

_{i,cal}*Z*). Fig. 2 shows an example for a non-linear curve fitting process.

_{i,exp}Figure 2. A non-linear curve fitting process (source: https://en.wikipedia.org/wiki/Gauss%E2%80%93Newton_algorithm).

A program written in C language is designed using the open-source numerical analysis library ALGLIB^{®} to implement numerical integrations and calculations. ALGLIB is also used for non-linear least squares fitting of EIS data using Levenberg-Marquardt method. Several circuit elements for EIS data fitting are available in this program, which are shown in Table 1. Detailed methods for calculating the IDA diffusion element is shown in my first-author paper.

Table 1. Available circuit elements in the fitting program.

A circuit description code is defined to express equivalent circuits. Elements, including whole blocks inside parentheses, are either in series or parallel with each other. Those inside an odd number of pair of parentheses are in parallel with each other, and those inside an even number of pair of parentheses are in series. Fig. 3 shows a circuit equivalent to the description code of “R(RC)(R(RC))”.

Figure 3. Circuit description code and its corresponding circuit. Equivalent parts are marked by identical colored blocks.

Figure 4. Snapshot of the equivalent circuit fitting program.

[Download equivalent circuit fitting program (Runs on Windows 64-bit environment)]

[Source code for the equivalent circuit fitting program]

**Real-time Impedance Plotting Program**

It is reasonable that an element in a circuit contributes to the impedance change to a certain degree. For instance, a resistor has an influence on the real part of impedance, and a capacitor affects its imaginary part. However, when the circuit consists of elements with serial or parallel combinations, it can be quite difficult to imagine how the shape of impedance data would change according to each element.

Therefore, I wrote a program for plotting impedance data in real-time using Processing language. After entering the circuit description code into the program, a Nyquist plot, total impedance Bode plot, and phase angle bode plot is generated. The user can use horizontal bars to control the value of a specific element. By changing its value, the impedance would be calculated immediately, and the plot would be drawn out in real-time.

Figure 5. User interface for the real-time impedance plotting program.

Here’s a clip for demonstrating the real-time impedance plotting program.

[Source code for real-time impedance plotting program]

**IDA Diffusion Impedance Calculation Program**

The IDA diffusion element is a novel element for parameterizing the diffusion impedance of an IDA electrode using its shape factor (*w _{e}*/

*w*), magnitude of the admittance (

*Y*), and the dimensionless frequency (

_{0}*w*

^{2}

*ω*/

*D*). However, complex functions are required for calculating its value, such as the Bessel function, the complete elliptic integral of the second kind, and definite integrals.

Due to calculation difficulties, a program is written for calculating the IDA diffusion impedance. The program consists of two files “settings.txt” and “IDA_diff_Z.exe”. “settings.txt” is of the format below:

These contain all the 12 parameters for the usage of this program. A detailed description is listed in order below:

- If [output to txt file] is 0, then calculated impedances will be shown directly on screen. If it is 1, then the values will be saved to the file “Z_diffusion_IDA.txt”.
- The maximum frequency for impedance calculation can be set after [max freq (Hz)].
- The minimum frequency for impedance calculation can be set after [min freq (Hz)].
- The number of frequency points within a decade can be set (e.g. If [points per decade] is set to 5, then frequencies calculated between 10
^{1}and 10^{0}Hz will be 10^{1}, 10^{0.8}, 10^{0.6}, 10^{0.4}, 10^{0.2}and 10^{0}Hz.) *w*can be set after [electrode bandwidth we (um)]._{e}*w*can be set after [gap width wg (um)]._{g}*l*can be set after [electrode length l (mm)].*N*can be set after [number of bands N].*D*can be set after [diffusion coefficient D (m^2/s)].*C*can be set after [bulk concentration C* (mM)].^{*}*n*can be set after [number of electrons n].*T*can be set after [temperature T (K)].

After setting the 12 parameters, put “settings.txt” and “IDA_diff_Z.exe” in the same directory and open “IDA_diff_Z.exe”. Impedances will be automatically calculated and printed in the defined format (Fig. 6). ※The program can only be run in a Windows 64-bit environment.

Figure 6. An example output of the IDA diffusion impedance calculation program.