Mục lục:

Máy đo oxy xung với độ chính xác được cải thiện nhiều: 6 bước (có hình ảnh)
Máy đo oxy xung với độ chính xác được cải thiện nhiều: 6 bước (có hình ảnh)

Video: Máy đo oxy xung với độ chính xác được cải thiện nhiều: 6 bước (có hình ảnh)

Video: Máy đo oxy xung với độ chính xác được cải thiện nhiều: 6 bước (có hình ảnh)
Video: Chỉ số SpO2 bao nhiêu là bình thường? 2024, Tháng bảy
Anonim
Máy đo oxy xung với độ chính xác được cải thiện nhiều
Máy đo oxy xung với độ chính xác được cải thiện nhiều
Máy đo oxy xung với độ chính xác được cải thiện nhiều
Máy đo oxy xung với độ chính xác được cải thiện nhiều

Nếu gần đây bạn đã đến gặp bác sĩ, rất có thể các dấu hiệu quan trọng cơ bản của bạn đã được y tá kiểm tra. Cân nặng, chiều cao, huyết áp, cũng như nhịp tim (HR) và độ bão hòa oxy trong máu ngoại vi (SpO2). Có lẽ, hai chiếc cuối cùng thu được từ một đầu dò ngón tay điện tử phát sáng màu đỏ hiển thị các số liên quan trên một màn hình nhỏ trong vài phút. Đầu dò đó được gọi là máy đo oxy xung và bạn có thể tìm thấy tất cả thông tin cơ bản về nó tại đây.

Chắc chắn rồi, người ta có thể dễ dàng mua một chiếc máy đo oxy xung đơn giản, nhưng thú vị ở nó là ở đâu? Tôi đã quyết định xây dựng của riêng mình, trước tiên là vì nó, nhưng quan trọng hơn là với một ứng dụng cụ thể trong tâm trí: đo oxi về đêm trong đó cả HR và SpO2 dữ liệu sẽ liên tục được thu thập qua đêm và được ghi lại trên thẻ micro SD. Các tài liệu hướng dẫn đã chứa một số dự án thuộc loại này, ví dụ: hai dự án liên quan đến Arduino ở đây và ở đây, và một sử dụng Raspberry Pi. Của tôi sử dụng cảm biến mới hơn một chút MAX30102 từ MAXIM Integrated và Adalogger Feather M0 của Adafruit để điều khiển và ghi dữ liệu.

Do đó, dự án của chúng tôi không có gì đặc biệt sáng tạo về phần cứng và như vậy sẽ không đáng để viết bài Có thể hướng dẫn này, nhưng trong quá trình tạo ra nó, tôi đã đạt được những tiến bộ quan trọng trong phần mềm cho phép tôi trích xuất dữ liệu từ MAX30102 với tính nhất quán cao hơn và nhiều ít nhiễu hơn phần mềm do MAXIM viết cho cảm biến này. Hiệu suất của thuật toán xử lý tín hiệu của chúng tôi được minh họa trong biểu đồ trên, trong đó hai biểu đồ trên cùng chứa nhịp tim qua đêm và độ bão hòa oxy được tính toán từ các tín hiệu thô bằng phương pháp của chúng tôi (được xác định bằng "RF"), trong khi hai biểu đồ dưới cùng hiển thị kết quả của MAXIM được tạo ra từ chính xác các tín hiệu giống nhau. Độ lệch chuẩn đối với HR là 4,7 bpm và 18,1 bpm, và cho SpO2 0,9% và 4,4%, tương ứng cho RF và MAXIM.

(Cả hai đồ thị RF đều tương ứng với ngưỡng tự tương quan tối thiểu là 0,25 và không có giới hạn về tương quan R / IR; xem Bước 4 và 5 để giải thích về các thuật ngữ này.)

Bước 1: Phần cứng

Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng
  1. Máy đo oxy xung và cảm biến nhịp tim Bo mạch hệ thống MAX30102 của MAXIM Integrated, Inc.
  2. Feather M0 Adalogger từ Adafruit, Inc.
  3. Pin Lithium Ion của Adafruit, Inc.

Kết nối:

  • Adalogger ghim chân SCL và SDA vào chân SCL và SDA tương ứng trên bo mạch MAX30102
  • Chân 10 của Adalogger để ghim INT trên bo mạch MAX30102
  • Bảng quảng cáo GND đến MAX30102 GND
  • Adalogger 3V đến MAX30102 VIN

Bước 2: Tín hiệu kỹ thuật số được trả về bởi MAX30102

Tín hiệu kỹ thuật số do MAX30102 trả về
Tín hiệu kỹ thuật số do MAX30102 trả về
Tín hiệu kỹ thuật số do MAX30102 trả về
Tín hiệu kỹ thuật số do MAX30102 trả về

Nguyên tắc hoạt động của cảm biến rất đơn giản: hai đèn LED, một màu đỏ (660 nm) và một tia hồng ngoại (880 nm, IR) chiếu ánh sáng qua da người. Ánh sáng được hấp thụ một phần bởi các mô bên dưới, bao gồm cả máu ngoại vi. Bộ tách sóng quang của cảm biến thu thập ánh sáng phản xạ ở cả hai bước sóng và trả về hai cường độ tương đối tương ứng bằng cách sử dụng giao thức I2C. Vì quang phổ hấp thụ của hemoglobin được oxy hóa và khử oxy khác nhau đối với cả hai bước sóng, nên ánh sáng phản xạ có một thành phần thay đổi là lượng máu động mạch hiện diện dưới da đập theo mỗi nhịp tim. Việc xác định nhịp tim và độ bão hòa oxy phụ thuộc vào phần mềm xử lý tín hiệu.

Ví dụ về tín hiệu thô (chỉ kênh IR) được minh họa trong các hình ảnh trên. Người ta có thể nhận thấy một thành phần tuần hoàn được phủ lên trên một đường cơ sở thay đổi đang thay đổi do nhiều yếu tố được đề cập trong trang Wikipedia. Tạo tác do chuyển động gây ra đặc biệt khó chịu vì chúng có thể che dấu tín hiệu HR hữu ích và gây ra kết quả không có thật. Do đó, các máy đo oxy thương mại tiên tiến có tính năng gia tốc kế giúp vô hiệu hóa những đồ tạo tác này.

Tôi có thể thêm một máy đo gia tốc vào phiên bản tiếp theo của máy đo oxi của mình, nhưng đối với HR / SpO về đêm2 ghi âm, khi cảm biến không chuyển động trong hầu hết thời gian, nó đủ để phát hiện và bỏ qua các tín hiệu bị méo.

Bản thân cảm biến MAX30102 đi kèm trong một gói nhỏ gắn trên bề mặt, nhưng MAXIM ân cần cung cấp một bảng đột phá (Bảng hệ thống 6300) cùng với phần mềm xử lý tín hiệu cho Arduino và mbed - tất cả đều nằm trong gói thiết kế tham chiếu MAXREFDES117 #. Tôi rất vui khi mua nó với hy vọng chỉ cần hàn một số dây giữa cảm biến và Adalogger và có một máy đo oxi hoạt động tốt trong một ngày. Tôi đã điều chỉnh phiên bản RD117_ARDUINO của phần mềm MAXIM để chạy trên bộ xử lý ARM Cortex M0 của Adalogger. Về cơ bản, tất cả những gì tôi phải làm là thay thế các hàm SofI2C không tương thích trong max30102.cpp bằng các lệnh gọi thư viện Wire tương ứng. Mã được biên dịch tốt trong Arduino IDE v1.8.5 và chạy trên M0 mà không có bất kỳ lỗi nào. Kết quả ròng, tuy nhiên, thật đáng thất vọng. Trong bước Giới thiệu, tôi đã chỉ ra phương sai rất cao của cả HR và SpO2. Đương nhiên, người ta có thể cho rằng tôi đã làm sai điều gì đó và đây cũng là suy nghĩ ban đầu của tôi. Tuy nhiên, trong video hướng dẫn của MAXIM, bạn cũng có thể quan sát các giá trị nhịp tim dao động dữ dội hiển thị trên màn hình. Hơn nữa, các bình luận bên dưới video xác nhận rằng những người khác cũng nhận thấy một hiện tượng tương tự.

Để ngắn gọn lại, sau một số thử nghiệm, tôi đã xác định rằng cảm biến đang hoạt động tốt và một phương pháp xử lý tín hiệu kỹ thuật số thay thế mang lại sự ổn định tốt hơn nhiều. Phương pháp mới này, được chỉ định bởi "RF", được mô tả trong các bước tiếp theo.

Bước 3: Tiền xử lý tín hiệu

Tiền xử lý tín hiệu
Tiền xử lý tín hiệu
Tiền xử lý tín hiệu
Tiền xử lý tín hiệu
Tiền xử lý tín hiệu
Tiền xử lý tín hiệu
Tiền xử lý tín hiệu
Tiền xử lý tín hiệu

Trong quá trình triển khai của chúng tôi, tín hiệu thô được thu thập ở tốc độ 25 Hz (giống như của MAXIM) trong 4 giây đầy đủ (phần mềm của MAXIM chỉ thu thập giá trị 1 giây), dẫn đến 100 điểm thời gian được số hóa cho mỗi điểm dữ liệu kết thúc. Mỗi chuỗi 100 điểm phải được xử lý trước theo cách sau:

  1. Trung tâm (hay còn gọi là "loại bỏ thành phần DC" đối với các kỹ sư điện). Dữ liệu thô đến từ cảm biến là một chuỗi thời gian của các số nguyên trong 105 phạm vi. Tuy nhiên, tín hiệu hữu ích chỉ là một phần ánh sáng phản xạ từ máu động mạch, chỉ thay đổi theo thứ tự 102 - hình đầu tiên. Vì vậy, để xử lý tín hiệu có ý nghĩa, nên trừ giá trị trung bình của mỗi điểm chuỗi. Phần này không khác gì phần mềm MAXIM đã làm. Tuy nhiên, điều khác biệt là sự tập trung bổ sung của chính các chỉ số thời gian. Nói cách khác, thay vì lập chỉ mục chuỗi điểm theo các số từ 0 đến 99, các chỉ số mới hiện là các số -49,5, -48,5,…, 49,5. Thoạt nghe có vẻ kỳ lạ, nhưng nhờ quy trình này mà "trọng tâm" của đường cong tín hiệu trùng với điểm gốc của hệ tọa độ (hình thứ hai). Thực tế này trở nên khá hữu ích trong bước tiếp theo.
  2. San lấp mặt bằng cơ sở. Một cái nhìn khác về các dạng sóng được hiển thị trong Bước 2 minh họa rằng đường cơ sở của các tín hiệu đo oxy thực sự không bằng phẳng theo chiều ngang, mà thay đổi theo các độ dốc khác nhau. Hình thứ ba cho thấy tín hiệu IR trung tâm (đường cong màu xanh lam) và đường cơ sở của nó (đường thẳng màu xanh lam). Trong trường hợp này, độ dốc của đường cơ sở là âm. Phương pháp xử lý tín hiệu được mô tả ở trên yêu cầu đường cơ sở phải nằm ngang. Điều này có thể đạt được bằng cách trừ đường cơ sở khỏi tín hiệu trung tâm. Nhờ vào trung tâm của cả tọa độ Y và X, điểm chặn của đường cơ sở bằng 0 và phương trình độ dốc của nó đặc biệt đơn giản, như thể hiện trong hình thứ tư. Tín hiệu mức cơ sở được hiển thị bằng đường cong màu cam trong hình thứ ba.

Như vậy tín hiệu tiền xử lý đã sẵn sàng cho bước tiếp theo.

Bước 4: Workhorse: Chức năng tự tương quan

Workhorse: Chức năng tự tương quan
Workhorse: Chức năng tự tương quan
Workhorse: Chức năng tự tương quan
Workhorse: Chức năng tự tương quan
Workhorse: Chức năng tự tương quan
Workhorse: Chức năng tự tương quan

Quay trở lại lập chỉ mục 1,…, n thông thường, hình đầu tiên cho thấy định nghĩa của hàm tự tương quan rNS - một đại lượng được cho là rất hữu ích trong việc phát hiện tính chu kỳ cũng như chất lượng của tín hiệu. Nó chỉ đơn giản là một sản phẩm vô hướng chuẩn hóa của chuỗi thời gian của tín hiệu với độ trễ m tự dịch chuyển. Tuy nhiên, trong ứng dụng của chúng tôi, rất tiện lợi khi chia tỷ lệ từng giá trị tự tương quan đối với giá trị của nó tại lag = 0, tức là sử dụng tự tương quan được xác định bởi rNS / NS0.

Đồ thị của tự tương quan tương đối của một tín hiệu IR chất lượng tốt điển hình được thể hiện trong hình thứ hai. Như mong đợi, giá trị của nó tại lag = 0 ở mức tối đa toàn cầu bằng 1. Giá trị tối đa (cục bộ) tiếp theo xảy ra ở lag = 23 và bằng 0,79. Sự hiện diện của cực tiểu và cực đại cục bộ trong biểu đồ tự tương quan rất dễ hiểu: khi tín hiệu dịch chuyển sang phải các đỉnh của nó lúc đầu giao thoa triệt tiêu với nhau, nhưng tại một số điểm giao thoa trở nên có tính xây dựng và đạt được cực đại ở độ trễ bằng mức trung bình chu kỳ của tín hiệu.

Cụm từ cuối cùng rất quan trọng: để xác định khoảng thời gian trung bình giữa các đỉnh, từ đó người ta có thể tính tần số của tín hiệu (tức là nhịp tim), thì đủ để tìm giá trị cực đại cục bộ đầu tiên của hàm tự tương quan! Theo mặc định, MAX30102 lấy mẫu đầu vào tương tự với tốc độ 25 điểm mỗi giây, do đó tại m cho trước, khoảng thời gian tính bằng giây bằng m / 25. Điều này dẫn đến nhịp tim được biểu thị bằng nhịp mỗi phút (bpm) bằng:

HR = 60 * 25 / m = 1500 / m

Tất nhiên, không cần thiết phải thực hiện các phép tính tốn kém của rNS ở tất cả các giá trị độ trễ. Thuật toán của chúng tôi đưa ra dự đoán đầu tiên về nhịp tim = 60 bpm, tương ứng với m = 25. Hàm tự tương quan được đánh giá tại điểm đó và so sánh với giá trị tại hàng xóm bên trái của nó, m = 24. Nếu giá trị lân cận cao hơn, thì hành quân tiếp tục sang trái cho đến rm-1 <rNS. Do đó, m cuối cùng được xác định sau đó được trả về là độ trễ tối đa. Lần lặp tiếp theo bắt đầu từ giá trị đó thay vì 25 và toàn bộ quá trình lặp lại. Nếu người hàng xóm bên trái đầu tiên thấp hơn, thì quy trình trên sẽ di chuyển độ trễ sang bên phải theo cách tương tự. Hầu hết thời gian, độ trễ ở mức tối đa chỉ yêu cầu một vài đánh giá của chức năng tự tương quan. Ngoài ra, độ trễ tối đa và tối thiểu có thể chấp nhận được (tương ứng với nhịp tim tối thiểu và tối đa, tương ứng) được sử dụng làm giá trị giới hạn.

Những điều trên hoạt động rất tốt cho tín hiệu chất lượng tốt, nhưng thế giới thực khác xa lý tưởng. Một số tín hiệu phát ra bị méo, chủ yếu là do hiện tượng chuyển động. Một tín hiệu như vậy được thể hiện trong hình thứ ba. Tính tuần hoàn kém được phản ánh trong hình dạng của hàm tự tương quan cũng như ở giá trị thấp, 0,28, của giá trị cực đại cục bộ đầu tiên tại m = 11. So sánh với giá trị lớn nhất 0,79 được xác định cho tín hiệu chất lượng tốt. Do đó, cùng với các giá trị giới hạn độ trễ, giá trị của rNS / NS0 ở mức tối đa là một chỉ báo tốt về chất lượng tín hiệu và yêu cầu nó phải vượt quá ngưỡng nhất định có thể được sử dụng để lọc ra các hiện vật chuyển động. Đồ thị "RF" được hiển thị trong phần giới thiệu cho kết quả từ ngưỡng như vậy bằng 0,25.

Bước 5: Xác định độ bão hòa oxy

Xác định độ bão hòa oxy
Xác định độ bão hòa oxy
Xác định độ bão hòa oxy
Xác định độ bão hòa oxy
Xác định độ bão hòa oxy
Xác định độ bão hòa oxy
Xác định độ bão hòa oxy
Xác định độ bão hòa oxy

Bước trước đó là đủ để xác định nhịp tim. SpO2 đòi hỏi nhiều công việc hơn. Đầu tiên, tín hiệu bị bỏ quên cho đến nay trong kênh màu đỏ (R) phải được tính đến. Tiếp theo, tỷ lệ tín hiệu đỏ và hồng ngoại, Z = R / IR, cả hai phản xạ khỏi máu động mạch, được tính toán. Phần "máu động mạch" rất quan trọng, vì hầu hết ánh sáng thực sự bị phản xạ khỏi các mô và máu tĩnh mạch. Làm thế nào để chọn một phần tín hiệu tương ứng với máu động mạch? Đây là thành phần linh hoạt thay đổi theo từng nhịp tim. Theo cách nói của các kỹ sư điện, đó là "phần AC", còn phần ánh sáng phản xạ còn lại là "phần DC". Vì cường độ tuyệt đối của R và ánh sáng IR không tương xứng, tỷ lệ Z được tính từ các cường độ tương đối, như thể hiện trong hình đầu tiên. Về các đại lượng được tính toán thực tế, tôi sử dụng căn bậc hai (RMS) của tín hiệu mức cơ sở, trung bình, y, cho giá trị trung bình đã biết của tín hiệu thô, <Y>; xem hình thứ hai. Tuy nhiên, tỷ lệ Z chỉ là một nửa của công việc. Phản hồi của cảm biến phi tuyến yêu cầu hiệu chuẩn theo kinh nghiệm giữa Z và SpO cuối cùng2 các giá trị. Tôi đã lấy phương trình hiệu chuẩn từ mã của MAXIM:

SpO2 = (-45,06 * Z + 30,354) * Z + 94,845

Hãy nhớ rằng phương trình này chỉ hợp lệ cho bảng thiết kế MAX30102 được mua vào năm 2017! Có khả năng MAXIM có thể hiệu chỉnh lại các cảm biến của nó vào một ngày sau đó.

Quy trình trên vẫn tạo ra rất nhiều SpO sai2 các bài đọc. Kênh màu đỏ có nhiều hiện vật, giống như kênh IR. Sẽ là hợp lý khi cho rằng cả hai tín hiệu nên có mối tương quan chặt chẽ với nhau. Trên thực tế, các tín hiệu chất lượng tốt, như ví dụ trong hình thứ ba, có mối tương quan rất tốt. Trong trường hợp này, hệ số tương quan Pearson cao tới 0,99. Điều này không phải luôn luôn như vậy, như được minh họa trong hình thứ tư. Mặc dù tín hiệu IR sẽ vượt qua bộ lọc chất lượng nhịp tim với rNS / NS0 = 0,76, tín hiệu R bị méo dẫn đến hệ số tương quan giữa hai yếu tố này chỉ bằng 0,42. Quan sát này đưa ra bộ lọc chất lượng thứ hai: có hệ số tương quan giữa các kênh lớn hơn ngưỡng nhất định.

Hai số liệu cuối cùng minh họa hiệu quả ròng của việc lọc chất lượng như vậy. Đầu tiên, độ bão hòa oxy đo được được vẽ với ngưỡng chất lượng HR là 0,25, nhưng không có SpO2 lọc. Biểu đồ tiếp theo kết quả từ việc lọc ra HR và SpO kém2 kết quả ở mức 0,5 rNS / NS0 và 0,8 ngưỡng hệ số tương quan. Nhìn chung, các điểm dữ liệu kém chiếm tới 12% tổng số đã được lọc ra bởi một chế độ nghiêm ngặt hơn.

Trong mã của chúng tôi, hệ số tương quan, cc, được tính theo công thức trong hình thứ năm, trong đó y đại diện cho tín hiệu ở mức trung bình, mức cơ sở, trong khi r0 đã được xác định ở bước trước.

Bước 6: Mã nguồn

Mã nguồn C cho dự án này, được định dạng cho Arduino IDE, có sẵn từ tài khoản Github của chúng tôi tại liên kết sau:

github.com/aromring/MAX30102_by_RF

Trang Readme của nó mô tả các thành phần riêng lẻ.

Tôi muốn dành một chút thời gian để khen ngợi Adafruit vì đã tạo ra một sản phẩm xuất sắc như Người quảng cáo dựa trên M0. Bộ xử lý ARM Cortex M0 48 MHz nhanh chóng, với nhiều RAM, chắc chắn đã giúp dự án này khả thi, trong khi đầu đọc thẻ SD được gắn trực tiếp (cộng với thư viện SD của Adafruit) loại bỏ tất cả những khó khăn của người yêu thích liên quan đến việc lưu trữ lượng lớn dữ liệu theo thời gian thực.

Đề xuất: