哈哈!傻眼了吧,理论和实际不可兼得啊!对于你这个问题有如下建议:
小波去噪的试验,十个有九个都喜欢用正、余弦函数,但由于小波函数的几何特征,其实不易得到满意效果,你只能选择线性强的小波基,即对称性强并且光滑的小波,嘿嘿,貌似能做DWT的所有小波基中只有sym8的对称性最强(参看http://zhidao.baidu.com/question/585223273699457565.html?from=pubpage&msgtype=2),这样你将会得到其降噪效果好于其它小波基的谬论,实际应用中如果原始信号本身特征就不规律对称则有可能其它小波基的处理效果会好于sym8,这需要试错的方法试验,是你这个原始信号对称的前提假设造成的,但不可认为sym8适合你这个特殊例子就得出结论,你这试验只适合你的假设,其实并不适合所有情形,个人认为其实不具说服力和可比性。如同我家钥匙开不了你家门,是不能得出我家钥匙不如你家钥匙的结论滴。
当你的噪声特征与信号的特征的频率相近时,小波也无能为力,它不是神,也一样分不出啥是噪声,所以其一是可增加分解层数,你这个信号只有100个数,5层已经很高了,再增大也没啥用了,可能会过多显示小波基的特征,造成扭曲失真(如果用SWT会好很多,但需要自己编制函数);其二是参数SCAL可以改为伸缩的sln,而不是固定的one,这样分解层数和SCAL都将起作用,你可以试着改改玩,效果还行。
分解5层
分解8层
你可以试试只分解一层的状况,频率最低的几处噪声会保留下来哦!
供参考:lev=5
[c,l]=wavedec(x,lev,wname)
sigma=wnoisest(c,l,1)
alpha=2
thr1=wbmpen(c,l,sigma,alpha)
[thr2,nkeep]=wdcbm(c,l,alpha)
xd1=wdencmp('gbl',c,l,wname,lev,thr1,'s',1)
[xd2,cxd,lxd,perf0,perfl2]=wdencmp('lvd',c,l,wname,lev,thr2,'h')
[thr,sorh,keepapp]=ddencmp('den','wv',x)
xd3=wdencmp('gbl',c,l,wname,lev,thr,'s',1)
subplot(411)plot(x)title('原始信号','fontsize',12)
subplot(412)plot(xd1)title('使用penalty阈值降噪后信号','fontsize',12)
subplot(413)plot(xd2)title('使用Birge-Massart阈值降噪后信号','fontsize',12)
subplot(414)plot(xd3)title('使用缺省阈值降噪后信号','fontsize',12)
s=[-1.58 0.42 0.46 0.78 -0.49 0.59 -1.3 -1.42 -0.16 -1.47 -1.35 0.36 -0.44 -0.14 1 -0.5 -0.2 -0.06 -0.6 0.42 -1.52 0.51 0.76 -1.5 0.16 -1.29 -0.65 -1.48 0.6 -1.65 -0.55]
[C,L]=wavedec(s,1,'db3')
ca1=wrcoef('a',C,L,'db3',1)
x1=ca1
[C,L]=wavedec(s,2,'db3')
ca2=wrcoef('a',C,L,'db3',2)
x2=ca2
[C,L]=wavedec(s,3,'db3')
ca3=wrcoef('a',C,L,'db3',3)
x3=ca3
[C,L]=wavedec(s,4,'db3')
ca4=wrcoef('a',C,L,'db3',4)
x4=ca4
cg = wrcoef('a',C,L,'sym5',1)
x5=cg
p=1:31
subplot(6,1,1)plot(p,s)ylabel('s')
subplot(6,1,2)plot(p,x1)ylabel('ca1')
subplot(6,1,3)plot(p,x2)ylabel('ca2')
subplot(6,1,4)plot(p,x3)ylabel('ca3')
subplot(6,1,5)plot(p,x4)ylabel('ca4')
subplot(6,1,6)plot(p,x5)ylabel('ca5') %加入的重构,是不是你要的看
X = imread('lena.bmp') % 装载原始图像subplot(131) % 新建窗口
imshow(X) % 显示图像
title('原始图像') % 设置图像标题
%生成含噪图像
init=2055615866 % 初始值
randn('seed',init) % 随机值
XX=double(X)+15*randn(size(X)) % 添加随机噪声
subplot(132) % 新建窗口
imshow(uint8(XX)) % 显示图像
title('含噪图像') % 设置图像标题
%用小波函数coif2 对图像XX 进行2 层分解
[c,l]=wavedec2(XX,2,'coif2') % 分解
n=[1,2] % 设置尺度向量
p=[80,80] % 设置阈值向量,对高频小波系数进行阈值处理
nc=wthcoef2('d',c,l,n,p,'s')
X1=waverec2(nc,l,'coif2') % 图像的二维小波重构
subplot(133) % 新建窗口
imshow(uint8(X1)) % 显示图像
title('消噪后的图像') % 设置图像标题
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)