本系列上一篇(中值滤波器)指路:https://blog.csdn.net/m0_37422217/article/details/90739660

注:这里是以小型手持心电图机为研究对象的(单导联)

上一篇中我们说到中值滤波器可以较好的去除基线漂移的噪音,此外数学形态学也可以很好的去除基线漂移,并且数学形态法也可以去除其他类型的噪音。

数学形态法原理

数学形态学是一门建立在严格数学理论基础上的学科,它提供了一种有效的非线性信号处理方法,可以很好地保持信号的几何信息。数学形态学最基本的概念是结构元素,它本身具有一定的形态(如点、线段和圆等),相当于一个`探针',

在图形中不断地移动结构元素,便可考察出图形各部分间的关系,类似于人的注意焦点(focus of attention,FOA)视觉特点,结构元素可直接携带图形知识(形态、大小等)。用不同的结构元素来处理一维信号可以得出不同的结果.[1]

腐蚀和膨胀是数学形态学中最基本的运算,其定义如下:

设信号序列 f 为定义在 F={0,1,…,N-1}上的序列函数,结构元素 k 为定义在 K={0,1,…,M-1}上的函数,其中 N>M,那么结构元素 k 对信号 f 的腐蚀运算可以定义为:

其中 m=0,1,…,N-M。

结构元素 k 对信号 f 的膨胀运算可以定义为:

其中 m=M-1,M-2,…,N-1。

信号 f 被膨胀的结果就是把结构元素 k 平移后使集合 K 与集合 F 交集非空点构成的集合,其作用效果是集合 F 呈现出的图像扩大了。而腐蚀的结果就是把结构元素 k 平移后,使集合 K 包含于集合 F 交集所有点构成的集合,其作用效果是使集合 F 呈现出的图像缩小。

膨胀和腐蚀运算还可以组成开(opening,)、闭(closing,•)、击中、薄化、厚化等几种运算方式。其中开(opening,)、闭(closing,•)的定义为:

数学形态学理论认为,开运算和闭运算分别是在信号的下方和上方移动结构元素。开运算可以削除信号“波峰”,具有收缩性,消除信号孤立点,抑制正脉冲噪声,使信号光滑;闭运算则可以填充信号的“波谷”,具有扩张性,可抑制负脉冲噪声。开闭运算均具有低通特性。

以下,分别给出开、闭运算对一段ECG信号进行处理结果:

黑色线为原始心电信号,黄色线为开运算对心电信号的处理结果,可以看出开运算削除了信号“波峰”:

同样,黑色线为原始心电信号,蓝色线为闭运算对心电信号的处理结果,可以看出开运算填充了信号“波谷”:

PS:原作者用细实线组成的波形均代表原始心电信号,粗实线构成的波形代表开、闭运算处理后的心电信号,但是我实在是有点看不清粗细,就给他用不同颜色表示了。。。。

形态滤波器的实质是通过组合运用开、闭运算,消除信号中特定宽度的波峰和波谷。信号中实际被滤除的成分与运算中所采用的结构元素有关,如结构元素的宽度为M,信号中波峰或波谷的宽度为N,则有:

为了可同时去除信号中的正负两种脉冲噪声,Maragos采用开、闭运算的级联组合形式,定义了形态开闭(open-closing)和闭开(close-opening)滤波器:

由于开运算的收缩性导致形态开-闭滤波的输出偏小,闭运算的扩张性又导致形态闭-开滤波的输出偏小,很大程度上影响了滤波器高效去除噪声的性能,所以为减少偏移的发生,取得较好的滤波效果,我们并不单一地使用它们,而是通过形态开-闭和形态闭-开级联对信号进行滤波,设信号为f,则通过形态学滤波后的数学表达式为:

结构元素

结构元素是数学形态学滤波器中的一个非常重要的参数,在心电信号预处理领域中,它的形状、宽度和高度决定着滤波的效果。

(1)形状:选取的结构元素的形状要尽可能接近待分析信号的图形特点。结构元素有一些不同的形状,如三角形、圆形和直线形等。

(2)尺寸:结构元素的尺寸包括宽度(结构元素定义域的宽度)和高度(结构元素的幅值)。其中结构元素的宽度对信号的处理效果影响更大。选取结构元素的尺寸应大于被滤除信号的尺寸,但小于被保留信号的尺寸。若选取的宽度较大,则可能会滤除特征波形,引起失真,若宽度较小,则不能完全滤除噪声。

实例1

这里我们采取直线型结构元素的数学形态学滤波器,直线型结构元素的宽度应大于心电特征波形的宽度,使得这些特征波形都被滤除,只剩下基线漂移信号,再用原信号减去获得的基线干扰信号,即可获得滤除了基线漂移干扰后的心电信号。这里我取宽度M=65(特征波形最大宽度*采样频率)

代码:

% x 为原始信号
% 关于strel函数的具体用法,请见:https://blog.csdn.net/qwerasdf_1_2/article/details/54376657se1 = strel('line', 65, 0); %设置为线性,长度为65,角度为0
fo1 = imopen(x, se1);%开运算
fc1 = imclose(x, se1);%闭运算
foc1 = imclose(fo1, se1); %开-闭运算
fco1 = imopen(fc1, se1);%闭-开元算
x =  x - floor((foc1 + fco1)/2);

原始信号:

处理后信号:

.。。。。。嗯。。。感觉有点一言难尽呀

实例2

也有参考文献指出,可以先利用第一组形态滤波模块,提取心电信号中的QRS波群;再利用第二组形态滤波模块在第一组的基础上,提取P波和T波,最后将两者加总,就可以剔除基线漂移产生的噪音了。我们试一试:同样选取直线型结构元素的数学形态学滤波器,第一组结构序列宽度M1= 25,第二组结构序列宽度M2 = 65。

代码:

seA = strel('line', 25, 0); %设置为线性,长度为25,角度为0
fo = imopen(x, seA);
fc = imclose(x, seA);
foc = imclose(fo, seA);
fco = imopen(fc, seA);
xb2 = floor((foc + fco)/2);
QRSx = x - xb2; %QRS波提取seB = strel('line', 65, 0); %设置为线性,长度为65,角度为0
fo = imopen(xb2, seB);
fc = imclose(xb2, seB);
foc = imclose(fo, seB);
fco = imopen(fc, seB);
xc = floor((foc + fco)/2);
TPx = xb2- xc;  % P波 T波提取
x = QRSx + TPx;

处理后信号:

看起来,好像比例1稍微好一点。。。。。吧

主要参考文献:
[1]基于形态学滤波器的ECG信号预处理

[2]基于FIR滤波和数学形态学的心电信号预处理算法
[3]ECG去噪和R波检测的算法研究

[4]心电信号去噪的数学形态学滤波器

[5]基于 EMD 的心电信号去噪方法研究及实现

下一篇(EMD)指路:https://blog.csdn.net/m0_37422217/article/details/90922047

心电信号去噪(part3)--数学形态学相关推荐

  1. 心电信号去噪(part4)--经验模态分解法(EMD)

    本系列上一篇(数学形态学)指路:https://blog.csdn.net/m0_37422217/article/details/90744326 注:这里是以小型手持心电图机为研究对象的(单导联) ...

  2. 心电信号去噪(part5)--小波及其他技术方面问题

    本系列上一篇(EMD)指路:https://blog.csdn.net/m0_37422217/article/details/90922047 小波变换我觉得这篇博客写的很好,至少我觉得,所以... ...

  3. 心电信号去噪(part2)--中值滤波器

    本系列上一篇(心电信号简介)指路:https://blog.csdn.net/m0_37422217/article/details/90738308 注:这里是以小型手持心电图机为研究对象的(单导联 ...

  4. 【信号去噪】基于小波阈值实现心电信号去噪附matlab代码

    1 简介 由于外界环境的干扰,导致在实际信号的采集过程中无法避免地引入一些随机噪声,从而影响下一步的信号处理,所以如何对含噪信号进行去噪处理,提取出对研究有用的信号,成为信号领域的一个重要研究课题.小 ...

  5. 【信号去噪】基于NLM时间序列心电信号去噪附matlab代码

    1 简介 作为一种信号预处理手段,信号去噪在众多信号处理应用中发挥着重要的作用.到目前为止,信号去噪问题被大量研究,并取得了许多重要成果,涌现出了包括非局部均值(NLM)去噪算法在内的一批优秀的去噪方 ...

  6. 【心电信号】基于matlab小波阙值心电信号去噪【含Matlab源码 2188期】

    ⛄一.小波阈值法去噪概述 电能质量扰动信号的噪声大多以高斯白噪声的形式存在,利用小波变换对信号进行多分辨率分解,由于小波变换具有去除数据相关性的特点,故可以将有用信号与噪声的能量分离开来.信号中有效的 ...

  7. 毕业设计-基于 Matlab 的心电信号去噪系统设计

    目录 前言 课题背景和意义 实现技术思路 一.系统设计流程 二.仿真系统设计 三.心电信号处理结果及分析 实现效果图样例 最后 前言

  8. 【代码补全】matlab心电信号R波提取

    对Matlab心电信号QRS波检测中代码的补充,使其完整可用. 补充内容来自基于matlab的心电信号QRS波检测与分析. x=iswt(swa,swd,'db3'); %--心电信号去噪完成后-- ...

  9. arma模型谱估计matlab_基于机器学习的心律失常分类(四)——心电信号特征提取[MATLAB]...

    目前比较常用的特征提取是提取心电信号的各波形间期长度.波峰高度等,本文是使用ARMA模型对心电信号进行处理,使用其系数来作为特征. 一.心拍划分 大多伴有异常波形的心律失常信号,通常都会具体表现在单个 ...

最新文章

  1. 【Codeforces】1080C Masha and two friends (棋盘染色)
  2. JAVA计算应缴住房基金,事业单位的住房基金如何核算?
  3. 教您怎么从spring 官网下载参考文档
  4. 7/100. Move Zeroes
  5. Ostinato 发包
  6. 《长调》 :寻找我们共同失去的天堂
  7. LeetCode 90. 子集 II(回溯+剪枝)
  8. vba编程把纯文本转换成html,如何在Excel的单元格中将HTML转换为文本?
  9. (转) RabbitMQ学习之发布/订阅(java)
  10. linux离线语音识别安装运行总结
  11. 前端通过jqplot绘制折线图
  12. out memory 内存溢出总结
  13. JSP听课笔记(一)
  14. 190609每日一句,科比·布莱恩特:这就是我成功的原因,即使身陷低谷,也要抬头仰望星空
  15. InVEST模型在固碳、生境质量、产水等领域案例分析
  16. 如何用10分钟做出一个表情包视频
  17. 中钰睿泓分享:设计LOGO的思路和流程
  18. LightOJ 1224 DNA Prefix(字典树)
  19. 逐飞K66核心板+逐飞DAP下载器调试方式及接线(SWD)
  20. AWS助初创企业扬帆远航

热门文章

  1. 我心目中未来的计算机200字,我心目中未来的计算机.doc
  2. linux centos 的编码格式,Linux/CentOS/fedora下vim显示的字符编码设置
  3. python怎么设置颜色深浅变化_python之深浅拷贝
  4. python调用远程的python文件_python 实现调用远程接口
  5. Weblogic 错误 BEA-000403 BEA-000438解决办法
  6. 对 Strong-Weak Dance的思考
  7. yarn container写token目录选择bug
  8. 如何正确的在一个循环中删除ArrayList中的元素。
  9. 如何在站点静态文件下查找某关键字并修改文件名?
  10. ubuntu、fedora系统的启动|关闭管理器