1 巴特沃斯滤波器

使用巴特沃斯滤波器进行处理,输入频率范围与阶数,返回值是IIR滤波器的分子b和分母a的多项式系数向量。我们所设定的带通频率在0.5-2HZ之间。又根据采样定理,采样频率要大于两倍的信号本身最大的频率,才能还原信号,所以要归一化截止频率。经过调试发现滤波器阶数是4时效果最好。代码如下所示。

def butter_bandpass(lowcut, highcut, fs, order=4):nyq = 0.5 * fslow = lowcut / nyq  high = highcut / nyqb, a = butter(order, [low, high], btype='band')return b, a

实现信号滤波,代码如下

def butter_bandpass_filter(data, lowcut, highcut, fs, order=4):b, a = butter_bandpass(lowcut, highcut, fs, order=order)y=filtfilt(b,a,data)return y

2 小波阈值去噪法

小波阈值去噪法又叫阈值收缩法去噪,在非稳定信号的去噪应用中有着良好的效果。采集到的原始信号在小波前会有一定的噪声干扰,原始信号可以看作是信号成分和噪声成分的叠加。原始信号中的噪声在很大程序上类似于高斯白噪声,从小波域来看,原始信号中的有效信号成分对应的系数比例远远大于噪声成分的系数比例,根据高斯分布来看,99.99%的噪声系数应该位于-3σ到3σ的区间内,如果将这部分噪声滤除即可保证在滤除绝大部分噪声的情况下保留尽可能多的有效信号成分。因此,先通过Mallat算法将原始信号多分辨率分解为不同小波系数的分解信号,再将小波系数的模值低于选定阈值的信号去除,最后将经过小波阈值处理的分解信号进行小波重构,即可获得滤波后的信号。小波阈值去噪法的处理流程如下图表示。

2.1几种常见的小波函数

小波变换可分为两种,一种是离散小波变换,另一种是连续小波变换。

2.1.1 Haar小波

Haar小波是滤波分析发展中最先被用到、最简单的一个小波基。它的表达式为:

Haar小波函数图像如下图 所示:

Haar小波变换只需进行加减操作,不需要乘法;输入和输出个数相等;大部分运算为0,计算速度快。因此Haar小波在图片压缩上具有广泛应用,但其在时域上并不连续,故不适合用于平滑函数。

2.1.2 Daubecies小波

法国著名学者I.Daubechies在上世纪90年代研究尺度取2的整次幂的小波变换时构造了Daubecies小波。DbN小波族是双正交小波,并且具有紧支性和N阶消失矩,其主要应用在离散型小波变换,通常使用在数位信号分析、去噪等方面。下图为db4小波的图形。

2.1.3 Coiflets小波

Coiflets小波也是I.Daubechies所设计,并且与db小波一样也是一种离散小波。它波形接近对称,常被用于数字信号处理尤其是影像数据压缩方面。下图为coif1-coif5小波函数。

2.2 Mallat算法

Mallat算法是mallat在研究多分辨率分析理论和图像处理的研究中受到塔式算法的启发提出,实现了离散小波变换的重大突破,极大拓宽了离散小波变换的应用领域。正交小波变换在多分辨率分析中可以看作是信号分别通过一个高通滤波器和低通滤波器的滤波过程,其中高通滤波器输出的是信号分解后的高频分量部分,也被称为细节分量,低通滤波器输出的是信号分解后的低频分量部分,也被称为近似分量,而Mallat算法就是一种小波变换的快速算法。Mallat算法将信号中的高低频部分分隔开来,在保留高频部分信号的同时对低频信号再次分解,低频信号又被分为高频信号和低频信号,更多的层次可以将信号分解为更精细的层次,同时会增加计算量,下图为对原始信号3层分解示意图。

2.2.1 小波变换

心电信号噪声如下表所示。

噪声种类 产生原因 频率范围
工频干扰 电力系数产生的固定干扰 50Hz
肌电干扰 由肌肉颤动所致 5-2000Hz
基线飘移 人体轻微运动等原因 0.005-1Hz

采样信号为240Hz,各尺度近似信号与细节信号的频率带宽如下表所示。

分解尺度 近似信号频率带宽 细节信号频率带宽
1 0-60Hz 60-120Hz
2 0-30Hz 30-60Hz
3 0-15Hz 15-30Hz
4 0-7.5Hz 7.5-15Hz
5 0-3.75Hz 3.75-7.5Hz
6 0-1.875Hz 1.875-3.75Hz
7 0-0.9375Hz 0.9375-1.875Hz

由上表可以看出,当分解尺度为7时,将该尺度上的近似信号置为0,可以去除基线飘移;对于工频干扰,其噪声主要集中在第2层尺度的细节信号;对于肌肉干扰,其噪声主要集中在1-5层尺度的细节信号。

(1)采用多级一维离散小波变换来分解信号,具体代码如下:

coffes = pywt.wavedec(hues0, 'db4',level=7)

其中,hues0为原始信号,选用小波基为db4,分解层级为7,返回值coffes为系数数组(长度为level+1),系数数组第一个元素为近似(低频)系数数组,系数数组剩余元素均表示细节(高频)系数数组,coffes表示有用信号的小波系数和干扰噪声的小波系数。
注:将信号表示为一系列不同尺度和不同时移的小波函数的线性组合,其中每一项的系数称为小波系数。

(2)使用waverec函数进行小波重构,输入阈值处理后的小波系数、重构小波函数为db4,输出重构之后的信号,代码如下。

wave_array=pywt.waverec(list_coffes, 'db4')

2.3 阈值处理

小波阈值去噪中包含两个重要的影响因素: 阈值的选取方式和阈值函数的选取方式,而滤波的效果也主要由这两个因素决定。
对信号进行小波变换后,信号的小波系数比噪声的小波系数大,所以我们要设置一个门槛来去除噪声。阈值选择的原理基于公式: s(t)=f(t)+e(t),若s(t)为原始信号中的有效成分,f(t)为信号中的有效成分,e(t)是高斯白噪声N(0,1)。在小波域,有效信号对应的系数很大,而噪声对应的系数很小。噪声在小波域对应的系数仍然满足高斯白噪声分布,因此可以通过小波系数或原始信号来进行评估,并选定在小波域能够消除噪声的阈值。
在应用小波阈值去噪法时,阈值λ的选取至关重要,过大的λ会导致信号中的有效成分被错误滤除,而过小的λ会使滤波后的信号中残留大量噪声。目前常用的阈值选取方法有以下几种:
(1)全局阈值
将统一的阈值应用于整个去噪过程,它的表达式为:

其中,σ代表噪声的标准方差,N代表信号序列的长度。
(2)无偏风险估计阈值
又称为Regsure阈值,由无偏似然估计得出。该方法先提取原始信号s(t)中所有元素的绝对值,再将绝对值序列从小到大排列。最后将所得的有序序列中的所有元素取平方值,得到新的信号序列记为y(k)。表达式为:

设λj为y(k)第j个元素的平方根,即

则有该阈值的风险函数如下式表示:

根据风险函数可以得到对应的风险,曲线,再将风险最小时对应的j值记录为jmin,并由jmin可以得到无偏风险估计阈值:

(3)固定阈值
表达式如下:

(4)极大极小阈值
它的表达式是:

选取阈值的目的是将分散后的小波系数的模小于阈值的信号滤除,而阈值函数则决定了小波系数大于或等于阈值的信号部分的处理方式,因此阈值函数的选取对于小波阈值法滤波后的信号的连续度和精度都有重要影响。

阈值函数主要可分为两种,分别是硬阈值函数和软阈值函数。

  • 硬阈值是将分解后信号的小波系数的绝对值与阈值进行比较,小于阈值的系数为零,大于阈值则保持不变。使用硬阈值函数处理能保留更多的信号边缘局部信息,但它也使得信号具有不连续性,滤波后噪声残留较多,且容易产生波形失真现象。
  • 软阈值是将小波系数的绝对值与阈值比较,若系数的绝对值小于阈值则置于零,若大于阈值,则将其设置为该点信号值与阈值的差值,因此对于信号有着方向向着横幅,幅度为阈值的平移作用。相较于硬阈值,软阈值函数处理后的信号拥有更好的连续性,处理后的结果相对平滑,不会产生额外的振荡波形,但软阈值处理本身是一种对信号的压缩行为,这使得软阈值处理后的信号与原始信号存在一定的偏差,这种偏差同样会反映在重构信号中。

使用threshold函数来进行阈值处理,输入要处理的小波系数,阈值及模式,输出为阈值处理后的小波系数,其中阈值选择全局阈值,阈值函数选用软阈值,代码如下所示。

data_soft = pywt.threshold(data=data, value=value, mode='soft')

【系列二之图像处理系列】波形处理(3)相关推荐

  1. 遨博机器人展示_遨博协作机器人全系列二:iV系列智能视觉专用插件无缝对接...

    原标题:遨博协作机器人全系列二:iV系列智能视觉专用插件无缝对接 2019年9月17日,中国国际工业博览会(CIIF)在上海盛大召开,同期机器人展(RS)已成为亚洲最具影响力的机器人行业会议,是机器人 ...

  2. 机器视觉及图像处理系列之二(C++,VS2015)——图像级的人脸识别(1)

    机器视觉及图像处理系列之二(C++,VS2015)--图像级的人脸识别(1) 接上一篇,一切顺利的话,你从github上clone下来的整个工程应该已经成功编译并生成dll和exe文件了:同时,Ima ...

  3. android图像处理系列之五-- 给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  4. android图像处理系列之五--给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了.下面就给出解决这个问题的思路. 思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水 ...

  5. Matlab系列记录之图像处理(结束篇)

    Matlab系列记录之图像处理(结束篇) 前言 图像知识 图像类型 1.RGB图 2.灰度图 3.二值化图 读写图像文件 显示图像 示例 结果 图像运算 直方图 示例 结果 直方图均衡 示例 结果 灰 ...

  6. 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+kibanaV5.4.2+x-packV5.4.2安装

    相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+klanaV5.4.2+x-p ...

  7. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  8. 人工智能算法通俗讲解系列(二):逻辑回归

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...

  9. 【算法系列 二】Stack

    为什么80%的码农都做不了架构师?>>>    栈应用的场景: 1.括号问题 2.后缀表达式 3.深度优先遍历 4.保存现场 1. 给定字符串,仅由"()[]{}" ...

  10. 《CDN 之我见》系列二:原理篇(缓存、安全)

    2019独角兽企业重金招聘Python工程师标准>>> <CDN之我见>共由三个篇章组成,分为原理篇.详解篇和陨坑篇.本篇章适合那些从未接触过.或仅了解一些 CDN 专业 ...

最新文章

  1. C#分析数据库结构,使用XSL模板自动生成代码
  2. navcat设置oracle表主键自增_初识 Oracle 表空间设置与管理
  3. 无法解析的外部符号 WinMain,该符号在函数 int __cdecl invoke_main(void) (?invoke_main@@YAHXZ) 中被引用
  4. JavaScript中的对象与函数(一)
  5. js只能输入数字[价格等]
  6. 函数的参数-在函数内部使用方法修改可变参数会影响外部实参
  7. php 文件保存函数,php 写入和读取文件函数
  8. 带你了解FPGA(2)--逻辑设计基础
  9. ROS中阶笔记(三):机器人仿真—ArbotiX+rviz功能仿真
  10. 倪光南、求伯君“出山”:爱解 Bug、无惧“35岁魔咒”、编码之路痛并快乐!
  11. 关于【apache- tomcat- 5.5.15/conf /Catalina/localhost配置虚拟目录】时的一些问题。(配置web项目的方式不止一种,虚拟目录就是一个)
  12. fetch与axios
  13. LinkedIn庄振运:从国家部委公务员到硅谷系统性能专家,创新是唯一主旋律
  14. photoshop自定义画笔预设,工作中的应用。
  15. DRILLNET 2.0------第九章 套管设计模块
  16. XCode11上传ipa到AppStoreConnect
  17. 共享磁盘到远程服务器上,远程桌面链接怎么共享本地磁盘,你值得一看的技巧...
  18. 基于电力行业信息安全基线的量化管理系统研究与应用
  19. 华为rh2288型号服务器,华为RH2288H V2服务器外部简介
  20. 录音笔新燃点:AI+创新 实现应用场景再迭代

热门文章

  1. MyBatis源码阅读(十) --- 一级缓存、二级缓存工作原理
  2. luncence学习
  3. 2018.12.25|区块链技术头条
  4. CMSIS-RTOS 时间管理之虚拟定时器Virtual Timers
  5. Facebook全面实施GDPR 用户Pages页面被随意锁定
  6. Jupyter Notebook 作图显示中文
  7. javascript模板插件amaze.js
  8. configure: error: Cannot find the WebServer
  9. linux服务器优化
  10. [转]关于java的动态代理