转载:http://blog.csdn.net/ebowtang/article/details/40481393

一,小波阈值去噪基本理论

      本博文根据小波的分解与重构原理,实现了基于硬阈值和软阈值函数的一维小波阈值去噪的C++版本,最终结果与matlab库函数运算结果完全一致。

1,小波阈值处理基本理论

小波阈值收缩法是Donoho和Johnstone在1995年提出的,以下便是养活不少学者的三篇基础论文,引得无数学者在此基础上优化,或者应用到自己的工程中然后发表相关的论文:

【1】 Donoho D L. De-noising by soft-thresholding. IEEE Trans- actions on Information Theory, 1995, 41(3): 613−627
【2】 Donoho D L, Johnstone I M. Adapting to unknown smooth- ness via wavelet shrinkage. Journal of the American Statistic
Association, 1995, 90(432): 1200−1224
【3】 Donoho D L, Johnstone I M, Kerkyacharian G, Picard D. Wavelet shrinkage: asymptopia? Journal of Royal Statisti-
cal Society Series B, 1995, 57(2): 301−369

所谓阈值去噪简而言之就是对信号进行分解,然后对分解后的系数进行阈值处理,最后重构得到去噪信号。该算法其主要理论依据是:小波变换具有很强的去数据相关性,它能够使信号的能量在小波域集中在一些大的小波系数中;而噪声的能量却分布于整个小波域内.因此,经小波分解后,信号的小波系数幅值要大于噪声的系数幅值.可以认为,幅值比较大的小波系数一般以信号为主,而幅值比较小的系数在很大程度上是噪声.于是,采用阈值的办法可以把信号系数保留,而使大部分噪声系数减小至零.小波阈值收缩法去噪的具体处理过程为:将含噪信号在各尺度上进行小波分解,设定一个阈值,幅值低于该阈值的小波系数置为0,高于该阈值的小波系数或者完全保留,或者做相应的“收缩(shrinkage)”处理.最后将处理后获得的小波系数用逆小波变换进行重构,得到去噪后的信号.

2,阈值函数的选取

小波分解阈值去噪中,阈值函数体现了对超过和低于阈值的小波系数不同处理策略,是阈值去噪中关键的一步。设w表示小波系数,T为给定阈值,sign(*)为符号函数,常见的阈值函数有:

硬阈值函数:     (小波系数的绝对值低于阈值的置零,高于的保留不变)

软阈值函数:   (小波系数的绝对值低于阈值的置零,高于的系数shrinkage处理)

值得注意的是:

1) 硬阈值函数在阈值点是不连续的,在下图中已经用黑线标出。不连续会带来振铃,伪吉布斯效应等。

2) 软阈值函数,原系数和分解得到的小波系数总存在着恒定的偏差,这将影响重构的精度

同时这两种函数不能表达出分解后系数的能量分布,半阈值函数是一种简单而经典的改进方案。见下图:

图1

3,阈值的确定

选取的阈值最好刚好大于噪声的最大水平,可以证明的是噪声的最大限度以非常高的概率低于(此阈值是Donoho提出的),其中根号右边的这个参数(叫做sigma)就是估计出来的噪声标准偏差(根据第一级分解出的小波细节系数,即整个det1绝对值系数中间位置的值),本文将用此阈值去处理各尺度上的细节系数,注意所谓全局阈值就是近似系数不做任何阈值处理外,其他均阈值处理。

最后吐槽一下这个“绝对值系数中间位置的值”

1)如果det1的长度为偶数那么,这个“中值”便是中间位置的两个数之和的平均值,比如【2,2,3,5】,中值即是2.5而不是3

2)如果det1的长度为奇数那么,这个中值就是中间位置的那个数,比如【2,3,5】,中值即3

4,阈值策略

以前写的ppt挪用过来:

5,一维信号的多级分解与重构

以下算法如果用简单的文字描述,可是:先将信号对称拓延(matlab的默认方式),然后再分别与低通分解滤波器和高通分解滤波器卷积,最后下采样,最后可以看出最终卷积采样的长度为floor(n-1)/2+n,如果想继续分解下去则继续对低频系数CA采取同样的方式进行分解。

二,matlab实现一维小波阈值去噪

1,核心库函数说明

1)wnoisest函数

作用:估计一维小波高频系数中的噪声偏差

这个估计值使用的是绝对值中间位置的值(估计的噪声偏差值)除以0.6745(Median Absolute Deviation / 0.6745),适合0均值的高斯白噪声

2)wavedec函数

一维信号的多尺度分解,将返回诸多细节系数和每个系数的长度,在matlab中键入“doc wavedec”具体功能一目了然

3)waverec函数

一维信号小波分解系数的重构,将返回重构后的信号在matlab中键入“doc waverec”具体功能一目了然,也可以键入“open waverec”查看matlab具体是怎么做的。

4)wdencmp函数

这个函数用于对一维或二维信号的压缩或者去噪,使用方法:
1 [XC,CXC,LXC,PERF0,PERFL2] = wdencmp('gbl',X,'wname',N,THR,SORH,KEEPAPP) 
2 [XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',X,'wname',N,THR,SORH) 
3 [XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',C,L,'wname',N,THR,SORH) 
wname是所用的小波函数,

gbl(global的缩写)表示每层都采用同一个阈值进行处理,

lvd表示每层用不同的阈值进行处理,

N表示小波分解的层数,

THR为阈值向量,

对于格式(2)(3)每层都要求有一个阈值,因此阈值向量THR的长度为N,

SORH表示选择软阈值还是硬阈值(分别取为’s’和’h’),

参数KEEPAPP取值为1时,则低频系数不进行阈值量化处理,反之,则低频系数进行阈值量化。

XC是消噪或压缩后的信号,[CXC,LXC]是XC的小波分解结构,

PERF0和PERFL2是恢复和压缩L^2的范数百分比, 是用百分制表明降噪或压缩所保留的能量成分。

3.代码实现
  1. clc;
  2. clear;
  3. % 获取噪声信号
  4. load leleccum;
  5. indx = 1:3450;
  6. noisez = leleccum(indx);
  7. %信号的分解
  8. wname = 'db3';
  9. lev = 3;
  10. [c,l] = wavedec(noisez,lev,wname);
  11. %求取阈值
  12. sigma = wnoisest(c,l,1);%使用库函数wnoisest提取第一层的细节系数来估算噪声的标准偏差
  13. N = numel(noisez);%整个信号的长度
  14. thr = sigma*sqrt(2*log(N));%最终阈值
  15. %全局阈值处理
  16. keepapp = 1;%近似系数不作处理
  17. denoisexs = wdencmp('gbl',c,l,wname,lev,thr,'s',keepapp);
  18. denoisexh = wdencmp('gbl',c,l,wname,lev,thr,'h',keepapp);
  19. % 作图
  20. subplot(311),
  21. plot(noisez), title('原始噪声信号');
  22. subplot(312),
  23. plot(denoisexs), title('matlab软阈值去噪信号') ;
  24. subplot(313),
  25. plot(denoisexh), title('matlab硬阈值去噪信号') ;

一维信号小波阈值去噪相关推荐

  1. 一维信号小波阈值去噪 c语言,一维信号小波阈值去噪

    描述 1.小波阈值处理基本理论 所谓阈值去噪简而言之就是对信号进行分解,然后对分解后的系数进行阈值处理,最后重构得到去噪信号.该算法其主要理论依据是:小波变换具有很强的去数据相关性,它能够使信号的能量 ...

  2. sEMG信号小波阈值去噪

    1.sEMG信号简介 表面肌电信号是从皮肤表面获取的关于肌肉活动的微弱生物电信息,能够为肌肉活动状态分析.神经肌肉功能分析及病理分析等研究提供有效的帮助.由于受到检测仪器.环境和肌肉自身生理特性等多种 ...

  3. 【Matlab系列】一维信号/数字图像小波阈值去噪(软阈值,硬阈值,固定阈值)【含Matlab源码】

    Date: 2022.4.23 文章目录 前言 0.代码获取方式 1.部分matlab代码 2.一维信号小波阈值去噪效果图 3.数字图像小波阈值去噪效果图 3.1.添加高斯噪声 3.2.添加随机噪声 ...

  4. 小波阈值去噪原理及实现

    小波阈值去噪原理及实现 1.小波阈值去噪的基本原理 2.小波阈值去噪需要考虑的问题 3.小波阈值的实现 1.小波阈值去噪的基本原理 将信号通过小波变换(采用Mallat算法)后,信号产生的小波系数含有 ...

  5. matlab 小波启发式阈值滤波,小波阈值去噪

    小波阈值去噪 小波阈值去噪 目录 1.概念 2.原理 3.影响降噪效果的因素 3.1小波基的选择 3.2分解层数的选择 3.3阈值的选择 3.4阈值函数的选择 4.MATLAB代码 参考文献 小波分析 ...

  6. 小波调研(三):小波阈值去噪分析

    小波阈值去噪分析 数据挖掘流程 传统的去噪方法根据噪声能量一般集中于高频,而信号频谱分布于一个有限区间的特点,用傅里叶变换将含噪信号变换到频域,然后采用低通滤波器进行滤波.但基于傅里叶变换的去噪方法不 ...

  7. 基于MATLAB的小波阈值去噪

    非常感谢: http://blog.sina.com.cn/u/1861445474 http://blog.chinaaet.com/detail/3083.html MATLAB中实现了信号的阈值 ...

  8. 小波阈值去噪的原理及程序

    小波阈值去噪的原理及程序 一.小波阈值去噪基本思想 二.小波变换理论基础 三.小波函数和阈值的选择 四.程序 4.1 MATLAB程序 4.2 Python程序 4.3 效果图 一.小波阈值去噪基本思 ...

  9. 傅里叶变换 matlab代码_基于机器学习的心律失常分类(三)——小波阈值去噪[MATLAB]...

    在对心电信号进行分析前,需要对其进行去噪预处理.因为在心电信号采集或者数模转换的过程中,会产生噪声,包括工频干扰.肌电干扰.基线漂移这三种.本文将介绍目前十分常用且有效的一种去噪方法--小波阈值去噪. ...

最新文章

  1. jQuery UI Autocomplete示例(一)
  2. redhat安装wine教程_Ubuntu怎么下载应用并安装应用
  3. 鼠标经过替换背景和文字
  4. mwc校准油门_编写下载服务器。 第五部分:油门下载速度
  5. java学习(141):自定义捕捉异常
  6. KingPaper初探ThinkPHP3.1.2之目录部署(二)
  7. 精选15个国外CSS框架
  8. python聚类分析案例_深度解读|如何构建用户分级体系实现精细化运营?附案例实操...
  9. Unity 利用NGUI做屏幕分辨率适配+学习UIDraggablePanel的使用
  10. System.arraycopy和Arrays.copyOf的关系
  11. 深度讲解 Python 四大常用绘图库的“绘图原理”
  12. vb 饼状图显示百分比_Matplotlib-饼图
  13. Unity 退出游戏代码
  14. Go 开发关键技术指南 | 带着服务器编程金刚经走进 2020 年(内含超全知识大图)...
  15. 联想网上审批系统方案
  16. 【深度】大变局!标准化资产的在线理财时代来临
  17. echarts设置视觉引导线穿过两行文字的效果
  18. 在phpMyAdmin使用用户口令登陆(转)
  19. JDK14+JAVAFX14+Maven定制jre打包瘦身,必成版
  20. [转]2016年度通信类 SCI期刊影响因子公布

热门文章

  1. 局域网大附件上传,支持断点续传
  2. 【python】Flask之路由
  3. 数据结构与算法一:稀疏数组 队列 链表
  4. 液态金属驱动机器人研究取得进展
  5. 模型压缩工具Distiller-剪枝
  6. ImageList 导出文件
  7. Docker以及DockerHub的使用
  8. Gensim训练维基百科词向量模型(含代码)
  9. python计算向量的模_计算Python Numpy向量之间的欧氏距离实例
  10. 前后端分离开发下的权限管控 :SpringSecurity 框架