İçindekiler:
- Adım 1: Donanım
- Adım 2: MAX30102 Tarafından Döndürülen Dijital Sinyaller
- Adım 3: Sinyal Ön İşleme
- Adım 4: Workhorse: Otokorelasyon Fonksiyonu
- Adım 5: Oksijen Doygunluğunun Belirlenmesi
- Adım 6: Kaynak Kodu
Video: Çok Gelişmiş Hassasiyete Sahip Nabız Oksimetresi: 6 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Yakın zamanda bir doktora gittiyseniz, temel yaşamsal belirtilerinizin bir hemşire tarafından muayene edilmesi ihtimali vardır. Ağırlık, boy, kan basıncı, ayrıca kalp hızı (HR) ve periferik kandaki oksijen satürasyonu (SpO2). Belki de son ikisi, ilgili sayıları küçücük bir ekranda dakikalar içinde görüntüleyen kırmızı parlayan bir elektronik parmak sondasından elde edildi. Bu proba nabız oksimetresi denir ve bununla ilgili tüm temel bilgileri burada bulabilirsiniz.
Basit bir nabız oksimetresi kolayca satın alınabilir, ancak bunun eğlencesi nerede? İlk önce kendiminkini oluşturmaya karar verdim, ancak daha da önemlisi aklımdaki belirli bir uygulamayla: hem İK hem de SpO2'nin kullanıldığı gece oksimetresi.2 veriler gece boyunca sürekli olarak toplanacak ve bir mikro SD karta kaydedilecektir. Instructables zaten bu türden birkaç proje içeriyor, örneğin ikisi Arduino'yu burada ve burada ve bir tanesi Raspberry Pi'yi kullanıyor. Mine, kontrol ve veri kaydı için MAXIM Integrated ve Adafruit'in Feather M0 Adalogger'ından biraz daha yeni sensör MAX30102 kullanıyor.
Bu nedenle projemiz donanım açısından özellikle yenilikçi değildir ve bu nedenle bu Eğitilebilir Yazıyı yazmaya değmez, ancak oluşturma sürecinde MAX30102'den çok daha yüksek tutarlılık ve çok daha fazla veri çıkarmamı sağlayan yazılımda önemli ilerlemeler kaydettim. MAXIM tarafından bu sensör için yazılan yazılımdan daha az gürültü. Sinyal işleme algoritmamızın performansı, üstteki iki grafiğin, bizim yöntemimiz ("RF" ile tanımlanır) ham sinyallerden hesaplanan gece kalp atış hızı ve oksijen doygunluğunu içerdiği, alttaki iki grafiğin ise MAXIM'in ürettiği sonuçları gösterdiği yukarıdaki grafikte gösterilmektedir. tamamen aynı sinyaller. HR için standart sapmalar 4,7 bpm ve 18,1 bpm ve SpO için2 RF ve MAXIM için sırasıyla %0,9 ve %4,4.
(Her iki RF grafiği de 0.25 minimum otokorelasyon eşiğine karşılık gelir ve R / IR korelasyonunda sınır yoktur; bu terimlerin açıklaması için 4. ve 5. Adımlara bakın.)
Adım 1: Donanım
- MAXIM Integrated, Inc.'den nabız oksimetresi ve kalp atış hızı sensörü MAX30102 sistem kartı
- Adafruit, Inc.'den Feather M0 Adalogger
- Adafruit, Inc.'den Lityum İyon Pil
Bağlantılar:
- Adalogger pinleri SCL ve SDA'yı MAX30102 kartındaki ilgili SCL ve SDA pinlerine bağlar
- Adalogger pin 10'dan MAX30102 kartındaki pin INT'e
- Adalogger GND - MAX30102 kartı GND
- Adalogger 3V - MAX30102 VIN
Adım 2: MAX30102 Tarafından Döndürülen Dijital Sinyaller
Sensörün çalışma prensipleri çok basittir: biri kırmızı (660 nm) ve biri kızılötesi (880 nm, IR) olmak üzere iki LED, ışığı insan derisine yayar. Işık, periferik kan da dahil olmak üzere alttaki dokular tarafından kısmen emilir. Sensörün fotodetektörü, her iki dalga boyunda da yansıyan ışığı toplar ve I2C protokolünü kullanarak karşılık gelen iki göreli yoğunluğu döndürür. Oksijenli ve oksijensiz hemoglobinin absorpsiyon spektrumları her iki dalga boyu için farklı olduğundan, yansıyan ışığın her kalp atışı ile deri altında bulunan arteriyel kan miktarı gibi değişken bir bileşeni vardır. Kalp atış hızı ve oksijen doygunluğunu belirlemek sinyal işleme yazılımına bağlıdır.
Ham sinyal örnekleri (yalnızca IR kanalı) yukarıdaki resimlerde gösterilmektedir. Vikipedi sayfasında bahsedilen birden çok faktör nedeniyle değişen bir değişken taban çizgisi üzerine yerleştirilmiş periyodik bir bileşen fark edilebilir. Harekete bağlı artefaktlar özellikle can sıkıcıdır çünkü faydalı HR sinyalini maskeleyebilir ve sahte sonuçlara neden olabilir. Bu nedenle, gelişmiş ticari oksimetreler, bu artefaktları geçersiz kılmaya yardımcı olan ivmeölçerlere sahiptir.
Oksimetremin sonraki sürümüne bir ivmeölçer ekleyebilirim, ancak gece HR/SpO için2 kayıt, sensör çoğu zaman hareketsiz kaldığında, bozuk sinyalleri algılamak ve çıkarmak yeterlidir.
MAX30102 sensörünün kendisi yüzeye monte küçük bir pakette gelir, ancak MAXIM nezaketle bir devre kartı (Sistem Kartı 6300) artı Arduino ve mbed için sinyal işleme yazılımı sunar - tümü MAXREFDES117# referans tasarım paketinde. Sensör ve Adalogger arasındaki bazı kabloları lehimlemeyi ve tek bir günde çalışan, iyi bir oksimetreye sahip olmayı umarak mutlu bir şekilde satın aldım. MAXIM yazılımının RD117_ARDUINO sürümünü Adalogger'ın ARM Cortex M0 işlemcisinde çalışacak şekilde uyarladım. Temel olarak tek yapmam gereken, max30102.cpp'deki uyumsuz SofI2C işlevlerini ilgili Wire kitaplığı çağrılarıyla değiştirmekti. Kod, Arduino IDE v1.8.5'te iyi bir şekilde derlendi ve M0'da hatasız çalıştı. Ancak net sonuçlar hayal kırıklığı yarattı. Giriş adımında, hem HR hem de SpO'nun çok yüksek varyansını zaten gösterdim.2. Doğal olarak, yanlış bir şey yaptığım iddia edilebilir ve bu benim de orijinal düşüncemdi. Bununla birlikte, MAXIM'in eğitim videosunda, ekranda görüntülenen çılgınca sallanan HR değerlerini de gözlemleyebilirsiniz. Ayrıca, videonun altındaki yorumlar, başkalarının da benzer bir fenomeni fark ettiğini doğrulamaktadır.
Uzun lafın kısası, bazı deneylerden sonra sensörün sorunsuz çalıştığını ve alternatif bir dijital sinyal işleme yönteminin çok daha iyi stabilite sağladığını belirledim. "RF" ile gösterilen bu yeni yöntem sonraki adımlarda anlatılmaktadır.
Adım 3: Sinyal Ön İşleme
Uygulamamızda, ham sinyal tam 4 saniye boyunca 25 Hz (MAXIM'lerle aynı) oranında toplanır (MAXIM'in yazılımı yalnızca 1 saniyelik değer toplar), bu da uç veri noktası başına 100 dijitalleştirilmiş zaman noktasıyla sonuçlanır. Her 100 noktalı dizi, aşağıdaki şekilde ön işleme tabi tutulmalıdır:
- Ortalama merkezleme (elektrik mühendislerine diğer adıyla "DC bileşeninin çıkarılması"). Sensörden gelen ham veriler, 10'daki bir tamsayı zaman serisidir.5 Aralık. Ancak yararlı sinyal, arter kanından yansıyan ışığın yalnızca bir kısmıdır ve bu, yalnızca 10 mertebesinde değişir.2 - ilk rakam. Anlamlı sinyal işleme için, bu nedenle, her seri noktasından ortalamanın çıkarılması arzu edilir. Bu kısım, MAXIM yazılımının halihazırda yaptığından farklı değildir. Bununla birlikte, farklı olan, zaman endekslerinin kendilerinin ek ortalama merkezlenmesidir. Diğer bir deyişle, 0'dan 99'a kadar sayılarla dizi noktalarını indekslemek yerine, yeni endeksler artık -49.5, -48.5, …, 49.5 sayılarıdır. İlk başta garip görünebilir, ancak bu prosedür sayesinde sinyal eğrisinin "ağırlık merkezi" koordinat sisteminin orijini ile çakışmaktadır (ikinci şekil). Bu gerçek, bir sonraki adımda oldukça kullanışlı hale gelir.
- Temel seviyelendirme. Adım 2'de gösterilen dalga biçimlerine başka bir bakış, gerçek oksimetre sinyallerinin taban çizgisinin yatay olarak düz olmaktan çok uzak olduğunu, ancak farklı eğimlerde değiştiğini göstermektedir. Üçüncü şekil, ortalama merkezli bir IR sinyalini (mavi eğri) ve taban çizgisini (mavi düz çizgi) gösterir. Bu durumda, taban çizgisinin eğimi negatiftir. Yukarıda açıklanan sinyal işleme yöntemi, taban çizgisinin yatay olmasını gerektirir. Bu, basitçe, ortalama merkezli sinyalden taban çizgisini çıkararak başarılabilir. Hem Y hem de X koordinatlarının ortalama merkezlenmesi sayesinde, temel çizginin kesişimi sıfırdır ve dördüncü şekilde gösterildiği gibi eğim denklemi özellikle basittir. Temel çizgi düzeyinde sinyal, üçüncü şekilde turuncu eğri ile gösterilmiştir.
Böylece önceden işlenmiş sinyal bir sonraki adım için hazırdır.
Adım 4: Workhorse: Otokorelasyon Fonksiyonu
Her zamanki 1, …, n indekslemeye geri dönersek, ilk şekil otokorelasyon fonksiyonunun tanımını gösterir rm - sinyalin kalitesi kadar periyodikliğini de tespit etmede çok faydalı olduğu bulunan bir miktar. Bu, m gecikmesi tarafından kaydırılan sinyalin zaman serisinin basitleştirilmiş bir skaler ürünüdür. Bizim uygulamamızda, yine de, her bir otokorelasyon değerini, gecikme = 0'daki değerine göre ölçeklendirmek, yani, r ile tanımlanan göreli otokorelasyonu kullanmak uygundur.m / r0.
Tipik bir iyi kalite IR sinyalinin nispi otokorelasyonunun grafiği ikinci şekilde gösterilmektedir. Beklendiği gibi, gecikme = 0'daki değeri global maksimumda 1'e eşittir. Sonraki (yerel) maksimum gecikme = 23'te gerçekleşir ve 0,79'a eşittir. Otokorelasyon grafiğinde yerel minimum ve maksimumların varlığını anlamak kolaydır: sinyal sağa kayarken, tepe noktaları ilk başta birbirleriyle yıkıcı bir şekilde etkileşime girer, ancak belirli bir noktada girişim yapıcı hale gelir ve ortalamaya eşit gecikmede maksimuma ulaşır. sinyalin periyodu.
Son ifade çok önemlidir: Sinyalin frekansını (yani kalp atış hızını) hesaplayabileceğiniz tepe noktaları arasındaki ortalama süreyi belirlemek için, otokorelasyon fonksiyonunun ilk yerel maksimumunu bulmak yeterlidir! Varsayılan olarak, MAX30102 analog girişi saniyede 25 nokta hızında örnekler, bu nedenle belirli bir m'de saniye cinsinden süre m / 25'e eşittir. Bu, dakikada atım sayısı (bpm) olarak ifade edilen kalp atış hızına yol açar:
HR = 60*25 / m = 1500 / m
Tabii ki, pahalı r hesaplamaları yapmak gerekli değildir.m tüm gecikme değerlerinde Algoritmamız, m = 25'e karşılık gelen kalp hızı = 60 bpm'nin ilk tahminini yapar. Otokorelasyon fonksiyonu o noktada değerlendirilir ve sol komşusu m = 24'teki değerle karşılaştırılır. Komşular değeri daha yüksekse, o zaman marş r kadar sola devam ederm-1 < rm. Böylece belirlenen nihai m, maksimum gecikme olarak döndürülür. Bir sonraki yineleme 25 yerine bu değerden başlar ve tüm süreç tekrarlanır. İlk sol komşu daha düşükse, yukarıdaki rutin yürüyüşler benzer şekilde sağa doğru geriler. Çoğu zaman, maksimum gecikme, otokorelasyon fonksiyonunun sadece birkaç değerlendirmesini gerektirir. Ek olarak, maksimum ve minimum kabul edilebilir gecikmeler (sırasıyla minimum ve maksimum kalp hızına karşılık gelir) sınırlayıcı değerler olarak kullanılır.
Yukarıdakiler, kaliteli sinyaller için çok iyi çalışır, ancak gerçek dünya ideal olmaktan uzaktır. Çoğunlukla hareket artefaktları nedeniyle bazı sinyaller bozuk çıkıyor. Böyle bir sinyal üçüncü şekilde gösterilmiştir. Zayıf periyodiklik, otokorelasyon fonksiyonunun şeklinde ve ayrıca m = 11'de ilk yerel maksimumun düşük değeri olan 0.28'de yansıtılır. Bunu, iyi kalite sinyal için belirlenen maksimum 0.79 değeriyle karşılaştırın. Gecikme sınırlayıcı değerlerle birlikte, bu nedenle, r değerim / r0 maksimumda sinyal kalitesinin iyi bir göstergesidir ve belirli bir eşiği aşması için bir gereklilik, hareket artefaktlarını filtrelemek için kullanılabilir. Girişlerde gösterilen "RF" grafikleri, 0.25'e eşit olan bu eşikten elde edilmiştir.
Adım 5: Oksijen Doygunluğunun Belirlenmesi
Önceki adım kalp atış hızını belirlemek için yeterliydi. SpO2 daha fazla çalışma gerektirir. İlk olarak, kırmızı (R) kanalında şimdiye kadar ihmal edilen sinyal dikkate alınmalıdır. Daha sonra, her ikisi de arteriyel kandan yansıyan kırmızı/kızılötesi sinyallerin oranı, Z = R/IR hesaplanır. "Atardamar kanı" kısmı çok önemlidir, çünkü ışığın çoğu aslında dokulardan ve venöz kandan yansır. Arteriyel kana karşılık gelen sinyalin bir kısmı nasıl seçilir? Bu, her kalp atışına göre değişen pulsatil bileşendir. Elektrik mühendislerinin deyimiyle "AC kısmı", geri kalan yansıyan ışık ise "DC kısmı"dır. R ve IR ışığının mutlak yoğunlukları orantılı olmadığından Z oranı, ilk şekilde gösterildiği gibi bağıl yoğunluklardan hesaplanır. Fiili olarak hesaplanan miktarlar açısından, ortalama merkezli, temel seviyeli sinyalin, y ortalama karekökünü (RMS) ham sinyalin zaten bilinen ortalamasına, < Y >; ikinci şekle bakın. Ancak Z oranı işin sadece yarısıdır. Doğrusal olmayan sensör yanıtı, Z ile son SpO arasında ampirik bir kalibrasyon gerektirir2 değerler. Kalibrasyon denklemini MAXIM'in kodundan aldım:
SpO2 = (-45.06*Z + 30.354)*Z + 94.845
Bu denklemin yalnızca 2017 yılında satın alınan MAX30102 tasarım kartı için geçerli olduğunu unutmayın! MAXIM'in sensörlerini daha sonraki bir tarihte yeniden kalibre etmesi muhtemeldir.
Yukarıdaki prosedür hala çok sayıda yanlış SpO üretir.2 okumalar. Kırmızı kanal, tıpkı IR kanalında olduğu gibi, birçok artefakttan muzdariptir. Her iki sinyalin de güçlü bir şekilde ilişkili olması gerektiğini varsaymak mantıklıdır. Aslında, üçüncü şekildeki örnek gibi kaliteli sinyaller çok iyi korelasyon gösterir. Pearson korelasyon katsayısı bu durumda 0.99 kadar yüksektir. Dördüncü şekilde gösterildiği gibi bu her zaman böyle değildir. IR sinyali, r ile kalp atış hızı kalite filtresini geçse dem / r0 = 0.76, bozuk R sinyali, ikisi arasında yalnızca 0,42'ye eşit olan zayıf bir korelasyon katsayısına neden olur. Bu gözlem, ikinci kalite filtresini sunar: kanallar arasındaki korelasyon katsayısının belirli eşikten büyük olması.
Son iki rakam, bu tür kaliteli filtrelemenin net etkisini örneklemektedir. İlk olarak, ölçülen oksijen doygunluğu, 0.25'lik HR kalite eşiği ile, ancak SpO olmadan çizilir.2 filtre. Sonraki çizim, zayıf İK ve SpO'nun filtrelenmesinden kaynaklanır2 0,5 r'de sonuçlarm / r0 ve 0.8 korelasyon katsayısı eşikleri. Genel olarak, toplamın %12'sine tekabül eden zayıf veri noktaları, daha katı rejim tarafından filtrelenmiştir.
Kodumuzda korelasyon katsayısı, cc, beşinci şekildeki formüle göre hesaplanır; burada y, ortalama merkezli, taban çizgisi düzeyinde sinyali temsil ederken, r0 önceki adımda tanımlanmıştır.
Adım 6: Kaynak Kodu
Bu proje için Arduino IDE için biçimlendirilmiş C kaynak kodu, aşağıdaki bağlantıdaki Github hesabımızdan edinilebilir:
github.com/aromring/MAX30102_by_RF
Benioku sayfası ayrı bileşenleri açıklar.
Adafruit'i M0 tabanlı Adalogger gibi mükemmel bir ürün yaptığı için övmek istiyorum. Çok sayıda RAM'e sahip hızlı 48 MHz ARM Cortex M0 işlemcisi, bu projenin uygulanabilir olmasına kesinlikle yardımcı olurken, doğrudan bağlı SD kart okuyucusu (artı Adafruit'in SD kütüphanesi), büyük miktarda verinin gerçek zamanlı depolanmasıyla ilgili tüm hobicilerin sıkıntılarını ortadan kaldırıyor.
Önerilen:
Sahip Olunan Küçük Canavar: 6 Adım (Resimlerle)
Sahip Olunan Küçük Canavar: Bu ele geçirilmiş küçük canavar, söz konusu cana geldiğinde hilecilerinizi veya oyuncularınızı korkutacaktır. onlarla konuşur. Onu köşede, 'Merhaba, oynamak istiyorum' dediğinde ve bir ele geçirilmiş gibi güldüğünde, masum kurbanları korkutmaya hazır bazı çalılardan saklıyorum
Çok Akıllı Değil Ama Çok Sağlıklı Ama Biraz Ürpertici Ayna: 5 Adım (Resimlerle)
Çok Akıllı Değil Ama Çok Sağlıklı Yine de Biraz Ürpertici Ayna: Bir aynaya ihtiyacınız var ama evinize başka bir akıllı nesne eklemek istemiyor musunuz? O halde bu Pek Akıllı Değil Ama Çok Sağlıklı Yine de Biraz Ürpertici Ayna tam size göre
Birçok Yeteneğe Sahip Otonom Bir Robot: 8 Adım (Resimlerle)
Birçok Yeteneği Olan Otonom Bir Robot: Merhaba arkadaşlar, bu talimatta, önceki talimatımın aşağıdaki görevleri yapabilen yeni bir versiyonunu tanıtacağım: 1- Arduino UNO ve L298N motor sürücüsü tarafından otonom olarak hareket edebilir 2- Yapabilir elektrikli süpürge olarak temizlik 3- Bu ca
USB Şarj Bağlantı Noktalarına Sahip En İyi ATX Güç Kaynağı Modu: 7 Adım (Resimlerle)
USB Şarj Bağlantı Noktalarına Sahip Ultimate ATX Güç Kaynağı Modu: Burada bunlardan bir sürü olduğunu biliyorum, ancak bunun gibi bir şey görmedim, bu yüzden yayınlayacağımı düşündüm, işte burada. Bu güç kaynağında 3 12v hat, 3 5v hat, 3 3.3v hat, 1 -12v hat ve & 2 USB bağlantı noktası. 480 Watt ATX kullanır
Çok Basit Yine Çok Etkili Şaka (Bilgisayar Şakası): 3 Adım
Çok Basit… Yine Çok Etkili Şaka (Bilgisayar Şakası): Bu Eğitilebilirlik ÇOK basit, ancak ÇOK etkili! Ne olacak: Kurbanın masaüstündeki tüm simgeleri gizlersiniz. Siz şakayı yaptıktan sonra, kurban bilgisayarı gördüğünde çıldıracaktır. Bu bilgisayara hiçbir şekilde zarar veremez