小波分析中MATLAB阈值获取函数及其应用附程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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'表示进行去噪,'cmp'表示进行压缩;IN2取值为'wv'或'wp',wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP 表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。
例题1:
clear all
clc
load 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','fontsize',10);
subplot(212),plot(xd),title('xd','fontsize',10);
x
xd
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的实数,一般取ALPHA=2。
例题2:
clear all
clc
load 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),title('x','fontsize',10);
subplot(312),plot(cd1),title('cd1','fontsize',10);
subplot(313),plot(xd1),title('xd1:using wbmpen','fontsize',10);
x
cd1
xd1:using wbmpen
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=length(L)-2层的分解结构;LAPHA和M必须是大于1的实数;THR是关于j的向量,THR(i)是第i层的阈值;NKEEP也是关于j的向量,NKEEP(i)是第i层的系数个数。一般压缩时ALPHA取1.5,去噪时ALPHA取3.
例题3:
clear all
clc
load 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=norm(xd2-x);
subplot(211),plot(x),title('x','fontsize',10);
subplot(212),plot(xd2),title('xd2:using wdcbm 分层降噪','fontsize',10);
020040060080010001200
-100
10
20
x
020040060080010001200
-50
5
10
15
xd2:using wdcbm 分层去噪
err2= 50.9996
四、采用强制降噪
这里使用强制降噪是将小波分解结构中的高频系数全部置为0,即滤掉所有高频部分,然后对信号进行小波重构,这种方法比较简单,且去噪后信号比较平滑,但是容易丢失信号中的有用成分。
2.信号的阈值去噪
MATLAB 中实现信号的阈值去噪的函数有wden 、wdencmp 、wthresh 、wthcoef 、wpthcoef 以及wpdencmp 。下面对它们的用法作简单的介绍。
函数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 的无偏风险估计原理。