ECG心电信号处理:使用WFDB对MIT-BIH数据集进行读取(Python)

更新时间:2023-07-15 21:33:11 阅读: 评论:0

ECG⼼电信号处理:使⽤WFDB对MIT-BIH数据集进⾏读取
(Python)
本⽂的主要内容是详细介绍MIT-BIH⼼电数据集的读取,主要使⽤WFDB-python⼯具进⾏操作,能够读取⼼电信号数据到array中,读取annatations以及使⽤matplotlib绘制相应的⼼电信号波形,并对record和annatation数据结构进⾏简单的分析。
声明:本博客的内容来源于各⼤论⽂和互联⽹,其正确性有待考究。⽬的仅仅为了记录⼀下本⼈的学习过程,如果正好也能对你有⼀点帮助或者发现⽂中的错误所在,⾮常欢迎留⾔交流呀。
0 安装WFDB
可以直接下载zip包到本地研读⼀下源码,了解其数据结构。根据其提供的安装教程,直接使⽤pip安装就⾏: pip install wfdb
耐性等待⼏分钟,很快就能安装成功。之后便可以进⾏测试:
走进城市走进西柏坡import wfdb
# 显⽰所有的标注格式
wfdb.show_ann_class()
运⾏以上代码后,会打印出annatation的后缀以及标注的类型,安装成功。
研究生报名信息网1 读取record
读取record是使⽤wfdb的rdrecord函数实现:
# 读取⼀条记录的⼼电数据前10000个数据点
record = wfdb.rdrecord('data/MIT-BIH/100', sampfrom=0, sampto=10000, physical=Fal, channels=[0, 1])
以上⽰例中,第⼀个参数是我本地⽂件的⽂件地址,整个函数的返回值为⼀个wfdb中定义的record对象,接下来看⼀下这个record对象的数据结构。找到刚刚下载的源码,找到record.py⽂件,该⽂件中定义的是record类,其申明和初始化如下:
class Record(BaRecord, _header.HeaderMixin, _signal.SignalMixin):
def __init__(lf, p_signal=None, d_signal=None,
e_p_signal=None, e_d_signal=None,
record_name=None, n_sig=None,
fs=None, counter_freq=None, ba_counter=None,
sig_len=None, ba_time=None, ba_date=None,
file_name=None, fmt=None, samps_per_frame=None,
skew=None, byte_offt=None, adc_gain=None,
baline=None, units=None, adc_res=None,
adc_zero=None, init_value=None, checksum=None,
block_size=None, sig_name=None, comments=None):
.
..
...
这⾥主要说明⼏个⽐较重要经常使⽤的属性如下(根据我⾃⼰的理解,其余的根据⾃⼰需要阅读源码即可):
p_signal:模拟信号值,储存形式为ndarray或者是list(在_signal.py中定义的)
d_signal:数字信号值,储存形式为ndarray或者是list(在_signal.py中定义的)
人教版八年级下册英语单词fs:采样频率,int类型的;
这些属性都能直接进⾏访问,⽐如需要访问记录的⼼电信号的数据,直接record.d_signal就能读取到数组或者list中。现在回到刚刚的rdrecord上来,其申明如下:
def rdrecord(record_name, sampfrom=0, sampto=None, channels=None,
physical=True, pb_dir=None, m2s=True, smooth_frames=True,
ignore_skew=Fal, return_res=64, force_channels=True,
channel_names=None, warn_empty=Fal):
...
下⾯解释⼀下常⽤重要参数:
record_name : str,储存⼼电信号的路径;
sampfrom : int, optional,默认为0;
sampto : int, or 'end', optional;长度;
channels : list, optional;选择读取某个通道的数据,默认读取全部通道;
physical : bool, optional;如果为True则读取p_signal,如果为Fal则读取d_signal,默认为Fal;
pb_dir : str, optional;该地址如果填写,则从Physiobank⽹站上下载数据,例如:pb_dir='mitdb'.
下⾯我们可以尝试绘制⼀下⼼电图的波形:
import wfdb
import matplotlib.pyplot as plt
# 读取本地的100号记录,从0到25000,通道0
record = wfdb.rdrecord('data/MIT-BIH/100', sampfrom=0, sampto=25000, physical=Fal, channels=[0, ])
print("record frequency:" + str(record.fs))
# 读取前1000数据
ventricular_signal = record.d_signal[0:1000]
print('signal shape: ' + str(ventricular_signal.shape))
# 绘制波形
plt.plot(ventricular_signal)
plt.title("ventricular signal")
plt.show()
效果如下所⽰:
ok,简单的数据读取就差不多了,当然有很多⾼级的⽤法,后⾯可能会⽤到,可以多看看源码和Physiobank。
2 读取annatation
这个标注信息我在官⽹看了⼀天,开始真的是⼀头雾⽔,后⾯才慢慢的了解其结构。⾸先我们打印⼀下标注的符号类型:wfdb.show_ann_labels()
会打印出各种符号代表的⼼率类型如下,⼀共有41种类型的标注:
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 ont
40          40      )                                  Waveform end
文件共享怎么设置41          41      r      R-on-T premature ventricular contraction
我们试着来读取⼀条标注:
# 读取第100条记录的annatation,前1000个点
signal_annotation = wfdb.rdann("data/MIT-BIH/100", "atr", sampfrom=0, sampto=1000)
# 打印标注信息
print("chan: " + str(signal_annotation.chan))
print("sample: " + str(signal_annotation.sample))
print("symbol: " + str(signal_annotation.symbol))
print("aux_note: " + str(signal_annotation.aux_note))
将annatation常⽤的⼀些属性打印出来,其中:
chan:是chanel的意思,保存的是当前标注的是哪⼀个通道,为⼀个ndarray或者是list
sample:这⾥记录的是每个⼼拍中R波的位置信息,为⼀个ndarray或者是list
文化遗产有哪些
symbol:记录的是每个⼼拍的标注信息,记录的是每个⼼拍的类型,是⼀个字符型的ndarray或者是list,其内容为wfdb.show_ann_labels()的symbol类型;电脑分盘怎么合并
aux_note:记录的是⼼率变换点的标注类型,是辅助信息,其内容为:
(来⾃官⽹)
下⾯我们来详细的看⼀看rdann()函数,其申明为:
def rdann(record_name, extension, sampfrom=0, sampto=None, shift_samps=Fal,
pb_dir=None, return_label_elements=['symbol'],
summarize_labels=Fal):
...
感恩父亲的作文
...
"""
使⽤⽰例:
--------
>>> ann = wfdb.rdann('sample-data/100', 'atr', sampto=300000)
"""
对于其中重要⼀点的参数:
record_name:标注⽂件的地址,⽐如说⽂件是“100.atr”,则该参数为record_name=“100”; extension:标注⽂件的格式类型
然后其余参数可以参看rdrecord函数中的相关参数即可。
下⾯简单的将⼼拍绘制到⼼电图上:

本文发布于:2023-07-15 21:33:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1098439.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:标注   类型   读取   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图