新浪博客

wthresh--消噪阈值选取

2014-11-02 16:26阅读:

[转载]wthresh--消噪阈值选取


消噪阈值选取规则:
在MATLAB的小波工具箱中,设置软或硬阈值的函数为wthresh.m。
该函数根据sorh的值计算分解系数的软阈值或硬阈值。其中,硬阈值对应于最简单的处理方法,而软阈值具有很好的数学特性,并且所得到的理论结果是可用的。

例1:生成不同阈值下的信号
%生成线性信号
y=linspace(-1,1,100);
%设置T阈值
thr=0.4;
%计算软硬阈值
ythard=wthresh(y,'h',thr);
ytsoft=wthresh(y,'s',thr);
%显示不同阈值后的信号
subplot(131);
plot(y);
title('原始信号');
xlabel('样本序号 n');
ylabel('幅值 A');
subplot(132);
plot(ythard);
title('硬阈值信号');
xlabel('样本序号 n');
ylabel('幅值 A');

subplot(133);
plot(ytsoft);
title('软阈值信号');
xlabel('样本序号 n');
ylabel('幅值 A');


根据基本的噪声类型,阈值的选取有以下4个规则,其中每一条规则对应于函数thselect中输入参数tptr的一个选项。
(1)选项tptr='rigrsure',是一种基于Stein无偏似然估计原理的自适应阈值选择。给定一个阈值t,得到它的似然估计,再将其似然最小化,就可得到所选的阈值。这是一种软件阈值估计器。
(2)选项tptr='sqtwolog',是一种固定的阈值形式,它所产生的阈值为sqrt(2*log(length(X)))。
(3)选项tptr='heursure',是前两种阈值的综合,所选择的是最优预测变量阈值。如果信噪比很小,而SURE估计有很大的噪声,此时就需要采用这种固定的阈值形式。
(4)选项tptr='minimaxi',也是一种固定的阈值形式,它所产生的是一个最小均方差的极值,而不是无误差。
例2:计算高斯白噪声信号N(0,1)在上述4条规则下的阈值。
%产生白噪声
y=randn(1,1000);
%生成不同的阈值
thr1=thselect(y,'rigrsure')
thr2=thselect(y,'sqtwolog')
thr1=thselect(y,'heursure')
thr1=thselect(y,'minimaxi')

在本例中,信号y是一个标准的白噪声,所以每一种方法都能粗略地将所有系数剔除。从计算的结果看,对于Stein的无偏似然估计(SURE)和极大极小(minimaxi)原理的阈值选取规则,仅保存了约3%的系数;而其余两种阈值选择规则,将所有的系数都变为0.
同样地,对噪声进行小波分解时,也会产生高频系数,故一个信号的高频系数向量是有用信号和噪声信号的高频系数的叠加。由于SURE和minimaxi阈值选取规则较为保守(仅将部分系数置为0),因此在信号的高频信息有很少一部分在噪声范围内时,这两种阈值非常有用,可以将弱小的信号提取出来。其他两种阈值选取规则,在去除噪声时更为有效,但也有可能将有用信号的高频部分当作噪声信号去除掉。
在实际工程应用中,大多数信号可能包含着很多尖峰或突变,而且噪声信号也不是平稳的白噪声。对这种信号进行消噪处理时,传统的傅里叶变换是完全在频域对信号进行分析,它不能给出信号在某个时间点上的变化情况,因此分辨不出信号在时间轴上的任何一个突变。但是小波分析能同时在时频域内对信号进行分析,所以它能有效的区分信号中的突变部分和噪声,从而实现非平稳稳信号的消噪。
例3:利用小波分析对一个含噪的矩形波信号进行消噪处理
%设置信噪比和随机种子值
snr=4;
init=20556155866;
%产生原始信号sref和被高斯白噪声污染的信号s
[sref,s]=wnoise(1,11,snr,init);
%用sym8小波对信号s进行三层分解并对细节系数选用sure阈值模式和尺度噪声
xd=wden(s,'heursure','s','one',3,'sym8');

%显示信号波形
subplot(311);
plot(sref);
xlabel('样本序号 n');
ylabel('幅值 A');
title('参考信号');
subplot(312);
plot(s);
xlabel('样本序号 n');
ylabel('幅值 A');
title('含噪信号');
subplot(313);
plot(xd);
xlabel('样本序号 n');
ylabel('幅值 A');
title('消噪信号');



wthresh

Perform soft or hard thresholding
Syntax
Y = wthresh(X,SORH,T)

Description

Y = wthresh(X,SORH,T) returns the soft (if SORH = 's') or hard (if SORH = 'h') T-thresholding of the input vector or matrix X. T is the threshold value.
Y = wthresh(X,'s',T) returns ,
Y=sign(X)*(|X|-Y)+ , soft thresholding is wavelet shrinkage ( (x)+ = 0 if x < 0; (x)+ = x, if x 0 ).
Y = wthresh(X,'h',T) returns Y=X.1(|X|>T), hard thresholding is cruder.
Examples
% Generate signal and set threshold.
y = linspace(-1,1,100);
thr = 0.4;
% Perform hard thresholding.
ythard = wthresh(y,'h',thr);
% Perform soft thresholding.
ytsoft = wthresh(y,'s',thr);
% Using some plotting commands,
% the following figure is generated.
See Also
wden, wdencmp, wpdencmp wthcoef2 wthrmngr

我的更多文章

下载客户端阅读体验更佳

APP专享