Obsah:

Pulzný oxymeter s výrazne zlepšenou presnosťou: 6 krokov (s obrázkami)
Pulzný oxymeter s výrazne zlepšenou presnosťou: 6 krokov (s obrázkami)

Video: Pulzný oxymeter s výrazne zlepšenou presnosťou: 6 krokov (s obrázkami)

Video: Pulzný oxymeter s výrazne zlepšenou presnosťou: 6 krokov (s obrázkami)
Video: Garmin Fenix 7 Pro обзор + учебник 2024, November
Anonim
Pulzný oxymeter s oveľa vyššou presnosťou
Pulzný oxymeter s oveľa vyššou presnosťou
Pulzný oxymeter s oveľa vyššou presnosťou
Pulzný oxymeter s oveľa vyššou presnosťou

Ak ste nedávno navštívili lekára, je pravdepodobné, že vaše základné vitálne funkcie preskúmala zdravotná sestra. Hmotnosť, výška, krvný tlak, ako aj srdcová frekvencia (HR) a nasýtenie kyslíkom v periférnej krvi (SpO2). Posledné dve boli pravdepodobne získané z červeno žiariacej elektronickej sondy prstov, ktorá počas niekoľkých minút zobrazovala relevantné čísla na malej obrazovke. Táto sonda sa nazýva pulzný oxymeter a nájdete tu všetky základné informácie.

Človek si môže ľahko kúpiť jednoduchý pulzný oxymeter, ale kde je v ňom zábava? Rozhodol som sa vytvoriť si vlastný, najskôr sakra, ale čo je dôležitejšie, s ohľadom na konkrétnu aplikáciu: nočnú oxymetriu, kde HR aj SpO2 údaje sa budú nepretržite zbierať cez noc a zaznamenávať na kartu micro SD. Instructables už obsahuje niekoľko projektov tohto druhu, napríklad dva zahŕňajúce Arduino tu a tu a jeden využívajúci Raspberry Pi. Ten môj používa na ovládanie a záznam dát o niečo novší senzor MAX30102 od MAXIM Integrated a Adafruit's Feather M0 Adalogger.

Náš projekt teda nie je nijako zvlášť inovatívny z hľadiska hardvéru a ako taký by nestál za napísanie tohto Instructable, ale v procese jeho vytvárania som urobil zásadný pokrok v softvéri, ktorý mi umožnil extrahovať údaje z MAX30102 s oveľa vyššou konzistenciou a oveľa viac. menší hluk ako softvér napísaný spoločnosťou MAXIM pre tento snímač. Výkonnosť nášho algoritmu na spracovanie signálu je znázornená na obrázku vyššie, kde dva horné grafy obsahujú srdcovú frekvenciu a saturáciu kyslíkom cez noc vypočítanú zo surových signálov našou metódou (identifikovanú ako "RF"), zatiaľ čo dva spodné grafy ukazujú výsledky MAXIM získané z presne rovnaké signály. Štandardné odchýlky pre HR sú 4,7 bpm a 18,1 bpm a pre SpO2 0,9% a 4,4% pre RF, respektíve MAXIM.

(Oba RF grafy zodpovedajú minimálnej prahovej hodnote autokorelácie 0,25 a bez obmedzenia korelácie R / IR; vysvetlenie týchto pojmov nájdete v krokoch 4 a 5.)

Krok 1: Hardvér

Hardvér
Hardvér
Hardvér
Hardvér
Hardvér
Hardvér
Hardvér
Hardvér
  1. Pulzný oximeter a snímač srdcovej frekvencie Systémová doska MAX30102 od MAXIM Integrated, Inc.
  2. Feather M0 Adalogger od spoločnosti Adafruit, Inc.
  3. Lítium -iónová batéria od spoločnosti Adafruit, Inc.

Pripojenia:

  • Piny Adalogger SCL a SDA na zodpovedajúce piny SCL a SDA na doske MAX30102
  • Adalogger pin 10 na pin INT na doske MAX30102
  • Adalogger GND na dosku MAX30102 GND
  • Adalogger 3V až MAX30102 VIN

Krok 2: Digitálne signály vrátil MAX30102

Digitálne signály vrátil MAX30102
Digitálne signály vrátil MAX30102
Digitálne signály vrátil MAX30102
Digitálne signály vrátil MAX30102

Princípy činnosti senzora sú veľmi jednoduché: dve LED diódy, jedna červená (660 nm) a jedna infračervená (880 nm, IR) presvitajú ľudskou pokožkou. Svetlo je čiastočne absorbované podkladovými tkanivami vrátane periférnej krvi. Senzorový fotodetektor zhromažďuje odrazené svetlo na oboch vlnových dĺžkach a pomocou protokolu I2C vracia dve zodpovedajúce relatívne intenzity. Pretože absorpčné spektrá pre okysličený a odkysličený hemoglobín sa líšia pre obe vlnové dĺžky, odrazené svetlo má premenlivú zložku ako množstvo arteriálnej krvi, ktoré je prítomné pod kožnými pulzmi pri každom srdcovom tepe. Zistenie srdcovej frekvencie a saturácie kyslíkom je na softvéri na spracovanie signálu.

Príklady nespracovaných signálov (iba IR kanál) sú znázornené na vyššie uvedených obrázkoch. Je možné si všimnúť periodickú zložku prekrytú na variabilnej základnej línii, ktorá sa mení v dôsledku viacerých faktorov uvedených na stránke Wikipedie. Pohybom indukované artefakty sú obzvlášť nepríjemné, pretože môžu maskovať užitočný signál HR a spôsobovať falošné výsledky. Pokročilé komerčné oxymetre sú preto vybavené akcelerometrom, ktorý tieto artefakty pomáha anulovať.

Môžem pridať akcelerometer do ďalšej verzie svojho oxymetra, ale pre nočné HR/SpO2 nahrávanie, keď je senzor väčšinu času nehybný, stačí na detekciu a vynechanie skreslených signálov.

Samotný senzor MAX30102 je dodávaný v malom balení na povrchovú montáž, ale MAXIM milostivo ponúka rozbíjaciu dosku (System Board 6300) plus softvér na spracovanie signálu pre Arduino a mbed - to všetko v referenčnom dizajnovom balení MAXREFDES117#. S potešením som si ho kúpil a očakával som, že len prepojím niekoľko vodičov medzi senzorom a Adaloggerom a budem mať funkčný dobrý oximeter za jeden deň. Prispôsobil som verziu softvéru MAXIM RD117_ARDUINO tak, aby bežala na procesore ARM Cortex M0 spoločnosti Adalogger. V zásade všetko, čo som musel urobiť, bolo nahradiť nekompatibilné funkcie SofI2C v max30102.cpp zodpovedajúcimi hovormi knižnice Wire. Kód sa v Arduino IDE v1.8.5 skompiloval a bežal na M0 bez akýchkoľvek chýb. Čisté výsledky však boli sklamaním. V úvodnom kroku som už ukázal veľmi vysokú variabilitu HR aj SpO2. Prirodzene môže niekto tvrdiť, že som urobil niečo zlé a toto bola moja pôvodná myšlienka. V inštruktážnom videu MAXIM však môžete pozorovať aj divoko kolísajúce hodnoty HR zobrazené na obrazovke. Komentáre pod videom navyše potvrdzujú, že podobný jav si všimli aj ostatní.

Aby som to zhrnul, po niekoľkých experimentoch som zistil, že snímač funguje v poriadku a alternatívna metóda spracovania digitálneho signálu prináša oveľa lepšiu stabilitu. Táto nová metóda označená ako "RF" je popísaná v ďalších krokoch.

Krok 3: Predspracovanie signálu

Predspracovanie signálu
Predspracovanie signálu
Predspracovanie signálu
Predspracovanie signálu
Predspracovanie signálu
Predspracovanie signálu
Predspracovanie signálu
Predspracovanie signálu

V našej implementácii je surový signál zbieraný s frekvenciou 25 Hz (rovnaký ako MAXIM) po dobu celých 4 sekúnd (softvér MAXIM zhromažďuje hodnotu iba 1 sekundu), čo vedie k 100 digitalizovaným časovým bodom na koncový dátový bod. Každá 100-bodová sekvencia musí byť predbežne spracovaná nasledujúcim spôsobom:

  1. Vycentrovanie na stred (aka „odstránenie DC súčiastky“elektrotechnikom). Surové údaje pochádzajúce zo senzora sú časovou sériou celých čísel z 105 rozsah. Užitočný signál je však iba časťou svetla odrazeného z arteriálnej krvi, ktoré sa líši rádovo iba 102 - prvá figúrka. Na zmysluplné spracovanie signálu je preto žiaduce odčítať priemer od každého sériového bodu. Táto časť sa nelíši od toho, čo softvér MAXIM už robí. Čo sa však líši, je dodatočné stredné vycentrovanie samotných časových indexov. Inými slovami, namiesto indexovania radových bodov číslami od 0 do 99 sú teraz nové indexy čísla -49,5, -48,5, …, 49,5. Na prvý pohľad sa to môže zdať zvláštne, ale vďaka tomuto postupu sa „ťažisko“signálnej krivky zhoduje s počiatkom súradnicového systému (druhý obrázok). Táto skutočnosť sa stane veľmi užitočnou v nasledujúcom kroku.
  2. Vyrovnanie základnej čiary. Ďalší pohľad na krivky zobrazené v kroku 2 ilustruje, že základná línia signálov skutočnej oxymetrie nie je ani zďaleka horizontálne plochá, ale líši sa v závislosti od rôznych sklonov. Tretí obrázok zobrazuje infračervený signál so stredným stredom (modrá krivka) a jeho základnú čiaru (modrá rovná čiara). V tomto prípade je sklon základnej čiary negatívny. Metóda spracovania signálu opísaná vyššie vyžaduje, aby bola základná línia horizontálna. To sa dá dosiahnuť jednoduchým odpočítaním základnej čiary od signálu stredného stredu. Vďaka strednému stredu súradníc Y aj X je priesečník základnej čiary nulový a jej rovnica sklonu je obzvlášť jednoduchá, ako je znázornené na štvrtom obrázku. Signál na úrovni základnej čiary je na treťom obrázku zobrazený oranžovou krivkou.

Takto vopred pripravený signál je pripravený na ďalší krok.

Krok 4: Workhorse: autokorelačná funkcia

Workhorse: Funkcia autokorelácie
Workhorse: Funkcia autokorelácie
Workhorse: Funkcia autokorelácie
Workhorse: Funkcia autokorelácie
Workhorse: Funkcia autokorelácie
Workhorse: Funkcia autokorelácie

Vráťme sa späť k obvyklému indexovaniu 1, …, n, prvý obrázok ukazuje definíciu funkcie autokorelácie rm - množstvo, ktoré sa považuje za veľmi užitočné pri zisťovaní periodicity a kvality signálu. Je to jednoducho normalizovaný skalárny súčin časových radov signálu, pričom sám je posunutý o oneskorenie m. V našej aplikácii je však vhodné škálovať každú hodnotu autokorelácie vzhľadom na jej hodnotu pri oneskorení = 0, tj. Použiť relatívnu autokoreláciu definovanú rm / r0.

Graf relatívnej autokorelácie typického infračerveného signálu dobrej kvality je zobrazený na druhom obrázku. Ako sa očakávalo, jeho hodnota s oneskorením = 0 je na svojom globálnom maxime rovnajúcom sa 1. Ďalšie (miestne) maximum sa vyskytuje pri oneskorení = 23 a rovná sa 0,79. Prítomnosť lokálnych minim a maxím v grafe autokorelácie je ľahké pochopiť: keď sa signál posúva doprava, jeho vrcholy spočiatku navzájom deštruktívne interferujú, ale v určitom bode sa interferencia stáva konštruktívnou a dosahuje maximum pri oneskorení rovnajúcom sa priemeru. perióda signálu.

Posledná fráza je zásadná: na určenie priemerného časového obdobia medzi vrcholmi, z ktorého je možné vypočítať frekvenciu signálu (tj. Srdcovú frekvenciu), stačí nájsť prvé lokálne maximum autokorelačnej funkcie! Štandardne MAX30102 vzorkuje analógový vstup rýchlosťou 25 bodov za sekundu, preto pri danom m je perióda v sekundách rovná m / 25. To vedie k srdcovej frekvencii vyjadrenej v úderoch za minútu (bpm) podľa:

HR = 60*25 / m = 1500 / m

Samozrejme, nie je potrebné robiť drahé výpočty rm pri všetkých hodnotách oneskorenia. Náš algoritmus urobí prvý odhad srdcovej frekvencie = 60 úderov za minútu, čo zodpovedá m = 25. V tomto bode sa vyhodnotí funkcia autokorelácie a porovná sa s hodnotou u jej ľavého suseda, m = 24. Ak je hodnota susedov vyššia, potom pochod pokračuje vľavo až do rm-1 <rm. Takto určené konečné m sa potom vráti ako maximálne oneskorenie. Ďalšia iterácia začína od tejto hodnoty namiesto 25 a celý proces sa opakuje. Ak je prvý ľavý sused nižšie, potom vyššie uvedené rutinné pochody ukazujú podobným spôsobom doprava. Oneskorenie na maximum vyžaduje väčšinou len niekoľko vyhodnotení funkcie autokorelácie. Okrem toho sa ako limitné hodnoty používajú maximálne a minimálne prijateľné oneskorenia (zodpovedajúce minimálnej a maximálnej srdcovej frekvencii).

Vyššie uvedené funguje veľmi dobre pre signály dobrej kvality, ale skutočný svet má od ideálu ďaleko. Niektoré signály vychádzajú skreslené, väčšinou kvôli pohybovým artefaktom. Takýto signál je znázornený na treťom obrázku. Slabá periodicita sa prejavuje v tvare jeho autokorelačnej funkcie, ako aj v nízkych hodnotách prvého lokálneho maxima pri m = 11, 0,28. Porovnajte to s maximálnou hodnotou 0,79 určenou pre signál dobrej kvality. Spolu s limitnými hodnotami oneskorenia je preto hodnota rm / r0 maximum je dobrým indikátorom kvality signálu a na odfiltrovanie pohybových artefaktov je možné použiť požiadavku, aby prekročila určitú prahovú hodnotu. „RF“grafy uvedené v úvodoch vyplynuli z takého prahu rovnajúceho sa 0,25.

Krok 5: Stanovenie nasýtenia kyslíkom

Stanovenie nasýtenia kyslíkom
Stanovenie nasýtenia kyslíkom
Stanovenie nasýtenia kyslíkom
Stanovenie nasýtenia kyslíkom
Stanovenie nasýtenia kyslíkom
Stanovenie nasýtenia kyslíkom
Stanovenie nasýtenia kyslíkom
Stanovenie nasýtenia kyslíkom

Predchádzajúci krok postačoval na stanovenie srdcovej frekvencie. SpO2 vyžaduje viac práce. Najprv je potrebné vziať do úvahy doteraz zanedbávaný signál v červenom (R) kanáli. Ďalej sa vypočíta pomer červených a infračervených signálov Z = R/IR, ktoré sa odrazia od arteriálnej krvi. Časť „arteriálnej krvi“je rozhodujúca, pretože väčšina svetla sa v skutočnosti odráža od tkanív a žilovej krvi. Ako vybrať časť signálu zodpovedajúcu arteriálnej krvi? Toto je pulzatívna zložka, ktorá sa líši pri každom údere srdca. Slovami elektrotechnikov, je to „časť AC“, zatiaľ čo zvyšné odrazené svetlo je „časť DC“. Pretože absolútne intenzity R a IR svetla nie sú úmerné, pomer Z sa vypočíta z relatívnych intenzít, ako je znázornené na prvom obrázku. Pokiaľ ide o skutočne vypočítané veličiny, používam koreňový priemer (RMS) priemerne stredného signálu na úrovni základnej čiary y na už známy priemer surového signálu <Y>; pozri druhý obrázok. Pomer Z je však iba polovica práce. Nelineárna odozva senzora vyžaduje empirickú kalibráciu medzi Z a konečným SpO2 hodnoty. Prevzal som kalibračnú rovnicu z kódu MAXIM:

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

Majte na pamäti, že táto rovnica platí iba pre konštrukčnú dosku MAX30102 zakúpenú v roku 2017! Je pravdepodobné, že MAXIM môže rekalibrovať svoje senzory neskôr.

Vyššie uvedený postup stále produkuje veľa falošných SpO2 čítania. Červený kanál trpí mnohými artefaktmi, rovnako ako IR. Je rozumné predpokladať, že oba signály by mali byť silne korelované. V skutočnosti signály dobrej kvality, ako príklad na treťom obrázku, veľmi dobre korelujú. Pearsonov korelačný koeficient je v tomto prípade až 0,99. Nie je to vždy tak, ako je znázornené na štvrtom obrázku. Napriek tomu, že IR signál by prešiel filtrom kvality srdcovej frekvencie so svojim rm / r0 = 0,76, skreslený signál R má za následok zlý korelačný koeficient medzi týmito dvoma rovný iba 0,42. Toto pozorovanie ponúka druhý filter kvality: majúci korelačný koeficient medzi kanálmi väčší ako určitý prah.

Posledné dva obrázky ilustrujú čistý účinok takéhoto kvalitného filtrovania. Najprv sa nameraná saturácia kyslíkom vynesie s prahom kvality HR 0,25, ale bez SpO2 filter. Nasledujúce vykreslenie je výsledkom filtrácie slabého HR a SpO2 výsledky pri 0,5 rm / r0 a prahové hodnoty korelačného koeficientu 0,8. Prísnejšie režimy celkovo odfiltrovali slabé dátové body vo výške 12% z celkového počtu.

V našom kóde je korelačný koeficient, cc, vypočítaný podľa vzorca na piatom obrázku, kde y predstavuje priemerný stredový signál na úrovni základnej čiary, zatiaľ čo r0 bola definovaná v predchádzajúcom kroku.

Krok 6: Zdrojový kód

Zdrojový kód C pre tento projekt, naformátovaný pre Arduino IDE, je k dispozícii z nášho účtu Github na nasledujúcom odkaze:

github.com/aromring/MAX30102_by_RF

Jeho stránka Readme popisuje jednotlivé komponenty.

Chcel by som chvíľu poďakovať spoločnosti Adafruit za výrobu tak vynikajúceho produktu, akým je Adalogger na báze M0. Jeho rýchly 48 MHz procesor ARM Cortex M0 s množstvom pamäte RAM určite prispel k tomu, aby bol tento projekt životaschopný, pričom priamo pripojená čítačka kariet SD (plus knižnica SD spoločnosti Adafruit) odstráni všetky starosti odborníka súvisiace s ukladaním veľkého množstva údajov v reálnom čase.

Odporúča: