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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 pulbieup 于 2019-11-13 10:13 编辑
) F0 j$ x4 P; G# A
7 N: |3 n5 [' G  c& CMATLAB中实现了信号的阈值去噪,主要包括阈值去噪和阈值获取两方面。
% A; ?' `0 a: f8 h. R$ J
0 T2 M  R, J  ~

  e5 o/ `/ |8 N1.阈值获取
1 E. ]4 a1 D  l) y+ ~
! ]( B/ g. x+ C' h+ AMATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。
$ T8 |$ P. K& G8 |

# H1 W! d- ~8 k' `! [: T3 oddencmp的调用格式有以下三种:
$ l4 l* H' z$ u(1)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)
6 ^3 q- `0 o5 X# `- i(2)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wp’,X)
; W0 c/ @# E+ H3 w9 p8 }4 \& V; m( q(3)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wv’,X)6 q4 M  K$ ^" Z
; b) `! I/ y8 w. V5 e: j3 P
函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;IN1取值为’den’或’cmp’,’den’表示进行去噪,’cmp’表示进行压缩;IN2取值为’wv’或’wp’,wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。 2 |* f3 T' C) Z2 \! _% t4 ~
函数thselect的调用格式如下:
$ z4 i/ e/ w5 d7 Z/ M8 S. n4 jTHR=thselect(X,TPTR); 0 V5 C5 w: u6 ^4 X! M) q5 t
THR=thselect(X,TPTR)根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。
* G5 M- M. W. V! X" T6 a# m4 g
6 \0 l( j  M  g1 ^, |1 r自适应阈值的选择规则包括以下四种: ( V+ ^6 K5 M5 A( L. k: Y
TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
: _$ T2 y8 n# F( t' q+ sTPTR=’heursure’,使用启发式阈值选择。 - ]# ]- t5 _# w* y, ~( t/ H7 d
TPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))). % C. L2 s5 K! q
TPTR=’minimaxi’,用极大极小原理选择阈值。
# [9 B* I* O" Y' v; c* Z- p1 o% F阈值选择规则基于模型 y = f(t) + e,e是高斯白噪声N(0,1)。1 v; `" {* u( M; ], w6 [+ W8 H

) G6 i2 X" F1 y# |' `函数wbmpen的调用格式如下: & F* a: g6 j; P) R
THR=wbmpen(C,L,SIGMA,ALPHA); : |- T# K+ p! c0 Z+ Y& V9 @. m
THR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。{C,L]是进行去噪的信号或图像的小波分解结构;SIGMA是零均值的高斯白噪声的标准偏差;ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般取ALPHA=2。& [- V. q+ Y5 s6 S! y8 h5 _
$ r- m4 ~: j/ ?/ L+ _( Q/ V) _9 }
设t*使crit(t)=-sum(c(k)^2,k<=t) + 2 * SIGMA^2 * t*(ALPHA+log(n/t))的最小值,其中c(k)是按绝对值从大到小排列的小波包系数,n是系数的个数,则THR=|c(t*)|。
; i. @3 g6 e& Y; S2 {- ^$ }- gwbmpen(C,L,SIGMA,ALPHA,ARG)计算阈值并画出三条曲线。) E3 M  R" J0 r* F  f
' h# J8 Q. o8 l0 W
2 * SIGMA^2 * t*(ALPHA+log(n/t))
9 A3 j9 b( d) O/ h3 |sum(c(k)^2, k<=t) 3 x: x6 G0 N7 T8 |
crit(t) 3 x: e" n7 a! L8 n# g0 u/ F
wdcbm的调用格式有以下两种: ( b/ r% @  l+ _8 t
(1)[THR,NKEEP]=wdcbm(C,L,ALPHA); 4 e. v. R; b- p1 @
(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M); 0 Y6 e3 V* @+ b) J9 h# d# k4 H3 I
函数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.3 `  [; z$ z# D5 R% M" I4 ?* W9 m
1 a& q, v  e0 b8 c* _. ~
+ ~5 g5 H# |5 S/ A0 V
2.信号的阈值去噪 + a" E6 f6 k9 V* B

! J( j. l* H( x/ T  ?* Q1 Q# f* lMATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。* C  G7 X& k9 H- Y0 b% x6 o
0 ]/ y$ W- z6 _
函数wden的调用格式有以下两种: * R3 e% H: e6 g! }
(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,’wname’)   Q" H0 s" ]: |: [9 N
(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,’wname’)
- P( ^( v+ y% f0 o: Q# I9 m) M+ E, G5 O
函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。 8 D: N5 ^: X7 m# Y- P
THR为阈值选择规则: ' m& w4 B1 S; n+ o& _
*TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。 0 ~9 z# k7 q% ]9 D0 ^7 b2 X% D5 C# w
*TPTR=’heursure’,使用启发式阈值选择。
$ x0 q2 t: |3 }% G" v; E7 `% u*TPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))).
+ _) w4 L4 m% Q& |$ X*TPTR=’minimaxi’,用极大极小原理选择阈值。 / y! j" H5 u$ K. ~
SORH是软阈值或硬阈值的选择(分别对应’s’和’h’)。
* x: k; {$ p- LSCAL指所使用的阈值是否需要重新调整,包含下面三种: . s6 K  |1 V2 s) a& J7 J
*SCAL=’one’ 不调整;
( j* ~7 W. O) @) L*SCAL=’sln’ 根据第一层的系数进行噪声层的估计来调整阈值。 ' E$ r1 ~4 `9 [4 q5 E
*SCAL=’mln’ 根据不同的噪声估计来调整阈值。
. t9 l2 K8 ?( S; s1 E8 F8 o  ZXD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。: C1 A2 s8 F" N; m  ^9 d3 F

  ~$ B0 o1 l* `$ i$ F, T格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。
0 ~3 j6 R+ O+ l2 m7 `& l6 d* e& Y' P9 I
函数wdencmp的调用格式有以下三种:
* [5 Z+ x) Y$ X# E' a(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘gbl’,X,’wname’,N,THTR,SORH,KEEPAPP); 6 b) e% W0 Y- X' d9 [
(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,X,’wname’,N,THTR,SORH); / s& X- D/ g: b# l( ~+ y3 x, H
(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,C,L,’wname’,N,THTR,SORH);8 l; P$ Q  b1 J! ~1 d0 O
0 t6 G+ F' _8 \# o+ b- V# F
函数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。: G4 ~" J# [+ O4 N  R. b* n

) \$ Z0 m1 @) x- P& r0 [* N函数wthresh的调用格式如下:
8 r$ [) w; c! N8 |Y=wthresh(X,SORH,T) * j0 U& ]! B1 n! s8 d
Y=wthresh(X,SORH,T) 返回输入向量或矩阵X经过软阈值(如果SORH=’s’)或硬阈值(如果SORH=’h’)处理后的信号。T是阈值。 ' R0 J+ O; F/ p6 ]. {& Z' X
Y=wthresh(X,’s’,T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。
8 t$ A- [, E8 X- t2 YY=wthresh(X,’h’,T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。' _0 t6 ]) t' b, N6 m

( j- N! r$ ]) K* R! k/ q' ?+ A, x函数wthcoef的调用格式下面四种: * B6 K2 |+ J; Q* b% K
(1)NC=wthcoef(‘d’,C,L,N,P)
. d1 K+ j! m3 E4 t# ~# l1 [(2)NC=wthcoef(‘d’,C,L,N)
/ `4 p8 }; m4 R( B9 F  g' A(3)NC=wthcoef(‘a’,C,L) 2 i7 p4 M! W4 _0 A* O" W; I
(4)NC=wthcoef(‘t’,C,L,N,T,SORH) 9 g9 o6 Z. s( o' W9 m( [, H/ C  a, V
函数wthcoef用于一维信号小波系数的阈值处理。) e$ D2 {' _- f& k  N! i1 @
! V. ]$ }% r' r9 r6 x7 J
格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。 & F5 U2 ], M* s0 u4 v* H
格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。
! C- w% r! G( K7 n* k格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。 - C$ K+ M' g$ ^4 j. T) R4 {  Q/ L
格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=’s‘,则为软阈值;如果SORH=’h’则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。
8 w: m: n" W: h1 K8 e# ?
/ H4 w2 Q' r, i" v5 ]4 X函数wpdencmp的调用格式有以下两种:
* M+ N+ r1 E' s- @(1)[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,’wname’,CRIT,PAR,KEEPAPP)
1 u& S/ v& F( Z( d(2)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP)
$ C  n6 m: x3 p函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。$ D- ]3 e+ r' Y1 c+ ]) A. _4 O
' u7 }3 m$ F, S5 }( V: \; j- i, k1 V8 Q
格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。SORH的取值为’s’或’h’,表示的是软阈值或硬阈值。
3 d  @; d# L2 B, S+ f
3 V$ ?- O9 h  n1 l9 t' j输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。
) v' P, K- i7 t# \. R3 I9 D格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。3 E7 l4 O# n+ I; h% N

% H, D4 z. B2 h6 T8 X7 m

# h* @: v/ O' s# O; q" E  c2 d" Z; z! T7 R7 S4 Q$ P. T/ n: `
- l' l# q5 Y8 s- O- E

4 J! {" V& v& l5 ~' T( P) F

# T! D+ V# ]8 y% \( V9 Z
0 M% h; m( J, E. G& E

- G* w  ^6 p4 B# r2 o6 ^$ L
2 l2 C4 k6 q0 R
9 w5 j2 ?; C: b! {0 l3 S, Y3 |

9 o& Q/ y; y; _1 D% S/ s0 O
, y0 ]3 b& n# t7 I1 y) ]4 T
$ k+ k4 [/ T/ y
( {$ ^! a# Q. J4 [# d9 V& `
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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