Isi kandungan:

Pulse Oksimeter dengan Ketepatan yang Lebih Baik: 6 Langkah (dengan Gambar)
Pulse Oksimeter dengan Ketepatan yang Lebih Baik: 6 Langkah (dengan Gambar)

Video: Pulse Oksimeter dengan Ketepatan yang Lebih Baik: 6 Langkah (dengan Gambar)

Video: Pulse Oksimeter dengan Ketepatan yang Lebih Baik: 6 Langkah (dengan Gambar)
Video: Simpel ! Cara menggunakan OXIMETER dengan benar dan pembacaan hasil saturasi oksigen 2024, Disember
Anonim
Pulse Oksimeter dengan Ketepatan yang Lebih Baik
Pulse Oksimeter dengan Ketepatan yang Lebih Baik
Pulse Oksimeter dengan Ketepatan yang Lebih Baik
Pulse Oksimeter dengan Ketepatan yang Lebih Baik

Sekiranya anda baru-baru ini berjumpa doktor, kemungkinan tanda penting anda diperiksa oleh jururawat. Berat, tinggi, tekanan darah, serta degupan jantung (HR) dan ketepuan oksigen dalam darah periferal (SpO2). Mungkin, dua yang terakhir diperoleh dari penyidik jari elektronik yang menyala merah yang menunjukkan nombor yang relevan di skrin kecil dalam beberapa minit. Penyelidikan itu dipanggil pulse oximeter dan anda boleh mendapatkan semua maklumat asas mengenainya di sini.

Seseorang boleh membeli oksimeter nadi mudah, pasti, tetapi di mana keseronokan di dalamnya? Saya telah membuat keputusan untuk membina sendiri, pertama sekali, tetapi yang lebih penting dengan mempertimbangkan aplikasi khusus: oksimetri nokturnal di mana HR dan SpO2 data akan dikumpulkan secara berterusan semalaman dan direkodkan pada kad SD mikro. Instructables sudah mengandungi beberapa projek seperti ini, dua, yang melibatkan Arduino di sini dan di sini, dan satu menggunakan Raspberry Pi. Mine menggunakan sensor MAX30102 yang sedikit lebih baru dari MAXIM Integrated dan Adafruit's Feather M0 Adalogger untuk kawalan dan rakaman data.

Oleh itu, projek kami tidak begitu inovatif dari segi perkakasan dan oleh itu tidak semestinya menulis ini Instructable, tetapi dalam proses membuatnya, saya telah membuat kemajuan penting dalam perisian yang membolehkan saya mengekstrak data dari MAX30102 dengan konsistensi yang jauh lebih tinggi dan banyak bunyi yang kurang daripada perisian yang ditulis oleh MAXIM untuk sensor ini. Prestasi algoritma pemprosesan isyarat kami digambarkan dalam carta di atas di mana dua graf teratas mengandungi kadar denyut jantung semalaman dan ketepuan oksigen yang dikira dari isyarat mentah dengan kaedah kami (dikenal pasti oleh "RF"), sementara dua graf bawah menunjukkan hasil MAXIM yang dihasilkan dari isyarat yang sama persis. Sisihan piawai untuk HR adalah 4.7 bpm dan 18.1 bpm, dan untuk SpO2 0.9% dan 4.4%, untuk RF dan MAXIM, masing-masing.

(Kedua-dua graf RF sesuai dengan ambang autokorelasi minimum 0,25 dan tidak ada batasan korelasi R / IR; lihat Langkah 4 dan 5 untuk penjelasan mengenai istilah ini.)

Langkah 1: Perkakasan

Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan
  1. Papan sistem sensor pulsa oksimeter dan denyut jantung MAX30102 dari MAXIM Integrated, Inc.
  2. Feather M0 Adalogger dari Adafruit, Inc.
  3. Lithium Ion Battery dari Adafruit, Inc.

Sambungan:

  • Adalogger pin SCL dan SDA ke pin SCL dan SDA yang sesuai pada papan MAX30102
  • Adalogger pin 10 untuk pin INT pada papan MAX30102
  • Adalogger GND ke MAX30102 papan GND
  • Adalogger 3V hingga MAX30102 VIN

Langkah 2: Isyarat Digital Dikembalikan oleh MAX30102

Isyarat Digital Dikembalikan oleh MAX30102
Isyarat Digital Dikembalikan oleh MAX30102
Isyarat Digital Dikembalikan oleh MAX30102
Isyarat Digital Dikembalikan oleh MAX30102

Prinsip operasi sensor sangat mudah: dua LED, satu merah (660 nm) dan satu inframerah (880 nm, IR) menyinari cahaya melalui kulit manusia. Cahaya diserap sebahagiannya oleh tisu yang mendasari, termasuk darah periferal. Photodetector Sensor mengumpulkan cahaya yang dipantulkan pada kedua panjang gelombang dan mengembalikan dua intensiti relatif yang sesuai menggunakan protokol I2C. Oleh kerana spektrum penyerapan untuk hemoglobin beroksigen dan deoksigenasi berbeza untuk kedua panjang gelombang, cahaya yang dipantulkan mempunyai komponen yang berubah-ubah sebagai jumlah darah arteri yang terdapat di bawah denyutan kulit dengan setiap degupan jantung. Mengetahui kadar denyutan jantung dan ketepuan oksigen bergantung pada perisian pemprosesan isyarat.

Contoh isyarat mentah (saluran IR sahaja) digambarkan dalam gambar di atas. Seseorang dapat melihat komponen berkala dilapisi pada garis dasar pemboleh ubah yang berubah kerana pelbagai faktor yang disebutkan di halaman Wikipedia. Artifak yang digerakkan oleh pergerakan sangat menjengkelkan kerana mereka dapat menutupi isyarat HR yang berguna dan menyebabkan hasil palsu. Oleh itu, oksimeter komersial maju mempunyai akselerometer yang membantu membatalkan artifak ini.

Saya mungkin menambah pecutan pada versi berikutnya dari oksimeter saya, tetapi untuk HR / SpO pada waktu malam2 rakaman, apabila sensor tidak bergerak sepanjang masa, memadai untuk mengesan dan menghilangkan isyarat yang terdistorsi.

Sensor MAX30102 sendiri hadir dalam paket kecil yang dipasang di permukaan, tetapi MAXIM dengan ramah menawarkan papan pemecah (Sistem Papan 6300) ditambah perisian pemprosesan isyarat untuk Arduino dan mbed - semuanya ada dalam pakej reka bentuk rujukan MAXREFDES117 #. Saya dengan senang hati membelinya dengan mengharapkan hanya menyisipkan beberapa wayar antara sensor dan Adalogger dan mempunyai oksimeter yang baik dalam satu hari. Saya menyesuaikan perisian MAXIM versi RD117_ARDUINO untuk dijalankan pada pemproses ARM Cortex M0 Adalogger. Pada dasarnya, yang harus saya lakukan ialah mengganti fungsi SofI2C yang tidak serasi pada max30102.cpp dengan panggilan perpustakaan Wire yang sesuai. Kod disusun dengan baik dalam Arduino IDE v1.8.5 dan berjalan di M0 tanpa sebarang kesalahan. Walau bagaimanapun, keputusan bersih mengecewakan. Dalam langkah Pengenalan saya telah menunjukkan varians HR dan SpO yang sangat tinggi2. Secara semula jadi, seseorang mungkin mendakwa bahawa saya telah melakukan sesuatu yang salah dan ini juga pemikiran saya yang asal. Walau bagaimanapun, dalam video pengajaran MAXIM, anda juga dapat melihat nilai HR berayun yang ditunjukkan di skrin. Selain itu, komen di bawah video mengesahkan bahawa orang lain juga melihat fenomena yang serupa.

Untuk membuat cerpen, setelah beberapa percubaan saya telah menentukan bahawa sensor beroperasi dengan baik dan kaedah alternatif pemprosesan isyarat digital menghasilkan kestabilan yang lebih baik. Kaedah baru ini, yang ditunjukkan oleh "RF", dijelaskan dalam langkah seterusnya.

Langkah 3: Pemprosesan Isyarat

Pemprosesan Isyarat
Pemprosesan Isyarat
Pemprosesan Isyarat
Pemprosesan Isyarat
Pemprosesan Isyarat
Pemprosesan Isyarat
Pemprosesan Isyarat
Pemprosesan Isyarat

Dalam pelaksanaan kami, isyarat mentah dikumpulkan pada kadar 25 Hz (sama dengan MAXIM) selama 4 saat penuh (perisian MAXIM hanya mengumpulkan nilai 1 saat), menghasilkan 100 titik waktu digital setiap titik data akhir. Setiap urutan 100 mata mesti diproses dengan cara berikut:

  1. Berpusatkan min (seperti "penyingkiran komponen DC" kepada jurutera elektrik). Data mentah yang berasal dari sensor adalah siri bilangan bulat dalam 105 julat. Walau bagaimanapun, isyarat yang berguna hanyalah sebahagian cahaya yang dipantulkan dari darah arteri yang berbeza mengikut urutan hanya 102 - angka pertama. Untuk pemprosesan isyarat yang bermakna, adalah wajar untuk mengurangkan min dari setiap titik siri. Bahagian ini tidak berbeza dengan apa yang telah dilakukan oleh perisian MAXIM. Apa yang berbeza, bagaimanapun, adalah penambahan min yang berpusat pada indeks masa itu sendiri. Dengan kata lain, bukannya mengindeks poin siri dengan angka dari 0 hingga 99, indeks baru sekarang adalah angka -49.5, -48.5,…, 49.5. Mungkin kelihatan aneh pada mulanya, tetapi berkat prosedur ini, "pusat graviti" keluk isyarat bertepatan dengan asal sistem koordinat (gambar kedua). Fakta ini menjadi sangat berguna pada langkah seterusnya.
  2. Meratakan asas. Pandangan lain mengenai bentuk gelombang yang ditunjukkan dalam Langkah 2 menggambarkan bahawa garis dasar isyarat oksimetri sebenar jauh dari mendatar, tetapi berbeza melalui cerun yang berbeza. Angka ketiga menunjukkan isyarat IR berpusat min (lengkung biru) dan garis dasar (garis lurus biru). Dalam kes ini, cerun garis dasar adalah negatif. Kaedah pemprosesan isyarat yang dijelaskan di hadapan memerlukan garis dasar untuk mendatar. Ini dapat dicapai dengan hanya mengurangkan garis dasar dari isyarat berpusatkan min. Berkat pemusatan min kedua koordinat Y dan X, pintasan garis dasar adalah sifar dan persamaan cerunnya sangat mudah, seperti yang ditunjukkan pada rajah keempat. Isyarat peringkat awal ditunjukkan oleh lengkung oren pada angka ketiga.

Oleh itu isyarat yang diproses siap untuk langkah seterusnya.

Langkah 4: The Workhorse: Autocorrelation Function

The Workhorse: Fungsi Autokorelasi
The Workhorse: Fungsi Autokorelasi
The Workhorse: Fungsi Autokorelasi
The Workhorse: Fungsi Autokorelasi
The Workhorse: Fungsi Autokorelasi
The Workhorse: Fungsi Autokorelasi

Kembali ke pengindeksan 1,…, n yang biasa, angka pertama menunjukkan definisi fungsi autokorelasi rm - kuantiti yang didapati sangat berguna dalam mengesan berkala serta kualiti isyarat. Ini hanyalah produk skalar normal dari siri masa isyarat dengan sendirinya beralih oleh lag m. Dalam aplikasi kami, bagaimanapun, lebih mudah untuk skala setiap nilai autokorelasi sehubungan dengan nilainya pada lag = 0, iaitu, gunakan autokorelasi relatif yang ditentukan oleh rm / r0.

Petak autokorelasi relatif isyarat IR berkualiti baik ditunjukkan dalam gambar kedua. Seperti yang dijangkakan, nilainya pada lag = 0 berada pada maksimum globalnya sama dengan 1. Maksimum (tempatan) seterusnya berlaku pada lag = 23 dan sama dengan 0,79. Kehadiran minima dan maksima tempatan dalam plot autokorelasi mudah difahami: ketika isyarat beralih ke kanan puncaknya merosakkan antara satu sama lain pada mulanya, tetapi pada titik tertentu gangguan menjadi konstruktif dan mencapai maksimum pada ketinggian sama dengan rata-rata tempoh isyarat.

Ungkapan terakhir sangat penting: untuk menentukan jangka masa purata antara puncak, dari mana seseorang dapat mengira frekuensi isyarat (iaitu, degupan jantung) adalah mencukupi untuk mencari maksimum tempatan pertama fungsi autokorelasi! Secara lalai, MAX30102 sampel input analog pada kadar 25 mata sesaat, oleh itu pada masa yang diberi jangka masa dalam detik adalah sama dengan m / 25. Ini menyebabkan kadar jantung dinyatakan dalam denyutan per minit (bpm) dengan:

HR = 60 * 25 / m = 1500 / m

Sudah tentu, tidak perlu melakukan pengiraan r yang mahalm sama sekali nilai lag. Algoritma kami membuat tekaan pertama mengenai degupan jantung = 60 bpm, yang sepadan dengan m = 25. Fungsi autokorelasi dinilai pada ketika itu dan dibandingkan dengan nilai di sebelah kiri, m = 24. Sekiranya nilai jiran lebih tinggi, maka perarakan terus ke kiri sehingga rm-1 <rm. Oleh itu, m akhir yang ditentukan kemudian dikembalikan sebagai ketinggian maksimum. Iterasi seterusnya bermula dari nilai itu dan bukannya 25 dan keseluruhan proses berulang. Sekiranya jiran kiri pertama lebih rendah, maka ketinggalan perarakan rutin di atas menunjuk ke kanan dengan cara yang serupa. Sebilangan besar masa, ketinggian maksimum memerlukan hanya beberapa penilaian fungsi autokorelasi. Sebagai tambahan, ketinggian maksimum dan minimum yang dapat diterima (masing-masing sesuai dengan kadar denyutan jantung minimum dan maksimum) digunakan sebagai nilai had.

Perkara di atas berfungsi sangat baik untuk isyarat berkualiti, tetapi dunia nyata jauh dari ideal. Beberapa isyarat keluar terdistorsi, kebanyakannya disebabkan oleh artifak gerakan. Isyarat seperti itu ditunjukkan pada rajah ketiga. Berkala buruk ditunjukkan dalam bentuk fungsi autokorelasinya dan juga pada nilai rendah, 0,28, dari maksimum tempatan pertama pada m = 11. Bandingkan dengan nilai maksimum 0.79 yang ditentukan untuk isyarat kualiti yang baik. Seiring dengan had yang mengehadkan nilai, oleh itu, nilai rm / r0 maksimum adalah petunjuk kualiti isyarat yang baik dan syarat untuk melebihi ambang tertentu boleh digunakan untuk menyaring artifak gerakan. Grafik "RF" yang ditunjukkan dalam perkenalan dihasilkan dari ambang tersebut sama dengan 0,25.

Langkah 5: Menentukan Ketepuan Oksigen

Menentukan Ketepuan Oksigen
Menentukan Ketepuan Oksigen
Menentukan Ketepuan Oksigen
Menentukan Ketepuan Oksigen
Menentukan Ketepuan Oksigen
Menentukan Ketepuan Oksigen
Menentukan Ketepuan Oksigen
Menentukan Ketepuan Oksigen

Langkah sebelumnya cukup untuk menentukan kadar denyutan jantung. The SpO2 memerlukan lebih banyak kerja. Pertama, isyarat yang jauh diabaikan di saluran merah (R) mesti diambil kira. Seterusnya, nisbah isyarat merah dan inframerah, Z = R / IR, keduanya dipantulkan dari darah arteri, dikira. Bahagian "darah arteri" sangat penting, kerana sebahagian besar cahaya sebenarnya dipantulkan dari tisu dan darah vena. Bagaimana memilih bahagian isyarat yang sesuai dengan darah arteri? Nah, ini adalah komponen berdenyut yang berbeza-beza dengan setiap degupan jantung. Dalam kata jurutera elektrik, itu adalah "bahagian AC", sementara cahaya yang dipantulkan yang tersisa adalah "bahagian DC". Oleh kerana intensiti mutlak cahaya R dan IR tidak sepadan, nisbah Z dikira dari intensiti relatif, seperti yang ditunjukkan pada gambar pertama. Dari segi kuantiti yang sebenarnya dikira, saya menggunakan akar-min-kuadrat (RMS) dari tengah-tengah, garis dasar-tahap, y, hingga min yang sudah diketahui dari isyarat mentah, <Y>; lihat angka kedua. Nisbah Z hanya separuh daripada kerja. Tindak balas sensor tidak linear memerlukan penentukuran empirik antara Z dan SpO akhir2 nilai. Saya mengambil persamaan penentukuran dari kod MAXIM:

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

Perlu diingat bahawa persamaan ini hanya berlaku untuk papan reka bentuk MAX30102 yang dibeli pada tahun 2017! Kemungkinan MAXIM dapat mengkalibrasi semula sensornya di kemudian hari.

Prosedur di atas masih menghasilkan banyak SpO palsu2 bacaan. Saluran merah menderita banyak artifak, sama seperti IR. Adalah wajar untuk menganggap bahawa kedua-dua isyarat tersebut harus berkorelasi kuat. Sebenarnya, isyarat kualiti yang baik, seperti contoh dalam angka ketiga, berkorelasi dengan sangat baik. Pekali korelasi Pearson dalam kes ini setinggi 0,99. Ini tidak selalu berlaku, seperti yang digambarkan dalam gambar keempat. Walaupun isyarat IR akan melewati penapis kualiti denyut jantung dengan rm / r0 = 0.76, isyarat R yang terdistorsi menghasilkan pekali korelasi yang buruk antara keduanya sama dengan hanya 0,42. Pemerhatian ini menawarkan penapis kualiti kedua: mempunyai pekali korelasi antara saluran yang lebih besar daripada ambang tertentu.

Dua angka terakhir menunjukkan kesan bersih dari penyaringan kualiti seperti itu. Pertama, ketepuan oksigen yang diukur diplot dengan ambang kualiti HR 0,25, tetapi tanpa SpO2 tapis. Hasil plot seterusnya daripada menyaring HR dan SpO yang buruk2 hasil pada 0.5 rm / r0 dan ambang pekali korelasi 0.8. Secara keseluruhan, titik data yang lemah berjumlah 12% dari jumlah keseluruhan disaring oleh rejim yang lebih ketat.

Dalam kod kami, pekali korelasi, cc, dikira mengikut formula dalam angka kelima, di mana y mewakili isyarat rata-rata, garis dasar-berpusat, sedangkan r0 ditakrifkan pada langkah sebelumnya.

Langkah 6: Kod Sumber

Kod sumber C untuk projek ini, diformat untuk Arduino IDE, boleh didapati dari akaun Github kami di pautan berikut:

github.com/aromring/MAX30102_by_RF

Halaman Readme menerangkan komponen individu.

Saya ingin meluangkan masa untuk memuji Adafruit kerana membuat produk yang sangat baik seperti Adalogger yang berpusat di M0. Pemproses ARM Cortex M0 48 MHz yang pantas, dengan banyak RAM, pastinya membantu menjadikan projek ini dapat dilaksanakan, sementara pembaca kad SD yang dilampirkan secara langsung (ditambah dengan perpustakaan SD Adafruit) menghilangkan semua penderita hobi yang berkaitan dengan penyimpanan data dalam masa yang banyak.

Disyorkan: