完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
ECG:机器学习之预处理算法与R波定位算法(附部分代码)
目前网上有关ECG信号处理的文章越来越多,说明这一块做的人也越来越多,但是网上的资源却很有限,而且很多资源都有一定的缺陷且不全。本文会对网上的资源进行整合,然后结合自己处理ECG信号的经验进行一些补充。这篇文章主要是对ECG信号的预处理算法和R波定位算法进行讨论,如有不足,望指正。 一、ECG信号简介
正常心脏的电激动从窦房结开始。由于窦房结位于右心房与上腔静脉的交界处,所以窦房结的激动首先传导到右心房,通过房间束传到左心房,形成心电图上的P波。P波代表了心房的激动,前半部代表右心房激动,后半部代表左心房的激动。P波时限为0.12秒,高度为0.25mv。当心房扩大,两房间传导出现异常时,P波可表现为高尖或双峰的P波。 (2)PR间期: PR间期代表由窦房结产生的兴奋经由心房、房室交界和房室束到达心室并引起心室肌开始兴奋所需要的时间,故也称为房室传导时间。正常PR间期在0.12~0.20秒。当心房到心室的传导出现阻滞,则表现为PR间期的延长或P波之后心室波消失。 (3)QRS波群: 激动向下经希氏束、左右束枝同步激动左右心室形成QRS波群。QRS波群代表了心室的除极,激动时限小于0.11秒。当出现心脏左右束枝的传导阻滞、心室扩大或肥厚等情况时,QRS波群出现增宽、变形和时限延长。 (4)J点: QRS波结束,ST段开始的交点。代表心室肌细胞全部除极完毕。 (5)ST段: 心室肌全部除极完成,复极尚未开始的一段时间。此时各部位的心室肌都处于除极状态,细胞之间并没有电位差。因此正常情况下ST段应处于等电位线上。当某部位的心肌出现缺血或坏死的表现,心室在除极完毕后仍存在电位差,此时表现为心电图上ST段发生偏移。 (6)T波: T波代表了心室的复极。在QRS波主波向上的导联,T波应与QRS主波方向相同。心电图上T波的改变受多种因素的影响。例如心肌缺血时可表现为T波低平倒置。T波的高耸可见于高血钾、急性心肌梗死的超急期等。 (7)U波: 某些导联上T波之后可见U波,目前认为与心室的复极有关。 (8)QT间期: 代表了心室从除极到复极的时间。正常QT间期为0.44秒。由于QT间期受心率的影响,因此引入了矫正的QT间期(QTC)的概念。其中一种计算方法为QTc=QT/√RR。QT间期的延长往往与恶性心律失常的发生相关。 3. ECG信号的预处理 人体的心电信号是一种非平稳、非线性、随机性比较强的微弱生理信号,幅值约为毫伏(mV)级,频率在0.05-100Hz之间。在我们获取到的原始ECG信号中都会有噪声干扰,本节将介绍噪声来源以及消除噪声的方法。 (1)ECG信号噪声种类及来源: 基线漂移: 一般是由呼吸和电极滑动变化所异致的,频率一般低于1Hz,其表现为变化比较缓慢的类正弦曲线,对心电波形中的ST段识别影响较大。基线漂移的频率很低,其范围为0.05Hz至几Hz,主要分量在0.1Hz左右,而心电信号的P波、T波及ST段的频率也很低,其范围为0.5Hz至10Hz,两者的频谱非常接近,在消除噪声的同时,不可避免地对心电信号成分造成一定的损失。(由于ST段的频率也很低,无法使用低通滤波器去除基线漂移。) 肌电干扰: 它是由人体肌肉颤抖产生不规则的高频电分扰所导致的,其频率范围很宽,一般在10-1000Hz之间,严重的肌电干扰信号频率在10~300Hz之间,其频谱特性接近于瞬时发生的高斯零均值带限白噪声。 工频干扰: 主要来源于工频电源以及器件周围环境中的传输线辐射出的电磁场,频率为50Hz或60Hz,在ECG上出现为周期性的细小波纹,其频率成分主要为工频频率及其谐波 。(可以通过硬件滤波和软件滤波实现,使用50Hz和60Hz的陷波器。) (2)小波变换去除基线漂移 对于一般肌电干扰和工频干扰一般通过滤波器可以去除掉,麻烦一点的就是基线漂移,在这里将介绍小波变换去除基线漂移。 1)小波变换的原理: 小波变换的公式为(觉得复杂可以不看): 小波变换有两个变量,一个是伸缩 a、一个是平移τ,伸缩反映的是频率情况,平移反映的是时间,假定用小波不同尺度(伸缩)下都与源信号进行运算,那最终能得到的是任意位置(时刻)的频率情况,即时频图,这样我们就可以知道每个位置(时刻)的频率成分了,这就是非常著名的小波变换了,小波变换就像信号处理里面的一个显微镜,能很好的分析出信号在时间、频率上的信息。(至于算法的实现部分这里不做详细说明,直接说怎么用) 2)小波变换应用到ECG信号中 在网上找到一个ECG信号采样率为250HZ时使用小波变换对其进行分解时的图,图中包含了不同分解层中含有的不同频率的信号分量: 在MATLAB中,可以利用函数wavedec来进行小波分解,利用函数waverec进行小波重构,具体用法可以在MATLAB帮助文档中查看。 3)实例: 这里我们使用一个三分钟左右采样频率为512HZ的ECG信号进行演示。 使用小波分解与重构之前的信号如下图所示: 使用小波分解与重构之后的ECG信号如下图所示: 使用的MATLAB代码如下: [c,l]=wavedec(x,5,'dmey');%分解 c(1:l(1))=0; x=waverec(c,l,'dmey'); %重构 根据实际的信号,发现5层分解的效果就很好了。对于预处理好的ECG信号,下一步就可以进行R波的定位了。 4. 常用的R波定位算法 常用的R波定位算法有两种,一种是Pan-Tompkins算法还有一种是自适应滑动窗算法。 (1)Pan-Tompkins算法简介: Pan-Tompkins法检测R波峰值的具体步骤如下: 1)将信号通过给定的滤波器; 2)对滤波后的信号求一阶导数; 3)对求导之后的信号进行平方运算; 4)将信号通过滑动窗口进行积分; 5)使用阈值法检测经过处理之后的R波峰值。 算法流程图如下: 在实际的处理中没有用到过,所以理解的不够透彻,代码也有,代码链接:R波定位算法 (2)自适应滑动窗口定位R波 1)首先,运用离散小波变换将获得的心电数据去除基线漂移干扰;其次,把信号根据时间窗长进行分割,最开始的时间窗长定义为经验窗长,经验 RR 间期长度T1设置为最慢的正常 RR 间期值,长度设置为 N =t×f (一般情况 t 为 1.2秒,运动情况下 t 为 0.8 秒;f 为采样频率,设置为 512Hz);最后,通过 max()函数计算出时间窗内的最大值点,该点就是 R 波的波峰点。 2)当检测到两个 R 波波峰时,计算出两个相邻 R 波波峰间距离,计算心率值,为下一个时间窗长的设定做准备。顾名思义,自适应时间窗是指时间窗长度的设置是根据心率值的变化而变化。当心率值低于 0.45 时,时间窗长值设置为 1.2倍的 RR 间期序列;当心率值超过 0.5 时,时间窗长值设置为 1.5 倍的 RR 间期序列。 3)当检测到三个 R 波波峰时,计算出前两个 RR 间期序列的相邻差,设置RR 间期序列相邻差的经验阈值 T2 为 0.35。当 RR 间期的相邻差超出规定的阈值范围时,说明前面的 R 波峰出现错误定位,需要重新设置时间窗长,随后跳转到步骤(1),对 R 波峰重新进行检测。 R 波峰的相邻差决定了时间窗长值是不断改变的过程。因此当 R 波峰出现错误定位时,并不会影响后续的 R 波峰定位。按照上述描述的 R 波峰定位的流程,依次往后定位 R 波峰,直至心电数据段中的所有 R波波峰被全部定位。自适应滑动时间窗 R 波波峰定位的算法流程图如下图所示。 这个算法参考的是一篇硕士学位论文,题目为《运动干扰焦虑实时检测的自主神经机制研究》,实际应用上这个算法定位还是很准确的,代码就不放了,需要的在评论区留下联系方式。 定位R波之后就是提取RR间期了,后续操作会在后面的文章进行介绍。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 04:26 , Processed in 0.929687 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号