Talaan ng mga Nilalaman:

Pulse Oximeter Na May Mas Pinagbuting Precision: 6 Hakbang (na may Mga Larawan)
Pulse Oximeter Na May Mas Pinagbuting Precision: 6 Hakbang (na may Mga Larawan)

Video: Pulse Oximeter Na May Mas Pinagbuting Precision: 6 Hakbang (na may Mga Larawan)

Video: Pulse Oximeter Na May Mas Pinagbuting Precision: 6 Hakbang (na may Mga Larawan)
Video: Part 3 - Walden Audiobook by Henry David Thoreau (Chs 05-08) 2024, Hulyo
Anonim
Pulse Oximeter Na May Mas Pinabuting Katumpakan
Pulse Oximeter Na May Mas Pinabuting Katumpakan
Pulse Oximeter Na May Mas Pinabuting Katumpakan
Pulse Oximeter Na May Mas Pinabuting Katumpakan

Kung dumalaw ka kamakailan sa isang doktor, malamang na ang iyong pangunahing mga mahahalagang palatandaan ay napagmasdan ng isang nars. Timbang, taas, presyon ng dugo, pati na rin rate ng puso (HR) at saturation ng oxygen sa peripheral blood (SpO2). Marahil, ang huling dalawa ay nakuha mula sa isang pulang-ningning na elektronikong pagsisiyasat ng daliri na ipinakita ang may-katuturang mga numero sa isang maliit na screen sa ilang minuto. Ang pagsisiyasat na iyon ay tinatawag na pulse oximeter at mahahanap mo ang lahat ng pangunahing impormasyon tungkol dito.

Madali na makakabili ang isang simpleng pulso oximeter, sigurado, ngunit nasaan ang kasiyahan dito? Napagpasyahan kong magtayo ng sarili ko, una para sa ano ito, ngunit higit na mahalaga sa isang tukoy na application na nasa isip: nocturnal oximetry kung saan parehong HR at SpO2 Ang data ay patuloy na makokolekta magdamag at maitatala sa isang micro SD card. Naglalaman na ang mga tagubilin ng maraming mga proyekto ng ganitong uri, hal., Dalawang kinasasangkutan ng Arduino dito at dito, at isang gumagamit ng Raspberry Pi. Ang minahan ay gumagamit ng bahagyang mas bagong sensor MAX30102 mula sa MAXIM Integrated at Adafruit's Feather M0 Adalogger para sa kontrol at pagrekord ng data.

Ang aming proyekto sa gayon ay hindi partikular na makabago sa mga tuntunin ng hardware at dahil dito ay hindi nagkakahalaga ng pagsusulat ng Instructable na ito, ngunit sa proseso ng paglikha nito ay gumawa ako ng mga mahalagang pagsulong sa software na pinapayagan akong kumuha ng data mula sa MAX30102 na may mas mataas na pare-pareho at marami mas mababa ingay kaysa sa software na isinulat ng MAXIM para sa sensor na ito. Ang pagganap ng aming algorithm ng pagpoproseso ng signal ay nakalarawan sa tsart sa itaas kung saan ang dalawang nangungunang mga graph ay naglalaman ng magdamag na rate ng puso at saturation ng oxygen na kinakalkula mula sa mga hilaw na signal sa pamamagitan ng aming pamamaraan (nakilala ng "RF"), habang ang ibabang dalawang grap ay nagpapakita ng mga resulta ng MAXIM na ginawa mula sa eksakto ang parehong mga signal. Ang mga karaniwang paglihis para sa HR ay 4.7 bpm at 18.1 bpm, at para sa SpO2 0.9% at 4.4%, para sa RF at MAXIM, ayon sa pagkakabanggit.

(Ang parehong mga RF graph ay tumutugma sa kaunting threshold ng autocorrelation na 0.25 at walang limitasyon sa ugnayan ng R / IR; tingnan ang Hakbang 4 at 5 para sa paliwanag ng mga term na ito.)

Hakbang 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
Hardware
  1. Pulse oximeter at heart rate sensor MAX30102 system board mula sa MAXIM Integrated, Inc.
  2. Feather M0 Adalogger mula sa Adafruit, Inc.
  3. Lithium Ion Battery mula sa Adafruit, Inc.

Mga koneksyon:

  • Ang pin ng adalogger ay SCL at SDA sa kaukulang SCL at SDA pin sa MAX30102 board
  • Adalogger pin 10 upang i-pin ang INT sa MAX30102 board
  • Ang Adalogger GND sa MAX30102 board GND
  • Adalogger 3V hanggang MAX30102 VIN

Hakbang 2: Ang Mga Digital na Signal ay Ibinalik ng MAX30102

Mga Digital Signal na Naibalik ng MAX30102
Mga Digital Signal na Naibalik ng MAX30102
Mga Digital Signal na Naibalik ng MAX30102
Mga Digital Signal na Naibalik ng MAX30102

Ang mga prinsipyo ng pagpapatakbo ng sensor ay napaka-simple: dalawang LEDs, isang pula (660 nm) at isang infrared (880 nm, IR) ay nagniningning sa pamamagitan ng balat ng tao. Ang ilaw ay bahagyang hinihigop ng mga kalakip na tisyu, kabilang ang peripheral na dugo. Kinokolekta ng photodetector ng sensor ang nasasalamin na ilaw sa parehong haba ng daluyong at ibinabalik ang dalawang kaukulang kamag-anak na intensidad gamit ang I2C protocol. Dahil ang pagsipsip ng pagsasalamin para sa oxygenated at deoxygenated hemoglobin ay magkakaiba para sa parehong mga haba ng daluyong, ang sinasalamin na ilaw ay may isang variable na bahagi tulad ng dami ng arterial na dugo na naroroon sa ilalim ng mga pulso ng balat sa bawat tibok ng puso. Ang pag-alam sa rate ng puso at saturation ng oxygen ay nakasalalay sa signal processing software.

Ang mga halimbawa ng mga hilaw na signal (IR channel lamang) ay inilalarawan sa mga larawan sa itaas. Mapapansin ng isa ang isang pana-panahong sangkap na naka-overlay sa isang variable na baseline na nagbabago dahil sa maraming mga salik na nabanggit sa pahina ng Wikipedia. Ang mga artifact na idinulot ng paggalaw ay partikular na nakakainis dahil maaari nilang takpan ang kapaki-pakinabang na signal ng HR at maging sanhi ng mga maling resulta. Samakatuwid, ang mga advanced na komersyal na oximeter ay nagtatampok ng mga accelerometro na makakatulong na pawalang-bisa ang mga artifact na ito.

Maaari akong magdagdag ng isang accelerometer sa susunod na bersyon ng aking oximeter, ngunit para sa HR sa oras / SpO2 ang pagre-record, kapag ang sensor ay nananatiling hindi gumagalaw sa halos lahat ng oras, sapat na upang makita at matanggal ang mga baluktot na signal.

Ang MAX30102 sensor mismo ay dumating sa isang maliit na pakete na naka-mount sa ibabaw, ngunit mabait na nag-aalok ang MAXIM ng isang breakout board (System Board 6300) kasama ang software ng pagpoproseso ng signal para sa Arduino at mbed - lahat sa pakete ng disenyo ng sanggunian MAXREFDES117 #. Masaya kong binili ito na inaasahan na maghinang lamang ng ilang mga wire sa pagitan ng sensor at Adalogger at magkaroon ng isang gumaganang, mahusay na oximeter sa isang araw. Inangkop ko ang bersyon ng RD117_ARDUINO ng software ng MAXIM upang tumakbo sa processor ng ARM Cortex M0 ng Adalogger. Talaga, ang kailangan ko lang gawin ay palitan ang hindi tugma na mga pagpapaandar ng SofI2C sa max30102.cpp ng mga kaukulang tawag sa library ng Wire. Ang code ay naipon ng mabuti sa Arduino IDE v1.8.5 at tumakbo sa M0 nang walang anumang mga error. Gayunpaman, ang mga resulta ay neto. Sa hakbang sa Panimula ay naipakita ko na ang napakataas na pagkakaiba-iba ng parehong HR at SpO2. Naturally, maaaring sabihin ng isang tao na may nagawa akong mali at ito rin ang aking orihinal na naisip. Gayunpaman, sa pagtuturo ng video ng MAXIM maaari mo ring obserbahan ang ligaw na pag-indayog na mga halagang HR na ipinapakita sa screen. Bukod dito, ang mga komento sa ibaba ng video ay nagpapatunay na ang iba ay napansin ang isang katulad na kababalaghan, pati na rin.

Upang makagawa ng isang mahabang kuwento maikli, pagkatapos ng ilang pag-eksperimento Natukoy ko na ang sensor ay tumatakbo OK at isang alternatibong pamamaraan ng pagproseso ng digital signal ay nagreresulta sa mas mahusay na katatagan. Ang bagong pamamaraan na ito, na ipinahiwatig ng "RF", ay inilarawan sa mga susunod na hakbang.

Hakbang 3: Pagpoproseso ng Signal

Pagpoproseso ng Signal
Pagpoproseso ng Signal
Pagpoproseso ng Signal
Pagpoproseso ng Signal
Pagpoproseso ng Signal
Pagpoproseso ng Signal
Pagpoproseso ng Signal
Pagpoproseso ng Signal

Sa aming pagpapatupad, ang hilaw na signal ay nakolekta sa rate na 25 Hz (kapareho ng MAXIM's) para sa buong 4 na segundo (ang software ng MAXIM ay nagkokolekta lamang ng 1 segundo na halaga), na nagreresulta sa 100 digitize na mga puntos ng oras bawat pagtatapos ng data point. Ang bawat 100-point na pagkakasunud-sunod ay dapat na preprocessed sa sumusunod na paraan:

  1. Min-centering (a.k.a. "pagtanggal ng bahagi ng DC" sa mga de-koryenteng inhinyero). Ang hilaw na data na nagmumula sa sensor ay isang serye ng oras ng mga integer sa 105 saklaw Ang kapaki-pakinabang na senyas, bagaman, ay bahagi lamang ng ilaw na makikita mula sa arterial na dugo na nag-iiba sa pagkakasunud-sunod lamang ng 102 - unang pigura. Para sa makabuluhang pagproseso ng signal, samakatuwid kanais-nais na ibawas ang ibig sabihin mula sa bawat punto ng serye. Ang bahaging ito ay hindi naiiba mula sa ginagawa na ng MAXIM software. Gayunpaman, kung ano ang kakaiba, ay karagdagang-nakakasentro ng mga indeks ng oras sa kanilang sarili. Sa madaling salita, sa halip na i-index ang mga puntos ng serye ng mga numero mula 0 hanggang 99, ang mga bagong indeks ay bilang na -49.5, -48.5,…, 49.5. Maaaring mukhang kakaiba ito sa una, ngunit salamat sa pamamaraang ito ang signal ng "curve ng signal" ng curve ng signal ay sumabay sa pinagmulan ng coordinate system (pangalawang pigura). Ang katotohanang ito ay naging lubos na kapaki-pakinabang sa susunod na hakbang.
  2. Pag-level ng baseline. Ang isa pang pagtingin sa mga waveform na ipinakita sa Hakbang 2 ay naglalarawan na ang baseline ng tunay na mga signal ng oximetry ay malayo sa pagiging pahalang na patag, ngunit nag-iiba sa iba't ibang mga dalisdis. Ipinapakita ng pangatlong pigura ang isang naka-sentro na signal ng IR (asul na kurba) at ang baseline nito (asul na tuwid na linya). Sa kasong ito, ang slope ng baseline ay negatibo. Ang pamamaraan ng pagpoproseso ng signal na inilarawan nang maaga ay nangangailangan ng pahalang na baseline. Maaari itong makamit sa pamamagitan lamang ng pagbawas ng baseline mula sa signal na nakasentro sa gitna. Salamat sa mean-centering ng parehong Y at ng X coordinate, ang intercept ng baseline ay zero at ang equation ng slope nito ay partikular na simple, tulad ng ipinakita sa ika-apat na pigura. Ang baseline-leveled signal ay ipinapakita ng orange curve sa ikatlong pigura.

Sa gayon ang preprocessed signal ay handa na para sa susunod na hakbang.

Hakbang 4: Ang Workhorse: Autocorrelation Function

Ang Workhorse: Autocorrelation Function
Ang Workhorse: Autocorrelation Function
Ang Workhorse: Autocorrelation Function
Ang Workhorse: Autocorrelation Function
Ang Workhorse: Autocorrelation Function
Ang Workhorse: Autocorrelation Function

Bumabalik sa karaniwang 1,…, n sa pag-index, ipinapakita ng unang pigura ang kahulugan ng pagpapaandar ng autocorrelation rm - isang dami na nahanap na napaka kapaki-pakinabang sa pagtuklas ng pagkakasunud-sunod ng signal pati na rin ang kalidad. Ito ay simpleng isang normalized na produkto ng scalar ng serye ng oras ng signal na mismo ay inilipat ng lag m. Gayunpaman, sa aming aplikasyon, maginhawang sukatin ang bawat halaga ng autocorrelation patungkol sa halagang ito sa lag = 0, ibig sabihin, gumamit ng kamag-anak na autocorrelation na tinukoy ng rm / r0.

Ang balangkas ng kamag-anak na autocorrelation ng isang tipikal na mahusay na kalidad ng signal ng IR ay ipinapakita sa pangalawang pigura. Tulad ng inaasahan, ang halaga sa lag = 0 ay nasa pandaigdigang maximum na katumbas ng 1. Ang susunod (lokal) na maximum na nangyayari sa lag = 23 at katumbas ng 0.79. Ang pagkakaroon ng lokal na minima at maxima sa balangkas ng autocorrelation ay madaling maunawaan: habang ang signal lumipat sa kanan ang mga tuktok nito ay makagambala nang mapanirang sa bawat isa sa una, ngunit sa ilang mga punto ang pagkagambala ay naging nakabubuo at nakakamit ng maximum sa lag na katumbas ng average panahon ng signal.

Mahalaga ang huling parirala: upang matukoy ang average na tagal ng panahon sa pagitan ng mga tuktok, kung saan makakalkula ang dalas ng signal (ibig sabihin, rate ng puso) sapat na upang hanapin ang unang lokal na maximum ng pagpapaandar ng autocorrelation! Bilang default, ang mga sample ng MAX30102 na analog input sa isang rate na 25 puntos bawat segundo, samakatuwid sa ibinigay na m ang panahon sa mga segundo ay katumbas ng m / 25. Ito ay humahantong sa rate ng puso na ipinahayag sa beats bawat minuto (bpm) ni:

HR = 60 * 25 / m = 1500 / m

Siyempre, hindi kinakailangan na gumawa ng mga mamahaling kalkulasyon ng rm sa lahat ng halaga ng lag. Ginagawa ng aming algorithm ang unang hula ng rate ng puso = 60 bpm, na tumutugma sa m = 25. Ang pagpapaandar ng autocorrelation ay sinusuri sa puntong iyon at ihinahambing sa halaga sa kaliwang kapitbahay nito, m = 24. Kung ang halaga ng mga kapitbahay ay mas mataas, kung gayon ang ang martsa ay nagpapatuloy sa kaliwa hanggang sa rm-1 <rm. Sa gayon tinutukoy ang pangwakas na m ay ibabalik bilang lag sa maximum. Ang susunod na pag-ulit ay nagsisimula mula sa halagang iyon sa halip na 25 at inuulit ang buong proseso. Kung ang unang kaliwang kapit-bahay ay mas mababa, kung gayon ang nakagawiang gawain sa itaas ay nagmamartsa ng lag na tumuturo sa kanan sa katulad na pamamaraan. Karamihan sa mga oras, ang pagkahuli sa maximum ay nangangailangan lamang ng ilang mga pagsusuri ng pagpapaandar ng autocorrelation. Bilang karagdagan, ang maximum at minimum na katanggap-tanggap na mga lags (naaayon sa minimal at pinakamataas na rate ng puso, ayon sa pagkakabanggit) ay ginagamit bilang mga nililimitahan na halaga.

Ang nasa itaas ay gumagana nang mahusay para sa mahusay na mga signal ng kalidad, ngunit ang totoong mundo ay malayo sa perpekto. Ang ilang mga senyas ay lumabas na pangit, karamihan ay dahil sa mga artifact ng paggalaw. Ang gayong senyas ay ipinapakita sa pangatlong pigura. Ang hindi magandang periodicity ay makikita sa hugis ng pagpapaandar ng autocorrelation nito pati na rin sa mababang halaga, 0.28, ng unang lokal na maximum sa m = 11. Ihambing ito sa maximum na halaga ng 0.79 na tinukoy para sa magandang signal ng kalidad. Kasabay ng lag na naglilimita ng mga halaga, samakatuwid, ang halaga ng rm / r0 sa maximum ay isang mahusay na tagapagpahiwatig ng kalidad ng signal at isang kinakailangan upang lumampas ito sa tiyak na threshold ay maaaring magamit upang salain ang mga artifact ng paggalaw. Ang mga grapiko na "RF" na ipinakita sa mga pagpapakilala ay nagresulta mula sa naturang threshold na katumbas ng 0.25.

Hakbang 5: Pagtukoy sa Oxygen saturation

Pagtukoy ng Oxygen saturation
Pagtukoy ng Oxygen saturation
Pagtukoy ng Oxygen saturation
Pagtukoy ng Oxygen saturation
Pagtukoy ng Oxygen saturation
Pagtukoy ng Oxygen saturation
Pagtukoy ng Oxygen saturation
Pagtukoy ng Oxygen saturation

Ang nakaraang hakbang ay sapat para sa pagtukoy ng rate ng puso. Ang SpO2 nangangailangan ng mas maraming trabaho. Una, ang napapabayaang signal sa red (R) channel ay dapat isaalang-alang. Susunod, ang ratio ng pula sa infrared signal, Z = R / IR, kapwa nakalarawan sa arterial na dugo, ay kinakalkula. Ang bahagi ng "arterial blood" ay mahalaga, dahil ang karamihan sa ilaw ay talagang makikita sa mga tisyu at dugo ng venous. Paano pumili ng bahagi ng signal na naaayon sa arterial blood? Sa gayon, ito ang sangkap na pulsable na nag-iiba sa bawat tibok ng puso. Sa mga salita ng mga de-koryenteng inhinyero, ito ang "bahagi ng AC", habang ang natitirang nasasalamin na ilaw ay ang "bahagi ng DC". Dahil ang ganap na intensidad ng R at IR na ilaw ay hindi sapat, ang Z ratio ay kinakalkula mula sa mga kamag-anak na intensidad, tulad ng ipinakita sa unang pigura. Sa mga tuntunin ng talagang kinakalkula na dami, gumagamit ako ng root-mean-square (RMS) ng mean-centered, baseline-leveled signal, y, sa alam na kahulugan ng raw signal, <Y>; tingnan ang pangalawang pigura. Ang Z ratio ay kalahati lamang ng trabaho, gayunpaman. Ang tugon ng hindi linya ng sensor ay nangangailangan ng isang empirical calibration sa pagitan ng Z at ng huling SpO2 halaga Kinuha ko ang equation ng pagkakalibrate mula sa code ni MAXIM:

SpO2 = (-45.06 * Z + 30.354) * Z + 94.845

Tandaan na ang equation na ito ay wasto lamang para sa MAX30102 na board ng disenyo na binili noong 2017! Malamang na ang MAXIM ay maaaring muling magkalkula ng mga sensor nito sa ibang araw.

Ang pamamaraan sa itaas ay gumagawa pa rin ng maraming maling SpO2 pagbasa. Ang pulang channel ay naghihirap mula sa maraming mga artifact, tulad ng IR. Makatuwiran na ipalagay na ang parehong mga signal ay dapat na malakas na naiugnay. Sa katunayan, ang mga mahuhusay na signal ng kalidad, tulad ng halimbawa sa pangatlong pigura, ay gumagana nang maayos. Ang koepisyent ng ugnayan ng Pearson ay nasa kasong ito na kasing taas ng 0.99. Hindi ito palaging ang kaso, tulad ng nakalarawan sa ikaapat na pigura. Kahit na ang signal ng IR ay pumasa sa filter ng kalidad ng rate ng puso gamit ang r nitom / r0 = 0.76, ang baluktot na signal ng R ay nagreresulta sa isang mahinang coefficient ng ugnayan sa pagitan ng dalawang katumbas ng 0.42 lamang. Nag-aalok ang pagmamasid na ito ng pangalawang filter ng kalidad: pagkakaroon ng coefficient ng ugnayan sa pagitan ng mga channel na mas malaki kaysa sa ilang mga threshold.

Ang huling dalawang numero ay nagpapakita ng netong epekto ng naturang pagsala sa kalidad. Una, ang sinusukat na saturation ng oxygen ay naka-plot sa kalidad ng threshold ng HR na 0.25, ngunit wala ang SpO2 salain Susunod na mga resulta ng balangkas mula sa pag-filter ng mahinang HR at SpO2 mga resulta sa 0.5 rm / r0 at 0.8 na mga threshold ng coefficient ng ugnayan. Sa pangkalahatan, ang mga mahihirap na puntos ng data na nagkakahalaga ng 12% ng kabuuan ay sinala ng mas mahigpit na rehimen.

Sa aming code ang coefficient ng ugnayan, cc, ay kinakalkula ayon sa pormula sa ikalimang pigura, kung saan ang y ay kumakatawan sa mean-centered, baseline-leveled signal, samantalang ang r0 ay tinukoy sa nakaraang hakbang.

Hakbang 6: Ang Source Code

Ang C source code para sa proyektong ito, na naka-format para sa Arduino IDE, ay magagamit mula sa aming Github account sa sumusunod na link:

github.com/aromring/MAX30102_by_RF

Inilalarawan ng pahina ng Readme nito ang mga indibidwal na sangkap.

Gusto kong maglaan ng ilang sandali upang purihin ang Adafruit sa paggawa ng napakahusay na produkto bilang M0-based Adalogger. Ang mabilis na 48 MHz ARM Cortex M0 na processor, na may maraming RAM, ay tiyak na nakatulong upang mabuhay ang proyektong ito, habang direktang nakakabit na SD card reader (kasama ang SD library ng Adafruit) na alisin ang lahat ng mga pasakit ng libangan na nauugnay sa pag-iimbak ng real time ng maraming data.

Inirerekumendang: