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

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

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

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。
7 B$ Z1 z, P4 ~4 b3 @9 S可是使用模极大值法检测不到第二个波的波头,不知道为什么?+ E6 \; m" ~/ f1 w. ?+ r4 u2 _
请达人指教。
( S; T4 d% ?& \源程序在如下
4 }& h. `- S, @) T( G: P1 h. `, Kplot(cable(:,1),cable(:,2))
9 B- \9 n: M5 m/ Z9 Otcable=cable(:,1);
, }/ v: R4 U+ l1 c) M6 P. B# Wycable=cable(:,2);
) K$ @- L" A3 K+ xlength(ycable)$ R# B0 v9 K  s& P
6 U" @! _0 e, z. P9 z: j/ ~
signal_length=33856;
, }! A1 H8 ]7 F( ^( c! R. ` t(1:signal_length,1)=0;5 Y+ @4 M  I* Z  u8 k7 O) W! J) \
Ncable=length(tcable);
  c# s4 Q" L( a( M% Z# g for i=1:Ncable
# J# }3 [7 U" j t(i,1)=tcable(i,1);
7 I, R" [) D2 i6 `" u end
7 f/ \- Z5 i0 Q! `/ [8 _# L
, M6 s5 g* M& g9 G% f1 W) qy(1:signal_length,1)=0;$ d" P5 Y: z# E
for i=1:Ncable5 K7 E/ o" ~; N0 ?9 h6 B
y(i,1)=ycable(i,1);) e  {% c& ^( ~& }; k
end
4 F  h! y6 |: j3 K0 J+ d8 g noise=0.01*rand(1,length(y));( n' y: y; p6 o4 E7 j2 P
y_noise=y+noise';3 _7 x4 ]& R' Q; Q( C3 D% g! P

! V# m: k& u1 Q7 W7 jsignal=y_noise;
9 o0 Q3 c/ U" y+ v5 r' c0 `3 V%plot(t,signal)
; Y6 R( z. w+ N: `* R- D# p( jpoints=length(signal);        level=5;    sr=360;   num_inter=6;   wf='db3';
! ]: x' b6 \8 S+ X%所处理数据的长度    分解的级数   抽样率    迭代次数        小波名称
- b$ @% z' m! I( s* v5 O- boffset=0;
7 e; w8 [5 T' z+ B/ y7 W  Q/ ~( q: k
* v  B4 w" {+ G2 ?
# s9 J, Z4 C1 H' K%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:
* U: X0 W2 v/ {% R) s- H! X[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器3 s5 o" V& s- s  Z8 m
                                   %Hi_D:分解高通滤波器4 [4 z* o1 l: ?, |' M
                                   %Lo_R:重建低通滤波器2 d0 \3 U6 C: R! B  ~
                                   %Hi_R:重建高通滤波器
$ K# [" s. C! c% `* u9 H: e+ N                                   
6 b) d" J) w% \$ z[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌
6 k7 T& c; H, o' m0 q( Y7 g                                        %swd小波系数
, Q" Z( a: v, L) F8 d! X! U
* l4 }1 c/ Z' H3 H5 Efigure;%figure1
) s# B( t( Z, ]! @* h) ?- O; ssubplot(level,1,1); plot(real(signal)); grid on;axis tight;1 |$ r( s1 L* S+ M
for i=1:level
; D* x1 z6 r0 ]# I. s  u# U" g    subplot(level+1,2,2*(i)+1);$ A: U0 ~/ Z5 Q, y' \
    plot(swa(i,:)); axis tight;grid on;xlabel('time');
( R# T* X" P- h9 x0 V$ }    ylabel(strcat('a   ',num2str(i)));$ L: R! w( q" p" |( K8 R
    subplot(level+1,2,2*(i)+2);" o5 [8 K# ~/ H2 @& o# `
    plot(swd(i,:)); axis tight;grid on;# d5 |2 p* V: k- y# J' C
ylabel(strcat('d   ',num2str(i)));. a3 U3 J; o" e+ x3 G
end
' ^8 \  ^2 \% M/ F& C2 Y%以上内容是对信号进行离散小波变换。
$ C- W& F. `% p3 |) P%尺度为5* Y  s  u5 X, J: ?: T

% F" J1 H7 N! W; r8 a, ~% X$ V( B; M

3 K' W2 B; C, z' x/ p/ e%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:5 o4 B  i. k) I: ~# D; t) O
% swa:小波概貌;  swd:小波细节;; @5 @4 \9 B4 y
% ddw:局部极大位置; wpeak:小波变换的局部极大序列。
4 b# M5 `( I# W) Z6 J: Rddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零. L" [+ i3 R$ C
pddw=ddw;
4 Q4 J% B7 ~/ [9 u  b$ s9 \nddw=ddw;6 t1 m; G7 P, z; O8 P! ]" M
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零5 }7 x% @4 a8 c: |3 R3 }2 x
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);
+ Z" A* t4 H  Q; S: X; T, apddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);/ R/ A1 k6 l9 r
negw=swd.*(swd<0);%将swd中大于零的数置零
* x: p, K% R3 Sndw=((negw(:,1:points-1)-negw(:,2:points))>0);* S# `7 V. Z, ]% p
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
/ F7 i) C3 R& m! L* T9 }' qddw=pddw|nddw;%|:或. R% G/ f3 H* ?: E& B
ddw(:,1)=1;) P8 C; \/ [& q2 s7 Q1 [
ddw(:,points)=1;& h; w/ R2 ~8 M3 @$ d: t5 C
wpeak=ddw.*swd;1 R; o. I: f4 W
wpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响
' V0 I* A3 X, f& x* D% Nwpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响, [3 n6 }% x4 q; k
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点2 M3 R; i  o) R! G9 R

" I* E6 k+ O2 M) n6 zwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));) L1 x1 L* L  {8 O0 I6 Q& {4 M
threshold=0.1;  %  阈值 4 V. v# T0 [) ^/ k

+ `3 m# ?+ r, V4 rfor i=1:points;
9 Y0 I$ P3 k$ k# D  |   if (abs(wpeak_threshold(i))<threshold)
3 V' Z' x& Y5 O+ ]        wpeak(level,i)=0;
+ }- J9 z3 s  B    end2 N/ O! h# ~' S3 o
end;
( h# O5 q* m( z. V& B5 TD5_wpeak=wpeak(level,:);
  L! M; b$ ~5 g7 x9 Q5 y5 v* U
  ^; r6 C4 O6 g  R6 ]%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,3 y, ^. a  R1 P7 B

5 A; L. N. l$ ^9 v# e; f6 ?2 Z  Y8 g% p
%____进行模极大值的处理:! }  x$ R, O4 O% Q# J. l8 s. b
%%C=0.8; ( p0 e+ \, Z' }! T
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。. f7 ~- U' p* p: X' j! X6 t
%%D5_wpeak=wpeak(level,:);& a: M! c8 K& n! U8 }
%%M=max(abs(D5_wpeak));
1 p; a# p) {. l" b. A  t. o%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
, _9 _; z, M8 ^  V! H%%for i=1:points
. I0 p! }+ a" l4 q+ C, b%%    if(abs(D5_wpeak(i))<Thr)
  a4 G: [: v" o. c) [" a3 g0 v+ h%%        wpeak(level,i)=0;
+ O7 U; Z0 j8 y' q%%    end5 A2 _& _1 R2 T6 F% u
%%end' B+ \4 U0 w% O# @# |: V
%%D5_wpeak=wpeak(level,:);
3 F/ @1 @! @: {- g+ g1 f8 u5 m" {" Z9 R$ ]- p% R* z
figure;%figure2# Z$ I: S2 k7 a7 ]) L
subplot(level+1,1,1); plot(real(signal)); grid on;axis tight;
4 Q( h% h' s) b  t7 X. sfor i=1:level
/ _! l3 d9 Y0 }! m    subplot(level+1,1,i+1);3 O! |* t) m* J$ B
    plot(wpeak(i,:)); axis tight;grid on;
" m' ~9 X. ?: }! K# S$ u. Kylabel(strcat('j=   ',num2str(i)));' X# V* ]  r$ F% B& p7 Z5 J
end
; d( @5 a2 c" d  r8 Y
! w- W# j/ h8 \& o1 E$ d: J/ c$ v* ?0 Z1 q8 p
%步骤4/ |) H+ F" N2 F# G
%模极大值的处理方式:
. y7 G2 I7 V  N%在尺度j上极大值点位置,构造一个搜索区域,
3 }( z6 R7 I2 Y% R. R%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;
# S) C& ?2 V, N/ \D4_wpeak=wpeak(level-1,:);8 i' h' v4 e$ I& Q
sousu=6;7 i3 ?+ w$ h# ~. F1 p1 Q9 f
D5_p=(D5_wpeak~=0);
1 _# l6 t5 l  v* i! i: J2 qO_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
. E+ h3 q& R9 c" jfor P_d5=O_d5:(length(D5_wpeak)-O_d5);
) L. j8 d, J: c" a( ]" N" O' x    if D5_p(P_d5)==1; * P  U2 ]5 J% X3 m
        for i=1:O_d5-1;. X. _7 p; z+ V. @( {$ v- x
        D5_p(P_d5-i)=1;  
% ~9 J( U# h7 ^" _+ {        end ;& e4 O5 a& G- [9 v+ D  A
    end;     % \8 c) g) I5 K7 t) Y
end;, k1 v) V3 Y4 T$ p4 m/ v; |
D4_wpeak=D4_wpeak.*D5_p;# C+ V6 z" F' g- {9 G; C

5 r+ B  x$ U  g3 eD3_wpeak=wpeak(level-2,:);  v; X# [  y2 N3 z
D4_p=(D4_wpeak~=0);- t) G' V# N- a5 _8 t5 t2 h/ _" K7 E
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。6 m, H8 t/ W; Z0 H
for P_d4=O_d4:(length(D4_wpeak)-O_d4);
1 V# U2 m( S8 W( O* b    if D4_p(P_d4)==1;
% i- n4 `7 h1 ~8 y9 ^* P! V9 C' V. u        for i=1:O_d4-1;. i, P' z3 p6 D* a
        D4_p(P_d4-i)=1;  ( j; s6 G4 e' t4 z7 g/ j
        end ;
: X1 X1 R: z/ g4 Q' c    end;     # p% e2 N6 P/ q) I  N. Y
end;
  {9 p+ h/ @" l1 M4 rD3_wpeak=D3_wpeak.*D4_p;
4 @. c2 j# i$ d* N8 Y6 d0 x3 q4 n; T3 J( o. Z" o3 d( ]! o
D2_wpeak=wpeak(level-3,:);
- ?* k4 C/ z8 @9 r4 K" R( N* i/ wD3_p=(D3_wpeak~=0);/ @7 K! i4 {  A
O_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。/ j' Z+ C  S3 J! b& G! q
for P_d3=O_d3:(length(D3_wpeak)-O_d3);* K4 m- K7 ]8 F0 F1 B6 ^
    if D3_p(P_d3)==1;
, @) W, ~7 q* i        for i=1:O_d3-1;* b. G$ E! N6 v$ U) t4 u+ {! Z! q" C
        D3_p(P_d3-i)=1;
% ~+ P6 H7 z; b        end ;5 V- l, \, E- s3 i
    end;     . B6 f8 J9 q1 n4 n4 f  G
end;7 w* F; O5 l1 n2 ?% f
D2_wpeak=D2_wpeak.*D3_p;
7 f- P) B, |- I7 J8 m( }) w3 w3 Q. ]7 R: M5 D
%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:6 u3 K- T& @6 D# Y8 G
D1_wpeak=wpeak(level-4,:);+ x- l) l3 O4 d! O1 t+ |
D2_p=(D2_wpeak~=0);
. d1 n" q7 u8 e$ i5 |& R' VD1_wpeak=D1_wpeak.*D2_p;
# s( f0 `- X5 M8 I9 E: T( r- P( Z- ^0 v6 p* T: L
wpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];" u: e6 g( ^  ?9 R9 b8 E
wpeak=wpeak';) ]) J+ x9 [& t+ T* ]

+ n* A2 D/ I: K" G* T+ }%____重构信号:
6 p" m3 T; b. e  R9 Tpswa=swa(level,:); % pswa: 为待重建的信号
& N& W5 e6 n" s7 Y  pwframe=(wpeak~=0); %迭代初始化
/ l9 U3 R5 E* m5 X) dw0=zeros(1,points);
2 w) F, x% o: j& o. S0 t+ i( \[a,d]=swt(w0,level,Lo_D,Hi_D);5 p5 A  ~2 J- s/ a# G
w2=d;  % w2为待重建小波& p( E/ `$ q: H
    for j=1:num_inter
( L3 n' `% H* l$ G% I       w2=Py_Pgama(d,wpeak,wframe,1,sr);   % 先进行Py投影和 Pgama投影9 m- B+ v, U/ J  T% Y
       w0=iswt(pswa,w2,Lo_R,Hi_R);         % 再进行Pv投影
3 s! p- [" X) K. y2 }       [a,d]=swt(w0,level,Lo_D,Hi_D);      % Pv9 R4 Y  _) k. e" R$ J4 B
    end
  W. X4 n2 v% a5 S. T     pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号   
. K" `7 p/ A' n# p4 S     " v' K0 t9 ^1 l" s4 \
xcrr=y'-pswa; % 重建误差) B  K0 \4 _0 e0 o
figure;%figure3
5 X0 B% d7 u3 T' a" M0 t2 Tsubplot(411)5 }7 h8 x3 E7 `) D1 k) o
plot(y(1:points),'r');
$ M- x% \, m' ~! D6 xaxis tight;& a: C6 w4 f  ^7 u) D
subplot(412)
: j) {1 @9 M5 g4 |0 ~6 R" Xplot(signal(1:points),'r');) b' E. m9 O5 L8 N# |. t5 P
axis tight;
( y2 E; P( ~# `4 |2 \subplot(413)5 A) b: u+ P4 c  a: O
plot(pswa(1:points));
: A( _2 f# d- `8 O7 ]axis tight;% D5 s) c" @$ M! j  |$ \" B2 g7 I
subplot(414)
; }, n9 ]- m2 }6 k6 Wplot(xcrr(1:points));
( A  s/ m5 \; }2 p# E2 yaxis tight;
: ?9 ~1 C! x' J; H% z8 L# h" ^figure%figure41 I; Z5 W' B  A$ m: s6 M
subplot(611)$ x0 i. }& ], E, N
plot(signal);. s- p' X9 y1 m! ]' m9 R( N$ S  s
subplot(612)  n: S, |0 n) g5 t! g
plot(D5_wpeak);, L6 B/ ~( k% p' Q/ e
subplot(613)
" \3 Y. G! p4 V4 g0 D* K' hplot(D4_wpeak);
( K5 _- C$ \# j3 u9 n' b! Y8 Osubplot(614)5 ?# X! x! q7 f! w7 r7 l
plot(D3_wpeak);* d; _3 |! u+ q1 W! ?
subplot(615)
! `4 ?4 `$ D+ r2 Q  Tplot(D2_wpeak);7 r& `# [* ?. f8 q
subplot(616)
0 e: Q  f6 V9 e5 C  H! {8 \5 r) ~0 Oplot(D1_wpeak);
' @! q3 H" P& H/ A4 k9 l[value,index]=max(abs(D2_wpeak))
5 _# v, n4 w! J6 E3 ^, C) U8 i[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
    + M$ r0 j0 \+ D: R5 l. M3 p3 b( W
    9 Q8 z# v# X! E8 F( v
        我也来请教~·
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

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

    该用户从未签到

    尚未签到

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

    本版积分规则

    招聘斑竹

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

    GMT+8, 2026-3-16 22:40

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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