Z-HIT analysis

The Z-HIT algorithm (Ehm et al., 2000) reconstructs the modulus data of an immittance spectrum based on the phase data of that immittance spectrum. This algorithm can be used to help validate immittance spectra. Drifting at low frequencies and mutual induction at high frequencies may be detectable based on the results of the algorithm.

The algorithm is based on the following steps:

  • Smoothing and interpolation of the phase data using, e.g., a Savitzky-Golay filter and an Akima spline, respectively.

  • Approximation of the modulus data according to

    \(\ln{|Z(\omega_O)|} \approx \frac{2}{\pi} \int_{\omega_S}^{\omega_O} \varphi(\omega) \,{\rm d}\ln{\omega} + \gamma \frac{{\rm d}\varphi(\omega_O)}{{\rm d}\ln{\omega}} + C\)

    where \(\omega_S\) is the starting frequency, \(\omega_O\) is the frequency of interest, \(\varphi\) is the interpolated phase data, \(\gamma = \frac{\pi}{6}\), and \(C\) is a constant.

  • The constant \(C\) is determined by fitting the approximated modulus data to a portion of the experimental modulus data. The frequency range from 1 Hz to 1000 Hz is a good starting point since it is typically less affected by drift and/or mutual induction.

Note

The reconstruction of the modulus data is not likely to be perfect and there can be deviations even when analyzing ideal data.

How to use

>>> from pyimpspec import DataSet, ZHITResult, generate_mock_data, perform_zhit
>>>
>>> data: DataSet = generate_mock_data("CIRCUIT_2_INVALID", noise=5e-2, seed=42)[0]
>>> zhit: ZHITResult = perform_zhit(data)

Below is an example where simplified Randles circuits with or without drifting have been plotted as “Drifting” and “Valid”, respectively. The impedance spectrum (“Z-HIT”) reconstructed from the phase data of the drifting spectrum has also been plotted and it is a close match to the impedance spectrum without drift.

(Source code)

_images/guide_zhit-1.svg

Note

Pyimpspec’s implementation of the algorithm also supports operating on the admittance representation of the immittance data, which can be done by setting admittance=True when calling perform_zhit().

References: