Python实现HRV特征提取

作者:渣渣辉2024.02.18 05:58浏览量:10

简介:本文将介绍如何使用Python进行HRV特征提取,包括计算心率变异性时域、频域和时频域特征。通过这些特征,可以对心脏自主神经系统的功能进行评估,从而了解心脏健康状况。

千帆应用开发平台“智能体Pro”全新上线 限时免费体验

面向慢思考场景,支持低代码配置的方式创建“智能体Pro”应用

立即体验

心率变异性(HRV)是指心脏节律性跳动过程中,相邻心跳之间的微小差异。HRV分析是一种评估心脏自主神经系统功能的有效方法,通过对HRV的测量和分析,可以了解心脏健康状况。

在Python中,可以使用各种库来提取HRV特征。其中,常用的库包括pandasnumpyscipy等。

以下是一个简单的Python代码示例,用于提取HRV特征:

  1. import pandas as pd
  2. import numpy as np
  3. from scipy.signal import find_peaks
  4. # 读取心率数据
  5. df = pd.read_csv('heart_rate.csv', header=None)
  6. # 计算RR间期
  7. RR = np.diff(df[0])
  8. # 计算时域特征
  9. mean_RR = np.mean(RR)
  10. SDNN = np.std(RR)
  11. RMSSD = np.sqrt(np.mean((RR - mean_RR) ** 2))
  12. NN50 = len([x for x in RR if x > mean_RR + SDNN])
  13. pNN50 = NN50 / (len(RR) - 1) * 100
  14. # 计算频域特征
  15. f, Pxx = scipy.signal.welch(RR, fs=300, nperseg=1024) # 使用Welch方法计算功率谱密度
  16. LF = np.sum(Pxx[30:70]) # 低频功率(0.04-0.15Hz)
  17. HF = np.sum(Pxx[150:250]) # 高频功率(0.15-0.4Hz)
  18. LF/HF ratio = LF / HF if HF != 0 else 0
  19. # 计算时频域特征
  20. powers, frequencies, time = scipy.signal.cwt(RR, np.arange(1, 31), 'morl') # 使用连续小波变换计算时频谱密度
  21. LF_power = np.sum(powers[np.where((frequencies >= 0.04) & (frequencies <= 0.15))]) # 时频域低频功率(0.04-0.15Hz)
  22. HF_power = np.sum(powers[np.where((frequencies >= 0.15) & (frequencies <= 0.4))]) # 时频域高频功率(0.15-0.4Hz)
  23. 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特征提取和分析,建议参考相关的专业文献和资料。

article bottom image

相关文章推荐

发表评论