可穿戴設(shè)備生物信號(hào)采集:PPG心率檢測(cè)的抗運(yùn)動(dòng)干擾方案
隨著可穿戴設(shè)備的普及,生物信號(hào)采集技術(shù),尤其是光電容積脈搏波描記法(PPG)在心率檢測(cè)中的應(yīng)用日益廣泛。然而,運(yùn)動(dòng)干擾一直是PPG心率檢測(cè)面臨的一大挑戰(zhàn)。運(yùn)動(dòng)過(guò)程中,肢體的移動(dòng)會(huì)導(dǎo)致光信號(hào)的變化,從而影響心率檢測(cè)的準(zhǔn)確性。本文將深入探討PPG心率檢測(cè)的抗運(yùn)動(dòng)干擾方案,并提供一種基于算法優(yōu)化的解決方案,輔以代碼示例。
一、PPG心率檢測(cè)原理及運(yùn)動(dòng)干擾問(wèn)題
PPG心率檢測(cè)通過(guò)向皮膚發(fā)射光波(通常為綠光),利用血液容積隨心臟律動(dòng)呈搏動(dòng)性變化,光感應(yīng)器接收的光強(qiáng)也隨之變化,進(jìn)而通過(guò)模擬前端芯片將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),提取出心率信息。然而,運(yùn)動(dòng)干擾會(huì)導(dǎo)致光信號(hào)的變化,使得接收到的光強(qiáng)變化不再單純由血液容積變化引起,從而引入誤差。
二、抗運(yùn)動(dòng)干擾方案
為了克服運(yùn)動(dòng)干擾對(duì)PPG心率檢測(cè)的影響,需要從硬件和軟件兩方面入手。硬件方面,可以通過(guò)優(yōu)化PPG傳感器的光路結(jié)構(gòu)設(shè)計(jì)、采用更穩(wěn)定的光源和光感應(yīng)器等措施來(lái)提高信號(hào)的穩(wěn)定性和抗干擾能力。然而,軟件算法的優(yōu)化在抗運(yùn)動(dòng)干擾方面同樣至關(guān)重要。
信號(hào)預(yù)處理:首先,對(duì)原始PPG信號(hào)進(jìn)行濾波處理,去除高頻噪聲和低頻漂移??梢圆捎脭?shù)字帶通濾波器或自適應(yīng)濾波器等方法,保留與心率相關(guān)的頻段信號(hào)。
運(yùn)動(dòng)干擾檢測(cè)與補(bǔ)償:通過(guò)加速度計(jì)等傳感器檢測(cè)人體的運(yùn)動(dòng)狀態(tài),結(jié)合PPG信號(hào)的變化,識(shí)別出運(yùn)動(dòng)干擾的時(shí)段。在識(shí)別出運(yùn)動(dòng)干擾后,可以采用信號(hào)重建、信號(hào)插值或基于機(jī)器學(xué)習(xí)的補(bǔ)償算法來(lái)恢復(fù)被干擾的心率信號(hào)。
心率算法優(yōu)化:針對(duì)PPG信號(hào)的特點(diǎn),采用更精確的心率提取算法。例如,基于峰值檢測(cè)的心率提取算法,通過(guò)識(shí)別PPG信號(hào)的波峰來(lái)計(jì)算心率。為了提高準(zhǔn)確性,可以結(jié)合多個(gè)波峰的平均值或采用更復(fù)雜的波形分析方法。
三、基于算法優(yōu)化的解決方案
下面提供一種基于加速度計(jì)和PPG信號(hào)融合的抗運(yùn)動(dòng)干擾心率檢測(cè)算法示例。該算法通過(guò)加速度計(jì)檢測(cè)運(yùn)動(dòng)狀態(tài),結(jié)合PPG信號(hào)的變化,識(shí)別出運(yùn)動(dòng)干擾的時(shí)段,并采用信號(hào)插值的方法恢復(fù)被干擾的心率信號(hào)。
python
import numpy as np
import pandas as pd
# 模擬PPG信號(hào)(包含運(yùn)動(dòng)干擾)
ppg_signal = np.sin(2 * np.pi * 1.0 * np.linspace(0, 10, 1000)) + 0.5 * np.random.randn(1000)
# 模擬加速度計(jì)信號(hào)(運(yùn)動(dòng)干擾)
accelerometer_signal = np.zeros(1000)
accelerometer_signal[500:600] = 1.0 # 模擬運(yùn)動(dòng)干擾時(shí)段
# 信號(hào)預(yù)處理(濾波)
def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
nyquist = 0.5 * fs
low = lowcut / nyquist
high = highcut / nyquist
b, a = butter(order, [low, high], btype='band')
y = lfilter(b, a, data)
return y
ppg_signal_filtered = butter_bandpass_filter(ppg_signal, 0.5, 2.0, 10.0)
# 運(yùn)動(dòng)干擾檢測(cè)與補(bǔ)償
def detect_motion_artifacts(accelerometer_signal, threshold=0.5):
motion_artifacts = accelerometer_signal > threshold
return motion_artifacts
motion_artifacts = detect_motion_artifacts(accelerometer_signal)
# 信號(hào)插值恢復(fù)被干擾的心率信號(hào)
def interpolate_signal(signal, artifacts):
interpolated_signal = signal.copy()
for i in range(1, len(artifacts) - 1):
if artifacts[i] and not artifacts[i - 1] and not artifacts[i + 1]:
interpolated_signal[i] = (signal[i - 1] + signal[i + 1]) / 2
return interpolated_signal
ppg_signal_restored = interpolate_signal(ppg_signal_filtered, motion_artifacts)
# 心率提?。ɑ诜逯禉z測(cè))
def extract_heart_rate(signal, fs):
peaks, _ = find_peaks(signal, height=0)
heart_rate = len(peaks) / (len(signal) / fs)
return heart_rate
heart_rate = extract_heart_rate(ppg_signal_restored, 10.0)
print(f"心率:{heart_rate:.2f} 次/分鐘")
四、結(jié)論
通過(guò)結(jié)合加速度計(jì)和PPG信號(hào),采用信號(hào)預(yù)處理、運(yùn)動(dòng)干擾檢測(cè)與補(bǔ)償以及心率算法優(yōu)化等措施,可以有效提高PPG心率檢測(cè)的抗運(yùn)動(dòng)干擾能力。隨著可穿戴設(shè)備和傳感器技術(shù)的不斷發(fā)展,以及算法的不斷優(yōu)化,未來(lái)的PPG心率檢測(cè)將更加準(zhǔn)確、穩(wěn)定,為人們的健康監(jiān)測(cè)提供更多便利。