1、 基于小波分析的语音信号噪声消除方法 及 MATLAB 实现 一、 实验内容噪声污染是我们生产、生活中普遍存在的问题。在某些环境中,噪声的影响给人们的生活和工作带来了极大不便,尤其在语音信号处理中,噪声甚至使人们正常的生活和工作无法进行。因此,消除噪声干扰具有极为重要的研究意义和广泛的应用前景。小波分析理论是一种新兴的信号处理理论,它在时间上和频率上都有很好的局部性,这使得小波分析非常适合于时-频分析,借助时- 频局部分析特性,小波分析理论已经成为信号去噪中的一种重要的工具。利用小波方法去噪,是小波分析应用于实际的重要方面。小波去噪的关键是如何选择阈值和如何利用阈值来处理小波系数,通过对小波阈
2、值化去噪的原理介绍,运用 MATLAB 中的小波工具箱,对一个含噪信号进行阈值去噪,实例验证理论的实际效果,证实了理论的可靠性。本文简述了几种小波去噪方法,其中的阈值去噪的方法是一种实现简单、效果较好的小波去噪方法。实验内容包括:(1) 分别利用软阈值法和硬阈值法对含噪信号进行去噪,并进行效果对比。(2) 分别使用 FFT 和小波分析方法对含噪信号进行去噪处理,并进行效果对比。二、 实验原理1. 小波去噪原理分析1.1. 小波去噪原理叠加性高斯白噪声是最常见的噪声模型,受到叠加性高斯白噪声“污染”的观测信号可以表示为:(1.1) iiyfz1,.n其中y i为含噪信号, 为“纯净”采样信号,z
3、 i为独立同分布的高斯白噪声i, 为噪声水平,信号长度为n. 为了从含噪信号y i中还原出真实信(0,1)idzN号 ,可以利用信号和噪声在小波变换下的不同的特性,通过对小波分解系数if进行处理来达到信号和噪声分离的目的。在实际工程应用中,有用信号通常表1现为低频信号或是一些比较平稳的信号,而噪声信号则通常表现为高频信号,所以我们可以先对含噪信号进行小波分解(如进行三层分解):(1.2)32132CDCAS图1 三层小波分解示意图其中 为分解的近似部分, 为 分解的细节部分, ,则噪声部icAicD321i分通常包含在 , , 中,用门限阈值对小波系数进行处理,重构信1D2c3号即可达到去噪的
4、目的。1.2. 小波去噪步骤总结去噪过程,可以分成以下三个步骤:1) 对观测数据作小波分解变化:(1.3)zWfy00其中y表示观测数据向量y 1,y 2,y,f是真实信号向量f 1,f 2,f n,z是高斯随机向量z 1,z 2,z n ,其中用到了小波分解变换是线性变换的性质。2)对小波系数W 0作门限阈值处理(根据具体情况可以使用软阈值处理或硬阈值处理,而且可以选择不同的阈值形式,这将在后面作详细讨论),比如选取最著名的阈值形式:(1.4)ntnlog2门限阈值处理可以表示为 ,可以证明当 n 趋于无穷大时使用阈值公式(4)对小波系数作软阈值处理可以几乎完全去除观测数据中的噪声。3) 对
5、处理过的小波系数作逆变换 重构信号:w10(1.5)dfnt*即可得到受污染采样信号去噪后的信号。22. 阈值的选取与量化Donoho-Johnstone小波收缩去噪方法的关键步骤是如何选择阈值和如何进行门限阈值处理,在这将作较为详细的讨论。2.1. 软阈值和硬阈值在对小波系数作门限阈值处理操作时,可以使用软阈值处理方法或硬阈值处理方法,硬阈值处理只保留较大的小波系数并将较小的小波系数置零:(2.1),0),(twHt软阈值处理将较小的小波系数置零但对较大的小波系数向零作了收缩:(2.2)ttS,),(直观形式见图2(图中取t=1)从图上我们可以看出软阈值处理是一种更为平滑的形式,在去噪后能产
6、生更为光滑的结果,而硬阈值处理能够更多的保留真实信号中的尖峰等特征软阈值处理实质上是对小波分解系数作了收缩,从而Donoho-Johnstone将这种去噪技术称之为小波收缩。图 2 硬阀值和软阀值2.2. 阈值的几种形式阈值的选取有多种形式,选取规则都是基于含噪信号模型式(1.1)中信号水平为1 的情况,对于噪声水平未知或非白噪声的情况可以在去噪时重新调整得到的阈值。在MATLAB中有4种阈值函数形式可以选用:(1) sqtwolog:采用固定的阈值形式,如式(1.4),因为这种阈值形式在软门限阈值处理中能够得到直观意义上很好的去噪效果。3(2) minimaxi采用极大极小原理选择的阈值,和
7、sqtwolog一样也是一种固定的阈值,它产生一个最小均方误差的极值,计算公式为:(2.3)nnt log2189.036.2,(3) rigrsure:采用史坦的无偏似然估计原理进行阈值选择,首先得到一个给定阈值的风险估计,选择风险最小的阈值 作为最终选择。t(4) heursure:选择启发式阈值它是sqtwolog和rigrsure 的综合,当信噪比很小时,估计有很大的噪声,这时heursure, 采用固定阈值sqtwolog。2.3. 阀值的选取阈值化处理的关键问题是选择合适的阈值如果阈值(门限) 太小,去噪后的信号仍然有噪声存在;相反,如果太大,重要信号特征将被滤掉,引起偏差。从直观
8、上,对于给定小波系数,噪声越大,阈值就越大。大多数阈值选择过程是针对一组小波系数,即根据本组小波系数的统计特性,计算出一个阈值。Donoho 等提出了一种典型阈值选取方法,从理论上给出并证明阈值与噪声的方差成正比,其大小为: ntnlog23. 小波消噪的 MATLAB 实现MATLAB中的小波工具包提供了全面的小波变化及其应用的各种功能,其中小波去噪方面实现Donoho-Johnstone等的去噪算法,而且可以选择使用图形界面操作工具或者去噪函数集合两种形式,图形界面操作工具直观易用,而利用函数集合可以实现更灵活强大的功能。我们利用小波去噪函数集合在中MATLAB作了一系列实验,充分体会到了
9、小波去噪的强大功能。下面是几个最为常用的小波去噪函数:1) x=wnoise(fun,n):产生Donoho-Johnstone设计的6种用于测试小波去噪效果的典型测试数据,函数根据输入参数fun的值输出名为 “blocks”,“bumps”, “heavy”, “doppler”,“quadchirp”或“mishmash”的6种函数数据,数据长度为2 n。这6种测试数据在验证和仿真实验时非常有用。2)xd,cxd,lxd=wden(x,tptr,sorh,scal,level,wname):最主要的一维小波去噪函数。其中输入参数 为输入需要的信号,tptr为2.2节中4种阀值形式, sor
10、h 设定为“s”表示用软门限阀值或硬门限阀值处理。2.2 节中说过4 种阈值形式是基于信号水平为1 的高斯白噪声模型推导得到的,当噪声不是白噪声时,必须在小波分解的不同层次估计噪声水平,scal=“one”不进行重新估计,4scal=“sln”只根据第一层小波分解系数估计噪声水平,scal=“mln”在每个不同的小波分解层次估计噪声水平,根据scal参数的设定,wden ()函数决定最终应用于每一个小波分解层次的阀值函数。最后两个参数level和wname 表示利用名为wname的小波对信号分解结构 cxd,lxd。还有功能更强大的用于一维或二维小波去噪或压缩的函数wdencmp()。3) t
11、hr=thselect(x,tptr):去噪阀值选择函数。4) y=wthresh(x,sorh,t):对信号x做阀值为t的门限阀值处理。三、 实验步骤1. 小波去噪验证仿真实验信号是由wnoise()函数产生的含标准的高斯白噪声信噪比为3 的heavy sine信号,用wden()函数进行去噪处理。1) 首先产生一个长度为2 10点,包含高斯噪声的heavy sine信号及heavy sine含噪信号, 其噪声标准差为3 , 如图3 a及b所示。2) 利用sym8小波对信号分解,在分解的第5层上,利用软阈值法去噪,结果如图3 c所示3) 同样的条件下,利用固定阈值选择算法对信号去噪,结果如图
12、3 d 所示。验证仿真程序如下:x=wnoise(3,10);ind=linspace(0,1,210);subplot(4,1,1);plot(x);title(a);x,noisyx=wnoise(3,10,3,210);subplot(4,1,2);plot(noisyx);title(b);xd=wden(x,rigrsure,s,sln,5,sym8);subplot(4,1,3);plot(xd);title(c)xd=wden(x,sqtwolog,h,sln,5,sym8);subplot(4,1,4);5plot(xd);title(d);2. 小波去噪与 FFT 去噪效果对
13、比选择MATLAB6.5 中含有噪声的仿真信号noisbloc 作为原始信号,分别使用FFT 和小波分析方法对信号进行去噪处理,采用的小波是sym8,分解层数为5,对比结果如图4所示。验证仿真程序如下:load noisbloc;x=noisbloc;subplot(2,2,1);plot(x);title(a)xd=wden(x,rigrsure,s,sln,5,sym8);subplot(2,2,2);plot(xd);title(b)p1=1/length(x)*norm(x)2; p2=1/length(x)*norm(x-xd)2; snr1=10*log(p1/p2) RMSE1=
14、sqrtm(p2)xd=wden(x,sqtwolog,h,sln,5,sym8);subplot(2,2,3);plot(xd);title(c)p1=1/length(x)*norm(x)2; p2=1/length(x)*norm(x-xd)2; snr2=10*log(p1/p2)RMSE2=sqrtm(p2)wc=0.3;N=5;b,a=butter(N,wc);xd=filter(b,a,x);subplot(2,2,4);plot(xd);title(d);p1=1/length(x)*norm(x)2; p2=1/length(x)*norm(x-xd)2; snr3=10*l
15、og(p1/p2)RMSE3=sqrtm(p2)6四、 实验结论图3 小波去噪验证仿真图(a)为原始信号(b)为含噪信号(c)为软阀值去噪信号(d)为硬阀值去噪信号通过对图3的分析,可以看出对原始信号添加噪声后得到含噪信号,利用MATLAB 中的小波工具箱对含噪信号分别进行软阈值化和硬阈值化去噪处理,得出的去噪结果与原始信号效果非常接近, 由此可以看出利用 MATLAB 中的小波变换工具箱对信号进行去噪处理是非常理想的。由图4可以看出,利用小波分析去噪的结果明显优于Fourier 变换,这是由于Fourier 变换只能在频域范围内表述,对系数进行处理的方法也相对单一,而利用小波对信号进行分解后
16、,可以采用多种计算阈值和处理阈值的方法. 对信号的噪声成分进行抑制,手段更加灵活。为了更加精确地表示去噪结果,可以7计算去噪后信号的信噪比(RSN) 和均方根误差(RMSE)。图4 小波去噪和FFT去噪效果对比图a为含噪信号图,b为软阀值去噪信号图,c为硬阀值去噪图,d为FFT去噪图表4 几种方法去噪后的RSN 和 RMSErigrsure sqtwolog FFTSNR 41.2376 37.6389 24.9344RMSE 0.9600 1.1493 2.1692信号的信噪比越高,原始信号和去噪信号的均方根误差越小,去噪信号就越接近原信号,去噪的效果也就越好。表4.给出了3种方法去噪后信噪
17、比和均方根误差的比较,可以看出,小波分析去噪结果的信噪比和均方根误差指标均优于FFT 。8五、 心得体会小波去噪是一个正在研究的课题,新的方法在不断地提出。小波变换是一种信号的时频分析方法,它具有多分辨率分析的特点,很适合探测正常信号中夹带的瞬态反常现象并展示其成分,有效区分信号中的突变部分和噪声。因此利用小波变换能有效的对信号进行消噪的同时提取含噪信号。用传统的傅立叶变换分析,显得无能为力,因为傅立叶分析是将信号完全在频率域中进行分析,它不能给出信号在某个时间点的变化情况,使得信号在时间轴上的任何一个突变,都会影响信号的整个频谱。小波变换正广泛的应用于各个领域,MATLAB给我们提供了一个很方便的工作平台,通过MATLAB 编制程序给定信号的噪声抑制和非平稳信号噪声的消除。通过实例证明:基于小波变换的消噪方法是一种提取有用信号、展示噪声和突变信号的优越方法,具有广阔的实用价值。