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

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

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

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。
0 Y8 G2 f( Z+ k5 w0 |: ]3 u可是使用模极大值法检测不到第二个波的波头,不知道为什么?
/ q# l& d- g! _  e" V请达人指教。- Q& j, `4 \4 B$ L
源程序在如下
4 o$ m& {1 \3 F9 H: c6 C8 [plot(cable(:,1),cable(:,2))
, j! n# E1 E+ V$ x! I4 ^* d* E3 A6 t1 ktcable=cable(:,1);
/ I% H& L3 \& R! w# r' _ycable=cable(:,2);
, n7 p8 g2 A2 j' o# G# \length(ycable)
7 z; u7 y5 F/ p
# U/ y. j( ~7 Gsignal_length=33856;2 W5 \0 Q3 b3 B8 l+ ?: P6 {  ^
t(1:signal_length,1)=0;( T# b# D4 l! K6 R; J& F) @
Ncable=length(tcable);% H- ?6 p6 b, a  G+ J% m8 ~
for i=1:Ncable
5 U% C) x  K: J+ ` t(i,1)=tcable(i,1);
' D9 l& _! |! B8 J2 T/ v; I end
  p: }* G2 B0 _6 P0 m9 J" a( B
1 g; [1 E, [& Jy(1:signal_length,1)=0;: U& U" k4 l8 P
for i=1:Ncable2 r  q; a! S. H) L
y(i,1)=ycable(i,1);! g! x( h/ ~& B: e4 q! p6 K
end
2 `6 w8 M+ S& Q* U  \ noise=0.01*rand(1,length(y));4 b7 z( v$ }5 }) n) u0 s
y_noise=y+noise';
' L* n5 |9 X0 {, i2 r* ]- R
1 B" u4 T3 S( a- M/ lsignal=y_noise;
: S" p* \) }$ [! L0 v: X%plot(t,signal)
2 J+ [0 v* I% k  Y1 vpoints=length(signal);        level=5;    sr=360;   num_inter=6;   wf='db3';
4 K* t' Y/ F: J9 x, |  T%所处理数据的长度    分解的级数   抽样率    迭代次数        小波名称
2 l; [5 y! B5 K3 woffset=0;
$ W; ]) E) G% j  j) ~' N) U) q6 r+ u/ M1 \# u# x( u% i

, I. o& _. g& I' F) _%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:# X  T7 x4 l# d! H
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器  k6 B* U  J7 a# b7 |$ ]; n
                                   %Hi_D:分解高通滤波器
  v6 Q+ i0 Y3 N1 v) b0 w4 Z7 v                                   %Lo_R:重建低通滤波器
# v- e( y9 ~' _                                   %Hi_R:重建高通滤波器
4 i1 N- P! y/ Y" E8 G0 C4 k9 [1 `                                   
$ ]5 s! _5 x* V! }) h[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌% R5 D, L, y- I; Q
                                        %swd小波系数
4 V0 k# p$ i) d7 {6 Z% q" E, ]2 k 8 Z3 z) F0 f9 i, ~# c9 v' P" L0 f
figure;%figure1
( J: R( t. U; e7 r' V2 s, |3 Bsubplot(level,1,1); plot(real(signal)); grid on;axis tight;
  K, Z4 ]# ?: k, f5 X* ~8 cfor i=1:level! ]( h8 M9 }0 Q
    subplot(level+1,2,2*(i)+1);- ?, @, L: _. [5 v1 N4 W* F4 p' G
    plot(swa(i,:)); axis tight;grid on;xlabel('time');" e. i9 U2 s$ z+ w; g* g9 X
    ylabel(strcat('a   ',num2str(i)));
( Z- c6 |4 k' ^' n; k7 N    subplot(level+1,2,2*(i)+2);- P" x: ]6 g. m9 e. S/ p8 J
    plot(swd(i,:)); axis tight;grid on;
0 N2 {# |* U' s7 ]& O0 L7 ?ylabel(strcat('d   ',num2str(i)));
' z5 E/ x# l: Z# h. ~end5 p: ?# T' |2 w( U
%以上内容是对信号进行离散小波变换。
2 I$ O4 f. Z- J- y7 T+ D8 m%尺度为54 t% Q$ ?1 H# S  z. T$ [

+ |& Q! W7 d& M5 s
9 w  R/ U  D& G/ W% u
0 @$ o+ }% A# r/ n4 L3 s9 Z# Z* I%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:4 x( }; w" ^1 L+ @$ s
% swa:小波概貌;  swd:小波细节;" Q5 q4 Z" u1 {4 f- Q, h
% ddw:局部极大位置; wpeak:小波变换的局部极大序列。
; I* r5 s' Z1 c9 G1 G* j( c  tddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零7 }& e6 q/ d( ~$ F% B5 e
pddw=ddw;
, g7 I+ {. `+ v/ ?1 snddw=ddw;# O2 @$ f; d4 F8 d
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零/ a% t9 ]) U4 [  p
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);
0 E) w. M2 L( b, [' {pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
# a  I. J% t  hnegw=swd.*(swd<0);%将swd中大于零的数置零( v( ]0 f- L/ o$ w0 k
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);
9 s+ C) e" Y3 m3 R: Z+ s4 h" x1 ^nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);' t! }" p" a/ I9 n# V+ J: Y
ddw=pddw|nddw;%|:或
8 Z( w' L6 W+ m+ `+ f7 R3 hddw(:,1)=1;
! a3 q4 C* Y7 W$ Zddw(:,points)=1;
/ j0 W8 \( T6 m7 Rwpeak=ddw.*swd;" h. k* W/ N* D4 n, v
wpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响5 @# S& b9 M4 E  k* c! |5 {; }
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响" t- b4 Z5 T! g& Q
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点
1 k# D/ A4 N3 Y5 Q1 J' S
* k$ }) q1 O1 O3 E& kwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));: w7 N* X  F) j: v( R5 I# \
threshold=0.1;  %  阈值
1 H. {9 t: B- m4 |
- Y: z* _0 r' A/ Q% Vfor i=1:points;
2 g. ~" h& L5 n- k/ X+ E2 K2 z( J, J9 X   if (abs(wpeak_threshold(i))<threshold)% i8 N) i8 H& w) g+ N" o1 l( n- R
        wpeak(level,i)=0;
8 u- Y- C8 R! B; V* l3 g: d    end
1 F9 Z( ^1 a( f+ Y' a( tend; 6 v# Z0 Z* V7 C- O
D5_wpeak=wpeak(level,:);
. M: |# p: Q6 H: a# A
; @7 \& o2 T0 Z) i! Y%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,! m$ F  u6 i* [; j0 y" K
: x4 i4 E" {* W* [/ {

0 ?/ B& b" t" E, p8 w( X$ U) N%____进行模极大值的处理:0 V2 v; x: R' [; w" q
%%C=0.8; 4 T3 {8 L1 F/ ?
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。
. i, e. t: G: |) i( A%%D5_wpeak=wpeak(level,:);
4 q. f9 _1 [/ j% d%%M=max(abs(D5_wpeak));
; F/ P' V2 ~8 B; ?3 Y" q%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
& e0 v0 m+ b$ X, s%%for i=1:points
0 q; O) A& h$ E: ]8 u%%    if(abs(D5_wpeak(i))<Thr)
- o, e$ d- c5 @* @8 g5 V%%        wpeak(level,i)=0;
4 {) o+ A0 l. S! x; Q%%    end
! Z7 H8 y; ]  C6 M$ |%%end
& f% G. N) a1 r9 R: n7 Z%%D5_wpeak=wpeak(level,:);
7 K" N) Y8 J+ g' Q/ a- T
  N. O2 X! ~0 x* E; a3 F) Pfigure;%figure2
+ Z9 ~: }* m( fsubplot(level+1,1,1); plot(real(signal)); grid on;axis tight;
+ b, t1 Z) k, Q0 P; ^0 X1 q0 d* nfor i=1:level
8 h, U" \8 d2 G2 `! |- e    subplot(level+1,1,i+1);
. D. ~9 D% D0 j- _* o) w    plot(wpeak(i,:)); axis tight;grid on;
4 X! ?, M2 y1 w( u( [( v5 eylabel(strcat('j=   ',num2str(i)));
  u* L1 y; {8 g3 Wend
/ R0 h0 W  E: O
( [! m8 y( I+ U! z( T8 K" X: Q0 }- Q# }
%步骤4
6 M4 G& f6 G9 Q# m: C4 t: y4 R  K%模极大值的处理方式:0 `/ m3 M) W. [% i  [1 N
%在尺度j上极大值点位置,构造一个搜索区域,
: U9 G, I/ H! v5 J; B1 L2 _%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;* q/ C" A& p! m) Z& B. o7 Y
D4_wpeak=wpeak(level-1,:);
- k* ?" U  W7 r  ?% z* usousu=6;
( u# ]  C, m& n  H! iD5_p=(D5_wpeak~=0);
, L9 U5 H9 E, I' x8 @& YO_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
! Z% o' y; x0 l) O2 N5 Ufor P_d5=O_d5:(length(D5_wpeak)-O_d5);
2 T* m0 P7 q) N4 c    if D5_p(P_d5)==1;
6 C9 n  X) Y; D/ V3 ?        for i=1:O_d5-1;
. [! L- q4 X' y  y0 ~/ f        D5_p(P_d5-i)=1;  * R! a! v4 h4 ^3 Z5 \! Q3 y* G$ ^
        end ;% K  J  U  L! L
    end;     * b- n8 G+ w2 F' v: z5 F5 }
end;1 k; n3 z$ a4 o& i
D4_wpeak=D4_wpeak.*D5_p;
; n5 {0 k+ W& a% L' n3 A
2 ^# R! K! q  L- A& _; @D3_wpeak=wpeak(level-2,:);4 j0 Q7 {7 O: S: [, z5 k4 _9 ]
D4_p=(D4_wpeak~=0);1 U4 V, q& x' c& _2 D  Q% u' ~
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
# @& N! ~$ K/ |3 J& x0 |: Bfor P_d4=O_d4:(length(D4_wpeak)-O_d4);+ ]8 m% O9 i, q
    if D4_p(P_d4)==1;
6 H- I/ @; v) X' `7 r        for i=1:O_d4-1;
  V" j3 c- ]4 w8 [) A        D4_p(P_d4-i)=1;  
  }1 ]1 x* U! \( d& T4 O6 [. k# Q        end ;. h2 y$ q; F9 A- S" @6 g9 r2 U
    end;     ! I4 g& v( N, l5 H( U! G
end;- i$ [1 F& x$ h4 q  Q
D3_wpeak=D3_wpeak.*D4_p;9 a+ a  c3 ]9 E* g$ q' n
7 s; d) _9 C% H0 p' n
D2_wpeak=wpeak(level-3,:);
1 B. k; a' _1 T9 k' [9 f$ yD3_p=(D3_wpeak~=0);
9 k, k+ A, k" F5 ?; uO_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。4 e6 B: ?+ ^+ b3 @/ D7 j2 l
for P_d3=O_d3:(length(D3_wpeak)-O_d3);( A1 x4 `; b' V7 I$ N) m1 X; L" C
    if D3_p(P_d3)==1; 3 `0 p; [. `  R, T
        for i=1:O_d3-1;* ]3 A+ d& y3 T, s/ v' m5 d- m
        D3_p(P_d3-i)=1;
1 G2 W0 V1 K6 S0 S% R1 T        end ;0 O" r. A/ B/ q( A  h; B0 k
    end;     
+ S6 b; w, q- r3 ]; ^9 Fend;
+ \. G1 G. e; tD2_wpeak=D2_wpeak.*D3_p;
3 G' w, ?. y7 }0 G: X  E
! M$ Z2 P8 O1 R; E%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:# e7 J/ B) t! S2 M2 r
D1_wpeak=wpeak(level-4,:);9 S9 l- g; O3 k4 g& B- P7 D
D2_p=(D2_wpeak~=0);; r- q6 S) q" |" h' w
D1_wpeak=D1_wpeak.*D2_p;
0 W* [- L9 e4 `. @, t$ \, F6 g
; e5 j7 Y4 J( U0 gwpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];9 ^. H$ m" W# l. Q
wpeak=wpeak';
7 p  d* J8 o$ J) q! C
  r, `8 R7 z/ l  `; a/ k7 T%____重构信号:
- {, K! @: Q+ v1 [8 l: Upswa=swa(level,:); % pswa: 为待重建的信号
0 E; H: N# \. Pwframe=(wpeak~=0); %迭代初始化2 ?& z) o; C# V0 K. N. F6 L# @
w0=zeros(1,points);- `# G+ a7 E; {& f/ q+ |# F' q
[a,d]=swt(w0,level,Lo_D,Hi_D);+ o) `0 ~9 s0 w- v- g
w2=d;  % w2为待重建小波
: k5 j" {8 d0 p    for j=1:num_inter" h$ v7 J' j* H+ r* g
       w2=Py_Pgama(d,wpeak,wframe,1,sr);   % 先进行Py投影和 Pgama投影/ {  O# D- @2 K# B- q5 ?4 y
       w0=iswt(pswa,w2,Lo_R,Hi_R);         % 再进行Pv投影% w; q5 x2 K" F- X/ \; W
       [a,d]=swt(w0,level,Lo_D,Hi_D);      % Pv4 ]9 C0 G" v3 h/ ]" y
    end
5 r$ e2 `  N4 |: W$ Q9 w8 n0 \, B8 _     pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号   
* l5 |, z- g* c$ z" U- E" Q     ( s% Y9 ]4 o+ s& K
xcrr=y'-pswa; % 重建误差( G3 {. p/ b. G
figure;%figure3- S: M: e* P3 p- j% r
subplot(411)
# B: j! c+ C  d% q# Bplot(y(1:points),'r');
9 v/ E3 u+ G9 s, m$ Qaxis tight;4 s1 ~* Q, a  A4 s
subplot(412)% z: H+ f9 n8 v6 h! w
plot(signal(1:points),'r');1 J, ?/ o4 R( _; \$ p
axis tight;8 @6 _) u+ H5 S! @' }
subplot(413)& @3 x+ G* T% T9 o6 }
plot(pswa(1:points));
# R. N- L- B5 s2 h9 i2 yaxis tight;8 ]8 x- Q& [0 |, @* R
subplot(414)
- S# h9 X* D6 E5 t* u! [plot(xcrr(1:points));
; m  M3 G/ J+ taxis tight;
; [/ U0 s) F/ Ffigure%figure49 g* A5 G. `6 D/ N4 z
subplot(611)7 P) K4 v9 ^4 n5 I: W' p: N5 B
plot(signal);
9 h5 U) {/ x  Nsubplot(612)' C2 m) M9 ]1 U6 v. K- c9 \
plot(D5_wpeak);
) e$ ]9 C3 `* {# W" lsubplot(613)
: l; Z' ?$ g- s/ O9 M# L& W* f. i" u/ uplot(D4_wpeak);* Q8 B8 ]6 A" E6 D0 J1 ^5 G" Y
subplot(614)
3 w% C, v  P6 S" d0 `5 Q( @plot(D3_wpeak);
* w; ^0 ^0 Y& Z3 D) i8 q/ Fsubplot(615)
! T' k! T1 l6 G* _; S6 rplot(D2_wpeak);
  q$ `& v3 H# q: {; ~subplot(616)' Q6 b  \+ S; O8 x# z$ F
plot(D1_wpeak);
  n% G0 O4 ^3 C: R4 L' n+ o+ M1 @[value,index]=max(abs(D2_wpeak))$ w% X  _2 A+ ?+ _- Q2 Q$ f
[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
    4 p4 R. k  y5 \: v" j
    - {" D/ K+ a% i; ^8 [) F2 e3 r% D# Q( o7 u8 C
        我也来请教~·
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

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

    该用户从未签到

    尚未签到

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

    本版积分规则

    招聘斑竹

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

    GMT+8, 2025-6-8 00:19

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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