小波变换

-小波,一个神奇的波,可长可短可胖可瘦(伸缩平移),当去学习小波的时候,第一个首先要做的就是回顾傅立叶变换(又回来了,唉),因为他们都是频率变换的方法,而傅立叶变换是最入门的,也是最先了解的,通过傅立叶变换,了解缺点,改进,慢慢的就成了小波变换。主要的关键的方向是傅立叶变换、短时傅立叶变换,小波变换等。小波变换不仅可以获取信号的频率成分,还能得到每个频率成分出现的时间。这就是其优于傅里叶和短时傅里叶变换之处。

小波多分辨率分析

-小波多分辨率分析也叫多尺度分析,是小波分解与重构(Mallat算法)的理论基础。

小波分解(DWT)

-对原始信号进行分解,通过小波分解高通滤波器G和低通滤波器H来完成,过程如图:

-对原始信号通过滤波器,再经过下采样得到分解的高频系数D(细节部分)和低频系数A(近似部分),多层分解只需要对上一层分解出来的低频分量继续分解即可,理解不难,代码编程时只需要关注三点:与Matlab一样的数据对称拓延、卷积计算以及下采样,多层分解通过调用单层分解即可。

小波重构(IDWT)

-对小波分解的系数重构,即是分解过程的逆变换,保证重构后的信号与原始信号一致,不丢失任何信息。重构的过程如下:

-从分解的最底层往上重构出信号,首先是上采样,一般采用隔值插零的方法,即增加数据量来达到与原始信号长度相同的数据,然后分别通过重构的高通滤波器g和低通滤波器h,最终重构出原始信号,如果代码编写的没问题,那么重构出的信号与原始信号完全一致。而小波变换去噪的过程就是在分解后的各层系数中找出噪声所在的层,对该层的低频系数或者高频系数进行处理,比如软硬阈值处理,处理后再经过重构,即可重构出去除噪声的信号。

-所以小波变换在信号去噪中应用非常广泛。

小波去脉搏波基线漂移

-以我以前做过的血氧检测仪来说,血氧饱和度的计算需要通过采集人体的脉搏波来处理,采集脉搏波自然会引入一定的噪声,如高频噪声、基线漂移和运动伪差等,对于基线漂移,硬件电路上已经没法去除了,所以只能通过软件来处理,即通过小波变换来处理脉搏波的基线漂移。下面是我采集的两段带有明显基线漂移的自身的脉搏波

-第二段的基线漂移很明显,这影响到脉搏波的形态和幅值,导致血氧饱和度计算出现误差,对第二段波形利用db4小波对其进行5层分解,然后将每层分解的系数再重构,得出每层重构出的细节分量和进近似分量

-可以看到第5层的近似分量与基线漂移的形态完全一致,将其从原始脉搏波波形中去除即可,去除后的波形如下:

基本消除了原始波形的基线漂移。

基于STM32F4的小波变换

-由于需要将小波变换的代码移植到控制器上运行,所以需要编写相应的小波分解与重构的算法,所以需要编写出一维单层小波分解,单层重构以及多层分解与多层重构四个函数即可完成。下面是四个函数的头文件,欢迎一起交流,第一次写博客,不太会,哈哈

//函数声明//
//小波变换
uint16_t DWT_Dwt(float32_t* p_OrgSig,     //原始信号uint16_t OrgSigLen,     //信号长度float32_t *cA,           //近似系数float32_t *cD            //细节系数
);
//小波反变换
uint16_t DWT_Idwt(float32_t *cA,            //近似系数float32_t *cD,            //细节系数uint16_t cALen,           //系数长度float32_t* p_OrgSig           //重构的信号
);
//小波分解
uint16_t DWT_WaveDec(float32_t* p_OrgSig,     //原始信号uint16_t OrgSigLen,     //信号长度uint16_t DecLevel//, //分解层数);
//小波重构
uint16_t DWT_WaveRec(float32_t* p_C,       //DWT_Cuint16_t* p_L,        //DWT_Luint16_t DecLevel,    //小波分解的层数float32_t* p_OrgSig   //重构出的原始信号
);`

小波变换去除脉搏波基线漂移相关推荐

  1. 设计低通巴特沃斯数字滤波器(matlab)去除ECG基线漂移实例

    matlab代码************************** M=load ('datafile'); ecg=M(1:15000,1); 读取数据 fs=512; 采样率 fmaxd_1=5 ...

  2. 高通滤波去除基线漂移matlab,去基线漂移

    去除基线漂移有多种方法. 1.matlab内置函数detrend 不适合非线性的复杂信号 2.小波变换去除基线漂移wavelet 定义一个函数DeBaseline_Wavelet为去基漂函数 func ...

  3. 基于小波变换的信号去噪技术及实现

    基于小波变换的信号去噪技术及实现 摘 要:阐述了小波变换去除信号噪声的基本原理和方法.研究利用小波变换技术对信号噪声进行抑制和去除非平稳信号的噪声,然后利用Matlab软件编制程序实现了基于小波变换的 ...

  4. matlab 载波相位估计,基于小波变换的载波相位恢复算法的研究

    刘畅安1,胡芳仁1, 2,刘昕1 (1. 南京邮电大学 光电工程学院,江苏 南京 210023: 2. 南京邮电大学 Peter Grüenberg中心,江苏 南京 210023) 摘要:在相干光通信 ...

  5. 一项调查:从浅到深的机器学习方法的血压估计使用生物传感器【翻译】

    一项调查:从浅到深的机器学习方法的血压估计使用生物传感器 摘要 在过去的20年里,机器学习系统在医疗保健行业领域迅速发展,如数字健康.健身跟踪.患者监测和疾病诊断.与此同时,随着技术的进步,与人工智能 ...

  6. ECG:机器学习之预处理算法与R波定位算法(附部分代码)

    ECG:机器学习之预处理算法与R波定位算法(附部分代码) 目前网上有关ECG信号处理的文章越来越多,说明这一块做的人也越来越多,但是网上的资源却很有限,而且很多资源都有一定的缺陷且不全.本文会对网上的 ...

  7. 基于小波图像去噪的MATLAB实现

    基于小波图像去噪的MATLAB实现 一.课题背景 数字图像处理(Digital Image Processing,DIP)是指用计算机辅助技术对图像信号进行处理的过程.数字图像处理最早出现于 20世纪 ...

  8. 图像去噪算法 matlab,基于Matlab的图像去噪算法的研究与实现

    2009 年第 12 期 福 建 电 脑 (下转第 131 页) 基于 Matlab 的图像去噪算法的研究与实现 胡 鹏 1, 徐会艳 2 (1.淮安信息职业技术学院江苏淮安 223003 2.淮阴师 ...

  9. 简单整系数滤波器去除心电信号的基线漂移

    心电信号的基线漂移主要由人体呼吸引起的胸廓变化.心电电极的移动引起.一般频率在1Hz以下,属于低频干扰.又因为基线漂移与心电信号的ST段频率较为接近,处理基线漂移不当,将引起心电信号的ST段信号失真, ...

最新文章

  1. str量化转化为int
  2. java 只提取数字_如何从字符串中批量的提取数字-百度经验
  3. [MATLAB学习笔记]Rng函数
  4. 南京php培训班哪家,南京PHP培训中心哪家比较专业
  5. securecrt鼠标右键的配置
  6. OpenCV实现连通域
  7. Excel 导入 Sql Server出错——“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”错误的解决...
  8. springBoot的一些注解以及静态资源的处理
  9. 【读书笔记《Android游戏编程之从零开始》】15.游戏开发基础(剪切区域)
  10. 淘淘商城规格参数列表显示
  11. 关于SCM供应链管理系统开发思路
  12. 2022年大厂中秋礼盒大赏,卷的就是创意!
  13. jsp汽车4S店维修管理系统
  14. 系统结构考点之CRAY-1向量处理机
  15. XEN Crypto创始人分享设计理念及项目愿景
  16. 餐饮行业如何做好微营销
  17. Android集成百度人脸识别(一)基础版SDK
  18. 文档转换 云服务器,pdf转换成word云服务器
  19. 用Raphael在网页中画圆环进度条
  20. 转:一个古老的编程游戏:Python Challenge全通攻略

热门文章

  1. 有容乃大-牛客网-编程入门(Java版)
  2. 王国维 《人间词话》人生三大境界
  3. 网站流量统计之PV和UV
  4. div宽度自动充满剩余空间
  5. 狭义云计算和广义云计算_什么是云计算? 您现在需要知道的一切
  6. windowplayer播放列表属性
  7. js获取当前的操作系统
  8. RedisKey值出现\xAC\xED\x00\x05t\x00\x19原因及解决方案。
  9. java xmpp openfire_Openfire/XMPP学习之——一个简单的Smack样例
  10. 看你能答对几道JS代码题