目前国际上有三个公认的标准心电数据库:美国心脏学会的AHA数据库,欧洲AT-T数据库以及美国麻省理工学院提供的MIT-BIH数据库。其中MIT-BIH数据库应用的比较广泛,所以,我们做后续训练也就是使用这个数据库的数据。
作为ECG实践篇的开端,我们第一步就是要获取MIT-BIH数据库的心电数据和数据对应的注释,数据解析代码会在文末放送
【需要注意的是】 本文主要讲的是怎么解析从MIT-BIH数据库得到的数据并获取注释,数据下载的方式和数据格式的说明这里就不多说明了。

1.下载MIT-BIH数据库中的心电数据

网上有挺多的这样的教程,例如:https://blog.csdn.net/qq_21905401/article/details/54021052
所以我这里就不再赘述了,有空填坑吧,
MIT-BIH 一共是有48组数据,一起下载就ok了

2.MIT-BIH数据格式解读

MIT-BIH数据库使用自定义的格式来记录心电数据。所以,一个心电记录由三部分组成:
(1)头文件[.hea] ,按ASCLL码字符的方式存储
(2)数据文件[.dat],按二进制存储,每三个字节存储两个数,一个数12bit
(3)注释文件[.atr] ,按二进制存储
blabla 数据格式具体的解释可以见网址 https://wenku.baidu.com/view/aa5f0567866fb84ae45c8d9e.html

3.数据解析方法

我们从MIT-BIH下载了数据之后,如果想后续用它,首先是需要用matlab代码进行数据解析的。如果我们想获取数据中的人工标注注释(用于后续训练的标注),那么可以有两种方式,第一种方式是用刚才提到的matlab代码解析数据,这样可以得到人工标注注释;第二种方式是使用PhysioBank数据库提供的软件工具包WFDB,WFDB中有rdann工具 可以帮助我们快速解析下载得到的.atr,从而获取数据的人工注释。

1.matlab解析心电数据
如果直接打开刚才我们下载好的那三份文件,基本直接看到的是乱码!所以为了将数据转为我们可以操作的形式,首先使用matlab代码rdata.m 对数据进行解析,代码是大佬已经写好了的,我存放在:https://github.com/Candlelight-XYJ/Machine_Learning_ECG

打开rdata.m后,只需要更改一下代码头部的文件路径存放地址:

然后直接点运行即可,代码运行结束后,数据会被读入matlab的workspace中,查看matlab右边workspace的区域,会发现会生成了多个数据,同时也绘制出了信号图

生成的数据中M文件包含了我们所需的信号值

ANNOT文件,存储了该记录中各心拍的人工标注类型代码

ANNOT文件中的数字,分别代表了当时人工标注的心脏的情况它提供给了我们各心拍专家诊断的结果,用于后续深度学习算法的标签。比如,数字1代表心脏正常搏动,数字2代表左束支传导阻滞,等等,数字所对应的心脏疾病的具体含义可见:
https://wenku.baidu.com/view/aa5f0567866fb84ae45c8d9e.html

ATRTIME文件存储了各心拍的人工标注位置,即它记录了数据中几分几秒出现了一个心拍。而这个矩阵的意义在于后续帮助我们评估心拍定位算法的准确性,或是直接根据它提供的人工标注位置截取心拍。

2.使用PhysioBank中提供的rdann注释工具获取record中的注释信息
PhysioBank提供了一个数据库开发工具包WFDB,来帮助我们分析解读PhysioBank数据库中的数据
WFDB中包含了多个工具,其中 rdann 工具可以用来读取并显示指定记录的注释文件;WFDB这个软件包在多个平台都可以运行,我用的是linux版本的,WFDB下载地址是:https://github.com/Candlelight-XYJ/Machine_Learning_ECG

rdann的命令格式为

rdann -a 注释名 -r 记录名 -f 记录起始时间 -t 记录终止时间 -p 选定的要打印的注释类型(例如V代表室性早博,A代表房性早搏) > test.txt

例如下列命令的含义是:将记录100s中的第一个五分钟内所有的房性早搏的注释打印输出到test.txt文件中

rdann -a atr -r 100s -f 0 -t 5:0 -p A > test.txt

执行上述命令后得到的结果如下:

ubuntu@VM-0-8-ubuntu:~/tools/wfdb-10.6.1/data$ rdann -a atr -r 100s -f 0 -t 5:0 -p A0:05.678 2044 A 0 0 0

可以看到在 0:05.678时出现了房性早搏
需要注意的是
rdann的输入,-r命令后面输入的不是文件名称,而是记录名称;例如现在我有一个心电记录100s,它由100s.hea , 100s.atr , 100s.dat组成,那么记录名称就是100s 不是100s.hea,也不是100s.atr ;因此可以看到上面的例子中我的命令是 -r 100s ,100s后面并没有接任何的文件后缀名!
还需要注意的是 -a后面的输入是atr ,不是100s.atr ; 因为-r 100s这条命令帮助我们读入了100s这条记录,所以-a atr的含义就是读取100s这条记录中的.atr注释文件,因此我们在使用-a命令时,只用指定记录所对应的注释文件的后缀名即可,不需要输入整个文件名!

rdann更多参数可见:https://www.physionet.org/physiotools/wag/rdann-1.htm
感谢博主珈天的博客:https://blog.csdn.net/qq_15746879/article/details/80329711

【ECG实践篇(1)】MIT-BIH数据库数据解析的方法以及使用rdann获取人工标注注释的方法相关推荐

  1. linux成功mysql数据直接拷贝_mysql数据库数据从一个linux系统移植到另一个linux系统的方法...

    背景 问题介绍 现在有一个linux系统的机器上数据需要移植到另外一个linux系统上.老机器称A机器,新机器称B机器. 前期调研 鉴于网上资料很多都是相同内容,而数据库的数据一般都很重要,这些方法都 ...

  2. P. Hamilton / Quantitative Investigation of QRS Detection Rules Using the MIT/BIH Arrhythmia Databa

    Quantitative Investigation of QRS Detection Rules Using the MIT/BIH Arrhythmia Database Hamilton, Pa ...

  3. python层级抓取_070.Python聚焦爬虫数据解析

    一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...

  4. iOS基础-数据解析方法初步总结-(XML,JSON欢迎指正)

    小时候的记忆与大家一起分享,愿君安好! 解析的基本概念 解析: 从事先规定好的格式中提取数据 解析的前提: 提前约定好格式,数据提供方按照格式提供数据,数据获取方则按照格式获取数据 OS开发常见的解析 ...

  5. 用开源的人工标注数据来增强RoFormer-Sim

    ©PaperWeekly 原创 · 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP.神经网络 大家知道,从 SimBERT [1] 到 SimBERTv2(RoFormer-Sim),我们 ...

  6. java webservice 接收数据_WebService客户端,接收数据解析存入数据库

    WebService客户端,实现的功能是接收数据,按格式解析数据,最后存入相应数据库. 需求: 同步设备信息接口 url:http://localhost:54059/Service1.asmx 函数 ...

  7. Java调用接口获取json数据解析后保存到数据库

    文章目录 1.在yml文件中配置自己定义的接口URL 2.在Controller中添加请求方法和路径 3.在Service中添加方法 4.在ServiceImpl中实现方法 今天给大家带来一个调用接口 ...

  8. springboot -- 整合 poi 解析Excel 更新数据库数据

    目录: 1.建表,实体类,dao层,service层,自行操作 2.Excel–>Poi --> Maven依赖 3.解析Excel --> Poi 工具类 --> Confi ...

  9. highcharts加载数据库数据(java版)

    前段时间因为项目需要使用了highcharts报表,新手可以参考http://www.hcharts.cn/,教程中有比较详细的介绍和demo.但是demo中的例子的数据都是静态数据,而在实际项目中一 ...

  10. 网络爬虫初步:从访问网页到数据解析

    前言: 网络爬虫这个东西看上去还是很神奇的.不过,如果你细想,或是有所研究就知道,其实爬虫并不那么高深.高深的是在我们的数据量很大的时候,就是当我们网络"图"的回环越来越多的时候, ...

最新文章

  1. R语言临床预测模型的评价指标与验证指标实战:C-index指标计算
  2. selenium资料
  3. python求1到n的乘积_Python简单实现两个任意字符串乘积的方法示例
  4. 域名解析的记录类型区别
  5. optionals_Java Optionals获得更具表现力的代码
  6. php jquery选中提交,如何使用jquery提交php发布数据
  7. 90-40-010-源码-CUBE-引擎为MR写入Druid的构建
  8. 递归处理二叉树总结(附leetcode题)
  9. (转)SDL1.2到2.0的迁移指南
  10. 怎么用python处理word和excel_python处理word和excel文件
  11. Day003 20210208
  12. Linux 环境下思源黑体字体与 Java 之间的兼容性问题的解决
  13. 应广单片机 PMS150G、FPC161 基础例子【PWM设置】
  14. win7浏览器主页修改不过来_ie主页被锁定无法修改怎么办?ghost win7 ie主页修改不了的两种解决方法...
  15. 何为文件系统,何为根文件系统?
  16. 电机控制系统php,步进电机调速控制系统资料(原理图+单片机源码)
  17. 神经网络知识梳理——从神经元到深度学习
  18. 联想笔记本Y430p升级硬件(内存扩容+升级固态)
  19. 蓝桥杯学习记录-基础练习
  20. 使用虚拟主机安装cyberpanel面板并创建wordpress站点

热门文章

  1. 【转载】C++引用详解
  2. java三大特性之—封装
  3. iosmask_iOS Mask属性的详细介绍及应用实例_IOS_脚本之家
  4. mysql text 性能_MySQL - text 性能优化--记录一
  5. 3d slicer调整窗宽窗位_3D游戏模型制作技巧,掌握这些技术你也能进鹅厂!
  6. paypalsdk集成php,php核心paypal sdk
  7. 狂神说springboot源码_狂神说SpringBoot04:JSR303数据校验及多环境切换
  8. 小米2 android版本更新,小米MIUI再更新,又有2款手机可以用上基于Android 11的MIUI12...
  9. 小米 samba linux,U-BOOT移植准备之(一)Samba服务器
  10. java string 匹配次数_Java实现统计某字符串在另一个字符串中出现的次数