|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 pulbieup 于 2019-11-13 10:13 编辑
+ m3 C! }$ Y+ m/ v% O* r; E7 @0 H$ L- A2 L: S
MATLAB中实现了信号的阈值去噪,主要包括阈值去噪和阈值获取两方面。
4 B" t0 b6 O2 w0 ^$ {+ H) z+ l! ]7 V! Q: c3 w+ d
! E. V8 f. ?: z6 T
1.阈值获取
% c+ V- p9 C" Q0 m) J& O' |& }8 [1 ^6 R
MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。
6 E; c( v3 F5 ^! o" Q7 @: b; \% H: ]; a, ? j$ R$ s
ddencmp的调用格式有以下三种: + b6 U6 E4 h6 q6 X- q* T
(1)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)
+ P) m+ {$ G0 J% b( B5 q* k* @# {/ W(2)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wp’,X) $ ^) u$ t1 f t5 E9 b
(3)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wv’,X)
; f4 p) I3 w7 _- B7 I0 q! s" P# f2 W% C& ~
函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;IN1取值为’den’或’cmp’,’den’表示进行去噪,’cmp’表示进行压缩;IN2取值为’wv’或’wp’,wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。 : K; R0 V$ ~( m: s, V3 q) X
函数thselect的调用格式如下:
% R4 R" `! q# ]8 Z9 VTHR=thselect(X,TPTR); 4 Q, f+ X. g7 ?* i- d
THR=thselect(X,TPTR)根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。
$ @. _( }+ ]) j5 o$ @1 I
; F4 O5 ^5 F7 U4 z" M自适应阈值的选择规则包括以下四种: 9 m N n% k ?' d& V2 O
TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
' k4 E- {" L+ T1 \, m* x8 QTPTR=’heursure’,使用启发式阈值选择。
. L9 @4 s- z9 p/ n' b& MTPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))).
5 ~: T5 t) _. P3 DTPTR=’minimaxi’,用极大极小原理选择阈值。 4 u# U2 r4 R6 C2 p. e
阈值选择规则基于模型 y = f(t) + e,e是高斯白噪声N(0,1)。
/ N$ ^( }4 o9 B& H& [
1 T# z, J0 l, f8 I- ?* t函数wbmpen的调用格式如下:
2 K: t4 c9 n1 e# A! f( YTHR=wbmpen(C,L,SIGMA,ALPHA);
) }" e$ X* a9 g9 I- Z. MTHR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。{C,L]是进行去噪的信号或图像的小波分解结构;SIGMA是零均值的高斯白噪声的标准偏差;ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般取ALPHA=2。& t" |9 Z. Q! k
# v8 w, @% X7 r! e设t*使crit(t)=-sum(c(k)^2,k<=t) + 2 * SIGMA^2 * t*(ALPHA+log(n/t))的最小值,其中c(k)是按绝对值从大到小排列的小波包系数,n是系数的个数,则THR=|c(t*)|。 7 l' {! y Z4 d9 b
wbmpen(C,L,SIGMA,ALPHA,ARG)计算阈值并画出三条曲线。
x, \4 V* X3 @+ W* W
# ]; Q( }; ], H8 ?2 * SIGMA^2 * t*(ALPHA+log(n/t))
2 p, D8 E: g) u9 t- @2 Hsum(c(k)^2, k<=t) * t0 e# u7 f! |2 N, w5 t
crit(t)
% C/ x1 g* w/ i7 \8 Bwdcbm的调用格式有以下两种:
8 g% j0 {$ ?6 b6 ]% Q(1)[THR,NKEEP]=wdcbm(C,L,ALPHA); 3 ?5 \1 d r7 Z: F# k9 X
(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M); % Z1 x8 |( N6 ?! u" A [. |3 C, y, n
函数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.. C' x& K( z: v% A
4 x" S3 |; M& G, j" R
% ?+ {( ~8 u, ~* O8 r/ e& b( A2.信号的阈值去噪 : C" m- ?. h! [9 r
# g0 Q# S4 @4 |- @
MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。7 T4 f+ `9 j6 s7 G' E
; O4 s7 a! p4 ]# L- r
函数wden的调用格式有以下两种:
) j8 ^% [1 O: n+ n(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,’wname’)
0 W' N% [* n& G$ V) k& q& ~(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,’wname’)7 v7 A2 C+ u9 u; V" _, B) i
s0 D5 I% T& Y1 ?1 r) o+ o
函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。 $ p' s4 G8 V! k% N9 j% ?
THR为阈值选择规则:
, F9 Y+ d3 c/ {- H*TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
: a* p3 ^1 n0 W" w$ O) f# a5 ]9 z+ ^ ?*TPTR=’heursure’,使用启发式阈值选择。 4 S) e5 z: Z4 b1 S1 {
*TPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))).
. m5 e6 M0 d7 _. s+ @*TPTR=’minimaxi’,用极大极小原理选择阈值。
" |" }2 q. P* E: OSORH是软阈值或硬阈值的选择(分别对应’s’和’h’)。 ( j) z+ R9 `, }3 R
SCAL指所使用的阈值是否需要重新调整,包含下面三种: + D' o2 d# V& Y+ N+ p" e
*SCAL=’one’ 不调整;
. M# T7 i, |! O+ S; l*SCAL=’sln’ 根据第一层的系数进行噪声层的估计来调整阈值。
. c7 y) W5 x7 W. M2 A*SCAL=’mln’ 根据不同的噪声估计来调整阈值。
_# e1 n1 `0 xXD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。
' K, P4 l# M/ D( ?
5 |, x4 h W& Z1 w4 ]( r, v- F格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。( t3 j7 `! B/ R6 Z- A# O
* j7 F z' L, F4 J# h% ^
函数wdencmp的调用格式有以下三种: 1 y9 W, i. {9 y. i( [( k
(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘gbl’,X,’wname’,N,THTR,SORH,KEEPAPP); ( k: p# a6 o! j8 r# g
(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,X,’wname’,N,THTR,SORH); / o7 X7 J" Y$ z" H7 i+ F
(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,C,L,’wname’,N,THTR,SORH);% v! C* v8 `- Z. |4 _% ?, v, d/ t
* Q/ R9 R$ n8 V
函数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。- \; \9 Q; q! @" I% S4 A
% Y" x- x2 `' g4 V+ `函数wthresh的调用格式如下:
7 R+ b. y, [0 l: \: y/ n- DY=wthresh(X,SORH,T)
* Z: R5 Q! H. d. a- EY=wthresh(X,SORH,T) 返回输入向量或矩阵X经过软阈值(如果SORH=’s’)或硬阈值(如果SORH=’h’)处理后的信号。T是阈值。 2 z5 b4 F2 R, f+ \- ^
Y=wthresh(X,’s’,T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。 : X8 f# `4 |5 J* S
Y=wthresh(X,’h’,T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。/ e- x/ l; W8 [9 _% A
: u: y. @9 @, i7 D. \0 P) L
函数wthcoef的调用格式下面四种: " x9 k% w V# @* R7 d6 \' s) T8 ^
(1)NC=wthcoef(‘d’,C,L,N,P) 0 ~$ v7 D0 D; x- X
(2)NC=wthcoef(‘d’,C,L,N) 0 }% h5 \" @. U- ^$ }6 y
(3)NC=wthcoef(‘a’,C,L) 3 c- U3 U$ r' T
(4)NC=wthcoef(‘t’,C,L,N,T,SORH) 3 ?7 r( I# N( W# ]% \7 q
函数wthcoef用于一维信号小波系数的阈值处理。
6 Q: G) S# {7 x% i2 `4 K
6 }/ I0 l" j# u% V' d8 @格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。 3 ], E [1 O' E& y6 V3 M! b) }" g0 q
格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。
3 V! a1 p/ b0 E+ ]* x' a/ s. Y格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。 * {* U1 F4 A4 c2 [5 t
格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=’s‘,则为软阈值;如果SORH=’h’则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。+ y8 j7 W6 O9 B3 R
/ O5 k- x5 U1 l
函数wpdencmp的调用格式有以下两种:
6 A" V3 L _# o% d0 i(1)[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,’wname’,CRIT,PAR,KEEPAPP) : f3 T1 k2 i# n) a9 U q
(2)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP) ; U" a n& A$ o9 L/ B- o
函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。
; O, Y7 G( Q) _' w. I
4 d1 }' s8 q' H. j- G8 S, z, t$ u) b格式(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 W2 S( N! p+ j" E* R- D' u* D/ n
1 a+ y3 l1 f2 B输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。
0 }) s$ d7 F1 A$ L1 A格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。
6 f- |, R6 x/ a C9 _' Z& k" T& r& d3 I: _* w& w
+ @1 p- Q/ Y5 W5 I) s0 d
3 Z" l' B' V8 U4 L$ P. R
* ?. u8 ~( J2 l
* N: U; a. a/ m# @9 l/ H5 c3 H' Y0 H ?3 Y$ H0 Y3 z: f, P
: S4 I: C l2 x
5 V d" q2 m0 |0 Q# s, x
) d$ ` ^$ {& ]( w; l
; `" U0 D5 `7 K. Y. Q2 s: O2 S! x$ U
% x# W3 e2 j5 N, q8 c) P- p0 B- W- O6 O7 d
3 z1 L2 L! ]$ @5 \ C/ W |
|