《小波分析中MATLAB阈值获取函数及其应用附程序代码》由会员分享,可在线阅读,更多相关《小波分析中MATLAB阈值获取函数及其应用附程序代码(7页珍藏版)》请在金锄头文库上搜索。
1、1、小波分析中MATLAB阈值获取函数MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。一、ddencmp的调用格式有以下三种:(1)THR,SORH,KEEPAPP,CRIT=ddencmp(IN1,IN2,X)(2)THR,SORH,KEEPAPP,CRIT=ddencmp(IN1,wp,X)(3)THR,SORH,KEEPAPP,CRIT=ddencmp(IN1,wv,X)函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;IN1取值为den或cmp,den表示进行去噪,cm
2、p表示进行压缩;IN2取值为wv或wp,wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。例题1:clear allclcload noisbump;x=noisbump;c,l=wavedec(x,5,sym6); %对小波进行5层分解thr,sorh,keepapp=ddencmp(den,wv,x)xd=wdencmp(gbl,c,l,sym6,5,thr,sorh,keepapp);%显示降噪信号subplot(211),plot(x),title(x,fontsiz
3、e,10);subplot(212),plot(xd),title(xd,fontsize,10);thr =3.7856;sorh =s;keepapp=1.Err=39.3060二、函数wbmpen的调用格式如下: THR=wbmpen(C,L,SIGMA,ALPHA);THR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。C,L是进行去噪的信号或图像的小波分解结构;SIGMA是零均值的高斯白噪声的标准偏差;ALPHA是用于处罚的调整参数,它必须是一个大于1的实
4、数,一般取ALPHA=2。 例题2:clear allclcload noisbump;x=noisbump;c,l=wavedec(x,5,sym6); %对小波进行5层分解cd1=detcoef(c,l,1);sigma=median(abs(cd1)/0.6745;%以第一层求高斯包噪声的标准偏差;alpha=2;thr=wbmpen(c,l,sigma,alpha);%求取阈值keepapp=1;sorh=s;xd1=wdencmp(gbl,x,sym6,5,thr,sorh,keepapp);%求取降噪信号err1=norm(xd1-x);subplot(311),plot(x),t
5、itle(x,fontsize,10);subplot(312),plot(cd1),title(cd1,fontsize,10);subplot(313),plot(xd1),title(xd1:using wbmpen,fontsize,10);err1= 35.9768三、采用wdcbm提取阈值的分层去噪(1)THR,NKEEP=wdcbm(C,L,ALPHA);(2)THR,NKEEP=wdcbm(C,L,ALPHA,M);函数wdcbm是使用Birge-Massart算法获取一维小波变换的阈值。返回值THR是与尺度无关的阈值,NKEEP是系数的个数。C,L是要进行压缩或消噪的信号在j
6、=length(L)-2层的分解结构;LAPHA和M必须是大于1的实数;THR是关于j的向量,THR(i)是第i层的阈值;NKEEP也是关于j的向量,NKEEP(i)是第i层的系数个数。一般压缩时ALPHA取1.5,去噪时ALPHA取3.例题3:clear allclcload noisbump;x=noisbump;c,l=wavedec(x,5,sym6); %对小波进行5层分解%采用wdcbm提取阈值的分层降噪thr2,nkeep=wdcbm(c,l,2);%提取各层阈值xd2,cxd,lxd,perf0,perfl2=wdencmp(lvd,c,l,sym6,5,thr2,s)err2
7、=norm(xd2-x);subplot(211),plot(x),title(x,fontsize,10);subplot(212),plot(xd2),title(xd2:using wdcbm分层降噪,fontsize,10);err2= 50.9996四、采用强制降噪这里使用强制降噪是将小波分解结构中的高频系数全部置为0,即滤掉所有高频部分,然后对信号进行小波重构,这种方法比较简单,且去噪后信号比较平滑,但是容易丢失信号中的有用成分。2.信号的阈值去噪MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。
8、下面对它们的用法作简单的介绍。函数wden的调用格式有以下两种:(1)XD,CXD,LXD=wden(X,TPTR,SORH,SCAL,N,wname)(2)XD,CXD,LXD=wden(C,L,TPTR,SORH,SCAL,N,wname)函数wden用于一维信号的自动消噪。X为原始信号,C,L为信号的小波分解,N为小波分解的层数。THR为阈值选择规则:*TPTR=rigrsure,自适应阈值选择使用Stein的无偏风险估计原理。*TPTR=heursure,使用启发式阈值选择。*TPTR=sqtwolog,阈值等于sqrt(2*log(length(X).*TPTR=minimaxi,用
9、极大极小原理选择阈值。SORH是软阈值或硬阈值的选择(分别对应s和h)。SCAL指所使用的阈值是否需要重新调整,包含下面三种:*SCAL=one 不调整;*SCAL=sln 根据第一层的系数进行噪声层的估计来调整阈值。*SCAL=mln 根据不同的噪声估计来调整阈值。XD为消噪后的信号,CXD,LXD为消噪后信号的小波分解结构。格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构CXD,LXD。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构C,L进行阈值处理得到的。函数wdencmp的调用格式有以下三种:(1)XC,CXC
10、,LXC,PERF0,PERFL2=wdencmp(gbl,X,wname,N,THTR,SORH,KEEPAPP);(2)XC,CXC,LXC,PERF0,PERFL2=wdencmp(lvd,X,wname,N,THTR,SORH);(3)XC,CXC,LXC,PERF0,PERFL2=wdencmp(lvd,C,L,wname,N,THTR,SORH);函数wdencmp用于一维或二维信号的消噪或压缩。wname是所用的小波函数,gbl(global的缩写)表示每一层都采用同一个阈值进行处理,lvd表示每层采用不同的阈值进行处理,N表示小波分解的层数,THR为阈值向量,对于格式(2)和(
11、3)每层都要求有一个阈值,因此阈值向量THR的长度为N,SORH表示选择软阈值或硬阈值(分别取值为s和h),参数KEEPAPP取值为1时,则低频系数不进行阈值量化,反之,低频系数要进行阈值量化。XC是要进行消噪或压缩的信号,CXC,LXC是XC的小波分解结构,PERF0和PERFL2是恢复或压缩L2的范数百分比。如果C,L是X的小波分解结构,则PERFL2=100*(CXC向量的范数/C向量的范数)2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100|XC|2/|X|2。函数wthresh的调用格式如下:Y=wthresh(X,SORH,T)Y=wthresh(X,SOR
12、H,T) 返回输入向量或矩阵X经过软阈值(如果SORH=s)或硬阈值(如果SORH=h)处理后的信号。T是阈值。Y=wthresh(X,s,T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。Y=wthresh(X,h,T)返回的是Y=X*1(|X|T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。函数wthcoef的调用格式下面四种:(1)NC=wthcoef(d,C,L,N,P)(2)NC=wthcoef(d
13、,C,L,N)(3)NC=wthcoef(a,C,L)(4)NC=wthcoef(t,C,L,N,T,SORH)函数wthcoef用于一维信号小波系数的阈值处理。格式(1)返回小波分解结构C,L经向量N和P定义的压缩率处理后的新的小波分解向量NC,NC,L构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1=N(i)=length(L)-2。格式(2)返回小波分解结构C,L经过向量N中指定的细节系数置0后的小波分解向量NC。格式(3)返回小波分解结构C,L经过近似系数置0后的小波分解向量NC。格式(4)返回小波分解结构C
14、,L经过将向量N作阈值处理后的小波分解向量NC。如果SORH=s,则为软阈值;如果SORH=h则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。函数wpdencmp的调用格式有以下两种:(1)XD,TREED,PERF0,PERFL2=wpdencmp(X,SORH,N,wname,CRIT,PAR,KEEPAPP)(2)XD,TREED,PERF0,PERFL2=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP)函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参
15、数TREED是XD的最佳小波包分解树;PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*|XD|2/|X|2。SORH的取值为s或h,表示的是软阈值或硬阈值。输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。二、函数thsel