EKG-testejä (2013)
Koska olen kiinnostunut yleisestikin lääketieteestä, mittaamisesta ja myös kardiologiasta, oli luonnollista testailla signaalien keräämistä ihmiskehosta. Törmäsin jokin aika sitten Scott Hardenin halpaan EKG-kytkentään ja ajattelin kehitellä jotain omaa. Opinnoissani en ole vielä kovinkaan paljoa törmännyt vahvistimiin ja signaalipuolellakin on enemmänkin digitaalipuolen kokemusta, mutta kokeilemalla oppii. Olen myös käynyt EKG-kurssin, joten kaikenlaista tietoa löytyy siltä puolelta.
Huom! Kaikki signaalit on mitattu istuen, jalat osuen tuoliin ja lattiaan, ympärillä WLAN-tukiasemia ja ties mitä, joten näistäkin seikoista johtuen mitään diagnostiikkaa käyristä ei voi tehdä. Myös yliyksinkertainen suodatus aiheuttaa kuviin vääristymiä.
En myöskään suosittele kenellekään tällaisten järjestelmien rakentelua tai kytkemistä itseensä! Sydämen saa pysäytettyä hyvinkin pienellä sähkövirralla, tai ainakin aiheutettua ongelmia. Myöhemmin saatan laittaa kytkentäkaavioita ja muita ohjeita sivuille, jos jotakuta kiinnostaa.
EKG-teoriaa
EKG eli elektrokardiogrammi on sydämen sähköisen toiminnan mittaamista. Sydän on itsekseen toimiva lihas, joka johtaa sähkövirran hallitusti sisällään ja tämä takaa juuri tietynlaisen supistumisen. Signaali lähtee sinussolmukkeesta ja siirtyy ensimmäisenä eteisiin saaden nämä supistumaan. Tämä pakkaa veren eteisistä kammioihin. Sen jälkeen signaali siirtyy AV-solmukkeeseen, jossa se odottaa hetken ja siirtyy sitten kammioihin. Kammioissa signaali kulkee ensin Hisin kimppua ja hajaantuu ympäri kammioita Purkinjen säikeisiin ja tämän avulla kammiot supistuvat kerralla ja oikeassa järjestyksessä.
EKG-käyrässä tämä toiminta näkyy siten, että sinussolmukkeen laukaistessa signaalin tulee näkyviin P-aalto (pieni nytkähdys lepoajan jälkeen). Signaalin siirtyessä kammioissa tulee QRS-kompleksi (kaikille tuttu iso hypähdys). QRS-kompleksissa on nimestäkin päätellen kolme osaa: ensin lähtee Q-aalto alaspäin, sitten R-aalto ylös ja vielä S-aalto alas. Kaikissa kytkennöissä näitä ei kuitenkaan välttämättä selkeästi näy ja se on täysin normaalia. Kammioiden levätessä tulee vielä leveä T-aalto. Tämän jälkeen on vielä U-aalto, jota aina ei nähdä.
Tämä toiminta on siis terveessä sydämessä. Jos sydämessä on jotain vikaa, häiriintyy signaalien kulkeminen ja EKG-mittauksella voidaan havaita häiriöt ja diagnosoida syy. Koska mittaukset otetaan useista kohdista voidaan näistä tunnistaa millä alueella häiriö on ja tämän perusteella tehdä luotettava diagnoosi esitietojen kanssa.
EKG-mittauksia voi tehdä monella tavalla, mutta yleensä käytetään 12-kanavaista mittausta, jossa otetaan raajakytkennöillä signaalit I, II, III, aVR, aVL ja aVF sekä rintakytkennöillä V1-V6. Infarktitilanteessa monesti otetaan 14-kanavainen EKG (tai ensin 12-kanavainen ja sitten vaihdetaan kaksi kanavaa toiseen paikkaan), jossa kaksi elektrodia asetellaan selkään ja tällöin saadaan lisätietoa sydämen takaosasta.
Perusrakenne
Ensimmäisenä testailin yksinkertaisia operaatiovahvistinkytkentöjä yleisesti käytetyllä LM324-piirillä. Sain Netduinon ja Arduinon mittaamaan vahvistimen vahvistamaa signaalia eri lähteistä, joten kytkennät onnistuivat. EKG-mittaus kuitenkin on hieman eri asia kuin siistin signaalin ottaminen paineanturista tms.
Opettajan vinkistä päädyin toteuttamaan instrumentaatiovahvistimen. Tietysti oikeissa laitteissa järkevintä olisi käyttää valmiita instrumentaatiovahvistinpiirejä, mutta näiden ollessa hieman kalliimpia ajattelin ensin tehdä testejä peruskomponenteilla. Käytin kytkennässä yhtä LM324-piiriä hoitamaan itse vahvistamisen sekä "virtuaalimaan" luomisen (tämän avulla pärjää yhdellä jännitelähteellä).
Kytkiessäni Arduinon mittaamaan signaalia tarvitsin myös toisen piirin luomaan Arduinon virtuaalimaan, jotta saan signaalitasot järkeviksi. Koska käytin vahvistimeen 9 V jännitelähdettä, tulee nollataso 4,5 voltin kohdalle. Arduinoni osaa mitata jännitettä 0-5 V välillä, joten tuota ei suoraan voisi kytkeä sisääntuloon. Toki jännitteenjaollakin saisi jännitetasot siirrettyä, mutta päädyin kahteen virtuaalimaahan.
Kytkin siis Arduinon virtuaalimaan (2,5 V) vahvistinpiirin virtuaalimaahan (4,5 V), jolloin Arduinon näkemä nollasignaali on täsmälleen mittausalueen keskellä ja signaali heiluu tämän molemmin puolin.
"Elintoimintosignaali"
Sairaalassa saatetaan potilaaseen kytkeä elintoimintomonitori, joka mittaa eri arvoja (verenpaine, happitasapaino, sydämen toiminta jne) riippuen tapauksesta. Mittarissa on yleensä kolme johtoa, joista yksi on maadoitus, eikä sitä käytetä mittaamiseen (yleensä vasemmassa kyljessä). Kahta johtoa käytetään mittaamiseen (yleensä rinnassa/hartioissa) ja näiden välinen jännite on signaalilähde. Vaikka sydän on syvällä rintakehässä sydänpussissa, sen sähköinen toimina aiheuttaa kuitenkin pieniä jännitemuutoksia ympäristöön ja nämä voidaan ihon kautta mitata.
Kytkin Arduinoon myös näyttömodulin, jotta saan suoraan nähtyä millainen signaali tulee. Ihan nätti signaali, ei paljoa häiriötäkään (jännitelähde on paristoista kasattu, joten ei humise). Signaali on toki väärin päin, kyse ei ole P-inversiosta.
Jos Arduinon kytkee USB:lla kiinni tai itse on jossain häiriönlähteessä kiinni, tulee selvä 50 Hz häiriösignaali näkyviin. Tästä itse sydänkäyrän tulkinta on mahdotonta. Yksi diagnosoitava asia on esimerkiksi kaksihuippuinen R-aalto. Tässä kuvassa sellainen on, mutta se johtuu vain siitä, että häiriösignaali osuu sopivaan kohtaan. Oikeasti sydänkäyrässä tätä kaksihuippuisuutta ei ole.
MCU + PC
Ruudulle piirtäminen vie aika paljon aikaa Arduinolta, joten seuraavaksi laitoin Arduinon vain kaappaamaan signaalia sopivalla tahdilla ja lähettämään sen PC:lle. Leonardossa on mukavasti sisäänrakennettu USB-sarjaportti-ominaisuus, joten datansiirto on helppoa. Binääriä sarjaporttiin ja PC-softa lukee sitä piirtäen käyrää.
Suodatus ja häiriöt
Signaali ei tule näin siistinä ulos, koska pelkkä USB-johdon kytkeminen saa aikaan 50 Hz huminaa ja EKG-signaalin ollessa muutamia millivoltteja aiheuttaa pienikin humina ison häiriön signaaliin. Arduinon pyörittäessä yhtä ohjelmaa täsmälleen samalla tavalla jatkuvasti (keskeytyksiä jne ei käytössä), sen mittaussykli on vakio. Humina on siniaaltoa ja siniaallon integraali välillä 0-2π on nolla, joten ei tarvitse muuta kuin synkronoida mittaussykli siten, että n mittausta vie saman ajan kuin yksi siniaalto (20 ms). Ruudulle piirrettäessä tehdään yksinkertainen liukuva keskiarvo n mittauksen alueelta ja tällöin sini integroituu nollaksi. Tämä toki aiheuttaa virhettä signaaliin, mutta alkutesteissä tämä on ihan riittävää.
Signaali ei kuitenkaan ole suodatuksenkaan jälkeen mitään täydellistä, mutta siitä silti näkee sykkeen. Jos sydämen syke oikeasti olisi tuollainen, voisi epäillä jo monenlaisia haarakatkoksia jne. Tämä kuitenkin korjaantui kun laittoi elektrodit paremmin ja ei ollut aivan häiriölähteiden vieressä.
Hieman lisävirittelyä suodatukselle ja ajastukselle ja signaali näyttää heti tutummalta. P-aalto on selkeä, QRS-kompleksi on melko tarkka ja T-aalto on hyvä. Oikea suunta siis!
Monikanavaisuus
Ensimmäinen kytkentä oli yksinkertainen elintoimintosignaali, mutta "normaalissa" 12-kanavaisessa EKG:ssa mitataan useampia signaaleja, kuten nimikin kertoo. Pieni omituisuus asiassa on se, että 12-kanavaisessa EKG:ssa kyllä piirretään 12 käyrää (I, II, III, aVR, aVL, aVF, V1, V2, V3, V4, V5 ja V6), mutta potilaaseen kytketään vain 10 johtoa. Näistä yksi on maadoitus, joten signaalijohtoja on yhdeksän. Tämä selittyy sillä, että aVR, aVL ja aVF ovat laskennallisia käyriä, jotka voidaan piirtää raajamittausten (I, II, III) avulla eikä niitä varten tarvita omia johtoja.
Päätin ensimmäisenä testata kytkentää, jossa mitataan kanavat I, II ja III ja näiden tiedot toimitetaan PC:lle. PC voi sitten piirtää nämä ja laskea kanavat aVL, aVR ja aVF. Tähän tarvitaan neljä johtoa: maadoitus oikeaan jalkaan sekä signaalijohtimet käsiin sekä vasempaan jalkaan. Koska signaali heikkenee mitä kauemmas sydämestä mennään (ja pitkät johdot ovat hankalia), päätin testeissä kytkeä elektrodit reisiin sekä rintaan juuri solisluiden alapuolelle.
Raajaelektrodien mittaus tehdään siten, että I-kanavaan mitataan jännite-ero oikean ja vasemman käden välillä. II-kanavaan mitataan oikean käden ja vasemman jalan jännite-ero ja III-kanavaan vasemman käden ja vasemman jalan väliltä.
Mittauksen voisi tehdä muutamalla tavalla: joko rakentaa vahvistinpiirit jokaiselle mitattavalle asialle (eli 12-kanavaisessa yhdeksän vahvistinrakennelmaa) ja kytkeä ne yhdeksään AD-muuntimeen tai vaihdellen johtoja. Ensimmäinen on siitä parempi, että kanavat eivät häiritse toisiaan suoraan ja mittauksia voidaan tehdä täsmälleen samaan aikaan, mutta huonona puolena monimutkainen rakenne ja kuitenkaan raajaelektrodeja ei voida välttämättä mitata yhtäaikaisesti. Jälkimmäisessä on yksinkertainen rakenne, mutta mittaustulokset ovat hieman eri ajanhetkeltä. Sydämen sykli on kuitenkin sen verran pitkäaikainen tapahtuma ettei tästä välttämättä tule ongelmaa.
Olin hankkinut etukäteen kaksi multiplekseripiiriä (SN74LV4051A), joita ohjaamalla voisin kytkeä halutut elektrodit vahvistinpiiriin. Epävarmaa oli miten hyvin multiplekseri päästäisi parin millivoltin signaalia lävitseen. Kyse kuitenkin on puolijohteesta eikä mekaanisesta releestä, joka toki olisi päästänyt lävitseen vaikka mitä. Toinen epävarmuus oli vahvistinpiirin nopeus. Koska signaalilähteitä vaihdetaan nopeasti tulee vahvistinpiirin stabiloitua pian uuteen tasoon, jotta signaali on luotettava.
Testasin ensin multipleksereitä kytkemällä ne kiinteästi päästämään yhden kanavan lävitseen, jotta näkisin toimiiko kytkentä. Ja kyllähän se toimi! Eli sisääntulot muxien läpi ja se siitä. Enää kysymysmerkkinä vahvistinpiirin nopeus.
Muxit ovat kahdeksankanavaisia ja tällä hetkellä tarvitsin niistä kolme. Kytkin kuitenkin suoraan jo kaikki kolme ohjausnastaa Arduinoon, jos niitä jatkossa tarvitaan. Kytkin piirit siten, että kumpaakin ohjataan samoilla signaaleilla, eli sisääntulo 1 kytkee I-kanavan tarvitsemat eletrodit, sisääntulo 2 kytkee II-kanavan jne. Tällöin mikrokontrollerin ei tarvitse ohjata erikseen kahta muxeria. Tässä kuitenkin menetettiin hieman vapautta mitata vaikka signaalia käänteisesti tai minkä tahansa johtojen välillä.
Muutin Arduinon ohjelmointia siten, että se mittaisi yhden kanavan, sitten vaihtaisi toiseen, odottaisi hetken, mittaisi ja toistaisi tätä kaikille kolmelle kanavalle. Huoli vahvistinpiirin tasoittumisesta olikin aiheellinen eikä mittauksia voi tehdä heti peräkkäin. Odotusaika kuitenkin näytti liikkuvan 0,1-0,2 ms paikkeilla, joten sen ei pitäisi olla ongelma. Joten mittaamaan ja etsimään sopiva tahdistus, jotta humina ei tulisi läpi.
Ja nättiä jälkeä tuli (paitsi kaksi laskettua kanavaa menivät vahingossa päällekkäin). Häiriötä näkyy enemmän kuin yksikanavaisessa, todennäköisesti juuri muxerin takia. Ajastusta muuttamalla sitä voisi vähentää ja pitääkin etsiä sopivat arvot mittauksille. Tällä hetkellä ruutuun piirretään joka kahdeksas mitattu arvo, joten signaalia kyllä riittää vaikka näytteenottotaajuutta hieman vähentäisikin.
Lopullinen rakennelma
Ei se tuon monimutkaisempi lopulta ole. Osien hintakin jää hyvin pieneksi, varsinkin ulkomailta tilattaessa. Suomesaa pelkkä koekytkentälevy maksaa melkein enemmän kuin mikään muu osa tässä kytkennässä (Arduinoa lukuunottamatta toki).
Jatko
Tässä vaiheessa kuitenkin näki, että kotikonstein ja hyvin vähällä rahalla saa rakennettua kaikenlaista. Jatkossa piirin parantelua ja ehkä jossain vaiheessa uskaltaa jopa rakentaa järjestelmän ilman valmiiksirakennettua Arduinoa pelkän mikrokontrollerin päälle yhdelle piirilevylle. Testailu jatkuu ja ehkä jossain välissä rakennan jopa täydellisen 12-kanavaisen laitteen. Tämä kuitenkin tarvitsee tehokkaamman kontrollerin ja kiinnostus olisi kova siirtyä ARM-pohjaisiin laitteisiin. Netduino tällainen onkin, mutta koska siinä ajetaan .NET-koodia tulkattuna, sen nopeus on yleensä jopa alle Arduinon vaikka kellotaajuus sekä prosessorin laskentateho on paljon suurempi. Tiputtamalla .NETin pois välistä saisi tehtyä monia asioita ja Arduino Due onkin ARM-pohjainen järjestelmä. Jos sen saisi asennettua Netduinoon, jatkuisi työ välittömästi sillä. Muutoin pitää tilata Due testeihin.