Deep Learning × ECG (2) :利用WFDB包读取心律失常ECG数据

本篇主要介绍使用 WFDB工具包 对 ECG数据 进行操作,能够直接读取心电信号数据。

WFDB包可以直接获取ECG心拍类型,读取心电记录,读取R峰等等以及利用matplotlib绘制心电信号波形。

WFDB 包 是目前处理生理信号数据最常用的包之一。

1. 安装wfdb包

如果你已经安装了Anaconda 和 Pycharm,可以直接在终端下,执行如下命令:

pip install wfdb

安装完成后,使用以下命令检查是否安装成功。

import wfdb
print(wfdb.__version__)

显示版本号,即安装成功
在这里插入图片描述

2. 显示所有的心跳类型

import wfdb
#显示心跳类型
wfdb.show_ann_labels()

打印结果:

    label_store symbol                                    description
0             0                              Not an actual annotation
1             1      N                                    Normal beat
2             2      L                  Left bundle branch block beat
3             3      R                 Right bundle branch block beat
4             4      a                Aberrated atrial premature beat
5             5      V              Premature ventricular contraction
6             6      F          Fusion of ventricular and normal beat
7             7      J              Nodal (junctional) premature beat
8             8      A                   Atrial premature contraction
9             9      S     Premature or ectopic supraventricular beat
10           10      E                        Ventricular escape beat
11           11      j                 Nodal (junctional) escape beat
12           12      /                                     Paced beat
13           13      Q                            Unclassifiable beat
14           14      ~                          Signal quality change
16           16      |                     Isolated QRS-like artifact
18           18      s                                      ST change
19           19      T                                  T-wave change
20           20      *                                        Systole
21           21      D                                       Diastole
22           22      "                             Comment annotation
23           23      =                         Measurement annotation
24           24      p                                    P-wave peak
25           25      B              Left or right bundle branch block
26           26      ^                      Non-conducted pacer spike
27           27      t                                    T-wave peak
28           28      +                                  Rhythm change
29           29      u                                    U-wave peak
30           30      ?                                       Learning
31           31      !                       Ventricular flutter wave
32           32      [      Start of ventricular flutter/fibrillation
33           33      ]        End of ventricular flutter/fibrillation
34           34      e                             Atrial escape beat
35           35      n                   Supraventricular escape beat
36           36      @  Link to external data (aux_note contains URL)
37           37      x             Non-conducted P-wave (blocked APB)
38           38      f                Fusion of paced and normal beat
39           39      (                                 Waveform onset
40           40      )                                   Waveform end
41           41      r       R-on-T premature ventricular contraction

3. 读取心拍记录,并画出图像

这边我们使用的是 MITBIH数据库中 采样率为 360Hz 的 ECG数据,链接:https://physionet.org/content/mitdb/1.0.0/

参数介绍:

首先,先看下其中编号为100的头文件:
在这里插入图片描述
第一行:100 表示编号,2 表示是双导联的,360 表示采样率为360Hz, 650000 表示该记录下的点数;

第二行和第三行:表示的是两个导联的数据说明;因为是双导联的,两个导联分别是MLII导联 和 V5导联。

Q:这里稍微解释下:650000个点是怎么算的?
A:因为360Hz的数据记录时间是30分钟,采样率是360Hz,意思就是说1s采样360个点,那就是648000个点;但可能前后会有噪声,官方就采取了650000个点;这也是没问题的,采样率不变。


3.1 读取ECG数据

相关参数的解释已经在代码中标注了;其中,因为650000个数据点实在太多了,这里我们只取前1000个点作为演示。

import wfdb
import matplotlib.pyplot as plt

record = wfdb.rdrecord('D:/ECG-Data/MIT-BIH-360/100', # 文件所在路径
                       sampfrom=0, # 读取100这个记录的起点,从第0个点开始读
                       sampto=1000, # 读取记录的终点,到1000个点结束
                       physical=False, # 若为True则读取原始信号p_signal,如果为False则读取数字信号d_signal,默认为False
                       channels=[0, 1]) # 读取那个通道,也可以用channel_names指定某个通道;如channel_names=['MLII']

# 转为数字信号
signal = record.d_signal[0:1000]

# 绘制波形
plt.plot(signal)
plt.title("ECG Signal")
plt.show()

绘制的图形:
在这里插入图片描述
大家可以看到,绘制的图片有蓝色和黄色两种颜色,说明把两通道的数据都画出来了;如果大家只需要一个通道的,可以用channel_names参数指定通道数即可。

例如,指定MLII通道;

import wfdb
import matplotlib.pyplot as plt

record = wfdb.rdrecord('D:/ECG-Data/MIT-BIH-360/100', # 文件所在路径
                       sampfrom=0, # 读取100这个记录的起点,从第0个点开始读
                       sampto=1000, # 读取记录的终点,到1000个点结束
                       physical=False, # 若为True则读取原始信号p_signal,如果为False则读取数字信号d_signal,默认为False
                       channel_names=['MLII']) # 读取那个通道,也可以用channel_names指定某个通道;如channel_names=['MLII']

# 转为数字信号
signal = record.d_signal[0:1000]

# 绘制波形
plt.plot(signal)
plt.title("ECG Signal")
plt.show()

绘制的就是单通道的了。
在这里插入图片描述

3.2 获取R峰位置,截取心拍

每个心拍记录中的 annotation 是有标注R峰位置的。目前,截取各个心拍的方法主要是根据 R峰 的位置分别向前、向后取一段距离为一个心拍;本节主要是 wfdb的使用,下一节介绍心拍截取、小波去噪等预处理方式。

import wfdb
import matplotlib.pyplot as plt

record = wfdb.rdrecord('D:/ECG-Data/MIT-BIH-360/100', # 文件所在路径
                       sampfrom=0, # 读取100这个记录的起点,从第0个点开始读
                       sampto=1000, # 读取记录的终点,到1000个点结束
                       physical=False, # 若为True则读取原始信号p_signal,如果为False则读取数字信号d_signal,默认为False
                       channel_names=['MLII']) # 读取那个通道,也可以用channel_names指定某个通道;如channel_names=['MLII']

# 转为数字信号
signal = record.d_signal[0:1000]

# 绘制波形
plt.plot(signal)
plt.title("ECG Signal")


# 读取annatations
signal_ann = wfdb.rdann("D:/ECG-Data/MIT-BIH-360/100", "atr", sampfrom=0, sampto=1000)

# 将读取到的annatations的心拍绘制到心电图上
for index in signal_ann.sample:
    plt.scatter(index, signal[index][0], marker="*")

# 并打印出改心拍标注的类型
print(signal_ann.symbol)
plt.show()

数据展示:
在这里插入图片描述
打印的数据类型:
在这里插入图片描述

  • 28
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
### 回答1: ECG分析是一种用于检测心脏疾病的方法,而基于深度学习ECG心律失常分类则是一种新兴的技术。这种技术利用深度学习算法对ECG数据进行分析和分类,以便更准确地诊断心脏疾病。这种技术的入门需要掌握深度学习的基本原理和ECG数据的基本知识,同时需要了解常见的心律失常类型及其特征。通过学习和实践,可以逐步掌握这种技术,并在实际应用中取得良好的效果。 ### 回答2: ECG分析是指通过对心电图(ECG)数据进行处理和分析,得出心脏的生理状况和心律失常的情况。而基于深度学习ECG心律失常分类则是一种新兴的、快速而准确的心律失常诊断方法,可以在短时间内对不同类型的心律失常进行自动识别和分类。下面将介绍ECG分析中使用深度学习技术的基本原理。 ECG信号是一种时间序列信号,含不同的波形特征,例如P波、QRS波和T波等,这些波形特征反映了心跳时心肌的电生理变化。基于深度学习ECG心律失常分类可以分为三个步骤: 第一步是数据预处理,数据清洗、信噪比提高等,这是保证模型准确性的关键步骤。 第二步是特征提取,这是深度学习方法的核心。传统的特征提取方法是基于图像处理、信号处理等领域,需要大量的人工设计。而基于深度学习的特征提取则是通过网络学习参数,自动地找到最能区分不同心律失常的特征。常见的网络结构括卷积神经网络(CNN)和循环神经网络(RNN)等。 第三步是模型训练和测试。通常,我们将数据集划分为训练集、验证集和测试集三部分,用训练集来训练模型,用验证集来选择最优的模型超参数,用测试集来测试模型的准确性。模型的准确性可以用准确率、召回率、F1值等指标进行评价。 总之,基于深度学习ECG心律失常分类具有高效、准确、自动化等优势,可以大大提高ECG信号的处理速度和心律失常的诊断准确性,对心血管疾病的早期预防和治疗具有重要意义。 ### 回答3: ECG(电生理图)是评估心脏健康状况的重要工具。ECG在医生的指导下具有高精度和可靠性,但是ECG检查的数量庞大,医生需要花费大量时间和精力来进行ECG分析。深度学习技术已经被应用于ECG分析中,以实现较高的自动化程度。 基于深度学习ECG心律失常分类技术旨在通过机器学习来处理ECG数据,以自动分类心律失常。常见的ECG心律失常括心房颤动、心室颤动、心房扑动、快速地、慢速的、心动过缓、心动过速等等。 ECG数据的分析可以通过传统的机器学习方法实现,但这种方法的准确度和性能通常较低。深度学习技术可以在更高水平上对ECG数据进行分析,从而实现更准确、更可靠的分类。 基于深度学习ECG心律失常分类技术通常需要三个关键组件: 1. 数据集:深度学习模型需要大量的数据来进行训练。ECG数据集应具有多样性,因为ECG数据在不同人群中可能存在差异。 2. 深度学习模型:深度学习模型是ECG分类的核心。现在有许多ECG分类模型可以使用,例如卷积神经网络(CNN)和递归神经网络(RNN)。 3. 训练和测试:训练和测试是深度学习模型的关键步骤。在训练期间,模型从数据集中学习数据的特征和模式。测试过程评估训练后的模型的性能,以确定它在分类ECG心律失常方面的精度和可靠性。 总之,基于深度学习ECG心律失常分类技术通过自动化分类ECG数据,可以帮助医生更快速、准确地诊断ECG心律失常。尽管仍需更多的研究和开发,但这项技术的潜力很大,可以提高医疗保健的效率和质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Woo Tzins

谢谢您的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值