个人资料整理仅限学习使用课程设计说明书课题名称:基于MATLAB的信号去噪研究姓名及学号:吴永21006021078周浩然21006021099胡军 21006021024专业班级:09电本1班成绩:指导教师:课题工作时间:2018年 11月20日—12月12日引言11. 小波去噪原理分析 (2)1.1 小波去噪原理 (2)1.2 小波去噪步骤 (3)2. 阈值的选取与量化32.1 软阈值和硬阈值 (3)2.2 阈值的几种形式 (4)2.3 阀值的选取 (5)3. 小波消噪的MATLAB实现53.1小波去噪函数集合 (5)3.2 小波去噪验证仿真 (6)4. 小波去噪的MATLAB 仿真对比实验8结语11参考文献11小波变换的概念是由法国从事石油信号处理的工程师J.Morlet在1974年首先提出的,I.Daubechies[1]的《小波十讲》对小波的普及起了重要的推动作用。
现在,它已经在科技信息产业领域取得了令人瞩目的成就。
小波分析的应用领域十分广泛[2][3][4]。
在数学方面,它已用于数值分析、构造快速数值方法、曲线曲面构造、微分方程求解、控制论等。
在信号分析方面的滤波、去噪声、压缩、传递等。
在图象处理方面的图象压缩、分类、识别与诊断,去污等。
在医学成像方面的减少B超、CT、核磁共振成像的时间,提高分辨率等。
在实际的计算机控制系统中,采样信号不可避免的受到各种噪声和干扰的污染,使得由辨识采样信号得到的系统模型存在偏差而妨碍了系统控制精度的提高。
通信信号去噪工作原理是利用噪声和信号在频域上分布的不同来进行的。
在传统的基于傅氏变换的信号去噪方法中,总是使得信号和噪声的频带重叠部分尽可能小,这样在频域通过时不变滤波,就将信号和噪声区分开。
但如果两者重叠区域很大时,就无法实现去噪的效果了。
Donoho和Johnstone[5]提出的小波收缩去噪算法对去除叠加性高斯白噪声非常有效。
由小波变换的特性可知,高斯噪声的小波变换仍然是高斯分布的,它均匀分布在频率尺度空间的各部分,而信号由于其带限性,它的小波系数仅仅集中在频率尺度空间上的有限部分。
如何从这些受噪声干扰的信号中估计得到“纯净”的信号是建立系统高精度模型和实现高性能控制的关键。
滤波器去噪是实际应用最广泛的一种方法,但时常在滤除噪声的同时导致了有用信号的失真,它是从纯频域的角度来分析应该消除哪些频率范围内的噪声。
1995年Donoho 和Johnstone提出了小波收缩去噪的技术,他们研究的是在叠加性高斯白噪声环境下检测出真实信号的情况,利用正交小波变换和高斯随机变量的性质对信号的小波分解系数做阈值量化,无失真的还原出真实信号。
本文对Donoho -Johnstone的去噪方法做了总结推广,研究了在高斯白噪声情况下选择小波变换的去噪效果,并公式化了实际数据中的几种更复杂的噪声模型;并对Donoho -Johnstone的小波去噪方法在MATLAB环境下做了较为详尽的研究,验证了小波去噪的可靠性并对比了傅里叶去噪和小波去噪的效果。
1. 小波去噪原理分析1.1 小波去噪原理叠加性高斯白噪声是最常见的噪声模型[6],受到叠加性高斯白噪声“污染”的观测信号可以表示为:(1-1>其中y i为含噪信号,为“纯净”采样信号,z i为独立同分布的高斯白噪声,为噪声水平,信号长度为n. 为了从含噪信号y i中还原出真实信号,可以利用信号和噪声在小波变换下的不同的特性,通过对小波分解系数进行处理来达到信号和噪声分离的目的。
在实际工程应用中,有用信号通常表现为低频信号或是一些比较平稳的信号,而噪声信号则通常表现为高频信号,所以我们可以先对含噪信号进行小波分解[7]<如进行三层分解):(1-2>图1-1 三层小波分解示意图其中为分解的近似部分,为分解的细节部分,,则噪声部分通常包含在,,中,用门限阈值对小波系数进行处理,重构信号即可达到去噪的目的。
1.2 小波去噪步骤总结去噪过程,可以分成以下三个步骤:1>对观测数据作小波分解变化[8]:(1-3>其中y表示观测数据向量y1,y2,…y,f是真实信号向量f1,f2,…f n,z是高斯随机向量z1,z2,…z n,其中用到了小波分解变换是线性变换的性质。
2)对小波系数W0作门限阈值处理<根据具体情况可以使用软阈值处理或硬阈值处理,而且可以选择不同的阈值形式,这将在后面作详细讨论),比如选取最著名的阈值形式[9]:(1-4>门限阈值处理可以表示为,可以证明当n趋于无穷大时使用阈值公式(4>对小波系数作软阈值处理可以几乎完全去除观测数据中的噪声。
3>对处理过的小波系数作逆变换重构信号[10]:(1-5>即可得到受污染采样信号去噪后的信号。
2. 阈值的选取与量化Donoho-Johnstone小波收缩去噪方法的关键步骤是如何选择阈值和如何进行门限阈值处理,在这将作较为详细的讨论。
2.1 软阈值和硬阈值在对小波系数作门限阈值处理操作时,可以使用软阈值处理方法或硬阈值处理方法,硬阈值处理只保留较大的小波系数并将较小的小波系数置零:(2-1>软阈值处理将较小的小波系数置零但对较大的小波系数向零作了收缩:(2-2>直观形式见图2-1<图中取t=1)从图上我们可以看出软阈值处理是一种更为平滑的形式,在去噪后能产生更为光滑的结果,而硬阈值处理能够更多的保留真实信号中的尖峰等特征软阈值处理实质上是对小波分解系数作了收缩,从而Donoho-Johnstone将这种去噪技术称之为小波收缩[11][12]。
图2-1 硬阀值和软阀值2.2 阈值的几种形式阈值的选取有多种形式,选取规则都是基于含噪信号模型式(1.1>中信号水平为1的情况,对于噪声水平未知或非白噪声的情况可以在去噪时重新调整得到的阈值。
在MATLAB中有4种阈值函数形式[13]可以选用:(1>sqtwolog:采用固定的阈值形式,如式(1.4>,因为这种阈值形式在软门限阈值处理中能够得到直观意义上很好的去噪效果。
(2>minimaxi采用极大极小原理选择的阈值,和sqtwolog一样也是一种固定的阈值,它产生一个最小均方误差的极值,计算公式为:(2-3>(3> rigrsure:采用史坦的无偏似然估计原理进行阈值选择,首先得到一个给定阈值的风险估计,选择风险最小的阈值作为最终选择。
(4> heursure:选择启发式阈值它是sqtwolog和rigrsure 的综合,当信噪比很小时,估计有很大的噪声,这时heursure, 采用固定阈值sqtwolog。
2.3 阀值的选取阈值化处理的关键问题是选择合适的阈值如果阈值(门限> 太小,去噪后的信号仍然有噪声存在。
相反,如果太大,重要信号特征将被滤掉,引起偏差。
从直观上,对于给定小波系数,噪声越大,阈值就越大。
大多数阈值选择过程是针对一组小波系数,即根据本组小波系数的统计特性,计算出一个阈值。
Donoho 等提出了一种典型阈值选取方法,从理论上给出并证明阈值与噪声的方差成正比,其大小为:(2-4>3. 小波消噪的MATLAB实现MATLAB中的小波工具包提供了全面的小波变化及其应用的各种功能,其中小波去噪方面实现Donoho-Johnstone等的去噪算法,而且可以选择使用图形界面操作工具或者去噪函数集合两种形式,图形界面操作工具直观易用,而利用函数集合可以实现更灵活强大的功能。
我们利用小波去噪函数集合在中MATLAB 作了一系列实验,充分体会到了小波去噪的强大功能。
3.1小波去噪函数集合下面是几个最为常用的小波去噪函数[14]:1> x=wnoise(fun,n>:产生Donoho-Johnstone设计的6种用于测试小波去噪效果的典型测试数据,函数根据输入参数fun的值输出名为“blocks”,“bumps”,“heavy”,“doppler”,“quadchirp”或“mishmash”的6种函数数据,数据长度为2n。
这6种测试数据在验证和仿真实验时非常有用。
2)[xd,cxd,lxd]=wden(x,tptr,sorh,scal,level,wname>:最主要的一维小波去噪函数。
其中输入参数为输入需要的信号,tptr为2.2节中4种阀值形式,sorh设定为“s”表示用软门限阀值或硬门限阀值处理。
2.2节中说过4种阈值形式是基于信号水平为1的高斯白噪声模型推导得到的,当噪声不是白噪声时,必须在小波分解的不同层次估计噪声水平,scal=“one”不进行重新估计,scal=“sln”只根据第一层小波分解系数估计噪声水平,scal=“mln”在每个不同的小波分解层次估计噪声水平,根据scal参数的设定,wden<)函数决定最终应用于每一个小波分解层次的阀值函数。
最后两个参数level和wname表示利用名为wname的小波对信号分解结构[cxd,lxd]。
还有功能更强大的用于一维或二维小波去噪或压缩的函数wdencmp(>。
3> thr=thselect(x,tptr>:去噪阀值选择函数。
4> y=wthresh(x,sorh,t>:对信号x做阀值为t的门限阀值处理。
3.2 小波去噪验证仿真实验信号是由wnoise(>函数产生的含标准的高斯白噪声信噪比为3的heavy sine信号,用wden(>函数进行去噪处理[15][16].1>首先产生一个长度为210点,包含高斯噪声的heavy sine信号及heavy sine 含噪信号, 其噪声标准差为3 , 如图3.1a及b所示。
2>利用‘sym8’小波对信号分解,在分解的第5层上,利用软阈值法去噪,结果如图3.1c 所示3>同样的条件下,利用固定阈值选择算法对信号去噪,结果如图3.1d 所示图3-1 小波去噪验证仿真图<a)为原始信号<b)为含噪信号<c)为软阀值去噪信号<d)为硬阀值去噪信号验证仿真程序如下:x=wnoise(3,10>。
ind=linspace(0,1,2^10>。
subplot(4,1,1>。
plot(x>。
title('(a>'>;[x,noisyx]=wnoise(3,10,3,2^10>。
subplot(4,1,2>。
plot(noisyx>。
title('(b>'>;xd=wden(x,'rigrsure','s','sln',5,'sym8'>。