Basteln im Bachelor: EKG Verstärker 2016 und Pulsoximeter 2017

Ich werde ja oft gefragt, ob ich auf
WhatsApp erreichbar bin. Nein, aber...

Bastel-Projekt EKG Verstärker 2016

Batteriebetriebener EKG Verstärker, mit Allen-Key Topologie Hardware-Tiefpass von 160 Hz und 100 Hz von jeweils 40 dB/Dekade bzw. 12 dB/Oktave, stimmbarem 50 Hz Hardware-Kerbfilter nach Fliege, eingestellt auf Q=5 und möglichst genau 50 Hz. Verstärker über Optokoppler galvanisch entkoppelt, Verbindung mit PC über Mikrofoneingang Soundkarte, liefert 3,3 Volt über circa 2,2 KΩ. Eingangsstufe: INA126 Instrumentenverstärker v=800, 2x2 Schutzdioden, 110μF DC-Filter, 2x 10kΩ Eingang, 2x 100kΩ Eingangsimpedanz. Bei 10μF weniger Baseline Drift aber negative Artefakte nach R-Spitze und T-Welle. Ausgangsstufe: Spannungsgesteuerter sehr kleiner LED-Strom an Optokoppler, also geringe Belastung der Mikrofonversorgung.

Mittelung über eine Messung von etwa 1 Minute reduziert Artefakte, zusätzliche digitale Kerbfilter auf 50 Hz und einige Oberwellen davon mit Octave. Schnittpunkte jeweils auf 225 ms vor der R-Spitze festgelegt.

Wo die Hardware unvermeidliche Nachteile hat, helfen Korrektur und Analyse mit Octave (oder Matlab) Skripten wie zum Beispiel ekg-auswertung.m (Stand 16. August 2016), jetzt mit Savitzky Golay Filter als zusätzlichem verzerrungs-armen digitalem Tiefpass und Anti-Hochpass: Der Eingang der Soundkarte hat einen 3 Hz Hochpass, was im gemessenen Signal Überschwinger (biphasische T-Welle, zu starke S-Welle) erzeugt. Mit Ursignal = 20 * Integral + Signal kann man das korrigieren, ein "gleitendes Vergessen" vom Integral ergibt einen Signal-schonenden Weg, DC-Drift zu entfernen. Empirisch gut: Integral nach jedem Sample * (1-(10/Samplingrate)). Ein Hoch auf die Differentialrechnung. Druckfreundliche Ausgabe von Ausschnitten der EKG Aufzeichnung mit 1/40 s Median Filter, auch Ausgabe als WAV möglich.

Mit dem Aufbau auf einer Lochraster-Platine und optimierten Bauteilen funktioniert der Verstärker noch besser: Man kann den 50 Hz Kerbfilter exakt justieren und verschiedene Eigenschaften umschalten (kleiner, grosser oder kein Kondensator am Eingang, Zoomfaktor 2 oder 4 am Eingang, Zoomfaktor 2 am Ausgang). Ausserdem kann man den Kerbfilter und den 100 Hz und 160 Hz Tiefpass jetzt mit Jumpern auslassen, wenn man das will. Das Ergebnis sieht dann ohne weitere digitale Filter, nach Einbau in ein Gehäuse schon so aus und mit den beschriebenen Filtern erkennt man die EKG Kurve schon sehr gut.

Nützliche Links:

Simulation EKG Verstärker 2017

Im Sommer 2017 habe ich mir endlich mal die Zeit genommen, die vorher nur in Teilen entwickelte Schaltung des EKG Verstärkers aus 2016 als Ganzes zu simulieren. Der Schaltplan der kompletten Kiste sieht recht umfangreich aus:

Der Vorteil der Sache ist, dass man jetzt direkt die Sprungantwort, Frequenzgang und Phasengang der Schaltung berechnen lassen kann. Man kann sogar ein ideales EKG-Signal (z.B. als WAV Datei) in (LT-) SPICE einspeisen und ausrechnen lassen, wie das Signal am Ausgang aussieht, also welche Verzerrungen auftreten. Was in der Simulation nicht zu sehen ist: Obwohl der Ausgang der Schaltung per Optokoppler isoliert ist, hat das Eingangssignal oft einen starken 50 Hz Brumm-Anteil von Netz-Einstreuungen. Ohne den Kerbfilter ist das Nutzsignal schwach im Vergleich zum mit verstärkten Netzbrummen. Bis auf Weiteres lasse ich also den Kerbfilter aktiv. Damit kann ich das EKG höher aussteuern bei der Messung per Mikrophon-Eingang des PC. Ein digitaler Kerbfilter würde zwar die 50 Hz perfekt und ohne Phasenverschiebung ausfiltern, aber bei der Messung wäre ein grosser Dynamikumfang nötig, also eine gute A/D Wandlung. Und EKG sind nicht direkt die Sorte Signal, für die die Eingangsfilter von Mikrophon-Buchsen entworfen sind...

Heute würde ich keine LM324 / LM224 mehr verwenden, da sie am Ausgang nur auf 1,5 Volt an die Versorgungsspannung kommen, also nicht für Batteriespannungen weit unter 9 Volt geeignet sind. Ausserdem ist die Schaltung zur AGND-Erzeugung nur am Ausgang mit Kondensatoren gepuffert, was wenig Sinn macht. Die Idee war 2016, dass damit die Spannung beim Einschalten sofort auf 1/2 Versorgungsspannung getrieben wird und nicht erst am Eingang von OpAmp 1C einschwingen muss. Die Bezeichnung bezieht sich auf meinen Hardware-Aufbau: Jeder Chip hat OpAmp A bis D, in der Reihenfolge der Pin-Nummern durchnummeriert. Die Jumper der Simulation sind in Wirklichkeit teilweise Schiebeschalter. Bei der Simulation des Frequenzgangs und der Sprungantwort sind die Eingangs-Kondensatoren, die Gleichspannungs-Anteile nach ein paar Sekunden abklingen lassen, natürlich kurzgeschlossen, da keine Gleichspannung am Eingang simuliert wird und die Wartezeit zu simulieren nur extra Zeit kostet.

Wie man sieht, bringt AGND die Signale am Instrumentenverstärker in die Mitte des verwertbaren Bereiches. Die Tiefpass-Stufen in Sallen Key Topologie kommen notfalls ohne AGND aus, aber der Fliege-Kerbfilter braucht AGND beim Spannungsteiler am Eingang, der die Güte steuert. Auch die "Zoom" Funktion braucht AGND, also eine symmetrische Versorgungsspannung, tatsächlich.

Die Simulation zeigt auch, dass der Kerbfilter bei der gewählten Güte Q = 6,5 zwar die 50 Hz genau aus dem Spektrum herausschneidet, aber auch relativ stark schwingt. Wenn man die 390k Widerstände auf 120k reduziert, sinkt die Güte auf Q = 2 und klingt diese Schwingung schneller ab. Die Resultate der alternativen Simulation sieht man, wenn man auf die Bilder von Frequenzgang und Sprungantwort clickt. Bei Q = 0,5 (also 30k statt 390k) schwingt der Kerbfilter zwar gar nicht, aber das Signal (Bode) braucht jetzt etwa 35 Millisekunden um in der Sprungantwort "anzukommen" - welcher Q-Wert ist im echten Leben sinnvoll?

Bastel-Projekt Pulsoximeter 2017

Die Idee eines Pulsoximeters: Ein Finger wird mit Rotlicht und Infrarot-Licht durchleuchtet. Je nach Durchblutung schwankt die Durchsichtigkeit des Fingers und je nach Sauerstoffgehalt des Blutes schwankt dessen Farbe. Da das Signal von einer einzigen Photodiode gemessen wird, wird der Finger mit hoher Frequenz abwechselnd in beiden Farben beleuchtet. Ein serieller 12-bit A/D Wandler misst die Spannung am Sensor und ein PIC Microcontroller analysiert das Signal: Verglichen werden AC und DC Anteil jeweils im infraroten und roten Licht, per digitalem Tiefpass werden Artefakte reduziert.

Eine per 5-bit D/A Wandler des PIC angesteuerte LED visualisiert den Puls im Finger, im seriellen Terminal (PC, angeschlossen am ICSP Kabel) wird dazu die Auswertung des R-Wertes angezeigt, zum Beispiel "R-value: 0.49 Red 13711 + 0..442 IR 8844 + 0..587 [148]" Es wurden jeweils mehrere A/D Messungen gewichtet zu einer 15-bit Messung kombiniert, daher die relativ hohen Zahlenwerte in der Beispiel-Ausgabe. Erwartet wird ein R-Wert zwischen 0,8 und 0,4 bei SpO2 von 90% bis 100% beziehungsweise bis zu 3,4 bei stillstehendem, sauerstoffarmem Blut.

Problem bei der Auswertung ist die minimalistische Hardware: Wenig RAM, 8-bit CPU mit niedrigem Takt ohne Komfort, eine Division dauert ewig. Die Berechnung R-value = (R AC / mean R) / (IR AC / mean IR) wird z.B. per "Mittelwert etwa = min + (AC / 2)" vereinfacht und die Tiefpass-Filter sind kurze FIR Filter mit "runden" Gewichtswerten bzw. Kolmogorov Zurbenko Filter (wiederholter gleitender Durchschnitt). Der C Quelltext der Firmware auf dem PIC zeigt eher Hardware-Sparsamkeit als Lesbarkeit. Auf der Steckplatine tut sich wenig:

Man sieht lediglich 4 Chips: PIC Mikrocontroller, MCP3208 A/D Wandler, ein ULN2003 zum Schalten der Fingerbeleuchtung und ein LM324 um für Sensor- und Referenzspannung und Ausgangs-LED genug Strom zu haben. Da es 100e PIC Varianten gibt, würde eine Version mit internem 12-bit A/D Wandler und hohem Ausgangsstrom einige Chips einsparen. Eine dsPIC33 Version bietet dazu noch schnelle Mul/Div und 16-bit CPU. Der aktuell verwendete PIC hat zwar (unbenutzte) USB Gimmicks, aber nur 10-bit A/D, was unser AC Signal mit hohem DC Anteil nicht genau genug messen kann.

Die LED und die Photodiode sind in ein lichtdicht verpacktes Plastikrohr mit 2 bis 3 cm Durchmesser montiert, zur Messung steckt man einen Finger ins Rohr. Mit der roten Fehler-LED auf der Steckplatine zeigt die Software an, wenn zu viel oder zu wenig AC Anteil im Signal ist bzw. der DC Anteil übersteuert - zum Beispiel, weil in der Testzone kein Finger steckt. Die gemessenen und in AC und DC getrennten Signale sehen dann (bei 60 Hz Sampling Rate, nach Tiefpass, R-Wert je nach Min/Max pro Sekunde) so aus: