สารบัญ:

Pulse Oximeter พร้อมความแม่นยำที่ดีขึ้นมาก: 6 ขั้นตอน (พร้อมรูปภาพ)
Pulse Oximeter พร้อมความแม่นยำที่ดีขึ้นมาก: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Pulse Oximeter พร้อมความแม่นยำที่ดีขึ้นมาก: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Pulse Oximeter พร้อมความแม่นยำที่ดีขึ้นมาก: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: CareConnect - คู่มือการใช้งาน Fingertip pulse oximeter 2024, พฤศจิกายน
Anonim
Pulse Oximeter พร้อมความแม่นยำที่ดีขึ้นมาก
Pulse Oximeter พร้อมความแม่นยำที่ดีขึ้นมาก
Pulse Oximeter พร้อมความแม่นยำที่ดีขึ้นมาก
Pulse Oximeter พร้อมความแม่นยำที่ดีขึ้นมาก

หากคุณเพิ่งไปพบแพทย์ มีโอกาสที่สัญญาณชีพพื้นฐานของคุณจะได้รับการตรวจโดยพยาบาล น้ำหนัก ส่วนสูง ความดันโลหิต ตลอดจนอัตราการเต้นของหัวใจ (HR) และความอิ่มตัวของออกซิเจนในเลือดส่วนปลาย (SpO2). บางทีสองอันสุดท้ายได้มาจากโพรบอิเล็กทรอนิกส์ที่เรืองแสงสีแดงซึ่งแสดงตัวเลขที่เกี่ยวข้องบนหน้าจอขนาดเล็กในเวลาไม่กี่นาที โพรบนั้นเรียกว่า pulse oximeter และคุณสามารถค้นหาข้อมูลพื้นฐานทั้งหมดเกี่ยวกับมันได้ที่นี่

คุณสามารถซื้อเครื่องวัดความอิ่มตัวของออกซิเจนในเลือดอย่างง่าย ๆ ได้ แต่ความสนุกมันอยู่ตรงไหน? ฉันได้ตัดสินใจที่จะสร้างด้วยตัวเองก่อนอื่น แต่ที่สำคัญกว่านั้นคือเมื่อคำนึงถึงการใช้งานเฉพาะ: การวัดค่าออกซิเจนในเวลากลางคืนที่ทั้ง HR และ SpO2 ข้อมูลจะถูกเก็บรวบรวมอย่างต่อเนื่องในชั่วข้ามคืนและบันทึกลงในการ์ด micro SD Instructables มีโปรเจ็กต์ประเภทนี้อยู่แล้วหลายโปรเจ็กต์ เช่น สองโปรเจ็กต์ที่เกี่ยวข้องกับ Arduino ที่นี่และที่นี่ และอีกโปรเจ็กต์ที่ใช้ Raspberry Pi Mine ใช้เซ็นเซอร์ MAX30102 ที่ใหม่กว่าเล็กน้อยจาก MAXIM Integrated และ Feather M0 Adalogger ของ Adafruit สำหรับการควบคุมและการบันทึกข้อมูล

โปรเจ็กต์ของเราจึงไม่ใช่นวัตกรรมเฉพาะในแง่ของฮาร์ดแวร์ ดังนั้นจึงไม่คุ้มที่จะเขียนคำแนะนำนี้ แต่ในกระบวนการสร้าง ฉันได้พัฒนาซอฟต์แวร์ที่ก้าวหน้าอย่างมากซึ่งทำให้ฉันสามารถดึงข้อมูลจาก MAX30102 ด้วยความสอดคล้องที่สูงกว่าและมาก เสียงรบกวนน้อยกว่าซอฟต์แวร์ที่เขียนโดย MAXIM สำหรับเซ็นเซอร์นี้ ประสิทธิภาพของอัลกอริธึมการประมวลผลสัญญาณของเราแสดงไว้ในแผนภูมิด้านบน โดยที่กราฟด้านบนสองกราฟด้านบนมีอัตราการเต้นของหัวใจข้ามคืนและความอิ่มตัวของออกซิเจนที่คำนวณจากสัญญาณดิบโดยวิธีการของเรา (ระบุโดย "RF") ในขณะที่กราฟสองกราฟด้านล่างแสดงผลลัพธ์ของ MAXIM ที่สร้างจาก เหมือนกันทุกประการกับสัญญาณ ค่าเบี่ยงเบนมาตรฐานสำหรับ HR คือ 4.7 bpm และ 18.1 bpm และสำหรับ SpO2 0.9% และ 4.4% สำหรับ RF และ MAXIM ตามลำดับ

(กราฟ RF ทั้งสองสอดคล้องกับเกณฑ์ความสัมพันธ์อัตโนมัติขั้นต่ำที่ 0.25 และไม่จำกัดความสัมพันธ์ R / IR ดูขั้นตอนที่ 4 และ 5 สำหรับคำอธิบายของข้อกำหนดเหล่านี้)

ขั้นตอนที่ 1: ฮาร์ดแวร์

ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
  1. เครื่องวัดออกซิเจนในเลือดและเซ็นเซอร์วัดอัตราการเต้นของหัวใจ MAX30102 แผงระบบจาก MAXIM Integrated, Inc.
  2. Feather M0 Adalogger จาก Adafruit, Inc.
  3. แบตเตอรี่ลิเธียมไอออนจาก Adafruit, Inc.

การเชื่อมต่อ:

  • Adalogger ตรึง SCL และ SDA เข้ากับหมุด SCL และ SDA ที่สอดคล้องกันบนบอร์ด MAX30102
  • Adalogger พิน 10 เพื่อตรึง INT บนบอร์ด MAX30102
  • Adalogger GND ถึง MAX30102 บอร์ด GND
  • Adalogger 3V ถึง MAX30102 VIN

ขั้นตอนที่ 2: สัญญาณดิจิตอลที่ส่งคืนโดย MAX30102

สัญญาณดิจิตอลส่งคืนโดย MAX30102
สัญญาณดิจิตอลส่งคืนโดย MAX30102
สัญญาณดิจิตอลส่งคืนโดย MAX30102
สัญญาณดิจิตอลส่งคืนโดย MAX30102

หลักการทำงานของเซนเซอร์นั้นง่ายมาก: ไฟ LED สองดวง ไฟสีแดงหนึ่งดวง (660 นาโนเมตร) และอินฟราเรดหนึ่งดวง (880 นาโนเมตร, IR) ส่องสว่างผ่านผิวหนังของมนุษย์ แสงถูกดูดซับบางส่วนโดยเนื้อเยื่อข้างใต้ รวมทั้งเลือดส่วนปลาย photodetector ของเซนเซอร์รวบรวมแสงสะท้อนที่ความยาวคลื่นทั้งสองและส่งคืนความเข้มสัมพัทธ์สองระดับที่สอดคล้องกันโดยใช้โปรโตคอล I2C เนื่องจากสเปกตรัมการดูดกลืนของฮีโมโกลบินที่เติมออกซิเจนและออกซิเจนจะแตกต่างกันไปตามความยาวคลื่นทั้งสอง แสงสะท้อนจึงมีองค์ประกอบแปรผันตามปริมาณของเลือดแดงที่อยู่ใต้ผิวหนังขณะเต้น การหาอัตราการเต้นของหัวใจและความอิ่มตัวของออกซิเจนนั้นขึ้นอยู่กับซอฟต์แวร์ประมวลผลสัญญาณ

ตัวอย่างของสัญญาณดิบ (ช่อง IR เท่านั้น) แสดงไว้ในภาพด้านบน เราสามารถสังเกตเห็นองค์ประกอบตามระยะที่ซ้อนทับบนเส้นฐานของตัวแปรที่เปลี่ยนแปลงไปเนื่องจากปัจจัยหลายอย่างที่กล่าวถึงในหน้าวิกิพีเดีย สิ่งประดิษฐ์ที่กระตุ้นการเคลื่อนไหวนั้นน่ารำคาญเป็นพิเศษ เนื่องจากอาจปิดบังสัญญาณ HR ที่มีประโยชน์และทำให้เกิดผลลัพธ์ที่หลอกลวง ดังนั้น oximeters เชิงพาณิชย์ขั้นสูงจึงมีมาตรความเร่งที่ช่วยลบล้างสิ่งประดิษฐ์เหล่านี้

ฉันอาจเพิ่มมาตรความเร่งใน oximeter เวอร์ชันถัดไป แต่สำหรับ HR/SpO ตอนกลางคืน2 การบันทึก เมื่อเซ็นเซอร์ไม่เคลื่อนไหวเกือบตลอดเวลา ก็เพียงพอที่จะตรวจจับและละเว้นสัญญาณที่บิดเบี้ยว

เซ็นเซอร์ MAX30102 มาในแพ็คเกจขนาดเล็กที่ติดตั้งบนพื้นผิว แต่ MAXIM ขอเสนอบอร์ดฝ่าวงล้อม (System Board 6300) พร้อมซอฟต์แวร์ประมวลผลสัญญาณสำหรับ Arduino และ mbed อย่างสง่างาม - ทั้งหมดในแพ็คเกจการออกแบบอ้างอิง MAXREFDES117# ฉันซื้อมันอย่างมีความสุขโดยคาดหวังว่าจะบัดกรีสายไฟระหว่างเซ็นเซอร์กับ Adalogger และมี oximeter ที่ใช้งานได้ดีในวันเดียว ฉันปรับซอฟต์แวร์ของ MAXIM เวอร์ชัน RD117_ARDUINO ให้ทำงานบนโปรเซสเซอร์ ARM Cortex M0 ของ Adalogger โดยพื้นฐานแล้ว ทั้งหมดที่ฉันต้องทำคือแทนที่ฟังก์ชัน SofI2C ที่เข้ากันไม่ได้ใน max30102.cpp โดยการเรียกไลบรารี Wire ที่เกี่ยวข้อง รหัสได้รับการคอมไพล์ได้ดีใน Arduino IDE v1.8.5 และทำงานบน M0 โดยไม่มีข้อผิดพลาด ผลสุทธิอย่างไรก็ตามน่าผิดหวัง ในขั้นตอนบทนำ ฉันได้แสดงความแปรปรวนของทั้ง HR และ SpO. ที่สูงมากแล้ว2. แน่นอน บางคนอาจอ้างว่าฉันทำอะไรผิด และนี่ก็เป็นความคิดดั้งเดิมของฉันด้วย อย่างไรก็ตาม ในวิดีโอแนะนำของ MAXIM คุณยังสามารถสังเกตค่า HR ที่แสดงบนหน้าจอได้ นอกจากนี้ ความคิดเห็นด้านล่างวิดีโอยืนยันว่าคนอื่นสังเกตเห็นปรากฏการณ์ที่คล้ายกันเช่นกัน

เพื่อให้เป็นเรื่องสั้น หลังจากการทดลองบางอย่าง ฉันได้พิจารณาแล้วว่าเซ็นเซอร์ทำงานเป็นปกติ และวิธีอื่นในการประมวลผลสัญญาณดิจิทัลทำให้ความเสถียรดีขึ้นมาก วิธีการใหม่นี้ ซึ่งระบุโดย "RF" ได้อธิบายไว้ในขั้นตอนต่อไป

ขั้นตอนที่ 3: การประมวลผลสัญญาณล่วงหน้า

การประมวลผลสัญญาณล่วงหน้า
การประมวลผลสัญญาณล่วงหน้า
การประมวลผลสัญญาณล่วงหน้า
การประมวลผลสัญญาณล่วงหน้า
การประมวลผลสัญญาณล่วงหน้า
การประมวลผลสัญญาณล่วงหน้า
การประมวลผลสัญญาณล่วงหน้า
การประมวลผลสัญญาณล่วงหน้า

ในการใช้งานของเรา สัญญาณดิบจะถูกรวบรวมที่อัตรา 25 Hz (เหมือนกับของ MAXIM) เป็นเวลา 4 วินาทีเต็ม (ซอฟต์แวร์ของ MAXIM รวบรวมมูลค่าเพียง 1 วินาที) ส่งผลให้มีจุดเวลาดิจิทัล 100 จุดต่อจุดข้อมูลปลายทาง แต่ละลำดับ 100 จุดต้องได้รับการประมวลผลล่วงหน้าด้วยวิธีต่อไปนี้:

  1. Mean-centering (a.k.a. "การกำจัดส่วนประกอบ DC" ให้กับวิศวกรไฟฟ้า) ข้อมูลดิบที่มาจากเซ็นเซอร์คืออนุกรมเวลาของจำนวนเต็มใน 105 พิสัย. แต่สัญญาณที่มีประโยชน์นี้เป็นเพียงส่วนหนึ่งของแสงที่สะท้อนจากเลือดแดงซึ่งแตกต่างกันไปตามลําดับเพียง 102 - รูปแรก สำหรับการประมวลผลสัญญาณที่มีความหมาย ดังนั้นจึงควรลบค่าเฉลี่ยออกจากแต่ละจุดอนุกรม ส่วนนี้ไม่แตกต่างจากซอฟต์แวร์ MAXIM ที่ทำอยู่แล้ว อย่างไรก็ตาม สิ่งที่แตกต่างคือการเพิ่มค่าเฉลี่ยศูนย์กลางของดัชนีเวลาเอง กล่าวอีกนัยหนึ่ง แทนที่จะสร้างดัชนีอนุกรมจุดด้วยตัวเลขตั้งแต่ 0 ถึง 99 ดัชนีใหม่ตอนนี้เป็นตัวเลข -49.5, -48.5, …, 49.5 อาจดูแปลกในตอนแรก แต่ด้วยขั้นตอนนี้ "จุดศูนย์ถ่วง" ของเส้นโค้งสัญญาณจึงตรงกับที่มาของระบบพิกัด (รูปที่สอง) ข้อเท็จจริงนี้จะมีประโยชน์มากในขั้นตอนต่อไป
  2. การปรับระดับพื้นฐาน อีกรูปหนึ่งที่รูปคลื่นที่แสดงในขั้นตอนที่ 2 แสดงให้เห็นว่าเส้นฐานของสัญญาณออกซิเจนจริงอยู่ไกลจากการแบนราบในแนวนอน แต่จะแตกต่างกันไปตามความชันที่ต่างกัน รูปที่สามแสดงสัญญาณ IR ที่มีค่าเฉลี่ยอยู่ตรงกลาง (เส้นโค้งสีน้ำเงิน) และเส้นฐาน (เส้นตรงสีน้ำเงิน) ในกรณีนี้ ความชันของเส้นฐานเป็นลบ วิธีการประมวลผลสัญญาณที่อธิบายไว้ข้างหน้ากำหนดให้เส้นฐานเป็นแนวนอน สิ่งนี้สามารถทำได้โดยเพียงแค่ลบเส้นฐานออกจากสัญญาณกึ่งกลาง ต้องขอบคุณค่ากลางของพิกัดทั้ง Y และ X การสกัดกั้นของเส้นฐานจึงเป็นศูนย์และสมการความชันนั้นง่ายมาก ดังแสดงในรูปที่สี่ สัญญาณที่ระดับเส้นฐานแสดงด้วยเส้นโค้งสีส้มในรูปที่ 3

ดังนั้นสัญญาณที่ประมวลผลล่วงหน้าจึงพร้อมสำหรับขั้นตอนต่อไป

ขั้นตอนที่ 4: The Workhorse: ฟังก์ชัน Autocorrelation

The Workhorse: ฟังก์ชัน Autocorrelation
The Workhorse: ฟังก์ชัน Autocorrelation
The Workhorse: ฟังก์ชัน Autocorrelation
The Workhorse: ฟังก์ชัน Autocorrelation
The Workhorse: ฟังก์ชัน Autocorrelation
The Workhorse: ฟังก์ชัน Autocorrelation

ย้อนกลับไปที่ 1, …, n การสร้างดัชนี ตัวเลขแรกแสดงคำจำกัดความของฟังก์ชันความสัมพันธ์อัตโนมัติ rNS - ปริมาณที่พบว่ามีประโยชน์มากในการตรวจจับความสม่ำเสมอของสัญญาณตลอดจนคุณภาพ มันเป็นเพียงผลคูณสเกลาร์ที่ทำให้เป็นมาตรฐานของอนุกรมเวลาของสัญญาณโดยเปลี่ยนตัวเองด้วย lag m อย่างไรก็ตาม ในแอปพลิเคชันของเรา จะสะดวกต่อการปรับขนาดแต่ละค่าความสัมพันธ์อัตโนมัติโดยเทียบกับค่าที่ล่าช้า = 0 กล่าวคือ ใช้ความสัมพันธ์อัตโนมัติแบบสัมพัทธ์ที่กำหนดโดย rNS / NS0.

พล็อตความสัมพันธ์อัตโนมัติแบบสัมพัทธ์ของสัญญาณ IR คุณภาพดีโดยทั่วไปจะแสดงในรูปที่สอง ตามที่คาดไว้ ค่าที่ lag = 0 อยู่ที่ค่าสูงสุดทั่วโลกเท่ากับ 1 ค่าสูงสุดถัดไป (ในเครื่อง) จะเกิดขึ้นที่ lag = 23 และเท่ากับ 0.79 การมีอยู่ของค่าต่ำสุดและค่าสูงสุดของท้องถิ่นในแผนภาพความสัมพันธ์อัตโนมัตินั้นง่ายต่อการเข้าใจ: เนื่องจากสัญญาณเลื่อนไปทางขวา จุดสูงสุดของสัญญาณจะรบกวนกันอย่างทำลายล้างในตอนแรก แต่ ณ จุดหนึ่ง การรบกวนจะกลายเป็นเชิงสร้างสรรค์และบรรลุค่าสูงสุดที่เวลาหน่วงเท่ากับค่าเฉลี่ย ระยะเวลาของสัญญาณ

วลีสุดท้ายมีความสำคัญอย่างยิ่ง: เพื่อกำหนดช่วงเวลาเฉลี่ยระหว่างพีค ซึ่งเราสามารถคำนวณความถี่ของสัญญาณ (เช่น อัตราการเต้นของหัวใจ) ก็เพียงพอแล้วที่จะหาค่าสูงสุดของฟังก์ชันความสัมพันธ์อัตโนมัติในพื้นที่แรก! โดยค่าเริ่มต้น MAX30102 จะสุ่มตัวอย่างอินพุตแบบอะนาล็อกที่อัตรา 25 จุดต่อวินาที ดังนั้น เมื่อ m ช่วงเวลาในหน่วยวินาทีจะเท่ากับ m / 25 ซึ่งนำไปสู่อัตราการเต้นของหัวใจที่แสดงเป็นจังหวะต่อนาที (bpm) โดย:

HR = 60*25 / m = 1500 / m

แน่นอนว่าไม่จำเป็นต้องคำนวณ r. ราคาแพงNS ที่ค่าความล่าช้าทั้งหมด อัลกอริธึมของเราคาดคะเนอัตราการเต้นของหัวใจครั้งแรก = 60 bpm ซึ่งสอดคล้องกับ m = 25 ฟังก์ชันความสัมพันธ์อัตโนมัติจะถูกประเมิน ณ จุดนั้นและเปรียบเทียบกับค่าที่เพื่อนบ้านด้านซ้าย m = 24 หากค่าเพื่อนบ้านสูงกว่า เดินขบวนไปทางซ้ายจนกระทั่ง rม-1 < rNS. ดังนั้น m สุดท้ายที่กำหนดจึงจะถูกส่งกลับเป็นความล่าช้าสูงสุด การวนซ้ำครั้งต่อไปเริ่มจากค่านั้นแทนที่จะเป็น 25 และกระบวนการทั้งหมดจะทำซ้ำ หากเพื่อนบ้านซ้ายคนแรกอยู่ต่ำกว่า การเดินขบวนข้างต้นจะชี้ไปทางขวาในลักษณะเดียวกัน ส่วนใหญ่แล้ว ความล่าช้าสูงสุดต้องการการประเมินฟังก์ชันความสัมพันธ์อัตโนมัติเพียงเล็กน้อย นอกจากนี้ ค่าหน่วงเวลาสูงสุดและต่ำสุดที่ยอมรับได้ (ซึ่งสัมพันธ์กับอัตราการเต้นของหัวใจต่ำสุดและสูงสุดตามลำดับ) จะถูกใช้เป็นค่าจำกัด

ด้านบนทำงานได้ดีมากสำหรับสัญญาณคุณภาพดี แต่โลกแห่งความเป็นจริงนั้นยังห่างไกลจากอุดมคติ สัญญาณบางอย่างออกมาบิดเบี้ยว ส่วนใหญ่เกิดจากวัตถุเคลื่อนไหว สัญญาณดังกล่าวจะแสดงในรูปที่สาม ค่าความเป็นคาบต่ำจะแสดงในรูปของฟังก์ชันความสัมพันธ์อัตโนมัติ เช่นเดียวกับค่าต่ำสุด 0.28 ของค่าสูงสุดในพื้นที่แรกที่ m = 11 เปรียบเทียบกับค่าสูงสุด 0.79 ที่กำหนดสำหรับสัญญาณคุณภาพดี พร้อมกับค่าจำกัดความล่าช้า ดังนั้น ค่าของ rNS / NS0 สูงสุดเป็นตัวบ่งชี้ที่ดีของคุณภาพสัญญาณ และอาจใช้ข้อกำหนดเพื่อให้เกินเกณฑ์ที่กำหนดเพื่อกรองสิ่งแปลกปลอมในการเคลื่อนไหว กราฟ "RF" ที่แสดงในบทนำเป็นผลมาจากเกณฑ์ดังกล่าวเท่ากับ 0.25

ขั้นตอนที่ 5: การกำหนดความอิ่มตัวของออกซิเจน

การหาความอิ่มตัวของออกซิเจน
การหาความอิ่มตัวของออกซิเจน
การหาความอิ่มตัวของออกซิเจน
การหาความอิ่มตัวของออกซิเจน
การหาความอิ่มตัวของออกซิเจน
การหาความอิ่มตัวของออกซิเจน
การหาความอิ่มตัวของออกซิเจน
การหาความอิ่มตัวของออกซิเจน

ขั้นตอนก่อนหน้านี้เพียงพอสำหรับกำหนดอัตราการเต้นของหัวใจ SpO2 ต้องการการทำงานมากขึ้น ก่อนอื่นต้องคำนึงถึงสัญญาณที่ถูกละเลยจนถึงช่องสีแดง (R) ต่อไปจะคำนวณอัตราส่วนของสัญญาณสีแดงต่ออินฟราเรด Z = R/IR ซึ่งสะท้อนจากเลือดแดงทั้งคู่ ส่วน "เลือดแดง" มีความสำคัญ เนื่องจากแสงส่วนใหญ่สะท้อนจากเนื้อเยื่อและเลือดดำจริงๆ จะเลือกส่วนของสัญญาณที่สัมพันธ์กับเลือดแดงได้อย่างไร? นี่คือองค์ประกอบที่กระตุ้นได้ซึ่งแตกต่างกันไปตามการเต้นของหัวใจแต่ละครั้ง ในคำพูดของวิศวกรไฟฟ้า มันคือ "ส่วน AC" ในขณะที่แสงสะท้อนที่เหลือคือ "ส่วน DC" เนื่องจากความเข้มสัมบูรณ์ของแสง R และ IR ไม่เท่ากัน อัตราส่วน Z จึงคำนวณจากความเข้มสัมพัทธ์ ดังแสดงในรูปแรก ในแง่ของปริมาณที่คำนวณได้จริง ฉันใช้ root-mean-square (RMS) ของสัญญาณระดับ baseline-mean-centered y กับค่าเฉลี่ยที่ทราบอยู่แล้วของสัญญาณดิบ < Y >; ดูรูปที่สอง อย่างไรก็ตามอัตราส่วน Z เป็นเพียงครึ่งหนึ่งของงานเท่านั้น การตอบสนองของเซ็นเซอร์ไม่เชิงเส้นต้องมีการสอบเทียบเชิงประจักษ์ระหว่าง Z และ SpO. สุดท้าย2 ค่า ฉันเอาสมการการสอบเทียบจากรหัสของ MAXIM:

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

โปรดทราบว่าสมการนี้ใช้ได้กับบอร์ดออกแบบ MAX30102 ที่ซื้อในปี 2560 เท่านั้น! มีแนวโน้มว่า MAXIM อาจปรับเทียบเซ็นเซอร์ใหม่ในภายหลัง

ขั้นตอนข้างต้นยังคงสร้าง SpO. เท็จจำนวนมาก2 การอ่าน ช่องสีแดงทนทุกข์ทรมานจากสิ่งประดิษฐ์มากมายเช่นเดียวกับ IR มีเหตุผลที่จะสมมติว่าสัญญาณทั้งสองควรมีความสัมพันธ์กันอย่างแน่นหนา อันที่จริง สัญญาณคุณภาพดี เช่นตัวอย่างในรูปที่สาม มีความสัมพันธ์กันเป็นอย่างดี ค่าสัมประสิทธิ์สหสัมพันธ์แบบเพียร์สันในกรณีนี้จะสูงถึง 0.99 ซึ่งไม่ได้เป็นเช่นนั้นเสมอไป ดังที่แสดงในรูปที่สี่ แม้ว่าสัญญาณ IR จะผ่านตัวกรองคุณภาพอัตราการเต้นของหัวใจด้วย rNS / NS0 = 0.76 สัญญาณ R ที่บิดเบี้ยวส่งผลให้ค่าสัมประสิทธิ์สหสัมพันธ์ที่ไม่ดีระหว่างทั้งสองมีค่าเท่ากับ 0.42 เท่านั้น การสังเกตนี้เสนอตัวกรองคุณภาพที่สอง: มีค่าสัมประสิทธิ์สหสัมพันธ์ระหว่างแชนเนลมากกว่าเกณฑ์ที่กำหนด

สองตัวเลขสุดท้ายเป็นตัวอย่างผลกระทบสุทธิของการกรองคุณภาพดังกล่าว อย่างแรก ความอิ่มตัวของออกซิเจนที่วัดได้จะถูกพล็อตด้วยเกณฑ์คุณภาพ HR ที่ 0.25 แต่ไม่มี SpO2 กรอง. พล็อตถัดไปเป็นผลมาจากการกรอง HR และ SpO. ที่ไม่ดี2 ผลลัพธ์ที่ 0.5 rNS / NS0 และ 0.8 เกณฑ์สัมประสิทธิ์สหสัมพันธ์ โดยรวมแล้ว จุดข้อมูลที่ไม่ดีซึ่งคิดเป็น 12% ของทั้งหมดถูกกรองออกโดยระบอบการปกครองที่เข้มงวดกว่า

ในโค้ดของเรา ค่าสัมประสิทธิ์สหสัมพันธ์ cc คำนวณตามสูตรในรูปที่ห้า โดยที่ y แทนสัญญาณระดับพื้นฐานที่มีค่าเฉลี่ยอยู่ตรงกลาง ในขณะที่ r0 กำหนดไว้ในขั้นตอนที่แล้ว

ขั้นตอนที่ 6: รหัสที่มา

ซอร์สโค้ด C สำหรับโปรเจ็กต์นี้ ซึ่งจัดรูปแบบสำหรับ Arduino IDE มีให้จากบัญชี Github ของเราที่ลิงก์ต่อไปนี้:

github.com/aromring/MAX30102_by_RF

หน้า Readme อธิบายส่วนประกอบแต่ละส่วน

ฉันต้องการใช้เวลาสักครู่เพื่อยกย่อง Adafruit สำหรับการสร้างผลิตภัณฑ์ที่ยอดเยี่ยมเช่น Adalogger ที่ใช้ M0 โปรเซสเซอร์ ARM Cortex M0 ความเร็ว 48 MHz ที่มี RAM จำนวนมาก ช่วยให้โปรเจ็กต์นี้ทำงานได้ ในขณะที่เครื่องอ่านการ์ด SD ที่เชื่อมต่อโดยตรง (รวมถึงไลบรารี SD ของ Adafruit) ขจัดความเจ็บปวดจากงานอดิเรกทั้งหมดที่เกี่ยวข้องกับการจัดเก็บข้อมูลจำนวนมากแบบเรียลไทม์

แนะนำ: