ECG ×AI: 机器/深度学习的ECG应用入门(3)
QRS心拍定位: 解决识别对象问题
1.引言
![](/assets/blank.gif)
2.基本思想
3.示例:QRS波定位算法设计与评估
![](/assets/blank.gif)
(1)我们对心电信号进行40阶FIR带通滤波,通带为15~25Hz,大致为QRS波所在频段。关于滤波器的设计可以使用Matlab的Fdatool工具,得到相应的滤波器系数,然后套用filter内建函数完成滤波。以数据库的103号信号为例,滤波前后的波形示意如下:
通过对比可以看到,滤波后P波,T波被明显削弱,体现了上一部分中预处理目的的第(1)点。
(2)对滤波后的波形“双斜率”预处理。所谓“双斜率”处理是参考自另一篇文献[3]。基本思想是分别在一个点的左右两侧的某个区间内寻找最大平均斜率与最小平均斜率,然后分别用左侧最大斜率减去右侧最小斜率,用右侧最大斜率减去左侧最小斜率,再求取两者中的最大者。过程有些复杂,但其实其基本动机就是利用QRS波两侧较陡的性质,只有QRS波这样的尖峰在经过上述处理时才会有很大的响应。在这里,我们设定这个寻找斜率的区间是左右两侧0.015s~0.060s处,此为经验参数。经过处理,可对比前后波形:
可以看到,双斜率处理后,波形模式更为单一,体现了预处理目的的第(2)点。但是,波形出现了双峰现象,一定程度上不利于精准检测。因此,在双斜率处理后继续低通滤波(截止频率5Hz,经验参数),使得波形更光滑:
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
上图这是以100号信号为例。由于本身信号比较稳定,因此阈值的变化主要在信号开始。可以看到初始时阈值明显偏低,自适应阈值很快向上变化找到了合适的值。下面再看一条变化比较大的信号119:
![](/assets/blank.gif)
其中TP代表检测正确的心拍个数,FN代表漏检的心拍个数,FP代表错检的心拍个数。我们尝试对整个MIT-BIH数据库跑一遍,统计算法的性能参数。这一部分不是算法的核心,所以在这里不再讲具体的实现步骤,不过已经开源了测试代码:DS_test.m,为Matlab脚本文件。在运行之前注意数据库路径的设置。注意在代码的第164行,调用了上面的算法DS_detect。
DS_detect和DS_test最好在一个文件夹中,或者将这些文件放到Matlab可以检索到的目录中。以上都没有问题后,直接运行DS_test,等待其完成。当然也可以把DS_detect改为其他算法,只要搞清楚其输出哪个是QRS波的索引就可以。DS_test程序完成后,在工作空间中可以找到名为INFO的变量,双击打开:
![](/assets/blank.gif)
可以看出算法共错检648个心拍,漏检380个心拍,总体Se达到了99.65%,P+达到了99.41%,汇总如下:
![](/assets/blank.gif)
4.心拍截取
![](/assets/blank.gif)
这里我们向左包含100个点,向右包含150个点,即截取的每个心拍长度为250个点(约0.7s)这一部分的实现代码也已开源:SegBeat.m 为脚本文件。同样,数据库路径,代码文件存放位置要正确。该代码与DS_test.m有类似之处,也调用了DS_detect算法进行QRS检测(第164行,同样也可以置换为其他QRS波定位算法)。至于其他实现细节,作为初学者可不必了解,因为确实很绕,并且也并非是我们的主线任务。运行完成后(时间可能会比较长),在工作空间可以找到4个变量,Nb,Lb,Rb,Vb,为我们接下来的目标类型心拍数据集合,分别为“正常(N)”,“左束支阻滞(LBBB)”,“右束支阻滞(RBBB)”,“室性早搏(PVC)”,示例如下(可能横坐标表示有些不准确,请忽略。。。。):
实际上,同一类型的心拍间变化非常大,并非只是示例的四个心拍那么简单,这也就是我们为什么后面要使用高大上的机器/深度学习算法来分辨。我们以.mat的形式将这四个变量保存(N_dat.mat,L_dat.mat,R_dat.mat,V_dat.mat),它们各自包含了一种类型的心拍,是我们接下来使用机器/深度学习算法要进行分类识别的目标。至此,我们所需要的识别对象已经成功准备好了。
5.小结
本节内容很多,也很抽象。实际上,QRS波检测定位算法的设计很大程度都要靠经验,只不过个人认为有了上面说的几条原则的指导下,方向可以更明确。相关代码已经开源,大家可以结合代码来加深理解,多上手,多尝试.把目标心拍截取之后,我们接下来就可以进行机器/深度学习的应用了.
** 相关代码文件下载:https://github.com/Aiwiscal/ECG-ML-DL-Algorithm-Matlab
** 推荐文献:[1] Pan J, Tompkins W J. A real-time QRS detection algorithm[J]. IEEE transactions on biomedical engineering, 1985 (3): 230-236.
[2] Li C, Zheng C, Tai C. Detection of ECG characteristic points using wavelet transforms[J]. IEEE Transactions on Biomedical Engineering, 1995, 42(1): 21-28.
[3] Wang Y, Deepu C J, Lian Y. A computationally efficient QRS detection algorithm for wearable ECG sensors[C]//Engineering in Medicine and Biology Society, EMBC, 2011 Annual International Conference of the IEEE. IEEE, 2011: 5641-5644.
ECG ×AI: 机器/深度学习的ECG应用入门(3)相关推荐
- ECG ×AI: 机器/深度学习的ECG应用入门(1)
前言 你好,我是研究ECG算法的搬砖工Winham.目前搞这个方向已经挺长时间了,总想着把自己的一些入门经验分享一下,却不知道从何下手.说实话,关于ECG算法的研究相对冷门一些,网络上系统的资料也比较 ...
- ECG ×AI: 机器/深度学习的ECG应用入门(4)
传统机器学习:特征工程+分类器 1.引言 经过前面的工作,我们已经解决了数据来源和识别对象问题.那么接下来,我们就要进行机器/深度学习算法的应用了.由于本人写这些博文的目的不在于讲解机器/深度学习理论 ...
- ECG分析:基于深度学习的ECG心律失常分类入门(1)
ECG分析:基于深度学习的ECG心律失常分类入门(1) 写作动机 由于受突发疫情的影响,开学时间推迟了(在此特向奋斗在前线的各行各业的工作者们致以崇高的敬意!).前天晚上刚好看到一篇新出的论文,跟自己 ...
- ECG分析:基于深度学习的ECG心律失常分类入门(3)
ECG分析:基于深度学习的ECG心律失常分类入门(3) 数据库的Python读取 本次读取数据,用的是一款专门读取MITAB数据的工具--WFDB-python,WFDB包下载 ,全称是 Python ...
- ECG分析:基于深度学习的ECG心律失常分类入门(4)
ECG分析:基于深度学习的ECG心律失常分类入门(4) 在搭建模型之前,讲一下本次任务需要区分的类别,MITAB根据心拍类型划分了14个小类: 也可以用wfdb查看: wfdb.show_ann_la ...
- ECG分析:基于深度学习的ECG心律失常分类入门(5)
ECG分析:基于深度学习的ECG心律失常分类入门(5) 数据和模型完成了之后,就是训练和测试了,这里顺带提一下,MITAB的数据是48条记录的,而我们在做ECG分析的时候,都是去掉了四条记录(102, ...
- ECG分析:基于深度学习的ECG心律失常分类入门(2)
ECG分析:基于深度学习的ECG心律失常分类入门(2) 数据来源:MIT-BIH Arrhythmia Database 数据库介绍和获取 前面已经对ECG信号有了简单的认识,那么现在来简单看看我们的 ...
- (四十五:2021.08.05)《利用深度学习对ecg信号进行分割》
<Deep Learning for ECG Segmentation><利用深度学习对ecg信号进行分割> 讲在前面 摘要 1. 介绍 2. 算法 2.1 预处理 2.2 神 ...
- 干货丨2017年AI与深度学习要点大全
2017已经正式离我们远去~ ~ ~ 博客WILDML的作者.曾在Google Brain做了一年Resident的Denny Britz,就把他眼中的2017年AI和深度学习的大事,进行了一番梳理汇 ...
最新文章
- 博士生起诉学校,因核心期刊发文数不够申请学位被拒,一审判决胜诉!
- Regex解析字符串
- 力扣 : 283. 移动零
- 【软考-软件设计师】计算机指令系统
- 企业要顺应社会生态环境
- 判断字符串相等能否用==
- R软件中 文本分析安装包 Rjava 和 Rwordseg 傻瓜式安装方法四部曲
- C语言 文件读写 ferror 函数 - C语言零基础入门教程
- 批处理Delims的基本知识
- 数据挖掘实践(金融风控)——task3:特征工程
- Jupyter Notebook 添加说明表格Cell
- 鼎捷t100架构_浅谈鼎捷T100 ERP的设计器使用规范
- 【PHP】openssl_sign(): supplied key param cannot be coerced into a private key
- web前端入门到实战:纯CSS实现数据上报和HTML验证
- java计算机毕业设计高速公路收费管理源码+mysql数据库+系统+lw文档+部署
- python画彩色螺旋线图
- 2021年下半场品牌入局小红书的三板斧-小红书数据分析
- Ubuntu下安装Miniconda
- java单根结构_Java语言程序设计中的单根结构
- linux下怎么退出vi编辑器,按esc没有用;vim recording