心律失常数据库

目前,国际上公认的标准数据库包含四个,分别为美国麻省理工学院提供的MIT-BIH(Massachusetts Institute of Technology-Beth Israel Hospital Database, MIT-BIH)数据库、美国心脏学会提供的AHA( American heart association,AHA)数据库、欧共体CSE( Common Standards for Quantitative Electrocardiograph,CSE)数据库、欧洲ST-T数据库。

当前使用最广泛且被学术界普遍认可的据库为MIT-BIH心律失常数据库。此数据库中囊括了所有类型的心电信号并且数量丰富,为本文关于心电信号的自动分类研究提供了实验数据。下面对该数据库作详细的说明。

MT-BIH心律失常数据库拥有48条心电记录,且每个记录的时长是30分钟。这些记录来自于47名研究对象。这些研究对象包括25名男性和22名女性,其年龄介于23到89岁(其中记录201与202来自于同一个人)。信号的采样率为360赫兹,AD分辨率为11比特。对于每条记录来说,均包含两个通道的信号。第一个通道一般为MLⅡ导联(记录102和104为V5导联);第二个通道一般为V1导联(有些为V2导联或V5导联,其中记录124号为Ⅴ4导联)。为了保持导联的一致性,往往在研究中采用MLⅡ导联。本文选取MLⅡ导联心电信号进行研究分析。

数据库中的每条记录均包括三个文件,即:头文件、数据文件和注释文件。

(1)头文件头文件[.hea] 通过ASCII码存储方式记录信号的采样频率、采样频率、数据格式使用的导联信息、采样频率、研究者的性别、年龄以及疾病种类等

(2)数据文件数据文件[.dat] 通过二进制的方式存储信号,每三个字节存储两个数值(两导联数据交替存储),每个数值大小是12bit

(3)注释文件注释文件[.atr] 是由专家对信号进行人工标注,并且根据二进制格式进行数据的存储

关于MIT-BIH数据库的一些常用网站

统一术语称呼

我在阅读心电相关论文的时候,常常由于不同文章之间对同一事物的称呼不同而感到困扰。为避免在本文中出现类似情况,现将术语称呼统一如下。

  • 一条心电数据(记录、信号):将编号为100,101...的数据称为一条心电数据(记录),包含了该编号中的所有导联数据。由于本文仅使用MLII导联的数据作为深度学习的训练数据,因此在本文中也特指一条心电数据中的MLII导联部分。
  • 心拍:如文章(一)中图片所示,将一个完整的心电波形称为一个心拍。
  • 信号点(值):连续的心电波形图其实是由一系列频率固定的不连续采样点构成的,将每个采样点称为信号点(值)。

心电数据的读取

下载数据库到本地后打开,你会发现.dat文件中全部都是乱码,这是由于MIT-BIH数据库采用了自定义的format212格式进行编码。所以在读取心电数据的时候,我们需要用到Python中的一个工具包:wfdb。

在Pycharm中新建工程,并将下载好的心电数据集按如图所示的目录结构进行放置。其中ecg_data为心电数据集的文件夹。

在该工程配置的Python环境中安装wfdb包。

pip install wfdb

关于wfdb包的详细使用请参考其官方文档,这里用代码的形式给出一些常用操作。

# 读取编号为data的一条心电数据
def read_ecg_data(data):
'''
读取心电信号文件
sampfrom: 设置读取心电信号的起始位置,sampfrom=0表示从0开始读取,默认从0开始
sampto:设置读取心电信号的结束位置,sampto = 1500表示从1500出结束,默认读到文件末尾
channel_names:设置设置读取心电信号名字,必须是列表,channel_names=['MLII']表示读取MLII导联线
channels:设置读取第几个心电信号,必须是列表,channels=[0, 3]表示读取第0和第3个信号,注意信号数不确定
'''
# 读取所有导联的信号
record = wfdb.rdrecord('../ecg_data/' + data, sampfrom=0, sampto=1500)
# 仅仅读取“MLII”导联的信号
# record = wfdb.rdrecord('../ecg_data/' + data, sampfrom=0, sampto=1500, channel_names=['MLII'])
# 仅仅读取第0个信号(MLII)
# record = wfdb.rdrecord('../ecg_data/' + data, sampfrom=0, sampto=1500, channels=[0]) # 查看record类型
print(type(record))
# 查看类中的方法和属性
print(dir(record)) # 获得心电导联线信号,本文获得是MLII和V1信号数据
print(record.p_signal)
print(np.shape(record.p_signal))
# 查看导联线信号长度,本文信号长度1500
print(record.sig_len)
# 查看文件名
print(record.record_name)
# 查看导联线条数,本文为导联线条数2
print(record.n_sig)
# 查看信号名称(列表),本文导联线名称['MLII', 'V1']
print(record.sig_name)
# 查看采样率
print(record.fs) '''
读取注解文件
sampfrom: 设置读取心电信号的起始位置,sampfrom=0表示从0开始读取,默认从0开始
sampto:设置读取心电信号的结束位置,sampto=1500表示从1500出结束,默认读到文件末尾
'''
annotation = wfdb.rdann('../ecg_data/' + data, 'atr')
# 查看annotation类型
print(type(annotation))
# 查看类中的方法和属性
print(dir(annotation)) # 标注每一个心拍的R波的尖锋位置的信号点,与心电信号对应
print(annotation.sample)
# 标注每一个心拍的类型N,L,R等等
print(annotation.symbol)
# 被标注的数量
print(annotation.ann_len)
# 被标注的文件名
print(annotation.record_name)
# 查看心拍的类型
print(wfdb.show_ann_labels()) # 画出数据
draw_ecg(record.p_signal)
# 返回一个numpy二维数组类型的心电信号,shape=(65000,1)
return record.p_signal

在这些函数中,使用最多的是通过record=wfdb.rdrecord来获取心电数据信息,以及通过annotation=wfdb.rdann来获取心拍类型信息。需要注意的是record的类型是一个(65000,1)的二维数组,需要先将其转换成一维数组才可以对其进行预处理,关于预处理的这部分内容将在下篇文章中进行叙述。

使用Python+TensorFlow2构建基于卷积神经网络(CNN)的ECG心电信号识别分类(二)的更多相关文章

  1. 深度学习之卷积神经网络(CNN)详解与代码实现(二)

    用Tensorflow实现卷积神经网络(CNN) 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10737065. ...

  2. 基于卷积神经网络CNN的电影推荐系统

    本项目使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务. 推荐系统在日常的网络应用中无处不在,比如网上购物.网上买书.新闻app.社交网络.音乐网站.电影网站等等等等,有人的地方 ...

  3. 【RS】Automatic recommendation technology for learning resources with convolutional neural network - 基于卷积神经网络的学习资源自动推荐技术

    [论文标题]Automatic recommendation technology for learning resources with convolutional neural network ( ...

  4. 深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统

    基于卷积神经网络(CNN)的人脸在线识别系统 本设计研究人脸识别技术,基于卷积神经网络构建了一套人脸在线检测识别系统,系统将由以下几个部分构成: 制作人脸数据集.CNN神经网络模型训练.人脸检测.人脸 ...

  5. 基于MNIST数据的卷积神经网络CNN

    基于tensorflow使用CNN识别MNIST 参数数量:第一个卷积层5x5x1x32=800个参数,第二个卷积层5x5x32x64=51200个参数,第三个全连接层7x7x64x1024=3211 ...

  6. python机器学习卷积神经网络(CNN)

    卷积神经网络(CNN) 关注公众号"轻松学编程"了解更多. 一.简介 ​ 卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人 ...

  7. TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN

    前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...

  8. Python机器学习笔记:卷积神经网络最终笔记

    这已经是我的第四篇博客学习卷积神经网络了.之前的文章分别是: 1,Keras深度学习之卷积神经网络(CNN),这是开始学习Keras,了解到CNN,其实不懂的还是有点多,当然第一次笔记主要是给自己心中 ...

  9. 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn

    https://www.cnblogs.com/31415926535x/p/11001669.html 基于卷积神经网络的人脸识别项目_使用Tensorflow-gpu+dilib+sklearn ...

随机推荐

  1. 7.4 private 成员变量的私有

    /* * 学生类(age不能为负数.将age参数私有,创建方法判断age不为负.被private修饰的成员只能在本类中被访问,若想访问可以使用get.set方法) * * 通过对象直接访问成员变量,会 ...

  2. Python爬虫系列(二):requests基础

    1.发送请求: import requests # 获取数据#r是一个 response 对象.包含请求返回的内容r = requests.get('https://github.com/timeli ...

  3. Spring Cloud 系列之 Consul 注册中心(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Consul 注册中心(一) 本篇文章讲解 Consul 集群环境的搭建. Consul 集群 上图是一个简单的 Co ...

  4. slice使用了解

    切片 什么是slice slice的创建使用 slice使用的一点规范 slice和数组的区别 slice的append是如何发生的 复制Slice和Map注意事项 什么是slice Go中的切片,是 ...

  5. AJ学IOS(25)UI之触摸事件

    AJ分享,必须精品 iOS中的事件 在用户使用app过程中,会产生各种各样的事件;iOS中的事件可以分为3大类型: 响应者对象–UIResponder 在iOS中不是任何对象都能处理事件,只有继承了U ...

  6. Apache SkyWalking

    Apache SkyWalking 什么是 SkyWalking SkyWalking 是观察性分析平台和应用性能管理系统. 提供分布式追踪.服务网格遥测分析.度量聚合和可视化一体化解决方案. 支持J ...

  7. HTML学习过程-(1)

    记录我HTML的学习 (1) 最开始学习html是在因为在听北京理工大学教授讲的网络公开课上.当时老师讲的是网络爬虫,因为要爬取特定网页的信息,需要借助[正则表达式](https://baike.ba ...

  8. ubuntu-18.0.4 samba安装

    (1)安装 sudo apt-get -y install samba samba-common (2)创建一个用于分享的samba目录. mkdir /home/myshare (3)给创建的这个目 ...

  9. [GO] linux 下安装GO

    yum install mercurial安装 mercurial包 安装git包 yum install git 安装gcc yum install gcc 然后就可以下载golang的压缩包了 对 ...

  10. Java中Date时间类

    Date:表示特定的瞬间,精确到毫秒. 构造方法: Date():根据当前的默认毫秒值创建日期对象 Date(long date):根据给定的毫秒值创建日期对象 public static void ...