目录
- MIT-BIH的下载和读取
-
- 1. Download
- 2. 官网工具读取
- 3. Python 读取
-
- 读取 hea 头文件
- 读取 dat 文件
- 读取 atr 文件
- 输出展示ECG
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 datadformat,gain,bitres,zerovalue,firstvalue=https://www.it610.com/article/[],[],[],[],[]
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))#创建矩阵MM2H=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-PRRif ((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+=1del ANNOT[len(ANNOT)-1]
del ATRTIME[len(ATRTIME)-1]ATRTIME=np.array(ATRTIME)
ATRTIME=np.cumsum(ATRTIME)/sfreqind=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
【学术|MIT-BIH介绍(三)如何使用MIT-BIH()】红线表示信号1,蓝线表示信号2,横坐标是采样率的时间间隔,一个单位为1/360s,纵坐标是信号相对零点的幅度。
推荐阅读
- Python|Python 对数据集进行归一化处理并存储为 mat 格式的文件
- Adult数据集分析及四种模型实现
- Python从数据集中移除常量特征介绍
- 如何在Windows 10中使用CSV拆分器将庞大的CSV数据集拆分为较小的文件
- XGBoost feature importance特征重要性-实战印第安人糖尿病数据集(附代码)
- 使用深度学习(卷积自动编码器)重建大脑MRI图像
- 使用Fashion-MNIST数据集将自动编码器用作分类器
- 制作CSV格式数据集(图像数据集)
- R中的子集数据集