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

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

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

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。
' n' Y9 @0 @0 |可是使用模极大值法检测不到第二个波的波头,不知道为什么?
, k& [5 j  d# Y请达人指教。
$ I  Q: K+ U0 q/ d3 r/ p! x源程序在如下
+ Y* k$ U6 }7 U7 m  w* C- @0 l: nplot(cable(:,1),cable(:,2))
% v+ K. H; i* g' a# D8 l7 E' L0 S7 B) G2 Ptcable=cable(:,1);
' ]6 k# n# `1 ~( Xycable=cable(:,2);( e7 [! a/ ~2 b( a+ S) {) W
length(ycable)
' D/ Q$ s6 p6 Y  {
- z8 u# U! Y+ W* m/ zsignal_length=33856;
' H. \" ~: b1 ? t(1:signal_length,1)=0;) m/ o7 \# k% ]4 p% B, [
Ncable=length(tcable);
* W% L( Q# o# X for i=1:Ncable5 s1 x' m  h7 _7 y+ s2 l( H9 C* _
t(i,1)=tcable(i,1);
8 M4 W" B. ]8 [. p8 l! X. S5 ~4 u end
" E$ i$ [2 o5 D7 K
6 M2 s. e8 K- b' g' ky(1:signal_length,1)=0;* _2 K( M% h! u; s' J0 [9 j
for i=1:Ncable5 g- T7 {' [7 V% ]. I
y(i,1)=ycable(i,1);  r1 P% f8 f. b% O# C7 D. G
end9 Z& b. n; c  i! s; ~
noise=0.01*rand(1,length(y));; O3 g: w1 z) G# X
y_noise=y+noise';# h$ h# z( l6 O% a* Z' U* o* H
+ b+ c' _3 s% n3 w  w/ k
signal=y_noise;8 v3 L/ U+ W, b5 Y; ^* c4 l2 p
%plot(t,signal)
+ b, f3 {5 m- o2 s- F, Z! _8 x8 kpoints=length(signal);        level=5;    sr=360;   num_inter=6;   wf='db3';; L2 a: c& Z% G8 Q- }
%所处理数据的长度    分解的级数   抽样率    迭代次数        小波名称
7 l8 F6 q+ f2 Zoffset=0;
3 J* ?% }( I6 H; Z' Z8 U5 m
% R$ j: o$ t2 n4 u$ Y9 _' z+ O% e3 L) @4 F2 f
%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:# s- m- j% {( _4 V* y" D
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器: X; j' E$ [' l' |  O8 v
                                   %Hi_D:分解高通滤波器/ P: O5 O3 Y! F6 s' S: w
                                   %Lo_R:重建低通滤波器0 o2 P9 z: ]% H+ T! i! L# {
                                   %Hi_R:重建高通滤波器
. x/ U5 z- e6 i3 ?1 A) T9 \                                   3 Z3 b* M. \! d& Y9 u9 V
[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌5 w5 z* d9 a- E4 T
                                        %swd小波系数. q6 q1 v1 B* k  c5 j, R& d; y

6 m+ E: c# b/ J7 p0 u0 N7 Hfigure;%figure19 z1 e2 P5 }2 }$ k' x+ C
subplot(level,1,1); plot(real(signal)); grid on;axis tight;2 @& D4 l( g- ?% ]/ b
for i=1:level
5 u. t* J/ u% k8 g- {' J  x3 e( v    subplot(level+1,2,2*(i)+1);! F, W4 m/ ^8 ~; F. \. f
    plot(swa(i,:)); axis tight;grid on;xlabel('time');
. }4 e: v# M* B+ d5 K    ylabel(strcat('a   ',num2str(i)));. o2 r* {) i/ d/ i
    subplot(level+1,2,2*(i)+2);
+ c) _0 f# D2 n1 P    plot(swd(i,:)); axis tight;grid on;1 Q$ K1 D1 q) K' R+ E
ylabel(strcat('d   ',num2str(i)));/ R! V9 ^0 c. t* `
end5 V4 L# b* \3 n  f/ f# \
%以上内容是对信号进行离散小波变换。4 i: i9 A7 o+ C
%尺度为5  ^; i* D# Z' _' B3 E
1 P# j. F, T+ n/ O- o, P, O

& B$ t& L) I4 X# f( H9 P; J2 ?: G& g; [3 r/ H
%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:
3 S2 `; t. X$ A5 i, i- z% y% swa:小波概貌;  swd:小波细节;
6 U, h+ F& F, }2 y' k, }% ddw:局部极大位置; wpeak:小波变换的局部极大序列。
' W' p* b! T$ M" _, l: Tddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零1 f$ Y8 x) Q7 {- b# K- D
pddw=ddw;
- ]: f1 d4 L) U0 Wnddw=ddw;  M& N9 m6 v8 G! x9 E
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零
& H* V& e9 L2 L" qpdw=((posw(:,1:points-1)-posw(:,2:points))<0);
2 c+ k( E; E% e: F; c% Ppddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);3 Q) U& P6 v6 y$ ~
negw=swd.*(swd<0);%将swd中大于零的数置零; [3 |1 R' ~+ V+ E9 f9 B9 n
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);$ K- m7 [2 n, n  q" Z
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
# o* P& C% M8 C( e1 g3 o  C' |; pddw=pddw|nddw;%|:或
& l0 B' D) n6 j0 ]  M0 Xddw(:,1)=1;
+ F0 G! A5 \) q4 k) G: Gddw(:,points)=1;' i0 S( r3 Z6 U1 E- _
wpeak=ddw.*swd;
) M2 B- d/ o# x# ^9 {, d$ gwpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响% Y  k  V* k8 y8 ?6 C0 r0 S
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响+ S; o* m& s& S6 w2 M  |8 }
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点. M. G5 M* [' ?9 U) B& R9 k; r) Z

/ [4 t' ], Q* Lwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));
7 r- a$ @4 i! w! {3 i7 s; cthreshold=0.1;  %  阈值 $ A3 c1 N, g% J1 h+ G1 T6 Y2 O9 l

% f% N3 ^$ R5 y4 b: d* `for i=1:points;
# g! P/ L. y' V2 H1 `5 W   if (abs(wpeak_threshold(i))<threshold)
8 }2 g: U; L- N; F        wpeak(level,i)=0;1 g3 x: H% D: Y& U; ?/ Z' Z+ t' d
    end
1 L( D) T* _2 g. T- kend;
/ W; w% }" p0 h, Y- ~9 B( H) e2 zD5_wpeak=wpeak(level,:);
9 z7 t; Y8 Q4 O% l" `7 F, d, [, q# q+ J' d
%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,+ \5 h% B0 s3 C: H7 U

. c: a# H: r8 X) Y" ?6 b1 h1 g! Q0 p
%____进行模极大值的处理:' r* i0 A( Z2 b9 d* V& R- C
%%C=0.8; - ~; x5 h5 Q* x- ]: I
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。5 i; c" a. X& }7 |  K2 _
%%D5_wpeak=wpeak(level,:);
$ Q) x  J' P7 P%%M=max(abs(D5_wpeak));
* x& K4 Y: \: l0 r%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
6 N- F+ p0 s0 {" r%%for i=1:points% }# K8 W  X6 F; A! O
%%    if(abs(D5_wpeak(i))<Thr)
0 L; \( l  A8 y0 B%%        wpeak(level,i)=0;
$ g+ Y  E6 O! Q+ {: X; y%%    end
/ b7 d' C9 F# ^2 S8 k%%end
- ]: {* u9 n$ A%%D5_wpeak=wpeak(level,:);3 q+ b9 L- }* j6 l* u
  z  G" A& f  B7 Z
figure;%figure2
. I$ g* h/ r" z# d' N9 S0 zsubplot(level+1,1,1); plot(real(signal)); grid on;axis tight;" A* d! e7 A" @4 z7 S
for i=1:level
* e" j5 V+ Q* g+ y3 B    subplot(level+1,1,i+1);+ Z- k) f- i* X+ R- G' r+ q
    plot(wpeak(i,:)); axis tight;grid on;1 H4 @1 m3 M4 N5 U$ ]* t
ylabel(strcat('j=   ',num2str(i)));2 m8 R0 @$ s/ b3 U
end( a- u6 D4 o2 j. s
) |; v" g$ h# U4 a
6 _/ N( M% {( I! c7 S+ y1 A
%步骤4
/ v/ f4 B) g( H* F9 c4 l5 `0 s2 k%模极大值的处理方式:/ ^/ v5 X" K3 ~( @' u6 t
%在尺度j上极大值点位置,构造一个搜索区域,
& w4 ]% c, z  U/ S/ F- F0 l; }%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;3 }& ]0 {* {* k8 V& \' e9 V
D4_wpeak=wpeak(level-1,:);
6 F6 A' P1 t7 u: Qsousu=6;1 H# i  T% |# g1 N( r% F
D5_p=(D5_wpeak~=0);: F! _- `1 Q9 J( q
O_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。2 Y; D- [0 U5 {& h
for P_d5=O_d5:(length(D5_wpeak)-O_d5);/ u/ A+ F8 ^) I. N& y
    if D5_p(P_d5)==1; 7 D, ^1 K" y3 j8 o% x- v: l
        for i=1:O_d5-1;8 ?% Y0 w/ e; G! O7 ^5 J6 |
        D5_p(P_d5-i)=1;  
3 t$ `+ F* D/ X$ y" D& E6 T$ V& }. Q6 o        end ;
9 C4 ?; k  t9 \* v  \" w    end;     # o& m$ c6 C& k& e; i
end;( {4 |& w) K8 u3 o1 z0 E
D4_wpeak=D4_wpeak.*D5_p;
8 H1 W5 y' s, u: B4 k9 m
' J+ E, E" u5 P7 mD3_wpeak=wpeak(level-2,:);* w( N) \4 X; F8 S) x1 W3 \
D4_p=(D4_wpeak~=0);& t/ L: \2 ~) m8 A- f' L8 I
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。  w! V2 [  u/ V1 ^, X4 B# y, b
for P_d4=O_d4:(length(D4_wpeak)-O_d4);/ I6 \! _; N/ Z8 |$ I
    if D4_p(P_d4)==1;
, P3 ^2 w0 H4 T: `9 p        for i=1:O_d4-1;5 H) w( c% L1 }* }$ R  y
        D4_p(P_d4-i)=1;  2 ]+ Y; B# W! O$ h: z4 U4 s# k  J
        end ;
1 G9 H3 H: t0 a: @( N0 [6 n    end;     0 R# E+ \! z# f/ n3 M+ t+ j1 Z
end;5 ~& V5 t; H! f7 z2 J+ v2 L" H
D3_wpeak=D3_wpeak.*D4_p;5 p1 B- M. N" P5 T* ]

2 l) c; K$ H8 {7 O6 f! \D2_wpeak=wpeak(level-3,:);
" L+ N3 y" s( P# x1 m6 yD3_p=(D3_wpeak~=0);
. t% ?) c& p. q" O$ {9 }' pO_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。9 p4 z8 @4 s" m) Q9 s: I
for P_d3=O_d3:(length(D3_wpeak)-O_d3);! o/ I( G2 x1 }6 B5 c1 X! m
    if D3_p(P_d3)==1; / L# a# {) m6 H$ ~
        for i=1:O_d3-1;
( v; T& d$ V! G6 L        D3_p(P_d3-i)=1;
( N% m9 s3 O- r( q. E0 }0 |, ^        end ;9 ?! D/ m' G6 {" [/ |
    end;     
2 A3 G# X1 X7 {  z  `/ e& m' hend;- Y8 f4 f0 q/ t5 ?% b
D2_wpeak=D2_wpeak.*D3_p;
9 r( W7 ^& s- ~( t1 u5 Z! y3 Y
  q0 ]2 @5 r  o9 R. g%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:/ P2 G3 t- Y  o4 _( D* ~
D1_wpeak=wpeak(level-4,:);
0 M2 d1 _. c9 N# i$ R$ SD2_p=(D2_wpeak~=0);. |  l+ _$ T- q; m8 Q" [, `
D1_wpeak=D1_wpeak.*D2_p;9 X2 q) O0 J5 C
' Y8 t- n' w! ^/ O# _. U  P( M
wpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];; u$ f( ~" d9 g6 Z7 K8 y5 f' i9 q/ {
wpeak=wpeak';
9 T) v2 v9 q9 o' @. s$ g. ^+ ]4 Z& |* U
%____重构信号:
( Y3 `. f3 ~) Z6 t. {pswa=swa(level,:); % pswa: 为待重建的信号% ~) f8 T1 f( }- A+ d
wframe=(wpeak~=0); %迭代初始化
* U  @1 \/ i4 r7 R/ \w0=zeros(1,points);
# e: T/ r: X6 ?6 c0 s[a,d]=swt(w0,level,Lo_D,Hi_D);0 C, o$ _+ N8 z! [
w2=d;  % w2为待重建小波- D+ V7 N2 n* Y3 N) @( N. C
    for j=1:num_inter, {/ X8 E, M% V. m: _% A4 @
       w2=Py_Pgama(d,wpeak,wframe,1,sr);   % 先进行Py投影和 Pgama投影
+ l- E7 @  S- P) K7 K$ {       w0=iswt(pswa,w2,Lo_R,Hi_R);         % 再进行Pv投影8 {$ w! ~+ |0 g) f
       [a,d]=swt(w0,level,Lo_D,Hi_D);      % Pv( P1 V  W) k1 A
    end
! A5 R, i" g$ l/ l& @5 |& w7 m5 y4 ]     pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号   ! \* }% I2 K- |2 v
     
! c. S0 z1 V9 T) {1 v2 I6 Nxcrr=y'-pswa; % 重建误差
4 x* h7 [# c2 _figure;%figure3
& z3 ], d. x0 E0 [subplot(411)' d; L: E$ R" Q+ F
plot(y(1:points),'r');
+ X/ G2 m9 d8 [) e! Iaxis tight;) S; W) l3 Z) N! {; q) C
subplot(412)" M% c* Z' `7 H) _
plot(signal(1:points),'r');3 F% D3 F$ \% n3 A
axis tight;) N. }  A, K* q0 X9 T; P8 g
subplot(413), g. _3 _, E! d4 ?
plot(pswa(1:points)); 1 S# [+ W! w. ~# Y
axis tight;
. a+ y9 a. {4 S, r' ~subplot(414)' Q# M, \1 N' r
plot(xcrr(1:points));
7 F& k8 O' c# t1 T' i1 e2 {axis tight;
: ~, U' U2 d' hfigure%figure4
$ ]5 Y3 W% a2 T, `subplot(611)
: B7 \" ~# N/ X( e0 d  J3 E  w$ |1 Z7 Uplot(signal);) L1 R0 q" }: [8 P- z, d8 C
subplot(612)
) S# Q- l) \  Zplot(D5_wpeak);& L( I; j6 F* X& ]  N2 E
subplot(613)0 C' D/ x$ O8 M4 B' U; s
plot(D4_wpeak);
! I) d7 K2 F5 {* v5 D% O  \subplot(614)
9 w6 \9 ^/ o$ s% r% o" N8 |- A7 @plot(D3_wpeak);
& `. l6 z( y1 ?  A0 F5 psubplot(615)  I* J! ]# e" T: [) a9 M
plot(D2_wpeak);
7 j5 H, l+ v3 c  k, wsubplot(616)/ [- g" s3 M3 ~& h! ^2 q1 _! c
plot(D1_wpeak);
& ?# I- f5 f( C+ s' ~[value,index]=max(abs(D2_wpeak))3 W5 G7 V6 ]6 F+ L8 D, D
[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
    7 \2 U5 P; I% B. K, s4 F5 u
    ! R# K  a7 d6 D. k3 o; Z+ S% U3 t
    / _" T: ?4 \/ Q3 ~: {    我也来请教~·
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

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

    该用户从未签到

    尚未签到

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

    本版积分规则

    招聘斑竹

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

    GMT+8, 2025-4-5 13:40

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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