Elektrokardiogramm#
- scipy.datasets.electrocardiogram()[Quelle]#
Lädt ein Elektrokardiogramm als Beispiel für ein 1D-Signal.
Das zurückgegebene Signal ist ein 5-minütiges Elektrokardiogramm (EKG), eine medizinische Aufzeichnung der elektrischen Aktivität des Herzens, abgetastet mit 360 Hz.
- Rückgabe:
- ecgndarray
Das Elektrokardiogramm in Millivolt (mV), abgetastet mit 360 Hz.
Hinweise
Das bereitgestellte Signal ist ein Ausschnitt (19:35 bis 24:35) aus Datensatz 208 (Ableitung MLII), bereitgestellt von der MIT-BIH Arrhythmia Database [1] auf PhysioNet [2]. Der Ausschnitt enthält störungsinduzierte Artefakte, typische Herzschläge sowie pathologische Veränderungen.
Hinzugefügt in Version 1.1.0.
Referenzen
[1]Moody GB, Mark RG. The impact of the MIT-BIH Arrhythmia Database. IEEE Eng in Med and Biol 20(3):45-50 (Mai-Juni 2001). (PMID: 11446209); DOI:10.13026/C2F305
[2]Goldberger AL, Amaral LAN, Glass L, Hausdorff JM, Ivanov PCh, Mark RG, Mietus JE, Moody GB, Peng C-K, Stanley HE. PhysioBank, PhysioToolkit, und PhysioNet: Components of a New Research Resource for Complex Physiologic Signals. Circulation 101(23):e215-e220; DOI:10.1161/01.CIR.101.23.e215
Beispiele
>>> from scipy.datasets import electrocardiogram >>> ecg = electrocardiogram() >>> ecg array([-0.245, -0.215, -0.185, ..., -0.405, -0.395, -0.385], shape=(108000,)) >>> ecg.shape, ecg.mean(), ecg.std() ((108000,), -0.16510875, 0.5992473991177294)
Wie angegeben weist das Signal mehrere Bereiche mit unterschiedlicher Morphologie auf. Z.B. zeigen die ersten Sekunden die elektrische Aktivität eines Herzens im normalen Sinusrhythmus, wie unten gezeigt.
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> fs = 360 >>> time = np.arange(ecg.size) / fs >>> plt.plot(time, ecg) >>> plt.xlabel("time in s") >>> plt.ylabel("ECG in mV") >>> plt.xlim(9, 10.2) >>> plt.ylim(-1, 1.5) >>> plt.show()
Nach Sekunde 16 erscheinen jedoch die ersten vorzeitigen ventrikulären Kontraktionen, auch Extrasystolen genannt. Diese haben eine andere Morphologie im Vergleich zu typischen Herzschlägen. Der Unterschied ist in der folgenden Grafik leicht zu erkennen.
>>> plt.plot(time, ecg) >>> plt.xlabel("time in s") >>> plt.ylabel("ECG in mV") >>> plt.xlim(46.5, 50) >>> plt.ylim(-2, 1.5) >>> plt.show()
An mehreren Stellen stören große Artefakte die Aufzeichnung, z.B.
>>> plt.plot(time, ecg) >>> plt.xlabel("time in s") >>> plt.ylabel("ECG in mV") >>> plt.xlim(207, 215) >>> plt.ylim(-2, 3.5) >>> plt.show()
Schließlich zeigt die Untersuchung des Leistungsspektrums, dass der Großteil des Biosignals aus niedrigen Frequenzen besteht. Bei 60 Hz sind die durch die Netzstromversorgung verursachten Störungen deutlich zu erkennen.
>>> from scipy.signal import welch >>> f, Pxx = welch(ecg, fs=fs, nperseg=2048, scaling="spectrum") >>> plt.semilogy(f, Pxx) >>> plt.xlabel("Frequency in Hz") >>> plt.ylabel("Power spectrum of the ECG in mV**2") >>> plt.xlim(f[[0, -1]]) >>> plt.show()