Impedanzanalyse (EIS) mit Python [impedance.py]

Überblick

Einführung in die Bibliothek ** impedance.py **, mit der die Impedanz (elektrochemische Impedanz) mit Python analysiert werden kann. Passen Sie das gemessene Nyquist-Diagramm an das konstruierte Ersatzschaltbild an und erhalten Sie die Parameter. Sie benötigen keine kostenpflichtige Software, sodass Sie sie problemlos verwenden können. Grundsätzlich werde ich gemäß dem offiziellen Tutorial von impedance.py erklären und es an einigen Stellen ergänzen, daher möchte ich viel Englisch lesen. Für diejenigen, die dies nicht tun. Für diejenigen, die keine Erklärung benötigen, wird der Code unten zusammengestellt.

Aufgabe

Ich möchte die Impedanz nur mit Open Source-Tools analysieren

Die elektrochemische Impedanzanalyse erfordert eine Analysesoftware, die dem Messgerät beiliegt. Die Analyse ist jedoch jedes Mal mit einem Mess-PC schwierig. .. .. Der größte Teil der Software wird jedoch bezahlt und kann aufgrund der Lizenz nicht auf Ihrem eigenen PC installiert werden. .. ..

Was in diesem Artikel zu tun ist, was nicht zu tun ist

Zu handhaben

Über impedance.py

Nicht handhaben

Wie fange ich mit Python an? Probieren Sie es mit "Wie benutzt man Python?"

Abhängige Umgebung

Stand 2020/07/22

(1) Installation

Da es in PyPI registriert ist, installieren Sie es mit "pip install impedance"

(2) Daten importieren [Vorverarbeitung]

Für Messdaten können Sie normalerweise csv lesen_csv und es als pandas.Dataframe behandeln, aber da es etwas gibt, das als "Vorverarbeitung" bezeichnet wird, werde ich es verwenden. Da Beispieldaten vom Beamten erstellt wurden, laden Sie example.csv in der Spalte Schritt 2 von [** hier **] herunter (https://impedancepy.readthedocs.io/en/latest/getting-started.html#).

python


from impedance import preprocessing

frequencies, Z = preprocessing.readCSV('./exampleData.csv')
#type(frequencies): <class 'numpy.ndarray'>
#type(frequencies[0]): <class 'numpy.float64'>
#type(Z): <class 'numpy.ndarray'>
#type(Z[0]): <class 'numpy.complex128'>

Der Inhalt von exampleData.csv sieht folgendermaßen aus キャプチャ.JPG Spalte A ist die Häufigkeit, Spalte B ist der Realteil von Z, Spalte C ist der Imaginärteil von Z, und selbst wenn Sie sich den Quellcode von "preprocessing.readCSV" ansehen, setzen Sie Spalte A einfach auf Brüche und Spalte BC auf den komplexen Typ Z und geben ihn zurück. Es war nur.

In der Tat bequeme Vorverarbeitung! !!

Wenn Sie denken, dass es eine nutzlose Funktion ist, gibt es tatsächlich Funktionen, die Sie verwenden können! preprocessing unterstützt auch Erweiterungen, die für die Gerätesoftware spezifisch sind (** hier wichtig **), und scheint die folgende Software und Erweiterungen zu unterstützen

Sanft Erweiterung
gamry .dta
autolab Durch Kommata abgetrennt.csv?)
parstat .txt
zplot .z
versastudio .par
powersuite .txt
biologic .mpt
chinstruments .txt

Wenn ich mir den Quellcode anschaue, bin ich sehr glücklich, weil er die Daten mit regulären Ausdrücken usw. Verarbeitet: clap: (Ich habe ihn gut mit der .mpt-Datei verwendet) Die Verwendung ist wie folgt

python


from impedance import preprocessing

frequencies, Z = preprocessing.readFile('Pfad zur Datei', instrument='Weicher Name')
frequencies, Z = preprocessing.ignoreBelowX(frequencies, Z)

Sie können das Dateiformat angeben, indem Sie den Namen der Software in der obigen Tabelle an die Instrumentenoption übergeben.

Außerdem ・ Schneiden Sie den ersten Quadranten preprocessing.ignoreBelowX (freq, Z) aus -Schneiden Sie die Daten nach der Häufigkeit "preprocessing.cropFrequences (freq, Z, freqmin = 0, freqmax = None)" Ist vorbereitet

(3) Erzeugung eines Ersatzschaltbildes

Dieses Mal erstellen wir als Beispiel das folgende Ersatzschaltbild. two_time_constants.png

python


from impedance.models.circuits import CustomCircuit

circuit = 'R0-p(R1,C1)-p(R2-Wo1,C2)'
initial_guess = [.01, .01, 100, .01, .05, 100, 1]

circuit = CustomCircuit(circuit, initial_guess=initial_guess)

Ein Ersatzschaltbild kann erstellt werden, indem Reihen mit - und parallel zu p (,) ausgedrückt und als Zeichenfolge an die Klasse CustomCircuit übergeben werden. Zu diesem Zeitpunkt müssen die Anfangsparameter als Listentyp an die Option initial_guess übergeben werden. Die Schaltungselemente, die ausgedrückt werden können, sind in ** hier ** zusammengefasst. Ich habe diesmal "CustomCircuit" verwendet, aber wenn Sie sich den Quellcode ansehen, wird "Randles" auch standardmäßig vorbereitet.

(4) Montage

python


circuit.fit(frequencies, Z)

params = circuit.parameters_
#[1.65187261e-02 8.67655045e-03 3.32142565e+00 5.38996281e-03
# 6.30927436e-02 2.32520436e+02 2.19541831e-01]

covs = circuit.conf_
#[1.54227642e-04 1.91273738e-04 1.89536697e-01 2.05799010e-04
# 1.93973976e-03 1.62269546e+01 1.75432523e-02]

Führen Sie die Anpassung mit Circuit.fit durch. Es scheint, dass "scipy.optimize.curve_fit" als Anpassungsalgorithmus verwendet wird. Nach dem Anpassen werden die Parameter nach dem Anpassen und die Varianz der Parameter in "Circuit.Parameter_" bzw. "Circuit.Conf_" (die von "scipy.optimize.curve_fit" zurückgegebenen diagonalen Komponenten der Kovarianzmatrix werden extrahiert). Kann empfangen werden.

(5) Visualisierung der Ergebnisse

python


import matplotlib.pyplot as plt
from impedance.visualization import plot_nyquist

Z_fit = circuit.predict(frequencies)

fig, ax = plt.subplots()
plot_nyquist(ax, Z, fmt='o')
plot_nyquist(ax, Z_fit, fmt='-')

plt.legend(['Data', 'Fit'])
plt.show()

example_fit_fig.png

Holen Sie sich das Simulationsergebnis, das aus den Parametern berechnet wird, die mit "Circuit.predict (Frequenzen)" ausgestattet sind. Die Visualisierung bietet eine "Visualisierung" basierend auf Matplotlib und Altair, und Nyquist-Diagramme werden mit "plot_nyquist" angezeigt. Es schreibt auch höflich das Achsenetikett. Darüber hinaus enthält "Visualisierung" verschiedene Elemente wie "plot_bode" (Bode-Plot). (Geplant, hinzugefügt zu werden)

Code

python


from matplotlib import pyplot as plt

from impedance import preprocessing
from impedance.models.circuits import CustomCircuit
from impedance.visualization import plot_nyquist


def main():
    frequencies, Z = preprocessing.readCSV('./exampleData.csv')
    frequencies, Z = preprocessing.ignoreBelowX(frequencies, Z)

    circuit = 'R0-p(R1,C1)-p(R2-Wo1,C2)'
    initial_guess = [.01, .01, 100, .01, .05, 100, 1]

    circuit = CustomCircuit(circuit, initial_guess=initial_guess)
    circuit.fit(frequencies, Z)
    print(circuit.parameters_)
    print(circuit.conf_)
    Z_fit = circuit.predict(frequencies)

    fig, ax = plt.subplots()
    plot_nyquist(ax, Z, fmt='o')
    plot_nyquist(ax, Z_fit, fmt='-')

    plt.legend(['Data', 'Fit'])
    plt.show()


if __name__ == '__main__':
    main()

Recommended Posts

Impedanzanalyse (EIS) mit Python [impedance.py]
Sprachanalyse mit Python
Sprachanalyse mit Python
Datenanalyse mit Python
[Python] Morphologische Analyse mit MeCab
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Emotionsanalyse von Python (word2vec)
Planare Skelettanalyse mit Python
Japanische morphologische Analyse mit Python
Muskel-Ruck-Analyse mit Python
Dreidimensionale Skelettstrukturanalyse mit Python
Text Mining mit Python ① Morphologische Analyse
Datenanalyse beginnend mit Python (Datenvisualisierung 1)
Logistische Regressionsanalyse Selbst erstellt mit Python
Datenanalyse beginnend mit Python (Datenvisualisierung 2)
[In-Database Python Analysis Tutorial mit SQL Server 2017]
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
2D FEM Stressanalyseprogramm von Python
Tweet-Analyse mit Python, Mecab und CaboCha
Datenanalyse beginnend mit Python (Datenvorverarbeitung - maschinelles Lernen)
Zweidimensionale instationäre Wärmeleitungsanalyse mit Python
Python: Vereinfachte morphologische Analyse mit regulären Ausdrücken
Statistik mit Python
Python mit Go
Datenanalyse Python
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
[Verschiedene Bildanalysen mit Plotly] Dynamische Visualisierung mit Plotly [Python, Bild]
Medizinische Bildanalyse mit Python 1 (MRT-Bild mit SimpleITK lesen)
Statische Analyse von Python-Code mit GitLab CI
Einfache LASSO-Regressionsanalyse mit Python (keine Theorie)
Zweidimensionale geometrische nichtlineare Analyse des elastischen Skeletts mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Python: Zeitreihenanalyse
Scraping in Python (Vorbereitung)
Text Mining mit Python ① Morphologische Analyse (re: Linux-Version)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Serielle Kommunikation mit Python
Korbanalyse mit Spark (1)
Python lernen mit ChemTHEATER 05-1