|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 pulbieup 于 2019-11-13 10:13 编辑 , ^# j) S" D4 F: I' Y+ y* O& ^
9 Y: S" ] Q* o; e @MATLAB中实现了信号的阈值去噪,主要包括阈值去噪和阈值获取两方面。
0 ?3 {1 p) U8 X8 p2 b0 g& @( I$ @4 }! O- t0 O) y# K( [
. L9 ]6 d8 X! f: u/ X! B p) a
1.阈值获取# {7 Z, e4 ^( `( C) V: t
9 Z9 {9 j4 C+ ^# YMATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。
% l* U+ Y( L/ v: a. ?
) Y- O% V. ` J2 K8 `ddencmp的调用格式有以下三种: . t: _0 C8 y2 M9 r9 b7 x! F
(1)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X) " ?# m) G8 {/ u% t+ S
(2)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wp’,X) % W2 c1 h! Q* M, Y1 Y' F- Q
(3)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wv’,X)/ k1 e3 Z/ C% G% Q2 p7 I
: c- S) x9 g' }' \
函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;IN1取值为’den’或’cmp’,’den’表示进行去噪,’cmp’表示进行压缩;IN2取值为’wv’或’wp’,wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。
& R. c* \6 l- V' a1 C4 M函数thselect的调用格式如下: 1 E5 z: u) ? \ }! X& y$ @+ f
THR=thselect(X,TPTR); 9 W0 ]* h. J3 w/ Y1 {. \
THR=thselect(X,TPTR)根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。- n& K0 }' \3 P+ K8 d% p4 I
8 Z# }. C. Y7 }$ \1 {9 C: C- o
自适应阈值的选择规则包括以下四种: 8 [+ m+ g3 P( X( w* G
TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
+ m5 M+ H1 A9 tTPTR=’heursure’,使用启发式阈值选择。
1 |* G+ o3 x% x4 {TPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))).
" n6 |: M. w$ ?+ m& C& }7 DTPTR=’minimaxi’,用极大极小原理选择阈值。 ' V2 [; n _6 _, q
阈值选择规则基于模型 y = f(t) + e,e是高斯白噪声N(0,1)。
# x4 b( `" m- x; H, M. p/ S7 \; W; L& O3 e: I
函数wbmpen的调用格式如下:
3 u) i7 @: I" H7 Z" e# ?9 pTHR=wbmpen(C,L,SIGMA,ALPHA); ! W" B. x C, o0 e @" b& T
THR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。{C,L]是进行去噪的信号或图像的小波分解结构;SIGMA是零均值的高斯白噪声的标准偏差;ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般取ALPHA=2。
( X0 q6 z8 @0 T( M- ?4 j
' Q" g4 X! T% _$ l; T9 j$ t设t*使crit(t)=-sum(c(k)^2,k<=t) + 2 * SIGMA^2 * t*(ALPHA+log(n/t))的最小值,其中c(k)是按绝对值从大到小排列的小波包系数,n是系数的个数,则THR=|c(t*)|。
5 l" Q: ]/ t) d& b+ }wbmpen(C,L,SIGMA,ALPHA,ARG)计算阈值并画出三条曲线。8 C) h4 c. W% p) y9 i
+ J& Z/ j o1 P- s. [* V5 l l" q2 * SIGMA^2 * t*(ALPHA+log(n/t)) , S+ \7 F) N# i+ ?
sum(c(k)^2, k<=t)
9 A7 L% j5 X4 O# q$ ycrit(t)
1 t8 Q1 t9 N5 U/ e3 s9 d; f: g1 a3 Fwdcbm的调用格式有以下两种: " N; i+ o% u( n
(1)[THR,NKEEP]=wdcbm(C,L,ALPHA);
8 L$ u; P: m- Q, L(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M); ) I, L0 n# t6 K2 g6 c. S5 k
函数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.; z7 \( ^8 f% e
" o2 m5 Y# @$ a9 K9 P7 q" }1 K# s) y
0 a# I! r) ^# A' G9 U. W
2.信号的阈值去噪
- H5 Q: {- m$ R) {3 B9 `$ C
# M2 ~8 p; I) S1 C% ?MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。
% N& Y7 Y+ e) [' w. O. t
3 n! [! A* T0 J% X+ O函数wden的调用格式有以下两种:
) L5 A# H7 D4 k+ y) r(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,’wname’)
& a- S) q, Y- `& R(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,’wname’)8 t9 z( z/ P6 j
# L4 t: g, E1 t. W0 Z* u# d
函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。
; l1 p& E) r. \& V3 D* Q" A$ nTHR为阈值选择规则: % F' ]7 D& n2 D# ~
*TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
2 @9 O, V {7 \" i: |*TPTR=’heursure’,使用启发式阈值选择。 9 t K' A5 i, I: L& P+ p: S
*TPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))). % M- e, T7 G% C% U6 w* G
*TPTR=’minimaxi’,用极大极小原理选择阈值。
3 D' H+ k$ }- V% l% V1 ^9 GSORH是软阈值或硬阈值的选择(分别对应’s’和’h’)。
7 Z8 M7 K* S w( X1 }0 f& Y1 ?SCAL指所使用的阈值是否需要重新调整,包含下面三种: ; ]! K6 Z; _/ r7 ~1 _ t
*SCAL=’one’ 不调整;
7 |, r# G: m$ O" x j8 E*SCAL=’sln’ 根据第一层的系数进行噪声层的估计来调整阈值。 ; M6 x; n* Y- B
*SCAL=’mln’ 根据不同的噪声估计来调整阈值。 " q. H- o- N" M9 ]# U- e
XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。
, G5 f0 Y! O; v9 L2 n
1 ]* ^- x9 U S格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。
# Y* z4 W' I% H. i E' E- e" I" P
; F3 h* m1 B9 ?3 x4 c9 a函数wdencmp的调用格式有以下三种:
! C# d! V- G& A1 [& @(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘gbl’,X,’wname’,N,THTR,SORH,KEEPAPP); . ], m/ }7 E: p: o! x- y
(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,X,’wname’,N,THTR,SORH);
3 f) y. g- _4 V% D! J8 Q7 m/ K U(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,C,L,’wname’,N,THTR,SORH);& A# f2 a5 b8 l3 |0 ~% d6 o+ J' F
: W$ N* b+ Y$ e* c6 S- Y
函数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。
+ S2 T4 [) z1 t/ P% S2 |
* U( B, q5 N" B函数wthresh的调用格式如下: % f( a3 q5 F1 b9 ^. k
Y=wthresh(X,SORH,T) ; k; t) a5 ]! n9 Q" \0 r7 O0 `4 r c
Y=wthresh(X,SORH,T) 返回输入向量或矩阵X经过软阈值(如果SORH=’s’)或硬阈值(如果SORH=’h’)处理后的信号。T是阈值。
+ M" R! X5 U5 k2 ?Y=wthresh(X,’s’,T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。 . N" L! B" w& p$ `) r; u
Y=wthresh(X,’h’,T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。9 X" e3 Q& a" {
4 b5 k: p" b# L' L0 f) l. Q8 N函数wthcoef的调用格式下面四种:
! J: a9 c7 L& a, g(1)NC=wthcoef(‘d’,C,L,N,P)
* T0 S9 d6 j6 a- V) L(2)NC=wthcoef(‘d’,C,L,N)
2 n. U/ T( _* r4 x5 c% b: h1 w* B(3)NC=wthcoef(‘a’,C,L)
& F) V; k! r- r0 X% S5 e(4)NC=wthcoef(‘t’,C,L,N,T,SORH)
# p) p6 P" P4 i% A$ C6 b函数wthcoef用于一维信号小波系数的阈值处理。7 @: y+ i% i7 g1 S
0 R4 Z$ o1 Z+ r- Z0 O: F# z: d; a
格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。 & u0 v/ ]" Y5 A6 T
格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。
2 q9 C" ]" z M, @+ Y/ |格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。 ! ?. S* g+ H7 s+ ?6 @9 ]6 V
格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=’s‘,则为软阈值;如果SORH=’h’则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。
$ G9 m1 R$ O9 I' N* F8 W0 D$ e" M7 y0 v x2 I" Z
函数wpdencmp的调用格式有以下两种: 6 b. R2 N( v( ^
(1)[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,’wname’,CRIT,PAR,KEEPAPP)
8 s ?4 K- z! C/ H: q% d8 S(2)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP) $ W9 e A: _# ~* ^% N
函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。
4 p6 O2 v- T8 r* ~& o, {% p$ G. ?( R& t5 d- B8 M& \
格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。SORH的取值为’s’或’h’,表示的是软阈值或硬阈值。2 E2 H% X- X" z1 |( K' m2 X
) e: v* L5 A$ B) E# e, y7 a s
输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。
* p. r4 I- U2 C! s# l1 I格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。
1 c! d n# @4 l/ x
( B. i4 J" ^) |; l8 M6 Z4 K) D4 c+ N9 f( K& p4 g: p$ Z
/ w9 o1 J8 n2 O2 I
. }+ W) p6 e9 z3 q2 h+ }5 E7 U; N4 q
) R3 _. ?7 C8 X! l$ h
$ X# c3 G/ g: @; [! y
2 k6 m$ R# h1 j
5 `9 ]" J/ T3 m4 X- |. G% I& f
: Z: s) \1 P( Y4 n1 M: `. }) l! z. _& n( _9 [9 d& R
: G) `" y$ Q# J5 b8 _2 b$ H
9 l6 Z9 D0 ~+ q& I% g; Y
/ I- o& s2 H `) C7 i, u) Z& v |
|