下面这个是以前,也不知道在哪个论坛上看到的,
然后保存了下来
不知道是否有用呢
随便看看吧
【请教】关于选取阀值的程序
对于含噪的归一化信号作小波转换,再给每一层的高频系数选取阀值。程序如下:
[c,l]=wavedec(mix,3,'db44');%用db44分解得到3层的系数
ca3=appcoef(c,l,'db44',3);
cd3=detcoef(c,l,3);
cd2=detcoef(c,l,2);
cd1=detcoef(c,l,1);
%%%%%%%%----heursure%%%%%%%%%%
TPTR1='heursure';%用SURE取阀值
thr1_h=thselect(cd1,TPTR1);
thr2_h=thselect(cd2,TPTR1);
thr3_h=thselect(cd3,TPTR1);
ytsoft1_h=wthresh(cd1,'s',thr1_h);%对3层系数作阀值处理
ytsoft2_h=wthresh(cd2,'s',thr2_h);
ytsoft3_h=wthresh(cd3,'s',thr3_h);
c_h=[ca3,ytsoft3_h,ytsoft2_h,ytsoft1_h];%重构系数
可是这样得到的阀值很大,甚至比原信号最大值还要大,以致所有的高频系数都被置零,而用各种阀值选取方式所得的结果都是一样的。
希望大家看看到底中间有什么问题,因为如果用matlab的图形接口中(wavemenu)的去噪来做,他所取的阀值只有原信号的0.1左右,
所以对于高频部分,多多少少都保留了一些。
applboy :
thselect函数是对信号确定全局阈值,每一层的阈值是同一个数,选取时是根据信号,而不是小波系数。 |