Giải thuật đo nhịp tim

Một phần của tài liệu Thiết kế và thi công vòng tay đo nhịp tim sử dụng công nghệ iots (Trang 51 - 54)

Để khảo sát nhịp tim, chúng em đã sử dụng mô hình dạng sóng ECG. Dạng sóng này mô tả quá trình hoạt động của tim. Như đã trình bày nguyên lý hoạt động của cảm biến nhịp tim, khi không có nhịp tim tín hiệu có độ lớn khoảng V/2, khi có máu dẫn qua mạch máu, ánh sáng bị hấp thụ, dẫn đến cường độ ánh sáng phản xạ lại LDR yếu đi, qua đó thay đổi dòng ngõ ra và thay đổi biên độ tín hiệu. Mục đích của ta là xác định được chính xác thời điểm tim đập, ít nhất là hai lần đập liên tiếp, gọi là Inter Beat Interval (IBI), sau đó đo thời gian giữa chúng và tính toán BPM.

Dựa vào những nghiên cứu về tim có sẵn, với mỗi nhịp đập của tim, tồn tại một xung chạy xuyên suốt các động mạch đến các mao mạch trong cơ thể, đồng thời thời gian để máu thực hiện một vòng tuần hoàn khắp cơ thể là dài hơn nhiều so với tốc độ truyền dẫn của xung.

Hình 4.8 Dạng sóng ECG trong chu kỳ đập của tim

Theo hình trên, dạng sóng ECG là tuần hoàn. Xét trong một chu kỳ sóng, nó bắt đầu từ điểm T, tăng nhanh đến điểm P, cạnh lên này đặc trưng cho quãng thời gian mà xung truyền ngay dưới cảm biến ta đặt, tiếp theo đó là cạnh xuống, đưa biên độ tín hiệu về mức bình thường (khoảng V/2). Tồn tại 1 điểm cận dưới gọi là Dichrotic Notch, nhưng xét tổng quan, biên độ tín hiệu giảm về mức nhiễu nền trước khi có 1 xung khác xảy ra. Do đây là tín hiệu tuần hoàn, nên ta có thể chọn 1 điểm bất kỳ dễ nhận biết làm mốc đối chiếu, giả dụ như điểm P, để xác định khoảng thời gian giữa 2 xung liền nhau, từ đó tính ra BPM. Tuy nhiên, nhận thấy rằng giữa 2 điểm P, có tồn tại 1 Dichrotic Noth, điều này có thể dẫn đến sai số cho phép đo. Về mặt lý tưởng, ta muốn tìm ra điểm mà tại đó đặc trưng cho thời điểm tức thời ngay khi tim đập, khi đó việc tính toán BPM sẽ giảm thiểu được tối đa sai số. Một số nhà nghiên cứu cho rằng điểm đặc trưng cho thời điểm tức thời khi tim đập rơi vào khoảng trên cạnh lên của sóng ECG, có ý kiến cho rằng đó là vào lúc biên độ tín hiệu đạt 50% độ lớn biên độ điểm P, BPM được tính toán bằng cách lấy trung bình từ 10 giá trị IBI trước đó.

CHƯƠNG 4: THI CÔNG HỆ THỐNG START sampleCounter +=2 N = sampleCounter - lastBeatTime Đọc dữ liệu từ cảm biến Signal < thresh và N > IBI.5/3 Signal < T T = Signal Signal > thresh và Signal > P P = Signal N > 250 Signal > thresh và Pulse = false và N > IBI.5/3 Pulse = true

IBI = sampleCounter – lastBeatTime lastBeatTime = sampleCounter

1 2

1 2

secondBeat = true

secondBeat = false Gán giá trị IBI vào

mảng rate[]

firstBeat = true

secondBeat = true firstBeat = false Gọi hàm sei() – cho phép ngắt hoạt động

Dịch giá trị IBI vào mảng rate[] và tính toán BPM QS = true Signal < thresh và Pulse = true Pulse = false Thresh = (P – T)/2 + T P = T = thresh N > 2500 P = T = thresh = 512 lastBeatTime = sampleCounter firstBeat = true secondBeat = false Gọi hàm sei() – cho phép ngắt

hoạt động END Đ S S Đ Đ Đ Đ Đ Đ Đ Đ Đ Đ Đ S S S S S S S

CHƯƠNG 4: THI CÔNG HỆ THỐNG Giải thích lưu đồ:

 Đầu tiên, đọc tín hiệu analog từ cảm biến, tăng giá trị biến sampleCounter, đây là biến giúp theo dõi thời gian. Biến N nhằm giúp tránh nhiễu.

 Tiếp đó, cần theo dõi giá trị biên độ cao và thấp nhất của tín hiệu, tức điểm P và T (không xét Dichrotic Notch).

 Giá trị thresh được khởi tạo là 512, tức V/2, lưu ý có 1 khoảng thời gian là 3/5, IBI cần được bỏ qua trước khi gán giá trị cho T để tránh việc đọc nhầm điểm Dichrotic Notch.

 Trước khi xác định là có nhịp tim hay không, cần đặt 1 ngưỡng tối thiểu 250mS, tức giá trị BPM sẽ không thể vượt quá 240 BPM. Khi biên độ tín hiệu qua ngưỡng thresh và đã bỏ qua khoảng thời gian là 3/5 IBI, tức ghi nhận có 1 nhịp tim, tiến hành bật cờ Pulse thành true và cho phép LED sáng. Khoảng thời gian từ thời điểm đang xét trở về lastBeatTime ngay trước nó chính là IBI, sau đó cập nhật giá trị mới cho lastBeatTime.

 Biến firstBeat và secondBeat được khởi tạo tuần tự là true và false. Nên hiện tại lần đầu tiên sau khi tìm được nhịp tim và bật cờ Pulse thành true, điều kiện khởi tạo của biến firstBeat sẽ thực thi hàm return, tức ta bỏ không lấy giá trị IBI đầu tiên, nhằm giảm thiểu sai số phép đo (chờ cho hệ thống hoạt động ổn định), tính toán sẽ được thực hiện vào IBI thứ 2.

 Tiếp theo, tính toán giá trị BPM: mảng rate[] được dùng để chứa các giá trị IBI, bỏ đi giá trị IBI cũ nhất (11 beat trước), chuyển giá trị IBI mới nhất vào vị trí thứ 10 trong mảng. Sau khi đã có mảng array[] hoàn chỉnh, việc tính ra BPM là tương đối đơn giản, cuối cùng bật cờ QS thành true, tức hệ thống đã tính ra được giá trị BPM.

 Có Pulse là khi giá trị biên độ rơi vào cạnh lên của dạng sóng, nên khi biên độ tín hiệu dưới ngưỡng thresh và cờ Pulse là true, tức tín hiệu đang ở cạnh xuống, vậy cho tắt LED và đặt lại cờ Pulse thành false, sẵn sàng cho hệ thống tìm beat tiếp theo.

 Trong trường hợp không nhận được tín hiệu, cho hệ thống đặt lại các giá trị như khởi tạo.

Cần lưu ý, giải thuật trên sẽ được nhúng vào khối thu thập dữ liệu bằng hàm ngắt, nhịp tim con người không thể vượt quá 240 BPM, tức HRMAX = 4Hz. Theo đó, cần một tần số đủ nhanh để lấy mẫu tín hiệu chính xác, ở đây chọn f = 500Hz, tức cứ mỗi 2mS, hệ thống sẽ tự động ngắt để thực thi hàm lấy mẫu. Sử dụng ESP8266 với xung clock 16MHz và bộ chia trước 256, tính toán sao cho hàm này được thực thi mỗi 2mS.

Như vậy, lập trình cho bộ đếm đếm từ 0 đến 124 (125 lần), thực thi hàm ngắt, reset lại biến đếm và lại tiếp tục đếm lên 124 cho lần ngắt tiếp theo, cho đúng khoảng

CHƯƠNG 4: THI CÔNG HỆ THỐNG

khác, sử dụng chip cũng như xung clock khác, cần phải thực hiện tính toán cân chỉnh để đảm bảo được tần số lấy mẫu là f = 500Hz.

Một phần của tài liệu Thiết kế và thi công vòng tay đo nhịp tim sử dụng công nghệ iots (Trang 51 - 54)