Adaptives Filter - Cardiac Artifact Suppression

In der Neugeborenen-Intensivpflege (Neonatologie) wird häufig neben dem Elektrokardiogramm (EKG) auch eine Impedanzkurve geschrieben, welche praktischerweise über die EKG-Elektroden mit abgeleitet wird. Die Impedanzkurve zeigt die (sehr geringen)  Schwankungen der elektrischen Leitfähigkeit des Brustkorbs, wenn sich die Lungen des kleinen Patienten füllen und wieder leeren. So kann man ohne zusätzlichen Aufwand die Atemfrequenz bestimmen und vor allem auch bedrohliche Atemstillstände (zentrale Apnoen) frühzeitg erkennen. Leider wird das Impedanzsignal aber auch von der Herzaktivität beeinflusst: Jede Systole führt zu einem Ausschlag der Impedanzkurve (=Herzüberlagerung) und erschwert somit die Erkennung zentraler Apnoen.
Das folgende Bild (Quelle) zeigt den Anfang einer Apnoe über einen Zeitraum von 10 sec. Die obere, rote Kurve stellt das EKG dar, die untere, blaue das Impedanzsignal. Man sieht die letzten 5 Atemzüge vor dem Stillstand, bei dem die Impedanzschwankungen nur noch von der Herzaktivität bestimmt werden.

Bei dieser Aufzeichnung  hat das Atemsignal eine deutlich größere Amplitude als die Herzüberlagerung, was die Verarbeitung des Impedanzsignals erleichtert. In anderen Fällen hingegen, wie z.B. bei ungünstiger Elektrodenplatzierung, können beide Amplituden ähnlich groß sein.

Daraus ergibt sich die Aufgabe für ein elektronisches Patientenüberwachungsgerät, die Herzschlag-bedingten Anteile aus dem Impedanzsignal herauszurechnen.
Das Patent DE68916803T2 bzw. US5170794 A beschreibt ein hierfür geeignetes Verfahren.

Man steht hier vor dem Problem, dass das Atemsignal mit jedem Herzschlag in gleichförmiger Weise gestört wird, kennt aber weder Form noch Amplitude des Störsignals. Was aber bekannt ist, ist ein Zeitpunkt, nachdem regelmäßig die Störung folgt. Als Referenz dient hier die  R-Zacke des EKGs, welche der Kontraktion des Herzens unmittelbar vorausgeht.

Die Idee des Verfahrens basiert auf der Erkenntnis, dass die Atemfrequenz und die Herzfequenz sowohl von unabhängigen Schrittmachern bestimmt werden als auch typischerweise einen deutlichen Abstand voneinander haben. So liegt die Atemfequenz bei Neugeborenen bei etwa 40 / min und die Herzfrequenz bei etwa 120 / min. Technisch gesprochen baut das Verfahren auf die Annahme, dass Atemzüge und Herzschläge zeitlich unkorreliert sind.

Das Verfahrens selbst lässt sich am besten durch ein Gedankenexperiment erläutern: Man stelle sich vor, man zerschneidet eine Impedanzkurve in viele kleine Schnipsel, deren linker Rand jeweils den Beginn einer Systole markiert. Dann addiert man die Kurvenstücke aller Schnipsel d.h. die Amplitudenwerte  mit gleichem Abstand zum linken Rand. Was erhält man? Nun, weil alle Systolen ungefähr denselben Ausschlag in Form und Amplitude bewirken, wird sich dieser Verlauf in der Summenkurve dominant wiederfinden. Atemsignale hingegen verliefen beim einen Herzschlag gerade aufwärts, andere abwärts, so dass sie sich über die große Anzahl Schnipsel gemittelt neutralisieren. Teilt man in der Summenkurve jeden Wert durch die Anzahl der Schnipsel, erhält man eine gute Schätzung für das Störsignal. Eine andere Bezeichnung dafür ist Herzüberlagerung oder englisch cardiac artifact. Zum bereinigten Atemsignal gelangt man schließlich, indem man dieses Störsignal von der Originalkurve subtrahiert .

Dieses Vorgehen ist leicht zu programmieren, eignet sich aber nicht für eine schritthaltende Verarbeitung in einem Überwachungsgerät, denn es funktioniert ja nur rückschauend. Ein Echtzeit- Algorithmus sollte also idealerweise mit jedem Abtastwert zweierlei Aktionen ausführen: 1. Lernen, d.h. ein Filtersignal aufbauen,  welches die Störung (hier: Herzüberlagerung) schätzt, und 2. Filtern d.h. das aktuelle Filtersignal vom Impedanzsignal subtrahieren. Genau dies tut das folgende Java-Programm, welches in der  Demonstration verwendet wird:

Es ist unschwer erkennbar, dass dieses Verfahren grundsätzlich für alle Situationen geeignet ist, in denen additive Störungen zu bekannten Zeitpunkten auftreten und diese Zeitpunkte nicht korrelieren mit den Nutzanteilen des gestörten Signals. Auch wird das Attribut adaptiv klar, denn das Filter passt sich dem vorliegenden Störsignal an.

Jetzt sollte deutlich sein, was das Demonstrationsprogramm macht, was angezeigt wird und was man verstellen kann. Starte es in der Eingabeaufforderung mit ‘java -jar Carats6.jar’. Dazu muss Java auf deinem Rechner installiert sein. Kann man bei java.com runterladen.

Natürlich werden hier keine echten Patientendaten verwendet, sondern sowohl die Herzüberlagerung als auch das Atemsignal bestehen aus Sinuskurvenstücken der Formel
(1 – cos x) für 0 <= x <= 2Pi. Viel Spaß beim Experimentieren!