Përmbajtje:
- Hapi 1: Pajisje kompjuterike
- Hapi 2: Sinjalet dixhitale të kthyera nga MAX30102
- Hapi 3: Parapërpunimi i sinjalit
- Hapi 4: Kali i punës: Funksioni i autokorrelacionit
- Hapi 5: Përcaktimi i ngopjes me oksigjen
- Hapi 6: Kodi Burimor
Video: Oksimetri i pulsit me shumë saktësi të përmirësuar: 6 hapa (me fotografi)
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:19
Nëse keni vizituar kohët e fundit një mjek, ka shumë mundësi që shenjat tuaja themelore vitale të jenë ekzaminuar nga një infermiere. Pesha, lartësia, presioni i gjakut, si dhe rrahjet e zemrës (HR) dhe ngopja e oksigjenit në gjakun periferik (SpO2) Ndoshta, dy të fundit u morën nga një sondë gishtash elektronike me shkëlqim të kuq që shfaqi numrat përkatës në një ekran të vogël në minuta. Ajo sondë quhet oksimetër pulsi dhe mund të gjeni të gjitha informacionet themelore në lidhje me të këtu.
Dikush mund të blejë lehtësisht një oksimetër të thjeshtë pulsi, sigurisht, por ku është argëtimi në të? Unë kam vendosur të ndërtoj timen, së pari për dreqin, por më e rëndësishmja me një aplikim specifik në mendje: oksimetria e natës ku si HR ashtu edhe SpO2 të dhënat do të mblidheshin vazhdimisht brenda natës dhe do të regjistroheshin në një kartë mikro SD. Instructables tashmë përmban disa projekte të këtij lloji, p.sh., dy që përfshijnë Arduino këtu dhe këtu, dhe një që përdor Raspberry Pi. Miniera përdor sensorin pak më të ri MAX30102 nga MAXIM Integrated dhe Adafruit's Feather M0 Adalogger për kontrollin dhe regjistrimin e të dhënave.
Kështu, projekti ynë nuk është veçanërisht novator në aspektin e harduerit dhe si i tillë nuk do të ishte me vlerë të shkruani këtë Instructable, por në procesin e krijimit të tij kam bërë përparime thelbësore në softuer që më lejuan të nxjerr të dhëna nga MAX30102 me konsistencë shumë më të lartë dhe shumë më pak zhurmë sesa softueri i shkruar nga MAXIM për këtë sensor. Performanca e algoritmit tonë të përpunimit të sinjalit është ilustruar në grafikun e mësipërm ku dy grafikët kryesorë përmbajnë normën e zemrës brenda natës dhe ngopjen e oksigjenit të llogaritur nga sinjalet e papërpunuara me metodën tonë (të identifikuar nga "RF"), ndërsa dy grafikët e poshtëm tregojnë rezultatet e MAXIM të prodhuara nga saktësisht të njëjtat sinjale. Devijimet standarde për HR janë 4.7 bpm dhe 18.1 bpm, dhe për SpO2 0.9% dhe 4.4%, për RF dhe MAXIM, respektivisht.
(Të dy grafikët RF korrespondojnë me pragun minimal të autokorrelacionit prej 0.25 dhe asnjë kufi në korrelacionin R / IR; shiko hapat 4 dhe 5 për shpjegimin e këtyre termave.)
Hapi 1: Pajisje kompjuterike
- Oksimetri i pulsit dhe sensori i rrahjeve të zemrës bordi i sistemit MAX30102 nga MAXIM Integrated, Inc.
- Feather M0 Adalogger nga Adafruit, Inc.
- Bateri litium -jon nga Adafruit, Inc.
Lidhjet:
- Këmbëzat Adalogger SCL dhe SDA në kunjat përkatëse SCL dhe SDA në bordin MAX30102
- Kunja Adalogger 10 në pin INT në tabelën MAX30102
- Adalogger GND në bordin GND MAX30102
- Adalogger 3V në MAX30102 VIN
Hapi 2: Sinjalet dixhitale të kthyera nga MAX30102
Parimet e funksionimit të sensorit janë shumë të thjeshta: dy LED, një e kuqe (660 nm) dhe një infra të kuqe (880 nm, IR) shkëlqejnë dritë përmes lëkurës së njeriut. Drita absorbohet pjesërisht nga indet themelore, përfshirë gjakun periferik. Fotodetektori i sensorit mbledh dritën e reflektuar në të dy gjatësitë e valës dhe kthen dy intensitete përkatëse relative duke përdorur protokollin I2C. Meqenëse spektrat e thithjes për hemoglobinën e oksigjenuar dhe të deoksigjenuar ndryshojnë për të dy gjatësitë e valës, drita e reflektuar ka një përbërës të ndryshueshëm si sasia e gjakut arterial që është i pranishëm nën impulset e lëkurës me çdo rrahje zemre. Zbulimi i rrahjeve të zemrës dhe ngopjes me oksigjen varet nga programi i përpunimit të sinjalit.
Shembuj të sinjaleve të papërpunuara (vetëm kanali IR) janë ilustruar në imazhet e mësipërme. Dikush mund të vërejë një përbërës periodik të mbivendosur në një bazë bazë të ndryshueshme që po ndryshon për shkak të faktorëve të shumtë të përmendur në faqen e Wikipedia. Artefaktet e shkaktuara nga lëvizja janë veçanërisht të bezdisshme pasi ato mund të maskojnë sinjalin e dobishëm HR dhe të shkaktojnë rezultate fals. Prandaj, oksimetrat komercialë të avancuar shfaqin akselerometra që ndihmojnë në anulimin e këtyre objekteve.
Mund të shtoj një akselerometër në versionin tjetër të oksimetrit tim, por për HR/SpO të natës2 regjistrimi, kur sensori mbetet i palëvizshëm shumicën e kohës, është e mjaftueshme për të zbuluar dhe hequr sinjalet e shtrembëruara.
Vetë sensori MAX30102 vjen në një paketë të vogël të montuar në sipërfaqe, por MAXIM me dashamirësi ofron një tabelë dalëse (System Board 6300) plus softuer të përpunimit të sinjalit për Arduino dhe mbed - të gjitha në paketën referuese të projektimit MAXREFDES117#. E bleva me kënaqësi duke pritur që vetëm të lidh disa tela midis sensorit dhe Adalogger dhe të kem një oksimetër të mirë dhe të mirë pune në një ditë të vetme. Përshtata versionin RD117_ARDUINO të softverit MAXIM për të funksionuar në procesorin ARM Cortex M0 të Adalogger. Në thelb, gjithçka që duhej të bëja ishte të zëvendësoja funksionet e papajtueshme të SofI2C në max30102.cpp me thirrjet përkatëse të bibliotekës Wire. Kodi u përpilua mirë në Arduino IDE v1.8.5 dhe funksionoi në M0 pa asnjë gabim. Rezultatet neto, megjithatë, ishin zhgënjyese. Në hapin e Hyrjes unë kam treguar tashmë një variancë shumë të lartë si të HR ashtu edhe të SPO2Me Natyrisht, dikush mund të pretendojë se kam bërë diçka të gabuar dhe ky ishte mendimi im origjinal, gjithashtu. Sidoqoftë, në videon mësimore të MAXIM ju gjithashtu mund të vëzhgoni vlerat e HR që lëvizin në mënyrë të egër të shfaqur në ekran. Për më tepër, komentet poshtë videos konfirmojnë se të tjerët kanë vënë re një fenomen të ngjashëm, gjithashtu.
Për ta bërë një histori të gjatë, pas disa eksperimenteve kam përcaktuar që sensori po funksionon mirë dhe një metodë alternative e përpunimit të sinjalit dixhital rezulton në një stabilitet shumë më të mirë. Kjo metodë e re, e treguar nga "RF", përshkruhet në hapat e ardhshëm.
Hapi 3: Parapërpunimi i sinjalit
Në zbatimin tonë, sinjali i papërpunuar mblidhet në shkallën prej 25 Hz (i njëjtë me atë të MAXIM) për plot 4 sekonda (softueri i MAXIM mbledh vetëm 1 sekondë), duke rezultuar në 100 pika kohore të digjitalizuara për pikën përfundimtare të të dhënave. Çdo sekuencë prej 100 pikësh duhet të përpunohet paraprakisht në mënyrën e mëposhtme:
- Përqendrimi mesatar (a.k.a. "heqja e komponentit DC" tek inxhinierët elektrikë). Të dhënat e papërpunuara që vijnë nga sensori janë një seri kohore e numrave të plotë në 105 varg. Sinjali i dobishëm, megjithatë, është vetëm një pjesë e dritës e reflektuar nga gjaku arterial i cili ndryshon në rendin e vetëm 102 - figura e parë. Për përpunimin kuptimplotë të sinjalit, është e dëshirueshme që të zbritet mesatarja nga secila pikë serie. Kjo pjesë nuk ndryshon nga ajo që softveri MAXIM tashmë bën. Sidoqoftë, ajo që është e ndryshme është përqendrimi mesatar shtesë i vetë indekseve të kohës. Me fjalë të tjera, në vend të indeksimit të pikave të serive me numra nga 0 në 99, indekset e reja tani janë numrat -49.5, -48.5,…, 49.5. Mund të duket e çuditshme në fillim, por falë kësaj procedure "qendra e gravitetit" e kurbës së sinjalit përkon me origjinën e sistemit koordinativ (figura e dytë). Ky fakt bëhet mjaft i dobishëm në hapin tjetër.
- Nivelimi bazë. Një vështrim tjetër në format e valëve të paraqitura në Hapin 2 ilustron se baza e sinjaleve të vërteta të oksimetrisë është larg të qenit horizontale e sheshtë, por ndryshon nëpër shpate të ndryshme. Figura e tretë tregon një sinjal IR mesatar të përqendruar (kurba blu) dhe vijën bazë të tij (vijë blu e drejtë). Në këtë rast, pjerrësia bazë është negative. Metoda e përpunimit të sinjalit e përshkruar më parë kërkon që baza bazë të jetë horizontale. Kjo mund të arrihet thjesht duke zbritur vijën bazë nga sinjali me qendër mesatare. Falë përqëndrimit mesatar të të dy koordinatave Y dhe X, përgjimi bazë është zero dhe ekuacioni i pjerrësisë së tij është veçanërisht i thjeshtë, siç tregohet në figurën e katërt. Sinjali i nivelit bazë tregohet nga kurba portokalli në figurën e tretë.
Kështu sinjali i parapërpunuar është gati për hapin tjetër.
Hapi 4: Kali i punës: Funksioni i autokorrelacionit
Duke u kthyer në indeksimin e zakonshëm 1,…, n, figura e parë tregon përkufizimin e funksionit të autokorrelacionit rm - një sasi e gjetur të jetë shumë e dobishme në zbulimin e periodicitetit të sinjalit, si dhe cilësinë. Simplyshtë thjesht një produkt shkallëzor i normalizuar i serisë kohore të sinjalit me vetveten të zhvendosur me vonesë m. Në aplikimin tonë, megjithatë, është i përshtatshëm për të shkallëzuar secilën vlerë të autokorrelacionit në lidhje me vlerën e saj në lag = 0, domethënë, përdorni autokorrelacionin relativ të përcaktuar nga rm / r0.
Grafiku i autokorrelacionit relativ të një sinjali IR tipik me cilësi të mirë është treguar në figurën e dytë. Siç pritej, vlera e saj në lag = 0 është në maksimumin e saj global të barabartë me 1. Maksimumi tjetër (lokal) ndodh në vonesë = 23 dhe është i barabartë me 0.79. Prania e minimumeve dhe maksimaleve lokale në komplotin e autokorrelacionit është e lehtë të kuptohet: ndërsa sinjali zhvendoset në të djathtë majat e tij ndërhyjnë në mënyrë shkatërruese me njëri -tjetrin në fillim, por në një moment të caktuar ndërhyrja bëhet konstruktive dhe arrin maksimumin në vonesën e barabartë me mesataren periudha e sinjalit.
Fraza e fundit është vendimtare: për të përcaktuar periudhën mesatare kohore midis majave, nga e cila mund të llogaritet frekuenca e sinjalit (d.m.th., rrahjet e zemrës) është e mjaftueshme për të gjetur maksimumin e parë lokal të funksionit të autokorrelacionit! Si parazgjedhje, MAX30102 provon hyrje analoge me një normë prej 25 pikë në sekondë, prandaj në m të dhënë periudha në sekonda është e barabartë me m / 25. Kjo çon në rrahjet e zemrës të shprehura në rrahje në minutë (rpm) me:
HR = 60*25 / m = 1500 / m
Sigurisht, nuk është e nevojshme të bëhen llogaritjet e shtrenjta të rm në të gjitha vlerat e vonesës. Algoritmi ynë bën supozimin e parë të rrahjeve të zemrës = 60 rrahje në minutë, që korrespondon me m = 25. Funksioni i autokorrelacionit vlerësohet në atë pikë dhe krahasohet me vlerën në fqinjin e tij të majtë, m = 24. Nëse vlera e fqinjëve është më e lartë, atëherë marshimi vazhdon majtas deri në rm-1 <rm Me M përfundimtar i përcaktuar kështu kthehet si vonesë në maksimum. Përsëritja tjetër fillon nga ajo vlerë në vend të 25 dhe i gjithë procesi përsëritet. Nëse fqinji i parë i majtë është më i ulët, atëherë marshimet e mësipërme rutinore tregojnë pika në të djathtë në mënyrë të ngjashme. Shumicën e kohës, vonesa në maksimum kërkon vetëm disa vlerësime të funksionit të autokorrelacionit. Për më tepër, vonesat maksimale dhe minimale të pranueshme (që korrespondojnë me rrahjet minimale dhe maksimale të zemrës, respektivisht) përdoren si vlera kufizuese.
Sa më sipër funksionon shumë mirë për sinjale me cilësi të mirë, por bota reale është larg idealit. Disa sinjale dalin të shtrembëruara, kryesisht për shkak të artefakteve të lëvizjes. Një sinjal i tillë tregohet në figurën e tretë. Periodiciteti i dobët reflektohet në formën e funksionit të tij të autokorrelacionit si dhe në vlerë të ulët, 0.28, të maksimumit të parë lokal në m = 11. Krahasoni atë me vlerën maksimale prej 0.79 të përcaktuar për sinjalin e cilësisë së mirë. Së bashku me vlerat kufizuese të vonesës, pra, vlera e rm / r0 në maksimum është një tregues i mirë i cilësisë së sinjalit dhe një kërkesë që ai të tejkalojë një prag të caktuar mund të përdoret për të filtruar artefaktet e lëvizjes. Grafikët "RF" të treguar në hyrje rezultuan nga një prag i tillë i barabartë me 0.25.
Hapi 5: Përcaktimi i ngopjes me oksigjen
Hapi i mëparshëm ishte i mjaftueshëm për të përcaktuar rrahjet e zemrës. SPO2 kërkon më shumë punë. Së pari, sinjali i neglizhuar deri më tani në kanalin e kuq (R) duhet të merret parasysh. Tjetra, llogaritet raporti i sinjaleve të kuqe me infra të kuqe, Z = R/IR, të dyja të pasqyruara nga gjaku arterial. Pjesa e "gjakut arterial" është vendimtare, pasi shumica e dritës në fakt reflektohet nga indet dhe gjaku venoz. Si të zgjidhni një pjesë të sinjalit që korrespondon me gjakun arterial? Epo, ky është komponenti pulsativ që ndryshon me secilën rrahje zemre. Me fjalët e inxhinierëve elektrikë, është "pjesa AC", ndërsa drita e mbetur e reflektuar është "pjesa DC". Meqenëse intensitetet absolute të dritës R dhe IR nuk janë proporcionale, raporti Z llogaritet nga intensitetet relative, siç tregohet në figurën e parë. Për sa i përket sasive të llogaritura në të vërtetë, unë përdor katrorin mesatar të rrënjës (RMS) të sinjalit të përqendruar mesatar, të nivelit bazë, y, në mesataren e njohur tashmë të sinjalit të papërpunuar, <Y>; shiko figurën e dytë. Raporti Z është vetëm gjysma e punës, megjithatë. Përgjigja e sensorit jolinear kërkon një kalibrim empirik midis Z dhe SpO përfundimtar2 vlerat. Mora ekuacionin e kalibrimit nga kodi MAXIM:
SPO2 = (-45.06*Z + 30.354)*Z + 94.845
Mbani në mend se ky ekuacion është i vlefshëm vetëm për bordin e dizajnit MAX30102 të blerë në 2017! Ka të ngjarë që MAXIM mund të rikalibrojë sensorët e tij në një datë të mëvonshme.
Procedura e mësipërme ende prodhon shumë SpO të rremë2 leximet. Kanali i kuq vuan nga shumë objekte, ashtu si ai IR. Reasonableshtë e arsyeshme të supozohet se të dy sinjalet duhet të lidhen fort. Në fakt, sinjalet me cilësi të mirë, si shembulli në figurën e tretë, lidhen shumë mirë. Koeficienti i korrelacionit Pearson është në këtë rast aq i lartë sa 0.99. Kjo nuk është gjithmonë rasti, siç ilustrohet në figurën e katërt. Edhe pse sinjali IR do të kalonte filtrin e cilësisë së rrahjeve të zemrës me r -në e tijm / r0 = 0.76, sinjali i shtrembëruar R rezulton në një koeficient të dobët korrelacioni midis të dyve i barabartë me vetëm 0.42. Ky vëzhgim ofron filtrin e cilësisë së dytë: që ka koeficientin e korrelacionit midis kanaleve më të madh se pragu i caktuar.
Dy shifrat e fundit ilustrojnë efektin neto të një filtrimi të tillë të cilësisë. Së pari, ngopja e matur e oksigjenit është vizatuar me pragun e cilësisë HR prej 0.25, por pa SPO2 filtri. Komploti tjetër rezulton nga filtrimi i burimeve njerëzore të dobëta dhe SpO2 rezulton në 0.5 rm / r0 dhe pragjet e koeficientit 0.8 të korrelacionit. Në përgjithësi, pikat e dobëta të të dhënave që arrijnë në 12% të totalit u filtruan nga regjimi më i rreptë.
Në kodin tonë koeficienti i korrelacionit, cc, llogaritet sipas formulës në figurën e pestë, ku y përfaqëson sinjalin e përqendruar mesatar, të nivelit bazë, ndërsa r0 është përcaktuar në hapin e mëparshëm.
Hapi 6: Kodi Burimor
Kodi burim C për këtë projekt, i formatuar për Arduino IDE, është i disponueshëm nga llogaria jonë Github në lidhjen e mëposhtme:
github.com/aromring/MAX30102_by_RF
Faqja e tij Readme përshkruan përbërës individualë.
Do të doja të merrja një moment për të lavdëruar Adafruit për bërjen e një produkti kaq të shkëlqyer si Adalogger me bazë M0. Procesori i tij i shpejtë 48 MHz ARM Cortex M0, me shumë RAM, sigurisht që ndihmoi që ky projekt të jetë i zbatueshëm, ndërsa lexuesi i kartave SD i bashkangjitur drejtpërdrejt (plus bibliotekën SD të Adafruit) heq të gjitha dhimbjet e hobistit të lidhura me ruajtjen në kohë reale të sasive të mëdha të të dhënave.
Recommended:
Pingo: një lëshues i topit të zbulimit të lëvizjes dhe një saktësi të lartë: 8 hapa
Pingo: një lëshues i topit të zbulimit të lëvizjes dhe një saktësi të lartë: Kevin Nitiema, Esteban Poveda, Anthony Mattacchione, Raphael Kay
Sensori i pulsit i veshshëm: 10 hapa (me fotografi)
Sensori i pulsit i veshshëm: Përshkrimi i projektit Ky projekt ka të bëjë me projektimin dhe krijimin e një pajisje të veshshme që do të marrë parasysh shëndetin e përdoruesit që do ta veshë atë. Objektivi i tij është të veprojë si një ekzoskelet, funksioni i të cilit është të relaksojë dhe qetësojë përdoruesin gjatë një
Rritja e më shumë marule në më pak hapësirë ose Rritja e marule në hapësirë, (më shumë ose më pak) .: 10 hapa
Rritja e më shumë Marule në Më pak Hapësirë Ose … Rritja e Marule në Hapësirë, (Më shumë ose Më Pak) .: Kjo është një paraqitje profesionale për Konkursin Growing Beyond Earth, Maker, i paraqitur përmes Instructables. Nuk mund të isha më i ngazëllyer që të dizajnoja për prodhimin e të korrave në hapësirë dhe të postoja Instructable -in tim të parë. Për të filluar, konkursi na kërkoi të
Regjistrimi i të dhënave në distancë me saktësi të lartë duke përdorur multimetër/Arduino/pfodApp: 10 hapa (me fotografi)
Regjistrimi i të dhënave në distancë me saktësi të lartë duke përdorur multimetër/Arduino/pfodApp: Përditësuar më 26 Prill 2017 Qarku dhe bordi i rishikuar për përdorim me matësa USB 4000ZC. Asnjë kodim Android nuk kërkohet Ky udhëzues ju tregon sesi keni qasje në një gamë të gjerë të matjeve me saktësi të lartë nga Arduino juaj dhe gjithashtu i dërgoni ato nga distanca për prerje dhe
Si të Fikni Shumë Shumë Një IPod Nano të Gjeneratës së Parë: 6 Hapa
Si të Fikni Shumë Shumë Një IPod Nano të Gjeneratës së Parë: E urrej kur më mbaron jeta e baterisë në nano tim …. kjo do t'ju tregojë se si t'i jepni fund …… gjithashtu ky është udhëzimi im i parë