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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 pulbieup 于 2019-11-13 10:13 编辑 ' a! |) ~" X3 s. J$ }
7 Y5 ^. ]. S* ^. Z6 f* Q
MATLAB中实现了信号的阈值去噪,主要包括阈值去噪和阈值获取两方面。/ @. p/ c6 f8 X5 D* H' w
  w- w* D) z1 q0 v1 x$ `& Q

3 l4 v7 H1 ~# h; U2 O4 a) z8 [1.阈值获取6 S/ _% m" x. `( l3 g" K% G: S
8 [  l% U+ h% k2 b# m
MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。( \% }( d5 E8 m( [3 i

" k, k2 E1 o) s/ I  g9 w& _ddencmp的调用格式有以下三种:
; l! y: U: S$ J: j1 W(1)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X) 3 s8 \% Y2 R. c# ^- `$ e
(2)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wp’,X) / P3 G, [: w9 K8 f5 v( m  e" |
(3)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,’wv’,X)+ T  }9 ^1 i/ u4 \

( J% i. Z, w& K函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。输入参数X为一维或二维信号;IN1取值为’den’或’cmp’,’den’表示进行去噪,’cmp’表示进行压缩;IN2取值为’wv’或’wp’,wv表示选择小波,wp表示选择小波包。返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。
8 A0 Y8 J/ j; t, ~6 y9 M函数thselect的调用格式如下:
; b; }3 w# Z; w# L8 H6 B% kTHR=thselect(X,TPTR); 7 k8 G. w8 f9 e! v9 N- s
THR=thselect(X,TPTR)根据字符串TPTR定义的阈值选择规则来选择信号X的自适应阈值。
) W7 L) y+ I2 C6 O6 `9 ^/ m6 W2 ?  O  w& i/ U% r3 y' H# I* r
自适应阈值的选择规则包括以下四种:
) D# g+ |: H; J8 J6 @9 @TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。
" ?  v6 R4 [  s  |5 a- [: o7 \TPTR=’heursure’,使用启发式阈值选择。
: X0 |2 n9 E7 I0 Q! @0 fTPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))).
4 }8 K  [9 ]9 F5 N+ WTPTR=’minimaxi’,用极大极小原理选择阈值。   T2 |4 e( Z* H6 f4 v# D& k
阈值选择规则基于模型 y = f(t) + e,e是高斯白噪声N(0,1)。
/ t; R  {% h) F% Y0 p. @$ S; D* a$ _' |: {
函数wbmpen的调用格式如下:
0 Y# S8 `- e9 f/ K$ ZTHR=wbmpen(C,L,SIGMA,ALPHA); , Q4 y$ c8 [2 ^* Q# B8 k
THR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。THR通过给定的一种小波系数选择规则计算得到,小波系数选择规则使用Birge-Massart的处罚算法。{C,L]是进行去噪的信号或图像的小波分解结构;SIGMA是零均值的高斯白噪声的标准偏差;ALPHA是用于处罚的调整参数,它必须是一个大于1的实数,一般取ALPHA=2。
8 b9 Y' j* q2 s  [7 H6 q  B8 v
" K$ ]; B- \% G设t*使crit(t)=-sum(c(k)^2,k<=t) + 2 * SIGMA^2 * t*(ALPHA+log(n/t))的最小值,其中c(k)是按绝对值从大到小排列的小波包系数,n是系数的个数,则THR=|c(t*)|。
0 z4 R8 z2 p+ {, {wbmpen(C,L,SIGMA,ALPHA,ARG)计算阈值并画出三条曲线。
# w$ U3 o0 n# F) ]( N% U: c& X9 B6 x) Z4 D0 e, @& F
2 * SIGMA^2 * t*(ALPHA+log(n/t))
# O% ^1 f5 O1 Y8 s7 ]sum(c(k)^2, k<=t)
6 q2 S+ ~5 _; m2 d/ Acrit(t)   I$ A- F8 r3 u9 j
wdcbm的调用格式有以下两种:
( p2 D* y" P: C7 i7 M. R(1)[THR,NKEEP]=wdcbm(C,L,ALPHA);
$ J. ^$ j9 E# `. s' D# \3 q+ B: E, ^(2)[THR,NKEEP]=wdcbm(C,L,ALPHA,M); / X! A/ H9 b9 Y  o
函数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% x: q7 C( P9 q2 Z4 ]0 j, |0 A4 t3 v
/ b0 n) c9 _* e2 ^: t, G  s: d$ A! F
2.信号的阈值去噪   m( X& E6 g4 ?2 Z2 j/ N
4 W" f% Y" _8 s8 i
MATLAB中实现信号的阈值去噪的函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。下面对它们的用法作简单的介绍。# @- E- R/ G0 w7 p5 i

9 w$ W8 I% r5 [; n# h# z# h函数wden的调用格式有以下两种:
" O' B* h: C5 e$ W2 `(1)[XD,CXD,LXD]=wden(X,TPTR,SORH,SCAL,N,’wname’)
3 o$ H3 P- O3 q  b, c9 j4 w" T(2)[XD,CXD,LXD]=wden(C,L,TPTR,SORH,SCAL,N,’wname’)0 n+ X& S$ I+ ^
% u; G6 @' L8 `9 C
函数wden用于一维信号的自动消噪。X为原始信号,[C,L]为信号的小波分解,N为小波分解的层数。
7 o, r# s( r4 l4 \- jTHR为阈值选择规则:
+ R8 P* r$ y. U% W*TPTR=’rigrsure’,自适应阈值选择使用Stein的无偏风险估计原理。 : |6 k) c5 q. g+ N
*TPTR=’heursure’,使用启发式阈值选择。
5 g5 |0 }( C: `. L& g- \- j*TPTR=’sqtwolog’,阈值等于sqrt(2*log(length(X))).
- p1 H1 J; M; Q, c+ N- B- J*TPTR=’minimaxi’,用极大极小原理选择阈值。
! ?. g5 W8 j, ~- }+ Y/ ?' BSORH是软阈值或硬阈值的选择(分别对应’s’和’h’)。
8 h3 X4 y/ J) D- kSCAL指所使用的阈值是否需要重新调整,包含下面三种:
  ]8 z8 J* ?2 A( W& u5 W*SCAL=’one’ 不调整; 2 Z- c" S% i+ {
*SCAL=’sln’ 根据第一层的系数进行噪声层的估计来调整阈值。
8 s- G8 I. V9 |% @*SCAL=’mln’ 根据不同的噪声估计来调整阈值。
; h! U/ }. K. S6 i( Y3 I& fXD为消噪后的信号,[CXD,LXD]为消噪后信号的小波分解结构。
2 p+ V5 J' U& j4 ]% s/ G. z- a0 ^+ C
格式(1)返回对信号X经过N层分解后的小波系数进行阈值处理后的消噪信号XD和信号XD的小波分解结构[CXD,LXD]。格式(2)返回参数与格式(1)相同,但其结构是由直接对信号的小波分解结构[C,L]进行阈值处理得到的。& J3 t  t; G. z4 O" n- I3 e
4 l! e' W( o' U" j& _, c+ l
函数wdencmp的调用格式有以下三种: 4 R8 Z* ]# U; \4 p
(1)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘gbl’,X,’wname’,N,THTR,SORH,KEEPAPP);
7 L) a# P  L' }3 d$ ^(2)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,X,’wname’,N,THTR,SORH);
9 u1 J; z+ J, n) h/ @1 O2 S(3)[XC,CXC,LXC,PERF0,PERFL2]=wdencmp(‘lvd’,C,L,’wname’,N,THTR,SORH);& O. y) c# c; W6 x

6 `% I! J; v  N- }0 s% s函数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。0 J$ J' _' K( `1 q! h
7 e' c. o$ Z. |9 Z% Z$ _+ A
函数wthresh的调用格式如下: $ a; F6 l3 M. T, p- Q
Y=wthresh(X,SORH,T) & w1 f/ @3 A6 |/ a
Y=wthresh(X,SORH,T) 返回输入向量或矩阵X经过软阈值(如果SORH=’s’)或硬阈值(如果SORH=’h’)处理后的信号。T是阈值。 7 |7 a* ~7 {4 f1 [. Q( |- J
Y=wthresh(X,’s’,T)返回的是Y=SIG(X)*(|X|-T)+,即把信号的绝对值与阈值进行比较,小于或等于阈值的点变为零,大于阈值的点为该点值与阈值的差值。
7 P" X7 O) [3 P2 ^# W4 k0 r& ?Y=wthresh(X,’h’,T)返回的是Y=X*1(|X|>T),即把信号的绝对值和阈值进行比较,小于或等于阈值的点变为零,大于阈值的点保持不变。一般来说,用硬阈值处理后的信号比用软阈值处理后的信号更粗糙。
* B" W# W5 f& h" X1 c  d, ?1 _4 H  s
函数wthcoef的调用格式下面四种: ! m- j2 D5 g2 e. Q
(1)NC=wthcoef(‘d’,C,L,N,P)
5 ?5 e- D5 J: P. [# w& ?(2)NC=wthcoef(‘d’,C,L,N) 4 i1 R& ?  ^, ]0 I
(3)NC=wthcoef(‘a’,C,L) & P, P4 Q6 @; s6 `; }8 K
(4)NC=wthcoef(‘t’,C,L,N,T,SORH)
, R# d* y8 k; n) W4 C函数wthcoef用于一维信号小波系数的阈值处理。3 y3 L( I+ K6 c. J6 V1 r
7 S' O% ~' K5 h; Q% H2 K& i4 m
格式(1)返回小波分解结构[C,L]经向量N和P定义的压缩率处理后的新的小波分解向量NC,[NC,L]构成一个新的小波分解结构。N包含被压缩的细节向量,P是把较小系数置0的百分比信息的向量。N和P的长度必须相同,向量N必须满足1<=N(i)<=length(L)-2。
$ n7 T+ E; G% A1 p+ o" \格式(2)返回小波分解结构[C,L]经过向量N中指定的细节系数置0后的小波分解向量NC。 * |1 d3 H. N. [/ W( z* _4 R
格式(3)返回小波分解结构[C,L]经过近似系数置0后的小波分解向量NC。
% ]$ k6 f5 t9 v. {格式(4)返回小波分解结构[C,L]经过将向量N作阈值处理后的小波分解向量NC。如果SORH=’s‘,则为软阈值;如果SORH=’h’则为硬阈值。N包含细节的尺度向量,T是N相对应的阈值向量。N和T的长度必须相等。
2 a) S) [  N) b! N
* d% L/ W" n$ ?4 @4 K7 W函数wpdencmp的调用格式有以下两种: 8 ]7 C- O' o3 h% Y, U- d
(1)[XD,TREED,PERF0,PERFL2]=wpdencmp(X,SORH,N,’wname’,CRIT,PAR,KEEPAPP)
1 W; V1 X& Y5 n7 m: i6 ~* ](2)[XD,TREED,PERF0,PERFL2]=wpdencmp(TREE,SORH,CRIT,PAR,KEEPAPP)
9 A+ U, D* n8 ]; s8 v函数wpdencmp用于使用小波包变换进行信号的压缩或去噪。
' _6 o" b$ a; }4 |" E0 g7 ~& }( X9 @
% [% d$ {$ l6 q" S格式(1)返回输入信号X(一维或二维)的去噪或压缩后的信号XD。输出参数TREED是XD的最佳小波包分解树;PERFL2和PERF0是恢复和压缩L2的能量百分比。PERFL2=100*(X的小波包系数范数/X的小波包系数)^2;如果X是一维信号,小波wname是一个正交小波,则PERFL2=100*||XD||^2/||X||^2。SORH的取值为’s’或’h’,表示的是软阈值或硬阈值。/ E2 A3 R* H, n6 N8 I% r2 ?( r
) M) s  X! A+ x. I
输入参数N是小波包的分解层数,wname是包含小波名的字符串。函数使用由字符串CRIT定义的熵和阈值参数PAR实现最佳分解。如果KEEPAPP=1,则近似信号的小波系数不进行阈值量化;否则,进行阈值量化。 / U# `' Q2 m0 v  P& F3 B$ U0 Z3 U( n
格式(2)与格式(1)的输出参数相同,输入选项也相同,只是它从信号的小波包分解树TREE进行去噪或压缩。
) Y  B, d+ r- J: c  x+ |8 \) J% U  l/ y8 M9 I
3 n7 Y3 ?1 }9 G$ e( f. C$ Q
/ G- T: ^" |" |/ p8 R
* h: p1 U/ C8 M1 P
! g$ K' q7 p! E! N8 P6 D+ f0 X7 o5 P
1 A* t& h4 E! M, }! Y+ C: q
- {2 P; t' k7 I
  B+ O% p, U  b6 D, q

0 x; `8 J- z# [! ]) m& v- e
* ]& i. q' y; [5 m2 ^/ f9 Z7 ^

$ N- `) Z' ]9 w. d  \. J9 e9 k; A2 b- \# v

; ^! {3 V1 p# n7 U$ ^3 v; K& y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 05:31 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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