Python实现HRV特征提取
2024.02.18 05:58浏览量:10简介:本文将介绍如何使用Python进行HRV特征提取,包括计算心率变异性时域、频域和时频域特征。通过这些特征,可以对心脏自主神经系统的功能进行评估,从而了解心脏健康状况。
千帆应用开发平台“智能体Pro”全新上线 限时免费体验
面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用
心率变异性(HRV)是指心脏节律性跳动过程中,相邻心跳之间的微小差异。HRV分析是一种评估心脏自主神经系统功能的有效方法,通过对HRV的测量和分析,可以了解心脏健康状况。
在Python中,可以使用各种库来提取HRV特征。其中,常用的库包括pandas
、numpy
和scipy
等。
以下是一个简单的Python代码示例,用于提取HRV特征:
import pandas as pd
import numpy as np
from scipy.signal import find_peaks
# 读取心率数据
df = pd.read_csv('heart_rate.csv', header=None)
# 计算RR间期
RR = np.diff(df[0])
# 计算时域特征
mean_RR = np.mean(RR)
SDNN = np.std(RR)
RMSSD = np.sqrt(np.mean((RR - mean_RR) ** 2))
NN50 = len([x for x in RR if x > mean_RR + SDNN])
pNN50 = NN50 / (len(RR) - 1) * 100
# 计算频域特征
f, Pxx = scipy.signal.welch(RR, fs=300, nperseg=1024) # 使用Welch方法计算功率谱密度
LF = np.sum(Pxx[30:70]) # 低频功率(0.04-0.15Hz)
HF = np.sum(Pxx[150:250]) # 高频功率(0.15-0.4Hz)
LF/HF ratio = LF / HF if HF != 0 else 0
# 计算时频域特征
powers, frequencies, time = scipy.signal.cwt(RR, np.arange(1, 31), 'morl') # 使用连续小波变换计算时频谱密度
LF_power = np.sum(powers[np.where((frequencies >= 0.04) & (frequencies <= 0.15))]) # 时频域低频功率(0.04-0.15Hz)
HF_power = np.sum(powers[np.where((frequencies >= 0.15) & (frequencies <= 0.4))]) # 时频域高频功率(0.15-0.4Hz)
LF/HF ratio_timefreq = LF_power / HF_power if HF_power != 0 else 0
以上代码中,我们首先读取心率数据,然后计算了HRV的时域、频域和时频域特征。在时域特征中,我们计算了平均RR间期、标准差SDNN、RMSSD和NN50以及pNN50。在频域特征中,我们使用了Welch方法计算了功率谱密度,并提取了低频和高频功率。在时频域特征中,我们使用了连续小波变换(CWT)计算了时频谱密度,并提取了低频和高频功率。最后,我们计算了LF/HF比率作为评估心脏自主神经系统功能的指标。
需要注意的是,以上代码仅为示例代码,实际应用中需要根据具体的数据和需求进行相应的调整和优化。此外,为了更深入地了解HRV特征提取和分析,建议参考相关的专业文献和资料。

发表评论
登录后可评论,请前往 登录 或 注册