比。如果[C,L]是x的小波分解结构,则PERFL2=100?(CXC向量的范数/C向量的范数)2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100XC/X。
224.3小波去噪对比试验
接下来按照上述小波阈值变换在信号去噪中的算法及小波阈值函数进行计算机仿真,仿真程序采用MATLAB语言编写。该节首先产生一个实验信号,然后对小波去噪时各种参数设置进行了详细的对比研究,最后用MATLAB语言对小波去噪进行仿真。
4.3.1 实验信号的产生
该节所用到的实验信号是由wnoise()函数产生的长度为211点、含标准高斯白噪声、信噪比为3的‘heavy sine’信号。
MATLAB工具箱提供了函数wnoise以实现为检验小波去噪性能产生测试噪声。其语法格式为:
X = wnoise(FUN,N)
[X,XN] = wnoise(FUN,N,SQRT_SNR) [X,XN] = wnoise(FUN,N,SQRT_SNR,INIT)
(1)X = wnoise(FUN,N)产生幅值在[0,1]之间长度为2N的信号,信号的类型由FUN指定:
FUN=1 BLOCKS 产生不规则的方波信号 FUN=2 BUMPS 产生低频噪声
FUN=3 HEAVY SIN 产生随机间断的正弦信号 FUN=4 DROPLER 产生chirp信号 FUN=5 QUADCHIRP 产生4次调频信号 FUN=6 MISHMASH 产生混杂信号
(2)[X,XN] = wnoise(FUN,N,SQRT_SNR)产生含有白噪声的信号XN,SQRT_SNR是信号的噪声比。
(3)[X,XN] = wnoise(FUN,N,SQRT_SNR,INIT)使用初始值INIT产生含噪信号。
34
下面的MATLAB 语句产生信号:
%产生一个Heavy sine初始信号x和长度为211点、含标准高斯白噪声的信号xref
snr = 3; init = 2055615866; [xref,x] = wnoise(3,11,snr,init);
subplot(221), plot(xref), axis([1 2048 -10 10]); title('Original signal');
subplot(223), plot(x), axis([1 2048 -10 10]); title(['Noisy signal - Signal to noise ratio = ',... num2str(fix(snr))]);
图4-1所示就是以上语句为产生的测试信号图形。
图4-1 原始信号和含噪信号
4.3.2 各参数下的去噪效果对比
MATLAB工具箱提供了函数wden以实现自动利用小波进行一维信号的去噪。其语法格式为:
[XD,CXD,LXD] = wden(X,TPTR,SORH,SCAL,N,'wname') [XD,CXD,LXD] = wden(C,L,TPTR,SORH,SCAL,N,'wname')
(1)[XD,CXD,LXD] = wden(X,TPTR,SORH,SCAL,N,'wname')对输入信号X进行去
35
噪处理,返回经过处理的信号XD,以及XD的小波分解结构[CXD,LXD]。 (2)[XD,CXD,LXD] = wden(C,L,TPTR,SORH,SCAL,N,'wname')根据信号小波分解结构[C,L]对信号进行去噪处理。
各参数的选择对比如下:
1.四种阈值选取方式的对比(TPTR的设置)
根据基本的噪声模型,程序中使用四种规则来选取阈值,每一种规则的选取有参数TPTR决定。TPTR的选择有以下四种阈值规则:
(1)TPTR=‘rigrsure’是一种基于史坦的无偏似然估计(二次方程)原理的自适应阈值选择。对一个给定的阈值t,得到他的似然估计,再将非似然t最小化,就得到了所选的阈值,它是一种软件阈值估计器。
(2)TPTR=‘sqtwolog’采用的是固定的阈值形式,产生的阈值大小事sqrt(2*log(length(x)))。
(3)TPTR=‘heursure’事前两种阈值的综合,是最优预测变量阈值选择。如果噪声比很小(估计有很大的噪声),在这种情况下,采用此种启发式的阈值。
(4)TPTR=‘minimaxi’采用的是一种极大极小原理,它产生一个最小均方误差值,而不是无误差。在统计学上,这种极值原理在于设计估计器。因为被消噪的信号可以看作与未知回归函数的估计式相似,这种极值估计器可以在一个给定的函数集中实现最大均方误差最小化。
在MATLAB中运行以下语句:
%不同阈值选取方式下滤波效果的比较 snr = 3; init = 2055615866; [xref,x] = wnoise(3,11,snr,init); lev = 5;
xd = wden(x,'rigrsure','s','sln',lev,'sym8'); subplot(221), plot(xd), axis([1 2048 -10 10]); title(' rigrsure ');
xd = wden(x,'heursure','s','one',lev,'sym8'); subplot(222), plot(xd), axis([1 2048 -10 10]); title(' heursure ');
36
xd = wden(x,'sqtwolog','s','sln',lev,'sym8'); subplot(223), plot(xd), axis([1 2048 -10 10]); title(' sqtwolog ');
xd = wden(x,'minimaxi','s','sln',lev,'sym8'); subplot(224), plot(xd), axis([1 2048 -10 10]); title(' minimaxi ');
[c,l] = wavedec(x,lev,'sym8');
xd = wden(c,l,'minimaxi','s','sln',lev,'sym8'); 得到4个去噪效果图如图4-2所示。
图4-2 MATLAB中的4种阈值选取方式对比
可以看出,固定阈值形式(sqtwolog)和启发式阈值(heuesure)的去噪更彻底,而由于rigrsure和minimaxi阈值选取规则较为保守(阈值较小),导致只有部分系数置零噪声去除不彻底。
2 软门限阈值和硬门限阈值处理比较(SORH的设置)
对于阈值函数的确定,Donoho提出了两种:硬阈值和软阈值。在硬阈值处理中,由于收缩函数的不连续性,会在恢复的信号中产生一些人为的“噪声点”。软阈值的连续性较好。
在MATLAB语句中,SORH=‘s’,则为软阈值处理,向量X为待处理的信号。当
37
SORH=‘h’,则为硬阈值处理。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更为粗糙。
在MATLAB下运行如下语句: %软门限阈值和硬门限阈值效果比较 snr = 3; init = 2055615866; [xref,x] = wnoise(3,11,snr,init); thr = 0.4; % 作用硬阈值
xthard = wthresh(x,'h',thr); % 作用软阈值
xtsoft = wthresh(x,'s',thr); subplot(221),plot(xthard); title('作用硬阈值的结果'); subplot(223),plot(xtsoft); title('作用软阈值的结果'); 得到去噪效果对比图如图4-3所示。
图4-3 软门限阈值和硬门限阈值处理比较
实验表明,软门限阈值处理方式一般能够取得更为平滑和理想的去噪效果。
38
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库MATLAB仿真实现图像去噪(7)在线全文阅读。
相关推荐: