利用Python提取心跳节律信息

心跳信息的提取分析:

首先,ECG_signal.mat文件包含两组信息ECG_1和Time_Adjusted。其中ECG_1中存储的信息为心跳的数值,可以观察到大部分数值为负数。而波峰均为整数,可以通过计算两个相邻波峰之间的实际来得到周期,从而计算出心跳的次数。

具体实现过程:

使用Pyhton第三方库scipy中的loadmat来加载mat文件,格式为字典,因为此文件包含两个量,所以就有两个键。以正负变化的点作为分割点对ECG_1进行划分,把正负改变点放在list中。计算list中每两个相邻索引之间最大值的下标,这些小标就是心跳图形波峰的下标。利用这些下标在Time_Adjusted中得到波峰的采样时间点,两个波峰之间的时间差就是一个周期的实际,把计算出的每个周期时间相加再除以个数,就获得了平均周期时间。所以一分钟心跳次数=60/周期

Python代码

# -*- coding: UTF-8 –*-
import scipy.io as sio
import matplotlib.pyplot as plt
data = sio.loadmat('ECG_signal.mat')   # 加载mat文件
mylist=[]                     # 存储正负改变点的索引
ecg=data['ECG_1']             # ecg为numpy.ndarray型
for i in range(0,len(ecg)-1,1):
    if (ecg[i]<0 and ecg[i+1]>=0) or (ecg[i]>=0 and ecg[i+1]<0):
        mylist.append(i)

maxindex=[]                   # 最大值的索引
for i in range(0,len(mylist),2):
    maxindex.append(mylist[i]+ecg[mylist[i]:mylist[i+1]].argmax())

period = []                            # 分别存储各个周期
time_adjusted=data['Time_Adjusted'][0] # 取第0行的数据
count = 0                              # 周期个数
for i in range(0,len(maxindex)-1,1):
    period.append(time_adjusted[maxindex[i+1]]-time_adjusted[maxindex[i]]) # 各个周期加入list中
count = count + 1

print '原始数据的周期个数:',count
total_time=0
for i in period:
    total_time= total_time+i
print '原始数据的周期为:',total_time/count
print ‘一分钟的心跳次数为:',60/(total_time/count)

运行结果:

原始数据的周期个数: 24

原始数据的周期为: 0.813541666667

一分钟的心跳次数为: 73.7516005122

你可能感兴趣的:(利用Python提取心跳节律信息)