Sisukord:

Suure täpsusega pulssoksümeeter: 6 sammu (piltidega)
Suure täpsusega pulssoksümeeter: 6 sammu (piltidega)

Video: Suure täpsusega pulssoksümeeter: 6 sammu (piltidega)

Video: Suure täpsusega pulssoksümeeter: 6 sammu (piltidega)
Video: 7 лайфхаков с ГОРЯЧИМ КЛЕЕМ для вашего ремонта. 2024, November
Anonim
Suure täpsusega pulssoksümeeter
Suure täpsusega pulssoksümeeter
Suure täpsusega pulssoksümeeter
Suure täpsusega pulssoksümeeter

Kui külastasite hiljuti arsti, on tõenäoline, et õde uuris teie põhilisi elulisi näitajaid. Kaal, pikkus, vererõhk, samuti südame löögisagedus (HR) ja hapniku küllastumine perifeerses veres (SpO2). Võib-olla saadi kaks viimast punaselt helendavast elektroonilisest sõrmeandurist, mis näitasid minutil pisikesel ekraanil asjakohaseid numbreid. Seda sondi nimetatakse pulssoksümeetriks ja selle kohta leiate kogu põhiteabe.

Kindlasti saab hõlpsalt osta lihtsa pulssoksümeetri, kuid kus on selle lõbu? Olen otsustanud ehitada oma, esiteks selle pärast, kuid mis veelgi olulisem, pidades silmas konkreetset rakendust: öine oksümeetria, kus nii HR kui ka SpO2 andmeid kogutaks pidevalt üleöö ja salvestataks mikro -SD -kaardile. Instructables sisaldab juba mitut sellist projekti, nt kaks, mis hõlmavad Arduino siin ja siin, ja üks, mis kasutab Raspberry Pi. Minu oma kasutab juhtimiseks ja andmete salvestamiseks veidi uuemat andurit MAX30102 firmalt MAXIM Integrated ja Adafruit's Feather M0 Adalogger.

Meie projekt ei ole seega riistvara osas eriti uuenduslik ja seetõttu ei tasuks seda juhendit kirjutada, kuid selle loomisel olen teinud olulisi edusamme tarkvara osas, mis võimaldas mul MAX30102 -st andmeid palju suurema järjepidevuse ja palju vähem müra kui tarkvara, mille MAXIM selle anduri jaoks kirjutas. Meie signaalitöötlusalgoritmi toimivust illustreerib ülaltoodud diagramm, kus kaks ülemist graafikut sisaldavad üleöö pulssi ja hapniku küllastumist, mis on arvutatud toorsignaalide põhjal meie meetodil (tähistatud "RF" -ga), samas kui kaks alumist graafikut näitavad MAXIM -i tulemusi, mis on saadud täpselt samad signaalid. HR standardhälbed on 4,7 lööki minutis ja 18,1 lööki minutis ning SpO puhul2 0,9% ja 4,4% RF ja MAXIM puhul.

(Mõlemad raadiosagedusgraafikud vastavad minimaalsele autokorrelatsiooni lävele 0,25 ja R / IR korrelatsioonile piiranguteta; nende mõistete selgitamiseks vt samme 4 ja 5.)

Samm: riistvara

Riistvara
Riistvara
Riistvara
Riistvara
Riistvara
Riistvara
Riistvara
Riistvara
  1. Pulssoksimeeter ja pulsiandur MAX30102 emaplaat firmalt MAXIM Integrated, Inc.
  2. Feather M0 Adalogger firmast Adafruit, Inc.
  3. Liitiumioonaku Adafruit, Inc.

Ühendused:

  • Adalogger tihvtid SCL ja SDA vastavatele SCL ja SDA tihvtidele MAX30102 plaadil
  • Adaloggeri tihvt 10 kuni INT tihvti külge MAX30102 plaadil
  • Adalogger GND kuni MAX30102 plaat GND
  • Adalogger 3V kuni MAX30102 VIN

2. toiming: digitaalsed signaalid tagastab MAX30102

Digitaalsignaalid tagastas MAX30102
Digitaalsignaalid tagastas MAX30102
Digitaalsignaalid tagastas MAX30102
Digitaalsignaalid tagastas MAX30102

Anduri tööpõhimõtted on väga lihtsad: kaks LED -i, üks punane (660 nm) ja üks infrapuna (880 nm, IR), paistavad läbi inimese naha. Valgus neeldub osaliselt kudedes, sealhulgas perifeerses veres. Anduri fotodetektor kogub peegeldunud valgust mõlemal lainepikkusel ja tagastab kaks vastavat suhtelist intensiivsust, kasutades I2C protokolli. Kuna hapnikuga rikastatud ja hapnikuga rikastatud hemoglobiini neeldumisspektrid on mõlema lainepikkuse jaoks erinevad, on peegeldunud valgusel erinev koostisosa arteriaalse vere koguses, mis esineb naha pulsside all iga südamelöögi ajal. Südame löögisageduse ja hapnikuga küllastumise väljaselgitamine sõltub signaalitöötlustarkvarast.

Toorsignaalide näiteid (ainult IR -kanal) on illustreeritud ülaltoodud piltidel. Võib märgata perioodilist komponenti, mis on kaetud muutuva baasjoonega ja mis nihkub mitmete Vikipeedia lehel mainitud tegurite tõttu. Liikumisest põhjustatud esemed on eriti tüütud, kuna need võivad varjata kasulikku HR -signaali ja põhjustada võltsitulemusi. Seega on täiustatud kaubanduslikel oksimeetritel kiirendusmõõturid, mis aitavad need esemed tühistada.

Võin lisada oksümeetri järgmisele versioonile kiirendusmõõturi, kuid öise HR/SpO jaoks2 salvestamisel, kui andur jääb enamiku ajast liikumatuks, piisab moonutatud signaalide tuvastamisest ja väljajätmisest.

MAX30102 andur ise on saadaval pisikesel pinnale paigaldatud pakendil, kuid MAXIM pakub lahkelt Arduino ja mbed jaoks väljundplaati (emaplaat 6300) ning signaalitöötlustarkvara - kõik on kujunduspaketis MAXREFDES117#. Ostsin selle õnnelikult, oodates, et lihtsalt jootan mõned juhtmed anduri ja Adaloggeri vahele ning saan ühe päeva jooksul töökorras ja hea oksimeetri. Kohandasin MAXIM tarkvara RD117_ARDUINO versiooni Adaloggeri ARM Cortex M0 protsessoril töötamiseks. Põhimõtteliselt ei pidanud ma muud tegema, kui asendama ühildumatud SofI2C funktsioonid max30102.cpp vastavate Wire raamatukogu kõnedega. Kood koostati Arduino IDE v1.8.5 trahvi ja jooksis M0 -l ilma vigadeta. Neto tulemused olid aga pettumust valmistavad. Sissejuhatuse etapis olen juba näidanud nii HR kui ka SpO väga suurt dispersiooni2. Loomulikult võib väita, et olen midagi valesti teinud ja see oli ka minu algne mõte. Kuid MAXIMi õppevideos saate jälgida ka ekraanil kuvatavaid pööraselt kõikuvaid HR väärtusi. Lisaks kinnitavad video all olevad kommentaarid, et ka teised on sarnast nähtust märganud.

Lühidalt öeldes olen pärast mõningaid katseid kindlaks teinud, et andur töötab hästi ja alternatiivne digitaalse signaalitöötluse meetod tagab palju parema stabiilsuse. Seda uut meetodit, mida tähistab "RF", kirjeldatakse järgmistes etappides.

3. samm: signaali eeltöötlus

Signaali eeltöötlus
Signaali eeltöötlus
Signaali eeltöötlus
Signaali eeltöötlus
Signaali eeltöötlus
Signaali eeltöötlus
Signaali eeltöötlus
Signaali eeltöötlus

Meie rakenduses kogutakse toorsignaali sagedusega 25 Hz (sama mis MAXIM -iga) 4 sekundi jooksul (MAXIM -i tarkvara kogub ainult 1 sekundi väärtuse), mille tulemuseks on 100 digiteeritud ajapunkti lõpp -andmepunkti kohta. Iga 100-punktiline jada tuleb eeltöödelda järgmiselt.

  1. Keskmine tsentreerimine (teise nimega "alalisvoolu komponendi eemaldamine" elektriinseneridele). Andurilt pärinevad algandmed on kümnendiku täisarvude aegridad5 vahemik. Kasulik signaal on siiski vaid osa arteriaalse verest peegelduvast valgusest, mis varieerub suurusjärgus vaid 102 - esimene näitaja. Mõtestatud signaalitöötluse jaoks on seetõttu soovitav iga seeriapunkti keskmine lahutada. See osa ei erine sellest, mida MAXIM tarkvara juba teeb. Erinev on aga ajaindeksite endi täiendav keskmistamine. Teisisõnu, selle asemel, et seeriapunkte indekseerida numbritega 0 kuni 99, on uued indeksid nüüd numbrid -49,5, -48,5,…, 49,5. Esmapilgul võib see tunduda imelik, kuid tänu sellele protseduurile langeb signaalikõvera "raskuskese" kokku koordinaatsüsteemi päritoluga (teine joonis). See asjaolu muutub järgmises etapis üsna kasulikuks.
  2. Baasjoone tasandamine. Teine pilk etapis 2 näidatud lainekujudele illustreerib, et reaalsete oksümeetria signaalide baastase pole kaugeltki horisontaalselt tasane, vaid varieerub erinevate nõlvade lõikes. Kolmas joonis näitab keskmist IR-signaali (sinine kõver) ja selle baasjoont (sinine sirgjoon). Sellisel juhul on baasjoone kalle negatiivne. Eespool kirjeldatud signaalitöötlusmeetod nõuab, et lähtejoon oleks horisontaalne. Seda on võimalik saavutada, lahutades lihtsalt keskjoone keskmisest signaalist baastaseme. Tänu Y- ja X-koordinaatide keskmisele tsentreerimisele on baasjoone lõikepunkt null ja selle kaldevõrrand on eriti lihtne, nagu on näidatud neljandal joonisel. Baasjoone tasandatud signaali näitab oranž kõver kolmandal joonisel.

Seega on eeltöödeldud signaal järgmiseks sammuks valmis.

4. samm: tööhobune: automaatkorrelatsiooni funktsioon

Tööhobune: autokorrelatsiooni funktsioon
Tööhobune: autokorrelatsiooni funktsioon
Tööhobune: autokorrelatsiooni funktsioon
Tööhobune: autokorrelatsiooni funktsioon
Tööhobune: autokorrelatsiooni funktsioon
Tööhobune: autokorrelatsiooni funktsioon

Tulles tagasi tavalise 1,…, n indekseerimise juurde, näitab esimene joonis autokorrelatsiooni funktsiooni r määratlustm - kogus, mis on osutunud väga kasulikuks signaali perioodilisuse ja kvaliteedi tuvastamisel. See on lihtsalt signaali aegridade normaliseeritud skalaarprodukt, mis ise on nihutatud m võrra. Meie rakenduses on siiski mugav skaleerida iga autokorrelatsiooni väärtust selle väärtuse suhtes, kui viivitus = 0, st kasutada r määratletud suhtelist autokorrelatsioonim / r0.

Tüüpilise hea kvaliteediga IR -signaali suhtelise autokorrelatsiooni graafik on näidatud teisel joonisel. Nagu arvata võis, on selle väärtus viivitusel = 0 globaalsel maksimumil 1. Järgmine (kohalik) maksimum saabub ajal = 23 ja on 0,79. Kohalike miinimumide ja maksimumide olemasolu autokorrelatsiooniskeemil on lihtne mõista: kui signaal nihkub paremale, segavad selle tipud esialgu üksteist hävitavalt, kuid teatud hetkel muutuvad häired konstruktiivseks ja saavutavad maksimaalse keskmisega võrdse viivituse korral signaali periood.

Viimane fraas on ülioluline: piikide vahelise keskmise ajavahemiku määramiseks, mille põhjal saab arvutada signaali sagedust (st südame löögisagedust), piisab autokorrelatsioonifunktsiooni esimese kohaliku maksimumi leidmisest! Vaikimisi proovib MAX30102 analoogsisendit kiirusega 25 punkti sekundis, seega antud m korral on ajavahemik sekundites m / 25. See viib pulsisageduse väljendamiseni löökidena minutis (bpm) järgmiselt:

HR = 60*25 / m = 1500 / m

Loomulikult ei ole vaja teha r kalleid arvutusim kõigil viivitusväärtustel. Meie algoritm teeb esimese oletuse südame löögisageduse kohta = 60 lööki minutis, mis vastab m = 25. Autokorrelatsioonifunktsiooni hinnatakse sel hetkel ja võrreldakse selle vasaku naabri väärtusega, m = 24. Kui naabrite väärtus on kõrgem, siis marss jätkub vasakule, kuni rm-1 <rm. Nii tagastatakse määratud lõplik m maksimaalse viivitusena. Järgmine iteratsioon algab sellest väärtusest 25 asemel ja kogu protsess kordub. Kui esimene vasakpoolne naaber on madalam, siis ülaltoodud rutiinsed marsid viivad samamoodi paremale. Enamasti nõuab maksimaalne viivitus vaid paar autokorrelatsiooni funktsiooni hindamist. Lisaks kasutatakse piirväärtustena maksimaalset ja minimaalset vastuvõetavat viivitust (vastavalt minimaalsele ja maksimaalsele südame löögisagedusele).

Ülaltoodu töötab väga hästi hea kvaliteediga signaalide puhul, kuid reaalne maailm pole ideaalist kaugeltki. Mõned signaalid tulevad moonutatud, peamiselt liikumisartefaktide tõttu. Selline signaal on näidatud kolmandal joonisel. Halb perioodilisus peegeldub nii selle autokorrelatsioonifunktsiooni kujus kui ka esimese kohaliku maksimumi madala väärtuse (0,28) juures m = 11. Võrrelge seda hea kvaliteediga signaali maksimaalse väärtusega 0,79. Koos viivituse piiravate väärtustega on seega ka r väärtusm / r0 maksimaalselt on hea signaali kvaliteedi näitaja ja liikumisartefaktide filtreerimiseks võib kasutada nõuet, et see ületaks teatud läve. Sissejuhatustes näidatud "RF" graafikud tulenesid sellisest künnisest, mis oli 0,25.

5. samm: hapniku küllastumise määramine

Hapniku küllastumise määramine
Hapniku küllastumise määramine
Hapniku küllastumise määramine
Hapniku küllastumise määramine
Hapniku küllastumise määramine
Hapniku küllastumise määramine
Hapniku küllastumise määramine
Hapniku küllastumise määramine

Eelmine samm oli südame löögisageduse määramiseks piisav. SpO2 nõuab rohkem tööd. Esiteks tuleb arvesse võtta seni tähelepanuta jäetud signaali punases (R) kanalis. Järgmisena arvutatakse punase ja infrapunasignaali suhe Z = R/IR, mis mõlemad peegelduvad arteriaalsest verest. "Arteriaalse vere" osa on ülioluline, kuna enamik valgust peegeldub tegelikult kudedelt ja veeniverelt. Kuidas valida arteriaalsele verele vastav osa signaalist? See on pulseeriv komponent, mis varieerub iga südamelöögi korral. Elektriinseneride sõnadega on see "vahelduvvoolu osa", samas kui järelejäänud peegelduv valgus on "alaosa". Kuna R- ja IR -valguse absoluutsed intensiivsused ei ole võrdsed, arvutatakse Z suhe suhtelise intensiivsuse põhjal, nagu on näidatud esimesel joonisel. Reaalselt arvutatud koguste osas kasutan keskmise keskpunktiga, baastasandil nullitud signaali y keskmist ruutu (RMS), lähtesignaali juba teadaoleva keskmiseni, <Y>; vaata teist joonist. Z suhe on aga vaid pool tööst. Mittelineaarne anduri reaktsioon nõuab empiirilist kalibreerimist Z ja lõpliku SpO vahel2 väärtused. Võtsin kalibreerimisvõrrandi MAXIMi koodist:

SpO2 = (-45,06*Z + 30,354)*Z + 94,845

Pidage meeles, et see võrrand kehtib ainult 2017. aastal ostetud MAX30102 disainilaua kohta! Tõenäoliselt võib MAXIM oma andurid hiljem uuesti kalibreerida.

Ülaltoodud protseduur tekitab endiselt palju vale SpO -d2 näidud. Punane kanal kannatab paljude esemete all, nagu ka IR. On mõistlik eeldada, et mõlemad signaalid peaksid olema tugevas korrelatsioonis. Tegelikult korreleeruvad hea kvaliteediga signaalid, nagu näide kolmandal joonisel, väga hästi. Pearsoni korrelatsioonikordaja on sel juhul koguni 0,99. See ei ole alati nii, nagu on näidatud neljandal joonisel. Kuigi IR -signaal läbiks oma r -ga pulsikvaliteedi filtrim / r0 = 0,76, moonutatud R -signaali tulemuseks on halb korrelatsioonikoefitsient nende kahe vahel, mis on vaid 0,42. See tähelepanek pakub teist kvaliteedifiltrit: korrelatsioonikordaja kanalite vahel on suurem kui teatud lävi.

Kaks viimast numbrit illustreerivad sellise kvaliteedifiltreerimise netomõju. Esiteks joonistatakse mõõdetud hapniku küllastumine HR kvaliteedilävega 0, 25, kuid ilma SpO -ta2 filter. Järgmine graafik tuleneb kehva HR ja SpO filtreerimisest2 tulemused 0,5 r juuresm / r0 ja 0,8 korrelatsioonikoefitsiendi künnist. Üldiselt filtreeriti rangema režiimi abil välja nõrgad andmepunktid, mis moodustasid 12% koguarvust.

Meie koodis arvutatakse korrelatsioonikoefitsient cc vastavalt viienda joonise valemile, kus y tähistab keskmist keskmist baastasandi signaali, samas kui r0 määratleti eelmises etapis.

6. samm: lähtekood

Selle projekti C lähtekood, mis on vormindatud Arduino IDE jaoks, on saadaval meie Githubi kontolt järgmisel lingil:

github.com/aromring/MAX30102_by_RF

Selle Readme leht kirjeldab üksikuid komponente.

Tahaksin hetkeks kiita Adafruit'i sellise suurepärase toote valmistamise eest nagu M0-põhine Adalogger. Selle kiire 48 MHz ARM Cortex M0 protsessor, millel on palju RAM -i, aitas kindlasti seda projekti elujõuliseks muuta, samas kui otse ühendatud SD -kaardilugeja (pluss Adafruit'i SD -raamatukogu) eemaldas kõik harrastaja valud, mis on seotud suurte andmemahtude reaalajas salvestamisega.

Soovitan: