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

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

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

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。
  j7 [" i$ S) V可是使用模极大值法检测不到第二个波的波头,不知道为什么?( Z* c) c+ M! y. w2 |
请达人指教。( m4 s6 [* r6 ?! A8 j! f0 f
源程序在如下! }9 Z' c2 C1 Q/ Q5 y
plot(cable(:,1),cable(:,2))0 l. v( H' \5 q) W4 o
tcable=cable(:,1);
( E6 W6 Q. o3 d; pycable=cable(:,2);
' C1 a9 x4 O/ ^length(ycable), Y' m7 K4 J3 t/ w6 m% t
0 K2 w. n. m; f# N3 k% i( v* ~
signal_length=33856;# i% j& m% b# x7 F' k* b
t(1:signal_length,1)=0;5 y3 N' |9 c; \6 a
Ncable=length(tcable);! A- m# K9 _, ?( O
for i=1:Ncable( X, [: W8 S# l$ {" _
t(i,1)=tcable(i,1);* Q1 y; a& \% w0 O" m5 G; }
end
8 s; u+ A. e/ ]( ]! y
& t" y' R. m% I/ N+ ?. b: A6 p" s+ t2 Ny(1:signal_length,1)=0;7 b: M. y6 H6 Q8 v
for i=1:Ncable# S1 W2 c  _# Y3 ]
y(i,1)=ycable(i,1);; J: M, _/ W6 J# D
end
  i% ~4 S# |& i, [9 Y; S noise=0.01*rand(1,length(y));
' M1 g* }" S0 M* I- o  f( Jy_noise=y+noise';" B. p% S) p( E# X! z
$ B" j. |% n( `. i4 u, l  m+ D2 u
signal=y_noise;
( l6 }9 F" Y0 U( O) i& w$ z! _- Q%plot(t,signal). J/ j" f  b6 k- [6 ?# V+ N
points=length(signal);        level=5;    sr=360;   num_inter=6;   wf='db3';" f; K- R3 R& U: l1 ^" U) N' u" F
%所处理数据的长度    分解的级数   抽样率    迭代次数        小波名称
, k8 g# {( u) w( Joffset=0;% b/ u6 V9 H$ L  f# h* Y
) a* y- x1 S! w( V7 W: }0 V

9 U1 l4 _6 ?* Q; P, D" ?% R%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:. D8 L! q3 _% v9 h5 B  A
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器
/ Z9 V' e1 N* A                                   %Hi_D:分解高通滤波器
# Y( Z5 {* K+ V1 T% M                                   %Lo_R:重建低通滤波器( \) R9 j" y, ^* L) ^# L7 K* i4 s7 Y
                                   %Hi_R:重建高通滤波器
& q# T2 n6 q  w6 Y/ v. k                                   ! y( o' m. y3 X: t) F1 e
[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌
1 S  M" C& n1 G$ W6 V/ w' Z                                        %swd小波系数1 m. [* A1 M$ h% l

$ I! q+ L% e, f# n, Ufigure;%figure1
  ^7 J" B! X( c& v) I, Gsubplot(level,1,1); plot(real(signal)); grid on;axis tight;0 t3 m1 p0 r+ W! d3 N
for i=1:level
7 M6 h9 y$ Q9 M- {    subplot(level+1,2,2*(i)+1);% L, S9 }9 C5 G- |$ _
    plot(swa(i,:)); axis tight;grid on;xlabel('time');( Z' V! j  B! a/ H; {
    ylabel(strcat('a   ',num2str(i)));4 r* g" q4 a; C* r4 u
    subplot(level+1,2,2*(i)+2);
' z6 `. Z6 p1 [$ f0 L* ]  D. }    plot(swd(i,:)); axis tight;grid on;
) z4 m, ]1 p' _: F/ Aylabel(strcat('d   ',num2str(i)));
% b5 Z0 S# v0 x5 V1 C, ~* K) Iend) F* M8 M1 f& J4 u- f) Z8 Y% R8 w
%以上内容是对信号进行离散小波变换。" z% w2 l  r6 K6 E2 @
%尺度为5
$ [6 D8 B  U0 Y) ]
) k- o+ |) @& _( j6 ^
' [. |2 A( g; }$ B# @8 L5 p! ?3 @" h3 O
%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:# L& i( e9 F( k5 A! f. {
% swa:小波概貌;  swd:小波细节;4 K4 J- ]+ |& Z; t( O" X/ w
% ddw:局部极大位置; wpeak:小波变换的局部极大序列。  V# O* {7 Z# \0 x4 S' a
ddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零/ ^# C0 c7 M5 T$ z& z2 T( |" l
pddw=ddw;- ^/ N& [. h5 y: [0 I, ?$ }
nddw=ddw;
; w4 }' ]- A7 z/ V4 xposw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零# k" z! T# E! T/ ]" A5 d
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);2 v7 N7 C1 P, `+ E9 l# ?
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
+ Y# `9 n2 K5 L+ S. ]negw=swd.*(swd<0);%将swd中大于零的数置零
* j. q% L0 B$ R/ u8 sndw=((negw(:,1:points-1)-negw(:,2:points))>0);
2 y8 q8 i9 `* \+ [nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
7 w5 r) z3 }9 `: |; Tddw=pddw|nddw;%|:或4 n+ ?( n  s* d- l; u0 d& T, b  a
ddw(:,1)=1;: G! A/ L# S+ q& c7 A
ddw(:,points)=1;3 }; ~1 l$ V  F3 W; g5 Q" o) T
wpeak=ddw.*swd;9 \" e$ Z1 S. J2 G
wpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响- y6 h& y# E0 n  R! {
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响
! _- w, P3 D' m' K3 ]%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点/ p7 ?  A% ~/ y2 Y

. u% N" l! @7 W# s& W! ^0 Q% pwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));
4 W4 G! d+ b6 `threshold=0.1;  %  阈值
8 [4 M" S) z- E( r+ b) [# H1 q
, x# a. ~6 l$ }for i=1:points;
0 y( b2 X+ ^7 F( M+ T' m$ R   if (abs(wpeak_threshold(i))<threshold)0 F* i' l7 E  R8 n5 a: q6 b
        wpeak(level,i)=0;) l) o) j- s2 M7 z6 }: P" e7 a: D
    end9 E7 P1 L5 c. y! r; G  t* _
end;
, [1 K! m2 w( {% j# @  PD5_wpeak=wpeak(level,:);
* X1 @, \1 {9 k8 B" m( T0 L  y4 U1 k2 ?* g. k2 L) _
%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,
: L6 {3 q) v1 R7 w% C2 d" Z% }% g  I) r9 a, @

( C2 p) b/ G7 _; y%____进行模极大值的处理:& o: V4 o8 ?8 c2 Q6 W3 g
%%C=0.8;
# C& s2 Y% h5 M. ~%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。" f7 u: k* W8 }- i
%%D5_wpeak=wpeak(level,:);9 j0 \, u. S, Z5 W+ W7 i0 I
%%M=max(abs(D5_wpeak));8 |2 _2 d. E6 E7 B' O( x
%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
0 [4 T; ]+ V% o# j- `%%for i=1:points' ]# h8 V3 p) g. l2 c+ I
%%    if(abs(D5_wpeak(i))<Thr)
2 c! Z6 E1 C, D. z5 x3 O6 n# J%%        wpeak(level,i)=0;+ K6 q1 T- I1 `. i# A, i7 k! }
%%    end
" E8 a3 B& Q0 G7 y%%end
5 ?, [( W4 M; L: ^8 a' N%%D5_wpeak=wpeak(level,:);
5 D2 K7 c& t! p8 c- V. Z
4 `" h4 n* H4 p+ {figure;%figure2& _8 B2 V' t2 R- v
subplot(level+1,1,1); plot(real(signal)); grid on;axis tight;+ s- Z( y, x, }; J3 T
for i=1:level
  N# r1 T4 l% D. E1 c2 L    subplot(level+1,1,i+1);- [% E! S$ z; @' @& x  [
    plot(wpeak(i,:)); axis tight;grid on;1 F% E: N- g' _, B2 O( m" s% i
ylabel(strcat('j=   ',num2str(i)));
! r0 _0 \& c3 z0 y  R, J: Qend
2 H* R" u, n# J! w, d+ j3 e+ B. q
" b( ^+ J7 g" g8 F4 `1 Q6 M
) H  c# v6 O9 f( }7 \8 o. g- O%步骤44 t% X4 e6 a! J$ I0 C
%模极大值的处理方式:
, u& H5 g8 w$ }5 o$ `- O%在尺度j上极大值点位置,构造一个搜索区域,
9 ?3 [9 ^# f% i) V% A- L%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;. M2 d* h. L, ^2 ]
D4_wpeak=wpeak(level-1,:);
3 ~& c7 g3 g6 H. q6 e1 d6 @. |sousu=6;& m& L$ o7 X+ {5 f- V
D5_p=(D5_wpeak~=0);
  x* G* j$ p. f7 n) b0 F! N% F% I. mO_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
. ]! R, p$ s, e2 Xfor P_d5=O_d5:(length(D5_wpeak)-O_d5);
7 V4 e! J" o- Y5 m/ f8 _$ f    if D5_p(P_d5)==1;
3 h6 M! N  L/ _9 K" [        for i=1:O_d5-1;' l7 _) t7 P  V) a
        D5_p(P_d5-i)=1;  ! l6 s0 y- k! O2 s# l# I" z$ U
        end ;
$ M7 ?- W8 c8 [1 d! `% X8 V    end;     
3 I; h6 v  [: y" Y! Eend;
* F& y# J" ^* S, e8 m0 |2 lD4_wpeak=D4_wpeak.*D5_p;2 R2 h2 S2 R- D* x

& d9 ?+ J/ ^: s2 ^5 KD3_wpeak=wpeak(level-2,:);: b/ ^5 U+ e7 y2 b3 \6 x3 z
D4_p=(D4_wpeak~=0);
& g6 a- \+ Z% c( p, ZO_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。: X' q7 w$ t, T( c2 t/ N6 b5 G
for P_d4=O_d4:(length(D4_wpeak)-O_d4);
7 Y" J- V4 r, O1 J4 X    if D4_p(P_d4)==1; ' s5 J8 V! j# Z8 d
        for i=1:O_d4-1;( j. ?. D7 X! S, q
        D4_p(P_d4-i)=1;  ' I# b* H! ^+ Y. U! V+ G
        end ;/ n" m) ~4 X7 p7 b) ~
    end;     
$ C" n2 s, n: P& e8 ?end;# K# t2 |% u2 M6 J) v8 J1 {
D3_wpeak=D3_wpeak.*D4_p;( @3 O' x' N. L$ J' |+ K- y
( z- }( W; q* g! Y
D2_wpeak=wpeak(level-3,:);
4 V6 h: _  D+ B; E" X% Z. vD3_p=(D3_wpeak~=0);
* C2 ^2 R0 V7 G+ y, \& nO_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
5 j0 Y4 O' X6 J' ifor P_d3=O_d3:(length(D3_wpeak)-O_d3);( ?/ `: G% ^, k* P$ b2 k* J% O
    if D3_p(P_d3)==1;
8 X/ Z% \2 }+ C  t6 M        for i=1:O_d3-1;3 x. H7 m% i6 `& u# n  C
        D3_p(P_d3-i)=1;
8 z- j% h3 k+ g6 X        end ;. x. x3 Y+ ]! a! O4 y
    end;     
4 [- v+ [$ o3 b$ }end;
+ {3 l0 I5 S* p4 |D2_wpeak=D2_wpeak.*D3_p;
% L/ G2 m& h+ q( i
/ \# m# m  Q3 K9 _%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:
8 Q: B1 Y( m/ f' s- t' O* Y+ aD1_wpeak=wpeak(level-4,:);
8 B/ s+ O- Y: ?2 RD2_p=(D2_wpeak~=0);
4 H  ~* I$ B  N$ L6 LD1_wpeak=D1_wpeak.*D2_p;2 r3 m. B* C! v5 o- E2 e4 w

7 Z( ]% e1 p: G( M5 `/ Fwpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];
: a" h8 j2 V1 `% r/ ]  l: o1 qwpeak=wpeak';
! S+ t; f/ F* N8 z7 K/ {$ t0 R- T6 e- A
%____重构信号:
# D: \6 g" E, y8 f: y$ ~; Jpswa=swa(level,:); % pswa: 为待重建的信号$ j$ z  v" W: a  H9 K  K  i. J+ B$ `
wframe=(wpeak~=0); %迭代初始化- d9 u5 B1 q- L4 D. S, D# d$ ~  r
w0=zeros(1,points);
0 c; w3 f, F* X% v[a,d]=swt(w0,level,Lo_D,Hi_D);
5 X* u. V& x' s  U+ E6 f6 @! t6 @5 qw2=d;  % w2为待重建小波
8 Z- d6 V5 |" t6 L7 z7 W3 i! k    for j=1:num_inter
0 `8 X4 C& C9 E+ l6 I4 f! [       w2=Py_Pgama(d,wpeak,wframe,1,sr);   % 先进行Py投影和 Pgama投影" q% C, f5 X& X3 d- r
       w0=iswt(pswa,w2,Lo_R,Hi_R);         % 再进行Pv投影
" [  r  k4 Z6 s1 f/ c6 ]       [a,d]=swt(w0,level,Lo_D,Hi_D);      % Pv& B3 l! t  b2 }  [. G
    end
# a9 P  P/ V. X     pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号   4 i( @1 R; |. Y; U! P+ _
     
, R' Q- B) Y( ^5 b9 i9 _+ }3 Y8 dxcrr=y'-pswa; % 重建误差0 Q% v3 z$ Q; F: r9 z; v
figure;%figure3$ ]$ Y, g3 C9 }4 q
subplot(411)% J& d6 T& f9 B- ^: u* x
plot(y(1:points),'r');6 c  p/ k; ^; A
axis tight;
, W5 K+ R8 O" q9 X, ~; `& [subplot(412)6 i: P( W( D8 p" w! {
plot(signal(1:points),'r');
; f8 g! R6 r5 k: j' x- E9 Y/ i$ ?7 faxis tight;
7 n$ {3 a; X6 M2 c4 }5 dsubplot(413)3 v" R  t3 Q. u. O
plot(pswa(1:points)); 9 |5 _% G9 A  c2 }% s  Y- S
axis tight;! U, N, F. i  f4 \
subplot(414)
* Q' e. |% h4 E3 \- |; j8 Rplot(xcrr(1:points));
' R# Q9 E4 X4 Haxis tight;
% z, q# [! ]5 f6 \7 |figure%figure4
4 _' O4 b1 L# d- D/ Fsubplot(611)- G% U( E& M) S/ P6 p! N
plot(signal);4 T# r4 ?; S/ t: n. B! g
subplot(612)+ F$ `) _) `: ?1 m+ [
plot(D5_wpeak);/ d' t( {' T1 @: s
subplot(613)
; w) a+ `" @. ]plot(D4_wpeak);
% p+ X8 X, t% ]4 C& Z: v' bsubplot(614)
/ I. M: N; B. N: Q3 {! Mplot(D3_wpeak);! j1 U% `) B( F7 p
subplot(615)& a3 d* c* n/ y, z$ O7 \/ `
plot(D2_wpeak);  Q1 K2 g3 H1 }5 g6 m1 s
subplot(616)/ c" U8 d+ t9 c. n* w  Z
plot(D1_wpeak);( w( i. L  i9 ?! Y4 I% o2 }6 ?. s
[value,index]=max(abs(D2_wpeak))
* T- @& u6 r# l- }  b+ u# C[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 ) T5 P" }, ?4 i; ~+ D3 p5 X

    - D. ?' z% M  _' ?$ s- C' p7 j8 ^) U# q2 d9 R  K; y
        我也来请教~·
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

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

    该用户从未签到

    尚未签到

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

    本版积分规则

    招聘斑竹

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

    GMT+8, 2025-5-16 05:52

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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