当前位置: 首页 > news >正文

基于匹配追踪和最大重叠离散小波变换的ECG心电信号R波检测(MATLAB 2018a)

准确识别心电信号的R波是进行HRV分析的前提。因此,开发出准确的心电信号R波检测方法十分重要。近几十年来,提出的R峰检测方法主要分为两个阶段。第1阶段是预处理阶段,目的是对受不同噪声影响的原始心电信号进行降噪处理,从而实现增强R峰特征,削弱其他波形的目的。第二阶段为R峰检测阶段,利用决策规则寻找真实的R峰位置。

通常情况下心电信号的频率比较低,而且幅值比较小,在实际的信号采集过程中心电信号容易受到各种类型的噪声的影响,将导致心电信号的形态发生改变甚至波形突变等情况,这将影响对心血管疾病的临床分析和辅助诊断。因此需要对原始心电信号进行降低噪声处理,以减少噪声对心电信号的影响,为后续的心电信号R波检测等工作提供可靠的信号。

基线漂移

基线漂移噪声主要是在心电信号采集过程中,由于佩戴者的呼吸以及身体的运动,导致心电信号采集装置的电极发生滑动。基线漂移在心电图上的表现就是心电信号的基线发生波动,基线不再是水平的,这将影响科研人员对心电信号的特征点进行识别以及后续其他科研工作。基线漂移噪声频率范围一般小于1Hz。

工频干扰

工频干扰噪声是心电信号采集设备产生的一种比较常见的干扰噪音,它是由市电50Hz或60Hz及其谐波分量组成的,其中,国内的市电是50Hz,国外的市电是60Hz。工频干扰噪声导致心电信号的特征点的幅值比较大,这将导致心电信号R波的识别工作受到影响。

肌电噪声

肌电噪声是由于在心电信号采集的过程中,测试者的肌肉神经系统发生颤动或者收缩现象所导致的。因此在实际测量心电信号数据的时候需要注意寻找合适的电极贴片的位置,尽量减小肌电噪声对心电信号质量的影响。肌电噪声的频率范围一般是在5Hz-2000Hz之间。通常情况下,肌电噪声在心电信号上表现为细小的波纹,这将导致心电图峰值和低谷等位置模糊不清,使得心电信号R波的识别变得更加困难。

鉴于此,提出一种基于匹配追踪和最大重叠离散小波变换的ECG心电信号R波检测方法,运行环境为MATLAB 2018a。

function plotExtents(hAxes,x,y,iPk,bPk,bxPk,byPk,wxPk,refW)

% compute level of half-maximum (height or prominence)
if strcmp(refW,'halfheight')
  hm = 0.5*y(iPk);
else
  hm = 0.5*(y(iPk)+bPk);
end

% get the default color order
colors = get(0,'DefaultAxesColorOrder');

% plot boundaries between adjacent peaks when using half-height
if strcmp(refW,'halfheight')
  % plot height
  plotLines(hAxes,'Height',x(iPk),y(iPk),x(iPk),zeros(length(iPk),1),colors(2,:));  

  % plot width
  plotLines(hAxes,'HalfHeightWidth',wxPk(:,1),hm,wxPk(:,2),hm,colors(3,:));
      
  % plot peak borders
  idx = find(byPk(:,1)>0);
  plotLines(hAxes,'Border',bxPk(idx,1),zeros(length(idx),1),bxPk(idx,1),byPk(idx,1),colors(4,:));
  idx = find(byPk(:,2)>0);
  plotLines(hAxes,'Border',bxPk(idx,2),zeros(length(idx),1),bxPk(idx,2),byPk(idx,2),colors(4,:));
  
else
  % plot prominence
  plotLines(hAxes,'Prominence',x(iPk), y(iPk), x(iPk), bPk, colors(2,:));  
  
  % plot width
  plotLines(hAxes,'HalfProminenceWidth',wxPk(:,1), hm, wxPk(:,2), hm, colors(3,:));
  
  % plot peak borders
  idx = find(bPk(:)<byPk(:,1));
  plotLines(hAxes,'Border',bxPk(idx,1),bPk(idx),bxPk(idx,1),byPk(idx,1),colors(4,:));
  idx = find(bPk(:)<byPk(:,2));
  plotLines(hAxes,'Border',bxPk(idx,2),bPk(idx),bxPk(idx,2),byPk(idx,2),colors(4,:));
end

hLine = get(hAxes,'Children');
tags = get(hLine,'tag');

legendStrs = {};
searchTags = {'Signal','Peak','Prominence','Height','HalfProminenceWidth','HalfHeightWidth','Border'};
for i=1:length(searchTags)
    if any(strcmp(searchTags{i},tags))
        legendStrs = [legendStrs, ...
            {getString(message(['signal:findpeaks:Legend' searchTags{i}]))}]; %#ok<AGROW>
    end
end

if length(hLine)==1
    legend(getString(message('signal:findpeaks:LegendSignalNoPeaks')), ...
        'Location','best');
else
    legend(legendStrs,'Location','best');
完整代码可通过知乎学术咨询获得:
https://www.zhihu.com/consult/people/792359672131756032?isMe=1
end

图片

图片

图片

图片

图片

图片

图片

工学博士,担任《Mechanical System and Signal Processing》《中国电机工程学报》《控制与决策》等期刊审稿专家,擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

相关文章:

  • 当HR问你是否单身时,该怎么回答?
  • 【MySQL精通之路】SQL优化(1)-查询优化(1)-WHERE子句
  • vue3插槽solt 使用
  • 第十四届蓝桥杯c++研究生组
  • 香橙派AIpro初体验
  • 【深度学习】Transformer梳理
  • 网络原理-------TCP协议
  • Android环境下Mesa初始化流程重学习之eglInitialize
  • excel 点击单元格的内容 跳转到其他sheet设置
  • 在Linux或Android系统中,SIGSTOP和SIGCONT学习
  • Typora图床配置优化(PicGo-Core(command line) 插件 + gitee)
  • 【面试干货】事务的并发问题(脏读、不可重复读、幻读)与解决策略
  • 帝国CMS验证码不显示怎么回事呢?
  • 【Linux signal】
  • 1.6 分组延时,丢失和吞吐量
  • 【oracle】Oracle RAC中的GNS到底是什么?
  • 简述MVC模式
  • Clickhouse 算术函数操作总结—— Clickhouse 基础篇(五)
  • 李廉洋:5.29黄金早盘2365-2345区间,今日行情走势分析及策略。
  • 部门来了个测试开发,听说是00后,上来一顿操作给我看蒙了...
  • 第二艘国产大型邮轮爱达·花城号完成坞内起浮
  • IPO周报|4月最后2只新股周一申购,今年以来最低价股来了
  • 加总理:目前没有针对加拿大人的“活跃威胁”
  • 当隐身13年的北小京决定公开身份 ,专业戏剧评论依然稀缺
  • 宣称防老年痴呆的“原装进口”保健品McPee被指涉假,未获澳方销售批准
  • 新剧|《淮水竹亭》明开播:前作扑街,本作能否改命