|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 pulbieup 于 2019-11-13 10:13 编辑
' W& o2 _! L$ H& z& ^4 R& d2 q' y. S! R( t5 C O. V$ Z. R. U
MATLAB中实现了信号的阈值去噪,主要包括阈值去噪和阈值获取两方面。
) d- V4 V" ]+ l, y4 b
7 w9 R9 f3 _, ^: z* w
0 Z( o' `: P' s8 P4 D( C9 g2 P0 Y1.阈值获取5 b n% t; z: B; B! f" y
) M6 \5 @% o! D% s" R
MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。
! L$ C9 C& c+ O) b+ [& ]9 J: V k; N/ f3 ?
ddencmp的调用格式有以下三种:
5 V/ t! n8 [; H: J(1)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)
0 r' b0 @7 M& J* h(2)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wp’,X) $ L4 {' f8 p3 f! I$ d( v' g
(3)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wv’,X)
$ G$ k# D0 ^3 Q9 \+ a0 v$ k) i$ T6 X O# A0 E |* @1 U
函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;IN1取值为’den’或’cmp’,’den’表示进行去噪,’cmp’表示进行压缩;IN2取值为’wv’或’wp’,wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。
- d. N: Z. t, ^6 w( @3 N, Z函数thselect的调用格式如下:
$ h( L, E# }( R( \( |$ r3 S0 K6 |THR=thselect(X,TPTR); ( z O# n9 |6 D
THR=thselect(X,TPTR)根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。; q2 e C; `# j; o
6 c% c0 }: E' K自适应阈值的选择规则包括以下四种:
, V2 j$ c; n% i3 N: E( gTPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。 ; y- Q: p8 R" t8 B
TPTR=’heursure’,使用启发式阈值选择。
' S. p5 V% d6 J$ }5 T8 v. ~TPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))).
; j0 R' v/ F8 VTPTR=’minimaxi’,用极大极小原理选择阈值。
; W Y6 Y7 W) ?) ?阈值选择规则基于模型 y = f(t) + e,e是高斯白噪声N(0,1)。
( F8 ^1 d* L, Y6 m1 ^& o" u
; x& E) Q7 B, U# m9 ]3 i& N函数wbmpen的调用格式如下: 2 Z: g! U# x$ a f% Y( b3 n$ q+ \* t
THR=wbmpen(C,L,SIGMA,ALPHA);
$ a! n/ ^1 ~7 e+ g" C2 x( RTHR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。{C,L]是进行去噪的信号或图像的小波分解结构;SIGMA是零均值的高斯白噪声的标准偏差;ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般取ALPHA=2。1 g+ L; h: c/ c9 }
) q" ^( p& |6 j W设t*使crit(t)=-sum(c(k)^2,k<=t) + 2 * SIGMA^2 * t*(ALPHA+log(n/t))的最小值,其中c(k)是按绝对值从大到小排列的小波包系数,n是系数的个数,则THR=|c(t*)|。 6 ~. P! A; [$ u: g1 A
wbmpen(C,L,SIGMA,ALPHA,ARG)计算阈值并画出三条曲线。
% Q/ g. N, n n( _5 ]: s3 G( l* g, e) M0 b1 K
2 * SIGMA^2 * t*(ALPHA+log(n/t))
9 F1 Q! s6 W4 Z. t4 q% r0 M$ s! Tsum(c(k)^2, k<=t) 2 X" \) W$ k6 j e6 a* d
crit(t)
! h' k& d" [- o7 i* f) jwdcbm的调用格式有以下两种:
' w$ r, e8 S0 B(1)[THR,NKEEP]=wdcbm(C,L,ALPHA); 7 x* b4 y/ D" G: {
(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M); : t0 M3 \5 [" v4 U9 m0 P
函数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.! k. I v7 H5 }& N5 ]3 n6 V
0 W: n$ |3 p- W; L
& A* f% N a" I. _7 V3 x7 r$ K$ I
2.信号的阈值去噪 $ Q* f$ Y2 M/ B7 ?, K6 @/ C
3 s' ]- y- w6 w
MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。" T9 L2 _" W* j
- q/ _: L8 o0 u1 F. i4 U函数wden的调用格式有以下两种:
0 C) D/ `* v6 O- R) W(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,’wname’)
! w; N/ K! l P3 J8 u(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,’wname’)" o8 j+ n) X+ l3 K$ ?
0 Z2 Y! O5 n+ o6 I) P' v7 Q函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。
- V1 w9 J9 ~7 z1 p3 ?; j3 j6 @ |+ lTHR为阈值选择规则: ' ~0 B3 m3 f# |/ Q$ [( s
*TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。 ]0 w# R! q! Q
*TPTR=’heursure’,使用启发式阈值选择。 7 c* y E3 M; l, J% I/ M. A5 X; z
*TPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))).
3 L7 @( n8 a+ d( s/ F0 }*TPTR=’minimaxi’,用极大极小原理选择阈值。 & e0 i3 u/ ~' q4 s( h# S1 |
SORH是软阈值或硬阈值的选择(分别对应’s’和’h’)。 7 I' i; {- W" p. K% ]
SCAL指所使用的阈值是否需要重新调整,包含下面三种: . {1 n3 i' Z. J. z
*SCAL=’one’ 不调整;
/ o* u) S2 F, l- E. m# Z9 v*SCAL=’sln’ 根据第一层的系数进行噪声层的估计来调整阈值。 ; x& X5 f6 y W
*SCAL=’mln’ 根据不同的噪声估计来调整阈值。 # U( t- ~- ^0 k) J5 B2 A! \8 k$ H
XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。
& D4 D& J' s/ |+ |- ^: X8 q9 q+ y" ?
格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。
: v( A! m) M# S$ T% }9 S
" S1 @% H- V( O1 E' v; w" \函数wdencmp的调用格式有以下三种:
5 J/ e" d8 O2 @: } w(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘gbl’,X,’wname’,N,THTR,SORH,KEEPAPP); 8 a1 h6 f% Z- ^4 l
(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,X,’wname’,N,THTR,SORH); * s9 g4 f% F% P0 f/ R6 @. t5 I
(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,C,L,’wname’,N,THTR,SORH);
+ n% \% T) ^) K, T( m/ k. _- Z7 _' ?" p3 b! V9 ~2 q" n" d/ ~: P1 T
函数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。
/ S p* t" e% w: c. r( ], P5 P: s. v) T# n2 c% g
函数wthresh的调用格式如下: ( `+ j& `9 }! S% N9 J0 k& L
Y=wthresh(X,SORH,T) + B% q) E/ }. ~& Z0 ?/ D5 `, D
Y=wthresh(X,SORH,T) 返回输入向量或矩阵X经过软阈值(如果SORH=’s’)或硬阈值(如果SORH=’h’)处理后的信号。T是阈值。
8 A2 I2 s8 W3 \+ g4 ?Y=wthresh(X,’s’,T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。
$ ~, Z8 ?2 u0 }! I, g6 dY=wthresh(X,’h’,T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。
2 n0 U* j% x5 v/ L7 M: |: a1 O6 I7 M- E) w; c3 @
函数wthcoef的调用格式下面四种:
: x& h; t2 m0 ?) Z(1)NC=wthcoef(‘d’,C,L,N,P) 2 @# ?$ Q( o! c
(2)NC=wthcoef(‘d’,C,L,N) # Q) N+ j2 Z( q& b+ W6 a/ \
(3)NC=wthcoef(‘a’,C,L) + A- \. Z, O. p# o2 q
(4)NC=wthcoef(‘t’,C,L,N,T,SORH)
% N' O5 U/ {6 I* \: ^$ g函数wthcoef用于一维信号小波系数的阈值处理。+ K1 z( d& \; [ d
6 Q) w) p; B6 V4 n格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。 8 n: n1 ]* v' Y* x! g d2 ^$ D
格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。 ! d) ]+ i9 p1 Q1 @. W" X# Y, t3 n; p
格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。
& A' h7 V# `$ h7 y格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=’s‘,则为软阈值;如果SORH=’h’则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。
4 A. R# q }) f4 L3 i3 y* a) M0 x! Z' _1 d5 `' g
函数wpdencmp的调用格式有以下两种: 0 Q. P5 d5 k" f/ F* N! b/ q) V5 m2 P
(1)[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,’wname’,CRIT,PAR,KEEPAPP) 1 Z. T/ y+ k3 T$ |' I; |/ E- q
(2)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP) / A1 W2 d7 H: o- n
函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。
% B) B* V4 S0 x; }1 M; E, i$ c. h+ f8 M& x! \7 y$ a
格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。SORH的取值为’s’或’h’,表示的是软阈值或硬阈值。! Y6 M8 ~0 f' X9 r/ ?9 v
, J3 Z3 | O% j; Q& l5 u
输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。
! e, t0 M" ]4 I格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。
" X5 y& I; m" I. G" q+ E* [/ P+ q: \. M. ]. u# o- ~7 @# q( U
/ A- B4 ?/ W& a' q; Z8 B6 }/ o% M
' s8 J# U1 z6 Z8 m# \; N5 [/ l% g0 }8 L r. C7 h6 W. x- D
* M& P: e6 b: d5 V" Y
% h8 J( y; j* i
' x2 r6 j6 g9 {' Z* S5 M5 a: s* m
# ~0 h2 z# k5 P v5 Q
) ]3 \, Y; i, a) M) y) { t) J. C; i
9 e! x* i" s/ d# D* k
) t1 { x. u- \4 {; W
( R: d& F0 a9 J0 ^( u: \2 ~ |
|