微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python中检测给定ECG数据中的PQRST峰值

如何解决在python中检测给定ECG数据中的PQRST峰值

我正在使用 Python 进行心电图分析项目。我对python完全陌生。而且我一开始就卡住了。

这是数据:

6262,6279,6286,6282,6290,6295,6293,6302,6299,6285,6303,6274,6275,6281,6276,6278,6331,6320,6316,6336,6345,6368,6338,6348,6350,6340,6360,6376,6371,6405,6412,6417,6433,6419,6402,6413,6410,6374,6389,6392,6386,6399,6379,6354,6351,6321,6324,6317,6312,6310,6307,6283,6259,6262,6238,6243,6252,6254,6268,6271,6300,6292,6266,6241,6269,6264,6261,6250,6231,6197,6185,6183,6199,6465,6575,6757,6971,7159,7325,7509,7686,7884,8056,8112,7991,7826,7696,7538,7263,6994,6752,6510,6305,6114,6080,6068,6056,6116,6166,6190,6228,6296,6288,6257,6297,6313,6334,6358,6341,6357,6352,6343,6355,6361,6347,6367,6369,6382,6407,6403,6398,6444,6443,6453,6479,6482,6492,6515,6512,6499,6526,6543,6551,6544,6563,6577,6595,6605,6636,6647,6646,6654,6664,6653,6671,6677,6674,6689,6681,6673,6697,6718,6704,6705,6709,6678,6698,6670,6650,6649,6639,6613,6612,6611,6578,6570,6547,6530,6519,6485,6455,6470,6458,6424,6430,6388,6365,6330,6326,6323,6309,6289,6306,6319,6327,6314,6329,6333,6344,6337,6384,6362,6391,6378,6422,6438,6461,6450,6426,6437,6427,6381,6396,6364,6265,6272,6248,6258,6224,6207,6240,6532,6702,6914,7093,7261,7445,7644,7827,8016,8126,8054,7889,7755,7623,7373,7084,6838,6601,6145,6097,6075,6052,6117,6188,6211,6245,6372,6420,6475,6488,6496,6503,6550,6567,6546,6561,6592,6599,6615,6642,6656,6682,6691,6723,6713,6712,6719,6735,6736,6725,6739,6742,6737,6740,6729,6749,6743,6722,6716,6699,6685,6660,6666,6625,6591,6581,6565,6540,6495,6471,6454,6434,6385,6393,6395,6375,6406,6409,6415,6416,6436,6440,6448,6460,6462,6472,6446,6467,6520,6508,6501,6529,6548,6564,6554,6534,6516,6537,6517,6502,6489,6478,6484,6447,6457,6423,6493,6695,6890,7066,7217,7404,7579,7734,7916,8057,8030,7896,7795,7660,7438,7184,6935,6732,6527,6216,6178,6180,6451,6477,6464,6468,6498,6513,6557,6541,6525,6536,6556,6568,6589,6587,6603,6602,6584,6606,6574,6558,6620,6629,6651,6680,6694,6773,6763,6753,6791,6833,6818,6821,6811,6802,6799,6825,6815,6822,6808,6814,6784,6792,6795,6778,6774,6775,6767,6756,6746,6675,6627,6619,6585,6491,6429,6441,6400,6431,6505,6237,6244,6622,6809,6977,7108,7262,7451,7621,7809,7961,7968,7829,7595,7417,7180,6924,6176,6124,6103,6085,6069,6107,6158,6202,6251,6481,6509,6579,6687,6708,6701,6726,6720,6733,6715,6667,6632,6626,6588,6486,6247,6255,6226,6235,6233,6221,6171,6234,6230,6594,6797,6974,7141,7303,7475,7643,7868,8044,8059,7950,7798,7662,7506,7249,6990,6102,6089,6072,6062,6135,6155,6522,6598,6608,6640,6618,6609,6596,6217,6214,6223,6219,6220,6227,6213,6553,6730,6922,7087,7276,7458,7629,8130,8098,7963,7822,7682,7479,7204,6928,6203,6172,6121,6086,6175,6506,6560,6634,6633,6630,6661,6668,6623,6206,6209,6193,6196,6192,6200,6189,6173,6159,6182,6165,6164,6151,6162,6148,6142,6134,6120,6140,6144,6161,6141,6154,6138,6168,6179,6169,6210,6204,6195,6123,6960,7160,7324,7514,7716,7909,8080,7995,7817,7712,7548,7248,6967,6747,6078,6051,6054,6106,6533,6572,6637,6658,6663,6684,6688,6657,6571,6770,7156,7289,7435,7637,7834,7981,8029,7905,7754,7653,7472,7186,6938,6764,6109,6644,6692,6539,6798,6976,7135,7270,7442,7624,7808,7918,7887,7726,7593,7486,7268,7011,6801,6186,6118,6044,6039,6034,6988,7167,7330,7531,8012,8013,7706,7592,7396,7127,6878,6058,6047,6061,6582,6152,6929,7110,7277,7473,7671,7860,8021,8119,7864,7737,7590,7334,7048,6133,6035,6706,6711,6984,7158,7339,7541,8109,8114,7998,7853,7727,7286,7015,6760,6125,6094,6037,6073,6147,6643,6616,6474,6156,6131,6090,6966,7170,7337,7739,7927,8035,7841,7692,7575,7344,7034,6777,6130,5996,5956,5952,5972,5993,6041,6110,6149,6233

(注意:这些是程序中提到的文件的分割值)

这是我从我的心电图机得到的值,我需要找出这些数据中的 P、Q、R、S、T 峰值。

def findHighPeaks(A,count):
pivots   = [i for a,(i,b),c in zip(A,enumerate(A[1:],1),A[2:])
                            if a>b and b<c or a<b and b>c]
iWaves = [(left,mid,right) for left,right
                           in  zip([0]+pivots,pivots,pivots[1:]+[len(A)-1])]
peaks  = [(A[left],A[mid],A[right]) for left,right in iWaves
                                    if A[left]<A[mid]]
highPeaks = set(sorted(peaks,key=lambda p:p[1])[-count:])
return [p for p in peaks if p in highPeaks]

import re
import matplotlib.pyplot as plt
f=open( "D:/sharefolder narasima/New folder/ECG20201005172540.sh","r" )
Raw_file=f.read()
start_data=Raw_file.find("<ECG data>")+len("<ECG data>")
end_data=Raw_file.find("</ECG data>")
Sorted_data=Raw_file[start_data:end_data]
A=Sorted_data
x = re.split('~|#\*#',A)
lead_2_data= [list(filter(None,i.split(","))) for i in x if  ":" not in i]
Device_data = [list(filter(None,"))) for i in x if  ":" in i]
ECG_data=([x for x in lead_2_data if x])
array=[list (i)for i in zip(*ECG_data)]
lead_2=(array[1])
A = list(map(int,lead_2))
Q,R,S = zip(*findHighPeaks(A,13))
print("R=",R)
print("Q=",Q)
print("S=",S)
for x in Q,R:
     plt.plot(x)
for y in R,S:
     plt.plot(y)
plt.plot(R)

我一直这样做,这段代码帮助我找到 Q、R、S 值。我也需要找出 P 和 T 的值,在这个程序中我需要给出计数值。是否可以自动获取计数值。

我也尝试过使用神经工具包库,但不是很有帮助。

解决方法

我不确定是否有计算 P、Q、S、T 峰值的算法。但这里有一个简单的方法来获取所有的 Rpeaks。有关详细信息,请参阅此 documentation

>>> pip install biosppy

>>> import biosppy

>>> a = list(ecg_raw_data) #ecg_raw_data = Data you provided in the question
>>> ecg = biosppy.signals.ecg.ecg(a)

>>> rpeaks = ecg['rpeaks']

>>> array([ 562,996,1419,1840,2271,2702])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。