设为首页收藏本站|繁體中文 快速切换版块

 找回密码
 立即加入
搜索
查看: 3483|回复: 5

为什么模极大值法无法检测奇异点

[复制链接]

该用户从未签到

尚未签到

发表于 2009-4-23 08:13:56 | 显示全部楼层 |阅读模式

马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!

您需要 登录 才可以下载或查看,没有账号?立即加入

×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。0 z  Z( d- s3 x' c' b
可是使用模极大值法检测不到第二个波的波头,不知道为什么?$ `, b' q- f1 `* z# l; [1 D7 c# \
请达人指教。  u& H6 e& c' R
源程序在如下$ e8 t7 v6 t# J" J* c
plot(cable(:,1),cable(:,2))4 ?3 B  [/ ?+ p% z
tcable=cable(:,1);
1 O( W2 B/ a& v+ f" H% Zycable=cable(:,2);
8 o* Y1 ^' @% n, }2 j" qlength(ycable)
3 v3 S( r! s  U& O4 p7 n6 H
" S1 o5 c# S& z7 L) D1 a6 p* usignal_length=33856;. L8 t- b8 d7 F* G! F4 X0 x3 C
t(1:signal_length,1)=0;
7 R# E1 w2 N) j+ L. ]3 [- L% i Ncable=length(tcable);1 R. y1 }6 {" N/ ?8 M3 N$ t! h
for i=1:Ncable/ j. r# ^- _0 R
t(i,1)=tcable(i,1);
' S6 o5 H2 T5 ~6 ` end$ r, R8 h3 D. a2 E9 u* i; S9 E6 M6 d8 ~

  q* x5 y: e$ w3 E- qy(1:signal_length,1)=0;! E# \9 C5 F- v
for i=1:Ncable8 C1 \2 D4 F; E
y(i,1)=ycable(i,1);
  H: l9 V7 C- vend
9 A& a: n' t" P noise=0.01*rand(1,length(y));8 ^2 }2 j: ~3 g6 q7 z" j
y_noise=y+noise';
! G9 }, F& b9 W; W% X8 ]% @3 @% d# |9 [) F2 @3 G
signal=y_noise;9 {4 c: D9 I" R1 s
%plot(t,signal)9 }9 b1 n, w3 _; B% s  d6 k& D
points=length(signal);        level=5;    sr=360;   num_inter=6;   wf='db3';
' x% E5 g( Z; H%所处理数据的长度    分解的级数   抽样率    迭代次数        小波名称5 N+ z' e! x1 P4 v6 h
offset=0;
7 p7 O# J! n# F. c5 v9 G  E0 p; K8 j/ Z7 s) C

; A. X$ q; s% X, n+ K; C%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:8 n" a3 x1 V- Q% Q3 D2 ?2 r5 N- r
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器$ P( e/ ?0 T# V: H- l
                                   %Hi_D:分解高通滤波器: e6 X6 G1 R" x  k
                                   %Lo_R:重建低通滤波器  [5 J1 p: M; q, l- E) P% x' ?
                                   %Hi_R:重建高通滤波器
7 \3 b# b# L9 C/ N  p# [                                   
& M1 \% w0 [( W$ Z[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌
0 X* H( M+ S# b$ d" L/ x# S# \9 X                                        %swd小波系数7 P4 B( k: y4 ^

/ Q# e( @6 T& H/ M2 G. R) wfigure;%figure1# H, N7 ~) o# F7 Y) r
subplot(level,1,1); plot(real(signal)); grid on;axis tight;
" H5 ^. g: i5 g" J) Bfor i=1:level
2 Q5 M0 q. J, i- i4 A    subplot(level+1,2,2*(i)+1);
6 f1 ~& \( y! W) j    plot(swa(i,:)); axis tight;grid on;xlabel('time');
0 ]. \3 G) d( ^) n    ylabel(strcat('a   ',num2str(i)));0 O: d/ o9 a4 a! l
    subplot(level+1,2,2*(i)+2);
; |& z( {2 Q' i9 C& b, L. l    plot(swd(i,:)); axis tight;grid on;
/ ~7 V" u" w4 Y3 n2 O* D: M2 Pylabel(strcat('d   ',num2str(i)));/ z; a6 D/ y, W. S4 i
end
7 g5 w2 L/ U8 T7 P  `0 Z8 b%以上内容是对信号进行离散小波变换。
6 C4 Y( T+ O6 Y6 v+ s/ |2 u%尺度为52 y" K- J2 g3 I1 W6 A  a

! T5 J( V5 ~/ x5 y9 t) w1 M. T# ~" B! K, K  k0 W4 e# A4 T8 v* `& q  q; a
. I2 A0 D5 G1 k  B9 o" k1 Y) ]
%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:8 d% Z4 s  `* y
% swa:小波概貌;  swd:小波细节;
- R1 w& k. V$ `% ddw:局部极大位置; wpeak:小波变换的局部极大序列。; [* ?/ ^6 l% j1 G) m
ddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零( a4 h" i/ B% q5 g# F
pddw=ddw;7 W8 |+ C/ ]  q, F- ?
nddw=ddw;8 O3 N2 M) J0 f3 J) c
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零
3 ^- E5 m4 B: b$ r! ~& tpdw=((posw(:,1:points-1)-posw(:,2:points))<0);2 w) D# h$ S& T; D
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);6 D6 \/ k8 K$ x3 q" D$ N. f
negw=swd.*(swd<0);%将swd中大于零的数置零
$ h( t' q" k% b* F- k, k) _* Endw=((negw(:,1:points-1)-negw(:,2:points))>0);
0 `" m# c) u* N& |  Inddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);5 Z8 v8 r2 ?3 @# p  ]% c/ l% ~
ddw=pddw|nddw;%|:或
7 ~* h% {$ T* }" Fddw(:,1)=1;. @  V) G. `' x) _: H. ]  C. H8 B) A
ddw(:,points)=1;
# [. T% D$ |  |/ E8 f8 Qwpeak=ddw.*swd;
( a$ t  R! r* E) H* r- u( a. e/ K  Twpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响$ f! k2 S4 U3 H/ D. T5 Q0 ?7 t1 i% {
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响
; ?6 k2 C; d$ i/ i. \5 Q%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点, B+ |# w0 e: [. H- K

0 A, k( n( |* ]. e& m5 Wwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));! L' ]3 q& C+ q1 j3 d/ F
threshold=0.1;  %  阈值
* J8 z" F: j" M; V* Q/ }2 }$ k+ p( p% U5 E. g! l
for i=1:points;* y; g7 k( s8 Y" @8 [/ B  C$ A8 w
   if (abs(wpeak_threshold(i))<threshold)6 k* e9 X, p( ]8 \! l% X
        wpeak(level,i)=0;
" n) K  S) g- p& }; l9 A0 F: r/ O    end
6 \7 V+ b' b5 [; I" g' E5 ?end; ) G( O9 y8 {5 ]! \% }  p' m
D5_wpeak=wpeak(level,:);
8 F  A1 q0 r! d& b, [$ d. G4 J& E2 d3 V) e5 ?
%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,
3 k. ~; @- n5 P! e5 F# \: r# B
; x( x/ i2 X: G$ x% r! v3 o9 Y8 F" W: V" k8 v' L
%____进行模极大值的处理:, E1 U$ T! t; k/ i/ v% T
%%C=0.8; 9 r9 O; e$ ?( ?" Y
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。
2 A) U- m9 c$ s0 i+ e  G%%D5_wpeak=wpeak(level,:);5 f- N9 h* Q2 G& \6 l" K* u& P
%%M=max(abs(D5_wpeak));. M$ ?0 g& L- d6 l; H& @/ d
%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。8 N, a( x5 r2 h; b: T3 [# A
%%for i=1:points3 v( s& T: M$ ?( R
%%    if(abs(D5_wpeak(i))<Thr)- r+ F; d: e8 E& ?' c( k$ q9 B
%%        wpeak(level,i)=0;
3 I& g& ]; L6 R% k, }5 k* B& m7 ^%%    end
. b- E& t2 w7 w, N3 e$ a; q%%end7 ~& L0 s$ c  H5 ^) e
%%D5_wpeak=wpeak(level,:);
, f; h' I6 w7 z  \; ]3 m' x1 R) M: q) _5 ?# e8 C" J
figure;%figure2
: m8 l5 g, E2 l3 Usubplot(level+1,1,1); plot(real(signal)); grid on;axis tight;
: U$ s2 W: b0 dfor i=1:level0 L* k3 N# M2 y# d7 R
    subplot(level+1,1,i+1);
* j, R/ x! _" v( b6 `0 O    plot(wpeak(i,:)); axis tight;grid on;
. ^0 G  }# V: w2 p* C1 k/ A6 `- q1 Xylabel(strcat('j=   ',num2str(i)));; {: }, J% L- e8 M
end
/ f  }# F( U) o1 e
! e1 s, H9 `4 q& Q2 Y9 U& L2 l. Y" `, W/ ^
%步骤4
- O" P' U/ |- |6 v+ L%模极大值的处理方式:: q$ n, b3 U1 f3 P3 T' P! m
%在尺度j上极大值点位置,构造一个搜索区域,& v5 G5 d% f( P2 ~# w: Q( ]
%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;
! w3 A4 C+ \: `# Y2 wD4_wpeak=wpeak(level-1,:);) e% X8 \% b' }2 ]& ^- K6 ?* x( g
sousu=6;: p9 Y; S6 _' |# `9 y
D5_p=(D5_wpeak~=0);
6 l$ d) w1 B8 S/ iO_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
( o5 ?& t( @  m5 ~7 q( P: H$ K; F% wfor P_d5=O_d5:(length(D5_wpeak)-O_d5);6 m# C' x; j0 ^4 S) Q: A
    if D5_p(P_d5)==1;
) S5 v% M) y" K        for i=1:O_d5-1;) d0 ?% ]) f& N/ b& a
        D5_p(P_d5-i)=1;  0 e: n7 c6 e4 m' B( ]8 C8 }
        end ;
& W& Q. k3 w. Q7 x$ Q    end;     ! \7 N# D( M, U, j5 N, [
end;# h6 M  |5 j) n, c9 y- d
D4_wpeak=D4_wpeak.*D5_p;/ c, C. [+ B( l0 t/ d4 |) i. s

* ]$ j) ?2 R2 m5 D1 N( t$ G! y, {D3_wpeak=wpeak(level-2,:);* o. G& a2 K1 y8 a& C
D4_p=(D4_wpeak~=0);& p: L' d& m9 T* a- d0 M5 z) V
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。& q- |0 {% ^* |; a8 z  v8 C: _# D
for P_d4=O_d4:(length(D4_wpeak)-O_d4);
$ [% [3 f) S5 f  f' X$ f8 {    if D4_p(P_d4)==1;
* p# s- n" A9 K" U" k  Y        for i=1:O_d4-1;
! K7 X5 d! ~- g# \7 G& M        D4_p(P_d4-i)=1;  & p% L7 }2 E) u3 I
        end ;; R9 [$ M$ c( v. E* ]9 Z# w, P
    end;     
1 e" T& X5 l7 send;
9 t* y% L& S  Z1 c/ U/ h* AD3_wpeak=D3_wpeak.*D4_p;) W5 B) }2 B- a) y- N; w6 K
. ~! y5 {% S6 S4 R) y
D2_wpeak=wpeak(level-3,:);4 L: l% \9 Y. \( B8 F: R
D3_p=(D3_wpeak~=0);- C% |0 q" E/ d5 U: J8 n
O_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。6 d1 k$ K; j/ H6 \% i& g/ u4 N' W
for P_d3=O_d3:(length(D3_wpeak)-O_d3);
# e% ~  Q; a! O8 n; j    if D3_p(P_d3)==1;
2 k! h' x* J: b        for i=1:O_d3-1;! w# U, ?' }' `6 `+ r
        D3_p(P_d3-i)=1;
/ }! v' w1 _2 {  A        end ;
; v. R+ y7 S+ [0 b( P$ x! [: p    end;     
; F' ]$ V$ F/ ^7 t) h# c" ~3 R8 |end;
( C( }8 D$ j  E8 d9 f# [D2_wpeak=D2_wpeak.*D3_p;: E: e* \: [/ U0 o
5 g, X9 M6 k( I
%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:
3 H! G7 B+ E  l7 DD1_wpeak=wpeak(level-4,:);# g+ k) J3 _8 Y, \( Q  s7 {
D2_p=(D2_wpeak~=0);
# T+ A) ?& d6 F5 HD1_wpeak=D1_wpeak.*D2_p;, L/ g  w+ r) s5 s

3 f3 C$ K( @, ?wpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];7 }0 T  N$ w+ z. w/ e- Q5 B
wpeak=wpeak';: o# `# U- Q8 d  E

, p. a) ^# W$ c%____重构信号:8 E/ Z6 ~. T9 z/ C
pswa=swa(level,:); % pswa: 为待重建的信号4 I, g$ V7 C) p5 r8 d/ D
wframe=(wpeak~=0); %迭代初始化
1 f: o( }. x& M. ]$ ww0=zeros(1,points);
, A4 u" o3 N- B0 y" Y" P[a,d]=swt(w0,level,Lo_D,Hi_D);
/ P* |8 r8 x7 B; R% @$ w! Yw2=d;  % w2为待重建小波
+ [6 i; w3 D6 \    for j=1:num_inter
% U- [- F! E3 |) S8 N& @       w2=Py_Pgama(d,wpeak,wframe,1,sr);   % 先进行Py投影和 Pgama投影# {" E# d/ z0 V  O, C
       w0=iswt(pswa,w2,Lo_R,Hi_R);         % 再进行Pv投影
; u2 x% o; ~8 B" Z) Q2 F6 X) C       [a,d]=swt(w0,level,Lo_D,Hi_D);      % Pv7 P. e* A. }3 ~
    end
6 |7 K  b: K" ^* V7 n  f4 ~     pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号   2 Q' L, P1 Q. ^( o
     
  p* y2 K- e' l9 ]  y, sxcrr=y'-pswa; % 重建误差! }7 V% G1 k! |! {+ A! ?
figure;%figure3
/ M" D4 P+ J' A5 o& }+ u" Ssubplot(411)$ A$ T; V" E  h  \7 o/ h; W
plot(y(1:points),'r');) a0 u3 W7 A: g$ H
axis tight;, V* [& p3 w- D( U; p
subplot(412)
  K6 X+ Z) e4 ?% vplot(signal(1:points),'r');
, ?7 z0 y1 [. [5 {- O( i6 o( ~axis tight;
3 f$ B- Y. j! w8 Q0 p: q; Osubplot(413)
3 W. T5 G. r, a/ a- yplot(pswa(1:points)); " y; p6 I1 L* I. z! m
axis tight;
, \& I$ p6 {6 v" S6 Nsubplot(414)
: C! {9 @) y! T* Zplot(xcrr(1:points));
- n' h/ L' E; t2 aaxis tight;
; K) D7 S: i1 c  m2 @figure%figure4  t2 h! v' X  r3 y) V& z! }6 J
subplot(611)
$ `" U! H8 {/ t2 i" j7 Lplot(signal);
  \3 q; Q9 V0 x4 _: S5 a6 Ksubplot(612)
5 m( ]: e6 |/ ^. S6 ^  }plot(D5_wpeak);
) N# k4 c$ N' j( V; @9 {+ K2 ~subplot(613)
( l1 x+ r, W* t& J- U9 y8 T' `plot(D4_wpeak);( ]1 I0 T! q$ F/ }3 H
subplot(614)
# B9 F" l$ L4 `& T, {2 I* G5 a6 n/ Dplot(D3_wpeak);
8 V0 w+ L/ C+ Dsubplot(615)
3 r: X4 n! f1 B9 d0 splot(D2_wpeak);
' D& s: K# J6 M  Ksubplot(616): X9 {9 S* a5 \+ A1 ]6 o% x( @0 e
plot(D1_wpeak);
* Y# p9 E- J  s6 k/ a4 C+ w4 ?[value,index]=max(abs(D2_wpeak))+ Z$ ]7 `. F% Y  {7 }5 e
[value,index]=max(abs(D1_wpeak))
更多图片 小图 大图
组图打开中,请稍候......
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • TA的每日心情
    郁闷
    2017-6-11 22:50
  • 签到天数: 4 天

    连续签到: 2 天

    [LV.2]偶尔看看I

    累计签到:5 天
    连续签到:1 天
    发表于 2009-5-12 14:43:18 | 显示全部楼层
    先用MATLAB自带的小波工具箱选择不同小波函数试试效果,你这个分解没有产生奇异点啊
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2010-3-31 20:39:44 | 显示全部楼层
    可以找到突变点吗?我想了解了解,能不能说一下啊
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2010-4-21 10:15:30 | 显示全部楼层
    回复 3# 阳光zzl
    ' d. F- M" Y$ ?& _' J+ p
    2 x* q# L& V8 Y7 W$ K7 T7 B' @6 M/ C. h7 `2 w
        我也来请教~·
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2010-7-21 11:47:20 | 显示全部楼层
    我也对模极大值感兴趣
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2010-8-8 19:00:47 | 显示全部楼层
    对小波的模极大值,也需要学习的~有些不明白~
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
    您需要登录后才可以回帖 登录 | 立即加入

    本版积分规则

    招聘斑竹

    小黑屋|手机版|APP下载(beta)|Archiver|电力研学网 ( 赣ICP备12000811号-1|赣公网安备36040302000210号 )|网站地图

    GMT+8, 2025-2-23 03:09

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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