EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MATLAB中实现了信号的阈值去噪,主要包括阈值去噪和阈值获取两方面。
% T: m% Q% Q- N& N: O1.阈值获取' v2 j! K h1 T$ C' A
MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。
ddencmp的调用格式有以下三种:
' J$ [% I. s. l5 q5 p(1)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X) n# E4 L- \9 }( N- H% ?+ X
(2)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,'wp',X)/ J" A; B& s6 `/ l- u; B1 i
(3)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,'wv',X)) ? O+ t O1 O
函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;IN1取值为'den'或'cmp','den'表示进行去噪,'cmp'表示进行压缩;IN2取值为'wv'或'wp',wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。 函数thselect的调用格式如下:9 F2 ]6 G% _" n. r$ z
THR=thselect(X,TPTR);6 x2 H) O* x' P/ Q7 {# i: h
THR=thselect(X,TPTR)根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。2 S* B# y3 ]9 S; k" l4 d, |- q5 R
自适应阈值的选择规则包括以下四种: F. ^( |/ K# o. a( n
*TPTR='rigrsure',自适应阈值选择使用Stein的无偏风险估计原理。. ?2 B7 \% P0 l& g1 Z- x; i
*TPTR='heursure',使用启发式阈值选择。- y9 a2 q- K& k8 [' K [' X8 I
*TPTR='sqtwolog',阈值等于sqrt(2*log(length(X))).7 N/ c! z/ \7 @4 S1 G
*TPTR='minimaxi',用极大极小原理选择阈值。3 ^. ]7 {. z7 [ q( D1 y. x1 P
阈值选择规则基于模型 y = f(t) + e,e是高斯白噪声N(0,1)。 函数wbmpen的调用格式如下:
' j, c' d5 [7 J0 W( t2 KTHR=wbmpen(C,L,SIGMA,ALPHA);
4 a% I+ M3 z) xTHR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。{C,L]是进行去噪的信号或图像的小波分解结构;SIGMA是零均值的高斯白噪声的标准偏差;ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般取ALPHA=2。7 n* _, @1 I0 w- P d+ H; `' J
设t*使crit(t)=-sum(c(k)^2,k<=t) + 2 * SIGMA^2 * t*(ALPHA+log(n/t))的最小值,其中c(k)是按绝对值从大到小排列的小波包系数,n是系数的个数,则THR=|c(t*)|。
& [' a! n, o4 z& P- ~* b/ wwbmpen(C,L,SIGMA,ALPHA,ARG)计算阈值并画出三条曲线。
; f; d4 T t1 T: O3 C: [( G0 A4 q2 * SIGMA^2 * t*(ALPHA+log(n/t))
. w2 g' V2 s4 B; O1 ksum(c(k)^2, k<=t)" ?" w5 x C l. i3 x
crit(t) wdcbm的调用格式有以下两种:, o. k9 l8 V7 c+ ^ }4 s
(1)[THR,NKEEP]=wdcbm(C,L,ALPHA);" I, U& X3 k# g7 }
(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M);" Y- L1 T' U% E3 U4 o ]
函数wdcbm是使用Birge-Massart算法获取一维小波变换的阈值。返回值THR是与尺度无关的阈值,NKEEP是系数的个数。[C,L]是要进行压缩或消噪的信号在j=length(L)-2层的分解结构;LAPHA和M必须是大于1的实数;THR是关于j的向量,THR(i)是第i层的阈值;NKEEP也是关于j的向量,NKEEP(i)是第i层的系数个数。一般压缩时ALPHA取1.5,去噪时ALPHA取3.
* B% f8 X3 a1 J9 E9 }2.信号的阈值去噪( S% h& l- V' L+ R. _
MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。
函数wden的调用格式有以下两种:
" @5 i" W6 ]" k6 ` G(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,'wname')
- u. z7 H& ]6 P6 ?(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,'wname')$ ]- y$ a* h* b
函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。2 u1 y, l/ [3 j/ I' {
THR为阈值选择规则:
/ W `% j8 i' M }* w4 @*TPTR='rigrsure',自适应阈值选择使用Stein的无偏风险估计原理。3 P. t; }1 K' T/ b4 u# i1 k7 R
*TPTR='heursure',使用启发式阈值选择。
. ?8 g, b8 X( u. j*TPTR='sqtwolog',阈值等于sqrt(2*log(length(X))).3 o( Y1 k4 F* X, w8 B3 h7 v
*TPTR='minimaxi',用极大极小原理选择阈值。" Z2 W, p3 z* A9 d h9 J
SORH是软阈值或硬阈值的选择(分别对应's'和'h')。
2 w" d! v# t% [. W, F' vSCAL指所使用的阈值是否需要重新调整,包含下面三种:
3 X: H& V, @2 U e" t' z*SCAL='one' 不调整;' l/ m7 @3 @. s- O; q1 K
*SCAL='sln' 根据第一层的系数进行噪声层的估计来调整阈值。
4 z) b% n% j: M" C/ y# m*SCAL='mln' 根据不同的噪声估计来调整阈值。. o$ E$ V% Z( L+ h$ Y! p! `( j
XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。 函数wdencmp的调用格式有以下三种:
, ^- p9 t! L, e( U/ a(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('gbl',X,'wname',N,THTR,SORH,KEEPAPP);
2 e- O, ?1 p n% Z# ]2 h( g(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',X,'wname',N,THTR,SORH);$ ~$ j' f# \& @6 K
(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp('lvd',C,L,'wname',N,THTR,SORH);
- n7 b$ [5 D- r* N函数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。 函数wthresh的调用格式如下:& C2 G0 X" w5 p. v$ n
Y=wthresh(X,SORH,T)5 \4 S2 L$ b$ D+ x' F
Y=wthresh(X,SORH,T) 返回输入向量或矩阵X经过软阈值(如果SORH='s')或硬阈值(如果SORH='h')处理后的信号。T是阈值。# C Q& W! u* s: y% b
Y=wthresh(X,'s',T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。% C+ q6 ]7 t. D0 s% c' o k. y8 e) n* Q
Y=wthresh(X,'h',T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。 函数wthcoef的调用格式下面四种:' _9 k7 y% i' V# O' J. N
(1)NC=wthcoef('d',C,L,N,P)* J8 }9 H3 l# l% z+ f% F
(2)NC=wthcoef('d',C,L,N)
# t5 Z3 b; o5 H1 g: l(3)NC=wthcoef('a',C,L)
8 |- ^7 f" n# M& ]2 d$ H! x. N0 a: S b(4)NC=wthcoef('t',C,L,N,T,SORH)
Q2 K4 G1 Y+ v2 @, M+ n函数wthcoef用于一维信号小波系数的阈值处理。
2 L7 ^% o4 T! h格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。: U# @2 \6 e5 Y) C/ E) g
格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。
* R. }4 r1 ?. Q* D) v7 L( T格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。. X; z* W* O: M0 d: {' v/ P
格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=’s‘,则为软阈值;如果SORH='h'则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。 函数wpdencmp的调用格式有以下两种:
- O! w8 I! A2 ]/ c+ r) E(1)[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,'wname',CRIT,PAR,KEEPAPP)6 y1 a; b: f, v* P: G% w$ G& `
(2)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP)
/ P7 q: A {- ]函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。2 T4 Q: O9 y C1 u: H
格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。SORH的取值为's'或'h',表示的是软阈值或硬阈值。8 d+ J$ N }+ [9 O/ }. U* ^
输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。
/ J6 i& I# h+ l& ]' [7 q4 r格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。
+ H! [% i h6 R) w: a2 _3 K1 i ; K/ w' H% g& I9 H, @# s% c
|