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

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

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

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。$ h# G3 K. s8 \) k
可是使用模极大值法检测不到第二个波的波头,不知道为什么?
  H5 v' e0 b7 ^4 T请达人指教。
- ~* q$ `" [. f0 W/ }+ b0 a源程序在如下
# L* k+ t, E! P" ^( Aplot(cable(:,1),cable(:,2))" x+ z& t% d7 q* d
tcable=cable(:,1);! b1 M) R" ^7 M9 V/ @
ycable=cable(:,2);
3 s2 H/ O2 d1 g3 T& ~0 clength(ycable)
. G2 V/ ?/ e" _5 a4 C8 ?+ R1 i! L* E# B+ m: F6 I' y4 r( }' T
signal_length=33856;( a. U  A$ o: o4 R5 C/ R
t(1:signal_length,1)=0;
2 v" l2 d8 g8 `. X" \' s Ncable=length(tcable);
& J7 ]# R. C  }: b* w% v0 |: E for i=1:Ncable
$ f" b1 s0 Q3 m' v5 S6 { t(i,1)=tcable(i,1);
' h, p8 m1 A) ~0 S end
$ p" M( a/ p  q/ E 4 \6 f6 A% `! a0 j* K. J
y(1:signal_length,1)=0;: K: ]& ^1 c' ^9 _- M  k" ?
for i=1:Ncable
- y& d1 V$ D+ G. F7 Q y(i,1)=ycable(i,1);5 m  b7 Q! k8 f' j1 b; c7 w7 d' |, d
end: S/ U. Y- }+ S. _
noise=0.01*rand(1,length(y));1 `0 }* U3 ]: C1 @
y_noise=y+noise';
) P5 Z1 B0 v  h3 c! ~6 A* z$ Z% ]! T5 W$ g. t
signal=y_noise;
. C3 C. H+ x/ k4 M- f1 {%plot(t,signal)
- b7 V" Z" x5 q. x# \' a* dpoints=length(signal);        level=5;    sr=360;   num_inter=6;   wf='db3';
4 t! B4 E, `% V; i7 R%所处理数据的长度    分解的级数   抽样率    迭代次数        小波名称
: l, @# {9 m( Y6 ~* c) joffset=0;  f/ G' d6 h% A, h: D  U1 G

, E! B: ^1 I8 @2 O
8 s7 A9 r$ I1 X8 J5 |%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:9 i- H% a1 l! ?; \: `) C
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器. K0 ~0 I& F$ q; \/ b
                                   %Hi_D:分解高通滤波器
" a: N$ T0 {3 s& }6 f9 R                                   %Lo_R:重建低通滤波器5 t" e9 N7 \1 d# T6 I- b0 Z* K7 O
                                   %Hi_R:重建高通滤波器
$ v# a/ g9 N) ^: g: ~0 i/ j: R                                   
: R. V2 O- n1 u) J/ U[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌
& K6 s+ S7 n0 X+ Q$ x2 V                                        %swd小波系数
( D9 K& \+ F4 l ) X- v& A" K) ^! @
figure;%figure15 c0 V; Y6 v0 n# ^
subplot(level,1,1); plot(real(signal)); grid on;axis tight;$ H0 w* s8 k& }/ z% E! Q
for i=1:level: R4 u8 H6 n+ Z( G" t# ]2 x
    subplot(level+1,2,2*(i)+1);
; c+ e7 h* s+ i* S# C* t    plot(swa(i,:)); axis tight;grid on;xlabel('time');
3 t9 O2 q$ W6 I6 M3 S    ylabel(strcat('a   ',num2str(i)));  u  i/ C& `! C: _5 x$ b. @1 W4 ~
    subplot(level+1,2,2*(i)+2);
2 u4 H5 p! B- g/ b1 U    plot(swd(i,:)); axis tight;grid on;. F! Z. w3 w& U' {( x/ \
ylabel(strcat('d   ',num2str(i)));. s* ^' S  l: O5 o8 |0 ~) `# e; e
end
) x" i3 N2 z+ U4 ^, w+ z1 h%以上内容是对信号进行离散小波变换。
1 n0 d9 f% ^! F8 u6 Y, [# `& j%尺度为5# ]& H5 r4 A4 Y. H. T% T8 x
& C0 e) ~1 T. |3 Q% n7 b

% r) I- J$ Y/ X% u0 ?) b% p# V  D7 N) m/ c* K  N5 s% p
%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:
- M1 |1 E5 H* W- D  Q1 P% swa:小波概貌;  swd:小波细节;' n4 p9 Y" \7 Q1 ]! H- h, t) g* `
% ddw:局部极大位置; wpeak:小波变换的局部极大序列。3 ?  G, s  a5 ?
ddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零  @: @4 q/ x8 u. v
pddw=ddw;( p$ m: {$ H: k! ?1 q, `" L% g9 |
nddw=ddw;
$ {9 {; v) {% B6 k* c6 gposw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零" g: [0 A7 ?: w9 e4 v) {! [8 e9 K8 T
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);/ o3 b  A4 Y* b% Z0 ~" N! }/ ]( D
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);9 ^: J5 z1 D/ r2 y, x  H
negw=swd.*(swd<0);%将swd中大于零的数置零$ l" i% i, h( |- C5 `9 A5 H2 C
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);% p. P" L' H0 M( J) V9 {
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);8 O/ M) H4 F( @1 c) ~! X
ddw=pddw|nddw;%|:或
, o9 q5 ?- A2 L% V# p4 wddw(:,1)=1;) {1 l& `* z1 c. p0 Q
ddw(:,points)=1;
8 V% J6 I4 w7 A$ z8 Y4 }7 _wpeak=ddw.*swd;! p' v  C, ^# m7 E4 x# A5 N/ U
wpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响5 _- u5 Q2 k& X
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响# {1 j. x4 ~" X/ P) ]
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点
; a7 B- a9 ~3 s# `: I: k" S% D3 c
7 h4 h7 d& |5 t6 y, W6 E  s4 l: ^! C) Bwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));" i$ ]  \8 V1 ?6 ?
threshold=0.1;  %  阈值
$ X3 h, n, W( |# O* ?1 U
) }) Y4 e, q& s# x, j2 i5 }' gfor i=1:points;
3 @' j" r7 L" C8 B; D8 T   if (abs(wpeak_threshold(i))<threshold)
2 ~9 Y$ c4 d: ]4 |+ W, M. O9 |        wpeak(level,i)=0;, \3 ]1 y1 k5 K; F  [
    end* Y, C6 s6 b$ \. v0 |6 ~9 ?
end; ( @  t8 m" |, z& O8 }5 Q4 n' j
D5_wpeak=wpeak(level,:);
- }' G0 _- E1 @# t) I7 I5 _
) S# M7 p1 Y' O* Y%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,7 C# G* I( a2 E$ G, j: `
$ I% F; C1 N, A* m( C0 ^

& i2 f; g. C) N) f* W8 U. n%____进行模极大值的处理:) R) f& _: n* h8 F; R
%%C=0.8; ; j, a6 b8 }9 W
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。) v- U" n; P% ?
%%D5_wpeak=wpeak(level,:);
; _! e' |$ C4 {3 ]' ?0 Q%%M=max(abs(D5_wpeak));$ v8 [" E# v; O" w/ Y! K* M. i, c- Z
%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
, ?- Y6 l1 p; V) W5 x  t%%for i=1:points
# l! Y2 k* k2 u- c. C# z1 Q5 [%%    if(abs(D5_wpeak(i))<Thr)
# _7 H5 w9 V7 {9 W: |%%        wpeak(level,i)=0;
1 {: C1 X/ q! Y. u%%    end
" y! U3 U: U- a; F, j%%end; c" [; \, t# S5 f2 Y+ ]% l
%%D5_wpeak=wpeak(level,:);
6 d# @1 ^, C2 o3 p
  Q$ ]8 ]# W, s( q0 Z. Wfigure;%figure2
, }, K) @% c8 }subplot(level+1,1,1); plot(real(signal)); grid on;axis tight;
8 G3 l/ N) R. a/ V( X1 qfor i=1:level8 w8 G6 y- {+ t5 S' ?! q5 w
    subplot(level+1,1,i+1);
& e7 f0 B' b- p; H0 C    plot(wpeak(i,:)); axis tight;grid on;+ d- b% G' j& E( ?2 z# z- U9 E8 O2 `7 S
ylabel(strcat('j=   ',num2str(i)));
9 s4 s3 M6 N7 r8 A% M" Bend8 C+ s; ^! F" E* n) {+ F0 b9 J
# T( C) G4 j) R1 n( h. |0 B2 V) [
& W8 _& Y$ @. _% [  u
%步骤46 e9 G! e- w5 F4 J- M, R
%模极大值的处理方式:
" I7 |7 N: j! H! a%在尺度j上极大值点位置,构造一个搜索区域,4 k) ?/ n+ ~* z
%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;% U# ]0 \% s1 G! M. ?
D4_wpeak=wpeak(level-1,:);6 c6 H' k; n& w
sousu=6;0 I8 g7 J' W- [4 R" E4 y
D5_p=(D5_wpeak~=0);
9 i; N$ n& [- F& kO_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
( V8 V1 K* r$ N1 Vfor P_d5=O_d5:(length(D5_wpeak)-O_d5);; {( M; q2 y1 o& _6 e4 u
    if D5_p(P_d5)==1; ! T8 p# l4 K% `- u+ T! z
        for i=1:O_d5-1;! B; o' I& k7 r
        D5_p(P_d5-i)=1;  
) w1 O  T/ s$ C' v6 ^        end ;
# |6 o/ Z6 k, z0 r( B$ [3 C    end;     
  \3 u/ |' A+ t3 g" eend;
0 {: X" K- R( \D4_wpeak=D4_wpeak.*D5_p;! W6 `$ z  s: J- C& x, l5 t+ i2 Y
% ~! W. `# j( P9 f
D3_wpeak=wpeak(level-2,:);
" T7 `/ H- F1 E: Y! w( ND4_p=(D4_wpeak~=0);0 M3 H) }. s+ |3 O# J
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
% x. W) @; F" X4 Ofor P_d4=O_d4:(length(D4_wpeak)-O_d4);' S! }/ m( H' \9 {. t# c& K
    if D4_p(P_d4)==1;
+ ^5 b! o6 }& _/ H6 I6 y* D        for i=1:O_d4-1;6 ^% h! l7 e3 {2 V% k6 z
        D4_p(P_d4-i)=1;  
0 N2 S- w$ I6 D# I! ~' l        end ;
+ s- k& A( K, [* F, u; E5 q    end;     
- C2 r6 t. C+ r+ D' Fend;
+ J% |  ^# N9 H; r* TD3_wpeak=D3_wpeak.*D4_p;! ?* f( V% ]  f
* [: h( [5 x# A5 y
D2_wpeak=wpeak(level-3,:);1 \  v( z/ V+ z6 e! Y$ K- v" t
D3_p=(D3_wpeak~=0);, Z' J& Z7 f$ U
O_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
/ y. d6 X' J% Vfor P_d3=O_d3:(length(D3_wpeak)-O_d3);2 {: u. Z4 K$ u; m
    if D3_p(P_d3)==1; / R$ i% o$ `6 Y4 {1 q
        for i=1:O_d3-1;
# y. d( L" p5 i& x        D3_p(P_d3-i)=1;4 H- f$ [) q/ o* F  ^/ L
        end ;$ g2 @: j2 ?) o, e) n+ Q
    end;     # W9 z: z: J0 j; b
end;0 `. `. z) `7 l
D2_wpeak=D2_wpeak.*D3_p;
6 k4 n# @, k/ z5 E' |" g7 \' Q+ J: A. f4 G
%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:
0 b9 T5 A9 t/ _( q2 i) }D1_wpeak=wpeak(level-4,:);) R0 S* f# p/ E" ^9 o* C  Q3 ?
D2_p=(D2_wpeak~=0);
+ m5 w: J. C3 H' L% ?% ~6 Y  k. [7 xD1_wpeak=D1_wpeak.*D2_p;
% K$ N" A0 U$ `- V
9 V: p4 Z0 A" fwpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];' N0 u  m' p/ t
wpeak=wpeak';- `7 r  x& e& \1 [9 L

. j) _; m. g7 `% _+ I2 I- T: V/ i%____重构信号:+ K* ?, k) N7 {2 W0 _$ w
pswa=swa(level,:); % pswa: 为待重建的信号
1 `8 T) |9 i( k4 r' f; T9 |5 l7 Kwframe=(wpeak~=0); %迭代初始化1 d8 l6 d3 E0 @9 Y4 _
w0=zeros(1,points);; t1 A( D, x5 u
[a,d]=swt(w0,level,Lo_D,Hi_D);
( m% K7 ?, t4 Ew2=d;  % w2为待重建小波
8 J" {0 X# h1 x6 G5 t& R  s& W1 @    for j=1:num_inter7 \0 ^" ~) w1 P7 ?
       w2=Py_Pgama(d,wpeak,wframe,1,sr);   % 先进行Py投影和 Pgama投影
+ `* k& o- g' L2 I8 K, a       w0=iswt(pswa,w2,Lo_R,Hi_R);         % 再进行Pv投影( p8 u7 B3 r/ M3 C5 K4 Z3 @
       [a,d]=swt(w0,level,Lo_D,Hi_D);      % Pv
8 K: J% n7 V" b6 b    end
4 }! a* @; ^& \( e6 g     pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号   
# Z  e; N$ u% x" k7 N5 \' E     
3 e3 r% m8 b: y, x$ s1 A" Y0 ^xcrr=y'-pswa; % 重建误差
8 f/ Y- W/ q; K; ^! C3 jfigure;%figure3
7 q- l$ n1 F) q8 F7 E" Psubplot(411)9 o6 n$ C, d& ~, z4 {1 a0 [
plot(y(1:points),'r');3 }+ I$ {* y! i) u4 f" _' X# M
axis tight;
' ^7 s  g1 |- J2 e7 w0 Dsubplot(412)9 m" R% n( O* q2 J
plot(signal(1:points),'r');
4 E) K" V% y$ {- waxis tight;
8 [$ W; o/ l) Y( C9 z% x9 Ysubplot(413)
6 `+ c6 y7 |, A0 Z6 B9 [. n* y2 V% C6 Dplot(pswa(1:points));
, d9 o7 A7 {: j+ Oaxis tight;
9 ?5 N# t# i9 K( C" Esubplot(414)
+ m8 G; R- |. J" D+ d/ Uplot(xcrr(1:points)); " z5 t3 Y- d! h4 M  Z8 r4 Y
axis tight;" I7 G* |* x& _0 k5 q# J
figure%figure48 J0 ?/ e6 K- P6 ^& B9 o- A
subplot(611)3 M& T( ^# R9 c6 ^+ ]7 i$ L: v
plot(signal);1 J/ }: |/ z" e( P- N, \( Y" w1 X
subplot(612)
' V4 u" t' m5 |' ]1 F1 Wplot(D5_wpeak);. ]. Z$ N; u4 x0 p5 K. g
subplot(613)2 P% k0 \! j; d9 ]6 G. g9 n0 m5 O
plot(D4_wpeak);5 i, ?# H2 Y; `
subplot(614)
, v/ O1 l# J4 w" \, Dplot(D3_wpeak);$ D$ w4 M, e$ T  {% o. K. T! T
subplot(615)' |3 y; p0 a9 M  X
plot(D2_wpeak);
6 ^) e7 E6 K( z: [1 q1 S0 ^6 Ssubplot(616)
3 D8 f/ L8 i8 I, |7 \9 k. Pplot(D1_wpeak);
5 D7 O& M9 S: y6 T6 Y5 h0 ?[value,index]=max(abs(D2_wpeak))) P) _' T) N; I5 t" z* |* o5 @
[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 - N- J: n. N, K/ C; H( e3 ^
    & k$ U- |. N, J* z: n+ W- Y3 S
    + }% @5 U8 [- z- I
        我也来请教~·
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

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

    该用户从未签到

    尚未签到

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

    本版积分规则

    招聘斑竹

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

    GMT+8, 2025-7-22 01:38

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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