找回密码
 注册
关于网站域名变更的通知
查看: 658|回复: 1
打印 上一主题 下一主题

看看大神在MATLAB中是怎样实现信号的阈值去噪

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-11-13 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 pulbieup 于 2019-11-13 10:13 编辑
8 F. J/ o% c. [* Y
, c* ^8 v( ~+ dMATLAB中实现了信号的阈值去噪,主要包括阈值去噪和阈值获取两方面。
: O, E: U4 n3 k* o' j
- `5 H9 j! O6 V% ?
. K! `) b- m7 ^. [7 B$ a
1.阈值获取
! N, p3 v- x" `& ]) A
* n( t* C( X& I0 |+ E2 n% eMATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。: N) F+ Q, X3 g$ B. h

# a, F: T9 S4 t( W2 Bddencmp的调用格式有以下三种: . Q0 f# W4 ^! v( [
(1)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)
$ |  @9 c1 o3 {- H/ X5 ?(2)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wp’,X) 7 q" n4 I7 {2 `  o# A2 s3 ^
(3)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wv’,X)
1 K% T  Y( L- Q

0 O) C4 e: ]4 D函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;IN1取值为’den’或’cmp’,’den’表示进行去噪,’cmp’表示进行压缩;IN2取值为’wv’或’wp’,wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。 * c& U8 w$ R% P9 ]6 w$ T
函数thselect的调用格式如下:
8 C8 v8 h; A. p$ lTHR=thselect(X,TPTR); ) Y* S# s% _1 e4 W& J$ q
THR=thselect(X,TPTR)根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。3 x+ i2 @$ U% D" N7 W( ]8 \8 G% T

3 ^# y. d( b( Z5 ?( l# U0 Q自适应阈值的选择规则包括以下四种:
4 J3 D7 j) u- [1 n, ATPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
, B( N; W2 V5 OTPTR=’heursure’,使用启发式阈值选择。
3 ^$ c2 H, m: K- FTPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))).
& t; m; o* V: @; XTPTR=’minimaxi’,用极大极小原理选择阈值。 ! ~: O" \5 R/ n# {
阈值选择规则基于模型 y = f(t) + e,e是高斯白噪声N(0,1)。9 j" w! p" A( R* [$ O5 t

$ ]: Q$ O  f* H1 m8 W; v函数wbmpen的调用格式如下:
, B  f. A% `% P: w1 A% r3 ^THR=wbmpen(C,L,SIGMA,ALPHA); # ~4 B: p* t2 U0 ~
THR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。{C,L]是进行去噪的信号或图像的小波分解结构;SIGMA是零均值的高斯白噪声的标准偏差;ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般取ALPHA=2。
$ o- s+ T; g& i5 ]: p
) C' C) g9 T: c( g设t*使crit(t)=-sum(c(k)^2,k<=t) + 2 * SIGMA^2 * t*(ALPHA+log(n/t))的最小值,其中c(k)是按绝对值从大到小排列的小波包系数,n是系数的个数,则THR=|c(t*)|。 / p7 m1 `- X- ~1 i! X: Z) V! o
wbmpen(C,L,SIGMA,ALPHA,ARG)计算阈值并画出三条曲线。7 {& a. m  v: ^! U" }& Z" L& e
, j6 Y8 U6 P! R, B+ Y- c: R5 j' G5 {
2 * SIGMA^2 * t*(ALPHA+log(n/t))   ]1 K) L* K$ A: n1 H
sum(c(k)^2, k<=t) 8 |9 J7 Y5 K, `5 @7 p0 H9 L
crit(t)
0 k& o! J% c+ l& Zwdcbm的调用格式有以下两种:
7 O/ {5 ]6 K; Z, ?# U" O7 d(1)[THR,NKEEP]=wdcbm(C,L,ALPHA); 1 m) p* L  u3 |! v- m
(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M); * {) a5 C, ^1 h- r
函数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.1 I0 B6 F: \- O# K& w! \: J3 X

* y) q+ A) R: ~  q& g+ ^# O, C8 t. N- a4 @
2.信号的阈值去噪 & W& W+ l. H% A$ j
+ B: l4 t4 ?& t: `4 s
MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。0 A- F- Y+ M$ Z) X# ]
! \# k" e! [9 q# q
函数wden的调用格式有以下两种: % q; V  M" N- b6 `# W/ @
(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,’wname’)
) x6 V1 [9 d: L3 _- }(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,’wname’)" g5 s+ D0 m  O7 Y
5 L1 X6 y0 V) }: S, O- b
函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。 ! |% P, D& T! ~4 u/ h
THR为阈值选择规则:
, a4 y: `% w3 r) a+ }% G*TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
& N% f, w: ~* T2 u*TPTR=’heursure’,使用启发式阈值选择。
4 g* R5 C3 [7 y*TPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))). ) h$ x% d: [4 D0 B; ~, C5 d1 I
*TPTR=’minimaxi’,用极大极小原理选择阈值。 4 R% [/ k6 t9 V9 a: s* w5 B
SORH是软阈值或硬阈值的选择(分别对应’s’和’h’)。
5 s7 x# N* c  S5 h, A# g' bSCAL指所使用的阈值是否需要重新调整,包含下面三种:
  A( _' X' C2 |" s6 _* z*SCAL=’one’ 不调整; $ r/ N2 E/ Q+ R4 Z# p; J8 T
*SCAL=’sln’ 根据第一层的系数进行噪声层的估计来调整阈值。 , s& V7 Q' T" t8 x" {; N
*SCAL=’mln’ 根据不同的噪声估计来调整阈值。 2 ?/ g" G+ A4 r) E
XD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。
/ e! |0 H$ I7 a+ y2 E
8 s7 j5 v. C5 `7 E: ?2 n' E( g+ q6 u格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。2 f$ O  x5 A6 q5 f' Y

! A- H1 Y, J  v; V函数wdencmp的调用格式有以下三种:
; {( B, L1 \! X(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘gbl’,X,’wname’,N,THTR,SORH,KEEPAPP);
0 {: `" z6 B  w& N( @2 z(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,X,’wname’,N,THTR,SORH);
& e5 `" s) L7 ~  u(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,C,L,’wname’,N,THTR,SORH);- p+ u5 J, v- y  {6 u

, L+ O; p7 \3 K; j# y6 W: i函数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。
8 I$ P/ }- ^6 G' q7 s0 s0 ^, z" q
& S/ L- |) f: t. T- o9 r4 e# M/ y# z函数wthresh的调用格式如下:
5 i% c& {; V' a+ gY=wthresh(X,SORH,T) 8 m* B; `; C/ U1 v$ N( H& ]; V* ?3 O
Y=wthresh(X,SORH,T) 返回输入向量或矩阵X经过软阈值(如果SORH=’s’)或硬阈值(如果SORH=’h’)处理后的信号。T是阈值。 ' c  l( [6 o6 \$ W( S
Y=wthresh(X,’s’,T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。 9 o5 @6 {5 i& O
Y=wthresh(X,’h’,T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。
+ d7 k, J$ Z" |+ g# q% [. A# _& n( \& W$ E3 V, C
函数wthcoef的调用格式下面四种:
- @0 h# f3 e: G" p  P(1)NC=wthcoef(‘d’,C,L,N,P) - I# F( p. x$ V' T/ ^, j) s
(2)NC=wthcoef(‘d’,C,L,N)
% |2 U/ }- x& E3 j. ]8 v8 t(3)NC=wthcoef(‘a’,C,L)
& q( Y* D1 h; e6 x5 u2 J(4)NC=wthcoef(‘t’,C,L,N,T,SORH)
1 \$ U; r; r) V  F7 N函数wthcoef用于一维信号小波系数的阈值处理。
  l( E, }8 H1 X6 S1 h
& X& z$ t) a: m5 |/ }/ D8 k4 K5 q  Y格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。 1 [* O. C  [7 M+ b! Q- f6 R
格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。
; y6 u$ \3 U7 A; k格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。 0 K& B. a0 ^5 q) g& J
格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=’s‘,则为软阈值;如果SORH=’h’则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。) w/ [; D9 m& ]3 Z3 V; ?9 \3 Y, Z

2 A$ _' R" e0 o函数wpdencmp的调用格式有以下两种:
5 K2 I& D* Y: G" I6 b(1)[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,’wname’,CRIT,PAR,KEEPAPP) + h& _+ U3 I5 O* P% f
(2)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP) 0 \1 d9 I3 R1 ^9 L$ D# l
函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。, w. X9 n8 Y7 r; Q4 }5 |* w

4 l$ B5 G4 s: c& |. }3 k格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。SORH的取值为’s’或’h’,表示的是软阈值或硬阈值。* I5 b! h, v8 J# X2 N* M( N9 e% u  j

  u/ b) o6 Y3 X" b) U输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。 . l' T/ M) Y  _, v" e# z
格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。
+ P2 d0 _/ J* U* m$ X- V; Q  w2 z9 Z9 f: b/ B' x
) A4 @7 F8 _1 u& {
9 K' s: t" g2 N" A& p- n' g" H

* K4 R# W! [. d2 }' o! y- u
' y% i: n3 N# t4 w9 f3 G( ~1 }

% J/ ?. Z2 w* Q" j& x. \+ O- [) }1 Y, k5 Z
# f  v  V: |; h

8 v6 j5 Z  I! M4 p8 \' j3 w! c
' T: Z, a  u% \8 V9 b( O* g
" F- N' T* _# B4 s) o
; U0 f' ^9 ^- A( D, {: z
  U' U* u2 z) D3 S% D6 D

, A. P! o! v7 ?5 Y3 I! K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-5 10:25 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表