从0开始学心电信号处理(1)——心电信号的读取

        心律失常是十分常见的心血管疾病,主要表现为心脏搏动频率或节律的异常。心律失常若得不到及时治疗,可发作导致人死亡。正常心率记为(Normal,N),常见的心律失常疾病主要包括:房性期前收缩( Premature Atrial Contraction,A)、室性期前收缩( Premature Ventricular Contraction,V)、左束支传导阻滞( Left bundle branch block,L)和右束支传导阻滞(Right Bundle Branch Block,R)等。

        由于心电信号通常十分微弱,采集过程中容易受到各种因素的干扰,心电信号的噪声种类繁多,所以心电图分类识别的首要步骤就是对信号进行预处理。国内外研究学者针对去噪方面做了很多研究,主要的去噪手段有经典的数字滤波器和基于小波变换的阈值去噪等。经典的数字滤波器根据频率范围的不同对噪声进行去噪:对于基线漂移使用高通滤波器去噪、对于肌电干扰使用低通滤波器去噪、对于工频干扰使用带通滤波器去噪。近年来,小波变换技术的快速发展催生出了一系列基于小波阈值去噪技术。该类技术是根据信号和噪声的频率在不同尺度上的分布,先对信号进行小波变换,再根据阈值对各层小波系数进行处理,最后重构信号实现去噪。小波阈值去噪技术对于非平稳信号具有优秀的处理效果,与传统处理方法相比有显著的优越性。

        在对心电信号进行预处理和特征提取的基础之上,使用深度学习对心电信号进行自动分类识别。深度学习的研究与神经网络有着密不可分的联系。2006年,Hinton提出了深度置信网络,成为了深度学习领域的一个里程碑。如今在大数据、计算机算力大幅度增加的背景下,深度学习已经在图像处理、语音识别和NLP等众多领域的研究中取得了巨大进展。而卷积神经网络模型经历了从最早的LeNet模型到现在的GoogleNet、ResNet等不断的演进,识别率已经十分优秀。在研究心电分类算法时,利用深度学习在大量数据处理方面表现出的优势,使得分类效果有着显著的提升。

一、数据库的获取

        目前,国际上公认的标准数据库包含四个,分别为美国麻省理工学院提供的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Ⅱ导联。

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

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

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

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

官方网站的可视化工具读取展示MIT-BIH数据https://archive.physionet.org/cgi-bin/atm/ATM

二、数据读取

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

pip install wfdb

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

record = wfdb.rdrecord('ecg_data/' + 100, channel_names=['MLII'])

data = record.p_signal.flatten()

        通过record=wfdb.rdrecord来获取心电数据信息,以及通过annotation=wfdb.rdann来获取心拍类型信息。需要注意的是record的类型是一个(65000,1)的二维数组,需要先将其转换成一维数组才可以对其进行预处理。

  • 6
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值