MIT-BIH介绍(三)如何使用MIT-BIH?


MIT-BIH的下载和读取

 

1. Download

官方下载地址https://www.physionet.org/content/mitdb/1.0.0/
由头文件[.hea],数据文件[.dat],注释文件[.atr]组成。
在这里插入图片描述
 
 

Kaggle数据集下载https://www.kaggle.com/mondejar/mitbih-database

由数据文件[.csv]和注释文件[.txt]组成。

在这里插入图片描述

 

2. 官网工具读取

PhysioBank ATM
在这里插入图片描述

输入参数

  • Database: 下拉菜单选择 MIT-BIH Arrhythmia Database(mitdb);
  • Record: 下拉选择第100号数据记录;
  • Output: 展示心电长度;时间格式;数据格式
  • Navigation: 选择展示的心电时间段,上一个记录、下一个记录

输出

展示所选择的心电图片段。

MLⅡ+V5 二导联,灰度间距0.2s,0.5mV

 

3. Python 读取

代码出处

读取 hea 头文件

####################读取头文件######################
f=open(PATH+HEADERFILE,"r")
z=f.readline().split()
nosig,sfreq=int(z[1]),int(z[2])     #% number of signals,sample rate of data

dformat,gain,bitres,zerovalue,firstvalue=[],[],[],[],[]
for i in range(nosig):
    z=f.readline().split()
    dformat.append(int(z[1]))     #format; here only 212 is allowed
    gain.append(int(z[2]))     #number of integers per mV
    bitres.append(int(z[3]))     #bitresolution
    zerovalue.append(int(z[4]))     #integer value of ECG zero point
    firstvalue.append(int(z[5]))     #first integer value of signal (to test for errors)
f.close()

注释

将源文件按行读取并记录下各参数含义,存入变量。
nosig 信号数量;sfreq 采样率
dformat 数据存储格式;gain 信号增益;bitres 位分辨率……

 

读取 dat 文件

####################读取dat文件######################
f=open(PATH+DATAFILE,"rb")     #以二进制格式读入dat文件
b=f.read()   
f.close()

A_init=np.frombuffer(b,dtype=np.uint8)      #将读入的二进制文件转化为unit8格式
A_shape0=int(A_init.shape[0]/3)     
A=A_init.reshape(A_shape0,3)[:SAMPLES2READ]     #将A转为3列矩阵

M=np.zeros((SAMPLES2READ,2))     #创建矩阵M

M2H=A[:,1]>>4     #字节向右移四位,即取字节的高四位
M1H=A[:,1]&15     #取字节的低四位

PRL=(A[:,1]&8)*(2**9)     #sign-bit   取出字节低四位中最高位,向左移九位,等于乘2^9
PRR=A[:,1]&128<<5     #sign-bit   取出字节高四位中最高位,向左移五位

M1H=M1H*(2**8)
M2H=M2H*(2**8)

M[:,0]=A[:,0]+M1H-PRL
M[:,1]=A[:,2]+M2H-PRR

if ((M[1,:]!=firstvalue).any()):
    print("inconsistency in the first bit values")

if nosig==2:
    M[:, 0] = (M[:, 0] - zerovalue[0]) / gain[0]
    M[:, 1] = (M[:, 1] - zerovalue[1]) / gain[1]
    TIME=np.linspace(0,SAMPLES2READ-1,SAMPLES2READ)/sfreq
elif nosig==1:
    M2=[]
    M[:, 0] = M[:, 0] - zerovalue[0]
    M[:, 1] = M[:, 1] - zerovalue[1]
    for i in range(M.shape[0]):
        M2.append(M[:,0][i])
        M2.append(M[:,1][i])
    M2.append(0)
    del M2[0]
    M2=np.array(M2)/gain[0]
    TIME=np.linspace(0,2*SAMPLES2READ-1,2*SAMPLES2READ)/sfreq
else:
    print("Sorting algorithm for more than 2 signals not programmed yet!")

注释

A 三个字节存储两个信号数据;
SAMPLES2READ 3列矩阵;
M 由3列矩阵转的2列矩阵;
M[:,0] 第一个信号幅度;
M[:,1] 第二个信号幅度;
如果信号量nosig=2,信号幅度减去零点再除以信号增益,TIME为1/360s;
如果信号量nosig=1,……

 

读取 atr 文件

####################读取atr文件######################
f=open(PATH+ATRFILE,"rb")     #主要是读取ATR文件中各周期数据并在之后打印在图中
b=f.read()
f.close()

A_init=np.frombuffer(b,dtype=np.uint8)
A_shape0=int(A_init.shape[0]/2)
A=A_init.reshape(A_shape0,2)

ANNOT,ATRTIME=[],[]
i=0
while i < A.shape[0]:
    annoth=A[i,1]>>2
    if annoth==59:
        ANNOT.append(A[i+3,1]>>2)
        ATRTIME.append(A[i+2,0]+A[i+2,1]*(2**8)+A[i+1,0]*(2**16)+A[i+1,1]*(2**24))
        i+=3
    elif annoth==60:pass
    elif annoth==61:pass
    elif annoth==62:pass
    elif annoth==63:
        hilfe=(A[i,1]&3)*(2**8)+A[i,0]
        hilfe=hilfe+hilfe%2
        i+=int(hilfe/2)
    else:
        ATRTIME.append((A[i,1]&3)*(2**8)+A[i,0])
        ANNOT.append(A[i,1]>>2)
    i+=1

del ANNOT[len(ANNOT)-1]
del ATRTIME[len(ATRTIME)-1]

ATRTIME=np.array(ATRTIME)
ATRTIME=np.cumsum(ATRTIME)/sfreq

ind=np.where(ATRTIME<=TIME[-1])[0]
ATRTIMED=ATRTIME[ind]

ANNOT=np.round(ANNOT)
ANNOTD=ANNOT[ind]

注释:

A 表示拿两个字节,然后转2列矩阵;
ANNOTD 注释文本内容;
ATRTIME 注释对应Time。

 

输出展示ECG

#####################显示ECG####################
plt.plot(TIME,M[:,0],linewidth="0.5",c="r")
if nosig==2:
    plt.plot(TIME, M[:, 1], linewidth="0.5", c="b")
for i in range(len(ATRTIMED)):
    plt.text(ATRTIMED[i],0,str(ANNOTD[i]))
plt.xlim(TIME[0],TIME[-1])
plt.xlabel("Time / s")
plt.ylabel("Votage / mV")
plt.title("ECG signal ")
plt.show()

注释:

TIME 表示1/360s(采样率360Hz);M[:,0] 矩阵第一列(信号1的值),红线绘制。
如果信号数 nosig 为2,蓝线绘制信号2。
plt.text 注释内容 ANNOTD,注释横坐标 ATRTIMED,纵坐标 0

ECG

红线表示信号1,蓝线表示信号2,横坐标是采样率的时间间隔,一个单位为1/360s,纵坐标是信号相对零点的幅度。

  • 11
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
MIT-BIH QT数据库是一种包含人类心电图数据的公开数据库,用于研究心脏的电生理特征和心脏疾病的识别与分析。该数据库由麻省理工学院(MIT)和美国国立卫生研究院(NIH)的比坚锡医院(BIH)合作创建,并于1980年发布。 MIT-BIH QT数据库主要包含来自多个健康志愿者和心脏病人的心电图信号,总计500个记录。这些心电图记录在不同的情况下采集,包括静息、运动、药物影响等等。在记录过程中,心电图信号被模拟器进行测量,并通过标准12导联记录,以及记录人员的相关生理和临床信息。 MIT-BIH QT数据库的主要目的是提供一个对心脏r波的测量结果进行快速和可靠分析的参考标准。研究人员可以利用这一数据库来开发和验证心脏疾病的自动识别算法,以及其他相关的心脏研究。 对于心脏病学和生物医学工程学领域的研究人员来说,MIT-BIH QT数据库是一个非常有价值的资源。它为研究心脏疾病的机理、心脏节律障碍和药物对心电图的影响提供了丰富的数据。通过分析和处理MIT-BIH QT数据库中的心电图信号,研究人员可以进一步理解心脏的电生理过程,并且为心脏疾病的诊断和治疗提供更多的依据。 总之,MIT-BIH QT数据库是一个被广泛应用于心脏研究的公开数据库,它对于研究人员来说是一个宝贵的资源,可以帮助他们深入了解心脏疾病的机理和识别方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值