python使用Poincare Plot进行HRV非线性分析

介绍:

Poincare Plot是HRV非线性分析的一种方法。对于一段连续的心跳间隔,将第i个心跳间隔作为横坐标,第(i+1)个心跳间隔作为纵坐标,在二维平面可以画出如下图形。这些点的分布可以近似为椭圆,椭圆的中心位于(x轴心跳间隔平均值,y轴心跳间隔平均值)确定的坐标点,椭圆的半长轴和半短轴分别为SD1和SD2。

在这里插入图片描述

算法推导:

从上图可以看到,SD1和SD2分别由数据点沿着y=x和y=−x+2∗RRI两条直线的离散程度决定,即在这两个方向上数据的方差决定。这样,对原始坐标轴做逆时针45°旋转,旋转后的坐标系中X′方向和Y′方向的数据标准差就是SD1与SD2。

根据线性代数,旋转坐标系相当于对原坐标系下任意一点P(x,y),右乘一个如下的矩阵,
在这里插入图片描述
记新坐标系下P的坐标为(x′,y′),
在这里插入图片描述
在这里插入图片描述

python代码实现:
import numpy as np
import wfdb
import QRSdetectModule
import matplotlib.pyplot as plt

record = wfdb.rdrecord('./test/' + '46', sampfrom=0, smooth_frames=True, ignore_skew=False)
data = record.p_signal[3220114:3295114, 0]

NN1 = []
_, xpeak1, _ = QRSdetectModule.qrs_detector(data, 250)
for i in range(len(xpeak1) - 1):
    NN1.append(xpeak1[i + 1] - xpeak1[i])

SD1 = []
SD2 = []
for i1 in range(len(NN1)-1):
    SD1.append(NN1[i1+1]-NN1[i1])
    SD2.append(NN1[i1+1]+NN1[i1])

for i2 in range(len(NN1)-2):
    plt.plot(NN1[i2], NN1[i2+1], color='b', markerfacecolor='red', marker='o')
plt.legend()
plt.show()

ST1 = np.std(SD1)/np.sqrt(2)
ST2 = np.std(SD2)/np.sqrt(2)

print('-----------------------------')

record1 = wfdb.rdrecord('./test/' + '19830', sampfrom=0, smooth_frames=True, ignore_skew=False)
data1 = record1.p_signal[10000:85000, 0]

NN2 = []
_, xpeak2, _ = QRSdetectModule.qrs_detector(data1, 128)
for j in range(len(xpeak2) - 1):
    NN2.append(xpeak2[j + 1] - xpeak2[j])

SSD1 = []
SSD2 = []
for j1 in range(len(NN2)-2):
    SSD1.append(NN2[j1+1]-NN2[j1])
    SSD2.append(NN2[j1+1]+NN2[j1])

for j2 in range(len(NN2)-2):
    plt.plot(NN2[j2], NN2[j2+1], color='r', markerfacecolor='blue', marker='o')
plt.legend()
plt.show()

SST1 = np.std(SSD1)/np.sqrt(2)
SST2 = np.std(SSD2)/np.sqrt(2)

运行结果如下:
不规律异常心跳:
在这里插入图片描述
正常心跳:
在这里插入图片描述

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在庞加莱截面上,我们可以测量相邻两个轨迹交点之间的时间间隔,并将这些时间间隔作为数据点绘制在平面上,得到所谓的 Poincare Plot。根据这些数据点,我们可以计算出两个重要的统计量,即 SD1 和 SD2。 SD1 是指数据点在沿着 Poincare Plot 的第一主成分方向上的标准差,而 SD2 是指数据点在沿着 Poincare Plot 的第二主成分方向上的标准差。 具体地,我们可以按照以下步骤计算 SD1 和 SD2: 1. 对所有数据点进行中心化,即将所有数据点沿着第一主成分方向平移,使得数据点的平均值为零。 2. 使用主成分分析的方法,计算出数据点在第一主成分方向和第二主成分方向上的投影值。 3. 计算数据点在第一主成分方向上的标准差,即 SD1,可以使用以下公式: SD1 = sqrt(sum((x - mean(x)).^2)/n),其中 x 为数据点在第一主成分方向上的投影值,mean(x) 为这些投影值的平均值,n 为数据点的数量。 4. 计算数据点在第二主成分方向上的标准差,即 SD2,可以使用以下公式: SD2 = sqrt(sum((y - mean(y)).^2)/n),其中 y 为数据点在第二主成分方向上的投影值,mean(y) 为这些投影值的平均值,n 为数据点的数量。 SD1 和 SD2 可以用来描述 Poincare Plot 上数据点的分布情况,反映了系统的动态特性和稳定性。在心率变异性分析中,SD1 和 SD2 被广泛用来评估交感-副交感神经系统的平衡情况和心血管健康状况。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值