|
|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。/ z, x J7 [7 Q7 M0 y
可是使用模极大值法检测不到第二个波的波头,不知道为什么?0 l$ j9 [/ v7 [0 w7 |
请达人指教。
0 x( }1 A y/ }1 K源程序在如下$ r0 n; M4 G% ]8 k, G# m
plot(cable(:,1),cable(:,2))" p! `- ^% F: `4 Y. c; Q4 W
tcable=cable(:,1);) M5 k' g, F. l$ z4 y9 k( U! |* F( }- Z
ycable=cable(:,2);6 U" ^2 S$ f% m
length(ycable)6 i4 N* G! @1 [
' [1 [: \6 m3 q7 O& `! t+ I: lsignal_length=33856;
$ a7 e3 a# @# s6 Q t(1:signal_length,1)=0;
. m( u: f9 s& {/ ]& t8 Z+ V Ncable=length(tcable);2 N$ a$ Y% }* W# ^7 L% g, s4 l
for i=1:Ncable7 Y, ]4 ~, s6 ]2 i: H1 W* [
t(i,1)=tcable(i,1);6 Z( o v" E% q2 \# i
end
& z; p! t e: } a; y1 j - J2 W3 _) X s4 m0 L
y(1:signal_length,1)=0;
' ~- \ h! }2 ~* ^. N6 ^' n( wfor i=1:Ncable5 G0 j7 }. ?* `- C
y(i,1)=ycable(i,1);
; {) D1 n" l/ e" dend
R9 s" S* d! ^" U noise=0.01*rand(1,length(y));
7 y4 ]- x7 e+ G& |& h) p; _% ay_noise=y+noise';2 }" }3 [- R' u$ P% i% R
3 \& o0 F; S# n0 x% q
signal=y_noise;/ t( {& L6 O4 N n) I
%plot(t,signal)
% o) o3 e7 m, ^9 m& P. t) s* Wpoints=length(signal); level=5; sr=360; num_inter=6; wf='db3';% f1 @' E# W: r
%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称
) b9 }3 ~/ \8 C' N' R3 {9 eoffset=0;
+ c* q9 H3 B" l) E+ G7 u) T; x; z" ?% c0 l& i) K/ H
# i ^# y+ ^9 s" G6 Y' l" s% v%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:% d5 k4 ^3 s- R5 f" m$ F
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器
% f& l1 I ? K5 H0 D( n %Hi_D:分解高通滤波器3 O5 l, X1 m3 X/ A. K: e
%Lo_R:重建低通滤波器% z1 H4 { c/ h% U. I
%Hi_R:重建高通滤波器
0 W9 z; G9 a5 o: Z
/ t0 i& a; F# [[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌
8 T/ |9 j$ \5 _8 D0 l/ {5 D %swd小波系数6 F5 V( T% h! N! U) l
0 Q* r. g: \& `, Y# ~( x% O0 bfigure;%figure1
3 ~! m o: u( b: A! R8 tsubplot(level,1,1); plot(real(signal)); grid on;axis tight;) | f" u8 ^/ Z
for i=1:level
0 e& q; [& C" n* l subplot(level+1,2,2*(i)+1);
! c) M3 k- X+ y5 c' Z plot(swa(i,:)); axis tight;grid on;xlabel('time');+ T: C8 k. x4 R, T, m
ylabel(strcat('a ',num2str(i)));6 `/ s# c7 U+ D
subplot(level+1,2,2*(i)+2);2 B3 R8 u/ k; X9 {% a8 C7 I% G
plot(swd(i,:)); axis tight;grid on;
% U' {4 t% q) J7 U. i2 L& g2 ~ylabel(strcat('d ',num2str(i)));
7 ~, x8 v# f5 @3 s( d* v" ~end
' _, y: f4 o' K%以上内容是对信号进行离散小波变换。6 X# P; h3 }# g* c# k8 T& {* w
%尺度为5
- m- [* v0 {4 I; P+ O5 ^1 Y7 T% g$ r7 a/ ^. T# v4 q7 ^
, U8 r# u2 `( r5 M) U
* v/ n8 ^. |( Z7 a7 H6 k%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:
: B/ X9 w; w; u2 o! E9 t' {% swa:小波概貌; swd:小波细节;
" q1 K& g6 }$ ^% ddw:局部极大位置; wpeak:小波变换的局部极大序列。( @6 R% v7 h* n3 o3 Z
ddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零) K+ E( c2 l( [4 a, K
pddw=ddw;# a& T0 M, I# ]+ W6 \% |( Q) i
nddw=ddw;1 n3 b/ Z" j; `9 b; V f
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零
0 n. d1 U& V) b' Ppdw=((posw(:,1:points-1)-posw(:,2:points))<0);
: b* l+ Q. H) @& N, Fpddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
8 g: o1 E) ~& v, ?0 d/ mnegw=swd.*(swd<0);%将swd中大于零的数置零
, d- o; w* e% i3 {ndw=((negw(:,1:points-1)-negw(:,2:points))>0);
! m# a r" u* Y( T- q( \nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
: I4 ]# A7 f& X1 Jddw=pddw|nddw;%|:或
# n9 e2 \" M# L; R5 tddw(:,1)=1;
n: h1 O4 K% @0 k5 @ddw(:,points)=1;
3 S0 j, ?2 S. a3 _, `- v9 N* K$ _wpeak=ddw.*swd;
: R# _5 ?# W" m" P2 [: Xwpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响2 A9 V" [# o9 j5 W
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响1 n5 }1 m; y3 ~2 ^: u: ?" t
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点, g8 R, P+ D) K0 X0 X7 H. s
' o# S& j& p4 pwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));4 i8 B& ~) g. R$ ^ S
threshold=0.1; % 阈值
2 ~9 b3 Q) \( @7 ~( W% ]- {
, W b8 C8 f' C2 `$ ^for i=1:points;: T' c( ?/ `+ H
if (abs(wpeak_threshold(i))<threshold)! l# {; U' q6 @; V) M$ ~3 [
wpeak(level,i)=0;
+ l2 d5 v0 a% q$ a3 x6 X A end; H$ b$ R1 r) ]) d
end;
4 ^* {" |. m9 P5 i) W! @' `D5_wpeak=wpeak(level,:);
2 N5 K( m2 v3 d2 V* b
' _9 z' r, @% _%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,8 `6 G6 {$ ^0 k
1 {3 i9 B, l x8 x" p
! j+ O5 v4 T4 y/ U) Z7 Z- `%____进行模极大值的处理:
& b) L( h2 R2 f) y) _%%C=0.8; 2 u& _. Y3 F {+ \1 |1 u; X
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。
, e* O4 Z+ s o P) b%%D5_wpeak=wpeak(level,:);
5 U' f, v- p5 {( v% a7 }%%M=max(abs(D5_wpeak));4 Q/ M3 o$ n% w9 j& Q
%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。, j6 m: t! l( K' K q
%%for i=1:points# f- W I" Z! U6 I
%% if(abs(D5_wpeak(i))<Thr)
* D& H( @4 H/ D0 Y6 t( s0 ~%% wpeak(level,i)=0;( r, @) K+ |9 q
%% end4 j4 g9 t7 x1 f/ N3 J& I) X) T% c
%%end
1 {3 l6 J/ @5 M2 C0 B%%D5_wpeak=wpeak(level,:);
: [/ m1 _3 v2 W+ {6 Z4 G3 \, U0 N0 b# i, |2 i9 J) |4 {! Z) z
figure;%figure2
) G4 e8 u, u, D% ~& O: \subplot(level+1,1,1); plot(real(signal)); grid on;axis tight;2 _4 u* n* R& g+ R; M N
for i=1:level- M7 S! s/ g% ^7 L* H$ y& \# U
subplot(level+1,1,i+1);. z9 w, |2 y% t( V7 O$ i
plot(wpeak(i,:)); axis tight;grid on;
' ^& C7 a0 o: q% t& [+ I, Jylabel(strcat('j= ',num2str(i)));. B$ X) }" b6 J; ^
end" F3 A5 c2 L& W
4 q. P1 O. O" J+ {) J" C) H# X& Z# Q; @
%步骤4
; S1 ^* M8 G1 h9 D' Z%模极大值的处理方式:+ U, ?, Q( d9 T$ d g; I6 ~3 c
%在尺度j上极大值点位置,构造一个搜索区域,% i3 Y' H+ F& d3 s- G
%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;& R, j4 e+ }. k
D4_wpeak=wpeak(level-1,:);
3 y' F M3 G( w% I6 ^3 Dsousu=6;# x' G' R, L# s
D5_p=(D5_wpeak~=0);. w& w7 H c1 L1 e. {
O_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。2 D1 v' q0 @" E4 @9 N7 N# A
for P_d5=O_d5:(length(D5_wpeak)-O_d5);
. c) m/ C" o; l if D5_p(P_d5)==1; 2 y g" v$ b, a0 q$ Z! z
for i=1:O_d5-1;
. X9 l! G, `/ L4 F7 ]# D D5_p(P_d5-i)=1; 6 r* Q u% }9 q/ ^- R/ `# B0 l, v8 }
end ;
) A& s+ Q. v& s* u end;
8 |4 }$ c: ?) {/ _( yend;* C. X$ a0 v8 L* o% M- k5 _
D4_wpeak=D4_wpeak.*D5_p; d A+ f2 c' s3 }8 i& q
& Y0 v6 z* J* q" HD3_wpeak=wpeak(level-2,:);
1 r5 K/ e* d( e5 ]6 p5 d, ZD4_p=(D4_wpeak~=0); t; @1 T8 U4 e+ m. P
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。4 g7 I' T1 Y3 u8 U3 \
for P_d4=O_d4:(length(D4_wpeak)-O_d4);/ }4 k' `' X( d1 v: N. {) o
if D4_p(P_d4)==1;
, g* z2 u- D' `; c7 k for i=1:O_d4-1;
1 W% ?. S+ T" ~1 |6 i# R2 B5 r1 O } D4_p(P_d4-i)=1;
- }* |' y5 T' Q end ;9 b# y! \) L3 S3 z- e
end;
n, m o6 \$ ]! h& kend;
# g* W0 z* v( R" RD3_wpeak=D3_wpeak.*D4_p;
; P7 w: C( I+ A& A' {1 K) _7 @) L& u$ j* q4 K
D2_wpeak=wpeak(level-3,:);7 ]7 O( _0 @& [( N- Y
D3_p=(D3_wpeak~=0);, |9 f/ h. F' N+ g: X
O_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。, I& r8 D6 C, l, M$ X
for P_d3=O_d3:(length(D3_wpeak)-O_d3);' d9 x3 a5 R8 A. B' Q
if D3_p(P_d3)==1; ' ?( @ y, E" s0 b; k; A
for i=1:O_d3-1;
! X. Z4 }9 `# P9 u9 U D3_p(P_d3-i)=1;3 u! f% q9 d6 b/ e$ k
end ;! M1 ^% Q# U+ ^* V6 \3 U, `
end; ( v: b2 W/ O3 }; y0 W
end;
' z! a9 N; q! u/ LD2_wpeak=D2_wpeak.*D3_p;1 w) S* o3 ~! y( ]( c
" l& d" h7 I; k e1 ^% m
%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:
9 L: H8 t2 P0 D+ j7 {$ C% JD1_wpeak=wpeak(level-4,:);
/ }9 h& J8 s+ M6 ^/ i( {D2_p=(D2_wpeak~=0);
) Z( K1 l; \0 \+ l& JD1_wpeak=D1_wpeak.*D2_p;- Z1 x0 d: c1 b; C
0 c9 s1 l2 e# J. _0 Jwpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];- g2 k9 Q- y5 \" F7 l* ]
wpeak=wpeak';
; w# f6 j! P6 H) }! O/ X1 Y$ K2 [0 i
( b$ t' @* J! D+ k& P* @0 r6 c%____重构信号:/ }) c; l: R3 k" w7 L
pswa=swa(level,:); % pswa: 为待重建的信号* U$ F: x h2 F E$ y9 N( E
wframe=(wpeak~=0); %迭代初始化4 I" ]3 J d6 O& D; j
w0=zeros(1,points);
% e0 o% T2 T k$ Q* f[a,d]=swt(w0,level,Lo_D,Hi_D);( H# j6 |8 T/ E$ }9 j
w2=d; % w2为待重建小波
7 _; }. ~: M" g; B" y, D+ x$ [ for j=1:num_inter
) E) s7 m+ u, K6 Y" l w2=Py_Pgama(d,wpeak,wframe,1,sr); % 先进行Py投影和 Pgama投影
; r$ E, z1 _. _. ?8 t3 J w0=iswt(pswa,w2,Lo_R,Hi_R); % 再进行Pv投影 c) D3 F" r5 R2 Q8 D2 Y! G- s
[a,d]=swt(w0,level,Lo_D,Hi_D); % Pv
* M) o9 S9 l( ?- L6 L3 G end
0 g( M* I# R7 A: Q% v3 t% B pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号 2 s( K# I. d) j
, Q. g, @0 E3 z; F% fxcrr=y'-pswa; % 重建误差! i* L: z" O7 C/ u
figure;%figure31 F* T6 b2 u( B. k' r! `1 H; B
subplot(411): W# w& R& Q3 z3 I0 M5 h
plot(y(1:points),'r');
( \! n3 d# i. d# u6 F' ^$ [) _* uaxis tight;
/ a1 y. P! Q# W# N3 n/ Hsubplot(412)
& r$ @/ I! B4 I4 b; o7 L. \plot(signal(1:points),'r');" @& O, L& L3 t4 R
axis tight;! X3 Z$ x( A6 w3 a: `2 e g2 F
subplot(413)
& L/ J% I; Q1 A1 T$ zplot(pswa(1:points));
; A, r0 z2 Q2 s, n$ ?7 Taxis tight;
: o9 q5 i" j5 Usubplot(414)6 m6 X" ]9 [3 S3 w
plot(xcrr(1:points));
9 u; S+ q: L2 u* \axis tight;. Q2 m* x4 m2 Z% j& U
figure%figure4# K* p2 i2 _7 G/ }
subplot(611)% R% f' R" ]0 q0 [( ^/ T
plot(signal);9 N( `3 {4 M8 X: l5 T3 }
subplot(612)
) E% g5 m/ w1 Y- Y- G1 ~2 ]9 X6 ^& i( mplot(D5_wpeak);
( G4 C) \( s5 k# j# Wsubplot(613)+ z( C/ A5 b! h5 {8 j" t" R1 {5 `
plot(D4_wpeak);
* [' |' }7 y1 O' ?' g5 @& psubplot(614) c' W+ V0 k' t6 K1 }( C
plot(D3_wpeak);
+ w* f: G! w7 J& `; Ysubplot(615) Z9 T* F& A: L" z
plot(D2_wpeak);5 s; T/ h; Z* @6 |' \
subplot(616)" c8 G+ T3 S7 ?# @: i
plot(D1_wpeak);2 v3 }6 @# }! |0 G- r+ k! N7 ~9 U
[value,index]=max(abs(D2_wpeak))
6 K- E ^# |8 J" a[value,index]=max(abs(D1_wpeak)) |
|