Pythonによる心拍数の抽出

1630 ワード

心拍情報の抽出分析:
まず、ECG_signal.matファイルには2つの情報ECG_が含まれています.1とTime_Adjusted.ここでECG_1に格納された情報は心拍数の値であり,ほとんどの値が負であることが観察された.一方,ピークはいずれも整数であり,2つの隣接するピーク間の実際の周期を計算することによって心拍数を計算することができる.
具体的な実装手順:
Pyhtonサードパーティライブラリscipyのloadmatを使用してmatファイルをロードします.辞書形式です.このファイルには2つの量が含まれているので、2つのキーがあります.正負に変化する点を分割点対ECGとする1を区切って、正負の変化点をリストに入れます.リスト内の2つの隣接するインデックス間の最大値の下付きスケールを計算します.これらの小さなスケールは、心拍パターンのピークの下付きスケールです.これらの下付き文字を使用してTime_Adjustedではピークのサンプリング時点が得られ,2つのピーク間の時間差は1周期の実際であり,計算した各周期時間を加算して個数で割ると平均周期時間が得られる.だから1分間の心拍数=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.81354166667
1分間の心拍数:73.751600512