标签:
waveletwdencmpwthreshwdendenoise |
分类: Matlab |
Denoising and Nonparametric Function Estimation
小波工具箱(Wavelet Toolbox) 提供了很多函数进行噪声函数(信号或图像)的估计。
1. 一维噪声模型
load
y
plot(y);
plot(cuspamax,
axis
legend('f(n)
|
http://s9/middle/002pSPISzy6GJKHwFrW98&690help 小波降噪" TITLE="Matlab help 小波降噪" />
2. 小波降噪的步骤
(1) 分解:选取一个小波以及分解层数 N,并计算分解结果。
(2)设置细节系数的阈值(threshold):对于从1 到 N
层小波分解结果,设置阈值并使用软阈值处理细节系数。
(3) 重建:根据原始的近似系数以及更改过的细节系数重建信号。
3. 阈值(Threshold)选取规则
Matlab通过函数 thselect 实现阈值选取。
thr = thselect(y, tptr)
tptr 是选取法则,共有4种,thr 是函数返回的阈值。
http://s16/middle/002pSPISzy6GJKHzr2f0f&690help 小波降噪" TITLE="Matlab help 小波降噪" />
4. 软阈值和硬阈值
硬阈值就是如果信号的绝对值高于 thr,那么,信号就保持不变,如果低于 thr 就置为0。
http://s7/middle/002pSPISzy6GJKHAE4uc6&690help 小波降噪" TITLE="Matlab help 小波降噪" />\
软阈值是硬阈值的一个扩展。如果信号绝对值小于阈值,则将其设置为0,如果信号大于阈值,则将其设置为sign(x)(x -
thr)。
http://s5/middle/002pSPISzy6GJKHFrj6f4&690help 小波降噪" TITLE="Matlab help 小波降噪" />
阈值选取后,可以通过函数 wthresh 作用于信号。
|
http://s2/middle/002pSPISzy6GJKHIm8V51&690help 小波降噪" TITLE="Matlab help 小波降噪" />
5. 处理 Unscaled Noise 和 Nonwhite Noise
这里主要介绍的是函数 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',用极大极小原理选择阈值。
SORH是软阈值或硬阈值的选择(分别对应's'和'h')。
SCAL指所使用的阈值是否需要重新调整,包含下面三种:
*SCAL='one' 不调整;
*SCAL='sln' 根据第一层的系数进行噪声层的估计来调整阈值。
*SCAL='mln' 根据不同的噪声估计来调整阈值。
XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。
(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',用极大极小原理选择阈值。
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,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)和(3)每层都要求有一个阈值,因此阈值向量THR的长度为N,SORH表示选择软阈值或硬阈值(分别取值为's'和'h'),参数KEEPAPP取值为1时,则低频系数不进行阈值量化,反之,低频系数要进行阈值量化。XC是要进行消噪或压缩的信号,[CXC,LXC]是XC的小波分解结构,PERF0和PERFL2是恢复或压缩L^2的范数百分比。如果[C,L]是X的小波分解结构,则PERFL2=100*(CXC向量的范数/C向量的范数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100||XC||^2/||X||^2。
(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)和(3)每层都要求有一个阈值,因此阈值向量THR的长度为N,SORH表示选择软阈值或硬阈值(分别取值为's'和'h'),参数KEEPAPP取值为1时,则低频系数不进行阈值量化,反之,低频系数要进行阈值量化。XC是要进行消噪或压缩的信号,[CXC,LXC]是XC的小波分解结构,PERF0和PERFL2是恢复或压缩L^2的范数百分比。如果[C,L]是X的小波分解结构,则PERFL2=100*(CXC向量的范数/C向量的范数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100||XC||^2/||X||^2。
实例:wden 信号降噪
sqrt_snr
init
[xref,
scal
xd
Nx
subplot(311),
title('Original
|
http://s16/middle/002pSPISzy6GJKHK6JNef&690help 小波降噪" TITLE="Matlab help 小波降噪" />
实例: wdencmp 图像的降噪
load
init
rng(init);
x
[thr,
xd
figure('Color','white')
colormap(pink(255)),
image(wcodemat(X,sm)),
figure('Color','white')
colormap(pink(255))
image(wcodemat(x,sm)),
|
http://s6/middle/002pSPISzy6GJKHPsIBd5&690help 小波降噪" TITLE="Matlab help 小波降噪" />
http://s10/middle/002pSPISzy6GJKI7FPj19&690help 小波降噪" TITLE="Matlab help 小波降噪" />
后一篇:Matlab help 小波压缩