|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。4 I; l# S, G6 o$ a$ c v$ z F7 t
可是使用模极大值法检测不到第二个波的波头,不知道为什么?
# N7 P& o( m* C8 {请达人指教。' B* |* Y7 q8 f* |5 w# t
源程序在如下
8 q6 A& Y* J, q: p5 `- H& Bplot(cable(:,1),cable(:,2))
2 v/ S$ s9 A3 ?. j2 B" rtcable=cable(:,1);
6 x& K9 m8 l* d+ n- z0 eycable=cable(:,2);1 |5 x# K9 S1 r& r5 l
length(ycable)
9 U; z4 g. D2 w/ m0 _ w7 g, g0 f
signal_length=33856;
4 A3 o% v8 z4 {; m t(1:signal_length,1)=0;
- e) Q$ p$ I$ a7 ?" `2 H Ncable=length(tcable);
& ?+ p A8 F$ z" t0 r2 ~+ ^, r for i=1:Ncable
, u$ [* w# N( P8 T* }& ~) z t(i,1)=tcable(i,1);( v5 C2 F) D/ g/ g2 c$ M% T+ }
end
2 W" C8 z3 U/ `! f2 v) J& V # Y2 n% F _8 N1 H7 h. w* I
y(1:signal_length,1)=0;
% X4 ~6 Y; [* O3 ?for i=1:Ncable
8 s. y7 ~# h% j5 g! Y y(i,1)=ycable(i,1);
. \$ e7 R# |5 x& V5 Y7 Kend6 S# @8 T2 h* r# m$ w
noise=0.01*rand(1,length(y));$ Q/ V2 Q9 l) W8 T
y_noise=y+noise';
2 H: ?; w3 ~; D; I1 b. c/ e
3 p9 k- m" Q7 q3 R) ~signal=y_noise;
$ d" P* w" B. i* U3 c%plot(t,signal)
: X* L1 X" M* l* }1 Vpoints=length(signal); level=5; sr=360; num_inter=6; wf='db3';2 ]8 x! F2 r6 x. _9 z6 f" V
%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称! Y5 R! o+ F5 s/ d. Y
offset=0;3 c4 V, S P- ~; A
, f+ ]7 L- e9 n' i2 [5 v; \, j
% o5 B+ o0 z+ A
%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:2 L/ m2 @7 G# K. W
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器
& g' h4 Z( v; @8 Y: v0 M# X1 m %Hi_D:分解高通滤波器+ g. F3 m/ ?6 b: K9 X* E
%Lo_R:重建低通滤波器7 B0 j0 X+ ]6 H0 ?" B! V
%Hi_R:重建高通滤波器
Q; L% T/ M& Z+ F 3 y# L2 ~. Q- \' J
[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌8 y3 k4 A$ v8 f" C
%swd小波系数
) G% b P. j9 [* F, {7 d ; X. p& d% f4 ?4 R# ^+ ~2 ~
figure;%figure1& u: e+ _) X8 F, r
subplot(level,1,1); plot(real(signal)); grid on;axis tight;
2 |& d& B% I0 t$ E6 Ifor i=1:level
7 e c/ N M% d2 u- p* C subplot(level+1,2,2*(i)+1);
3 N/ b7 {/ J6 K2 I plot(swa(i,:)); axis tight;grid on;xlabel('time');
, O# a4 e' L3 u8 s ylabel(strcat('a ',num2str(i)));5 B: d, ` L' f7 O- H! J# Y4 g
subplot(level+1,2,2*(i)+2);8 j( d' |' J# R4 O5 N: x% e
plot(swd(i,:)); axis tight;grid on;
" K: u# V6 X( W t" `7 V5 U+ \ylabel(strcat('d ',num2str(i)));9 z% d; R, y5 A
end
7 T" n) P) \0 Y1 ]; f4 j K%以上内容是对信号进行离散小波变换。; ~8 Y- z9 z( M
%尺度为5
9 Y. h+ P+ f# p5 a8 e, `/ z: c- M' B4 E/ P0 {
. r) ^6 H7 K0 P7 `
. ?7 H' K+ }* E%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:
- R: j4 Q2 d/ `% swa:小波概貌; swd:小波细节;) E+ c. _' v+ \
% ddw:局部极大位置; wpeak:小波变换的局部极大序列。' w+ Y, o7 |* U* Q. k N4 p
ddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零) k% V, G* o: X) @1 y
pddw=ddw;' E6 P1 z$ i% e* b- F
nddw=ddw;
( G1 p& ~, [- @5 ~! \5 Bposw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零, C/ }4 J) j! x+ i; I
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);
) Y% ?, V9 d5 o+ Xpddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
8 ~0 y" }# P+ v. _7 K+ [! nnegw=swd.*(swd<0);%将swd中大于零的数置零
J7 G+ B$ Q7 C) a- k+ pndw=((negw(:,1:points-1)-negw(:,2:points))>0);
" u, D9 g8 {6 Q0 {# @nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
0 o+ o* i9 b/ Bddw=pddw|nddw;%|:或
+ J: a& U, Z5 a6 ?, w4 d/ Sddw(:,1)=1;
3 h! K. F6 V# N8 s& ?ddw(:,points)=1;
: R+ u0 n/ m' O0 ewpeak=ddw.*swd;
, _' _; |9 `/ u) d6 B9 \& i( M2 @wpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响
3 I- G: S1 H6 Rwpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响/ S( x' `/ Y. [* i' A- E
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点- h3 @" C' L2 ]8 Y" e) h- k3 u
- D6 F5 I) v( T1 L5 \7 N( ewpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));
P' g" f l' u* K2 Vthreshold=0.1; % 阈值
, E6 K, \$ V3 l6 r2 ~6 |3 f2 H0 T. W D4 E
for i=1:points;
* S- ^1 v7 S7 ~+ h4 ]% d if (abs(wpeak_threshold(i))<threshold)
! ^6 `0 s. D4 P wpeak(level,i)=0;: F6 Y" Q' `0 L2 C
end% K4 F7 f% N$ u: l5 v! f( \3 O
end; Y0 B) w; D9 M" b- H/ @
D5_wpeak=wpeak(level,:);
$ g) g5 c+ a( P7 }, z* ]
' L% v5 m) p9 [2 \/ V%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,/ @2 q% ^% Q) b
' t' L) w! ?2 p
* l) W1 ?, @4 {; J5 M0 M- A% x; V
%____进行模极大值的处理:
; L6 K% D( f" p%%C=0.8;
. S. d! I9 c4 m% `& t% k. b%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。& [0 \2 s9 G$ N2 d) J8 f' n
%%D5_wpeak=wpeak(level,:);% v; [2 g( b4 n
%%M=max(abs(D5_wpeak));
6 B/ |8 I f) T' b%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
0 K0 {- f% R. ?6 A* L%%for i=1:points+ U$ V! ?0 Q+ h4 C( M% _
%% if(abs(D5_wpeak(i))<Thr)
- e. K# F8 Q$ f- {/ b5 }%% wpeak(level,i)=0;/ N" m. D4 c) X1 p/ V: m; C$ q+ ?
%% end
5 y# x* x9 N# T6 J%%end
# }6 s3 c4 ?5 W& G% f. ?%%D5_wpeak=wpeak(level,:);
. k9 ]0 o) e7 L4 b' T2 D2 j: A$ ]( ~- V9 D( V0 v, m
figure;%figure2
0 h2 O/ A# g# P& v3 Qsubplot(level+1,1,1); plot(real(signal)); grid on;axis tight;. u. ^7 e& h1 z- Z, u: M0 U
for i=1:level
" V$ ^) b" f- c+ T. E7 x subplot(level+1,1,i+1);; U7 j; e- n: A; k
plot(wpeak(i,:)); axis tight;grid on;
/ _! f& E3 [* E+ y5 j7 v8 ^ylabel(strcat('j= ',num2str(i)));
' e* X% x; j- J2 s1 @( R5 ~end
0 I2 l$ H9 v2 A' V0 }# |: l! M9 y" X
$ J' e. H( I- E) m, D) H
%步骤4
3 I( ^# Z( l5 i. m. {# \5 f0 g%模极大值的处理方式:3 q% o! i. E/ r7 h+ X/ f+ x
%在尺度j上极大值点位置,构造一个搜索区域,
; W. i" O# c# a) G* ]4 n+ a%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;5 o. A5 k S! d, ~) J1 t( W* H
D4_wpeak=wpeak(level-1,:);
4 O" j5 @9 y* g4 asousu=6;% X% e _9 A1 L' i3 D. T( O
D5_p=(D5_wpeak~=0);/ h. v. S, L* A! N3 f9 u$ e% {
O_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
& h" P+ n* a( b( y0 ~for P_d5=O_d5:(length(D5_wpeak)-O_d5);: j0 i% p+ z/ U2 t: A( l; w
if D5_p(P_d5)==1;
: Y( m" R: c# J" l# v for i=1:O_d5-1;
' @. L, @: ^; ~; ]7 X' O D5_p(P_d5-i)=1;
7 a' L" l2 X* c ` end ;0 f7 G0 t: g& M6 G2 L$ g6 s5 g" A
end;
$ G. m; e8 B8 h% v, E2 d6 u) o, nend;
. D" o" m# X" Q; eD4_wpeak=D4_wpeak.*D5_p; ~# f2 _ E' d, h, Y
" X p; u F8 j" U6 d
D3_wpeak=wpeak(level-2,:);) @, R( k4 H2 K. ~% b! I
D4_p=(D4_wpeak~=0);/ a% B+ k6 R5 e
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
) g$ j( r, Z) O) x; pfor P_d4=O_d4:(length(D4_wpeak)-O_d4);
3 B' O& R% g" G* p if D4_p(P_d4)==1;
' Y5 p6 W5 V6 {3 M" [ for i=1:O_d4-1;1 K1 X4 p4 |) F. g1 Q; F! ?- H
D4_p(P_d4-i)=1; ( O' ^: @9 _2 y" S' a- ]1 R
end ;
9 M* L0 t! B6 A% u ^4 \( X/ N end; , L ~5 `% W, ]1 w5 B1 R
end;
: x* e% j" k& y$ Z: g: g0 JD3_wpeak=D3_wpeak.*D4_p;
6 c+ w( J& O# [4 a8 {5 `$ Y0 l7 u' X2 N4 m
D2_wpeak=wpeak(level-3,:);, s' ~. J z* g8 M6 g2 E$ L
D3_p=(D3_wpeak~=0);
5 Z! {5 y- e9 [O_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
6 [' p. o7 w' v% f' Efor P_d3=O_d3:(length(D3_wpeak)-O_d3);
4 o: c: d1 I3 f/ j) T& I' z if D3_p(P_d3)==1; , ?5 C* D8 w1 A
for i=1:O_d3-1;: F5 S, ^, [9 K! g
D3_p(P_d3-i)=1;6 ^4 ]8 { L: a9 U, [" }
end ;
5 x a" p# [0 \' Y9 R2 w end; . Z7 }8 n6 B7 A7 E
end;
* Z: U: ?2 \) W- g' `' Z8 K; h7 yD2_wpeak=D2_wpeak.*D3_p;
) i8 j. K0 M# W7 m7 g& v6 k+ r% D
6 M+ p9 K- s' E7 k% q%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:
4 P% F& A8 e. U/ {9 [& ID1_wpeak=wpeak(level-4,:);
2 a* s0 L8 l( S+ ZD2_p=(D2_wpeak~=0);
+ }! u( t( ^$ Z: M9 A2 Q8 {D1_wpeak=D1_wpeak.*D2_p;1 `1 G5 |, |, I1 N( u* p8 P
5 K) d6 ~ n" b; c# `: u3 H( pwpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];5 ^8 S4 g o, }: d* ]1 z: E, `
wpeak=wpeak';' O& a' F: N) q% f0 v/ r/ k$ p1 y2 L
+ y( D4 e* t- t8 d, \
%____重构信号:& A* Q, [- l, u0 x% g4 K) F; M
pswa=swa(level,:); % pswa: 为待重建的信号4 x! E3 V2 z5 `) E/ L% [
wframe=(wpeak~=0); %迭代初始化% @! }# g; K2 L3 v6 b; |
w0=zeros(1,points);
, r6 x* h. H/ o! j$ T[a,d]=swt(w0,level,Lo_D,Hi_D);7 z. W) M! z# _2 B8 Q* G
w2=d; % w2为待重建小波# i) F5 O' @/ I3 @2 \
for j=1:num_inter
6 r* X; B, C, _1 z# G I w2=Py_Pgama(d,wpeak,wframe,1,sr); % 先进行Py投影和 Pgama投影
3 B4 e* [! y6 E& |0 S4 } w0=iswt(pswa,w2,Lo_R,Hi_R); % 再进行Pv投影" Q" P J/ x+ h( W. t8 ]9 a& b
[a,d]=swt(w0,level,Lo_D,Hi_D); % Pv n/ ^- f% L4 c0 V
end
7 H( u! b4 Z0 d, T, c$ E9 @ pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号
1 \3 }8 g9 s6 ? ?! u, @4 Q
; O# e% T- d6 ^5 x: @2 x0 C' r+ K: Qxcrr=y'-pswa; % 重建误差/ p9 K3 N- j' g. q f
figure;%figure35 o1 R) s. O: h
subplot(411)! ^6 g6 z4 n$ G, [) U \
plot(y(1:points),'r');
/ [. S( |) o. U, Daxis tight;% i2 P3 s' `; p
subplot(412)
# O! Q; @8 d+ x, n: m- d- r" B, fplot(signal(1:points),'r');8 J4 O: ^" H4 Q! x
axis tight;4 V- o) z8 q' r1 l
subplot(413)
8 v$ Q3 C' F' rplot(pswa(1:points)); 4 n& |) G+ Z! i0 ] _. m1 _
axis tight;
4 f7 t/ m/ |# _& | W# z) j! X$ ssubplot(414)
- j) H$ E" b; h4 d& |" _ Vplot(xcrr(1:points)); . d/ V% ?7 T) ~1 N* v' v0 _
axis tight;
& o( f( D" R1 Y* e0 T2 [figure%figure4
' [* p/ z* r F) O6 H1 ~subplot(611)6 {5 q1 j+ Z* f
plot(signal);) D3 J: l1 I0 Z1 ^& o* c3 p: E
subplot(612)
3 b5 @. x8 N- Q) O6 L4 v. i& }6 ]plot(D5_wpeak);
+ b+ p: }# l. a6 b/ [+ Y+ gsubplot(613)) h( P% c; S: E" U/ V: Y1 [9 g
plot(D4_wpeak);2 D6 z) n! z7 Y5 n8 e& m, p
subplot(614)
0 w6 C5 V: i7 ~/ G( Hplot(D3_wpeak);5 y) m* D; t( E
subplot(615)2 I& A; l) I; i, P; C
plot(D2_wpeak);( P, E1 B* G1 q/ F, w3 g: `
subplot(616)$ ? a0 _3 B+ u( q- L \
plot(D1_wpeak);
# f+ H% @7 _* b" |6 O3 p7 l+ ~[value,index]=max(abs(D2_wpeak))
+ o; n( A+ }" o, {# [/ N- \[value,index]=max(abs(D1_wpeak)) |
|