|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。( f" J, @5 d1 m
可是使用模极大值法检测不到第二个波的波头,不知道为什么?
1 c( Z+ U1 v/ B) f. }# s3 z, ~请达人指教。
8 V7 x# P9 v, d8 n/ _源程序在如下
0 ^. }% u. F0 j) X1 B& s1 @plot(cable(:,1),cable(:,2))* w |% o5 w# j
tcable=cable(:,1);$ u7 X( x0 E+ L1 w/ N; R5 b
ycable=cable(:,2);( L+ D( i/ g+ q; O% l
length(ycable)5 u+ T5 Q A0 p9 x( G' @
1 w, ^6 I/ h. o. g8 B3 p
signal_length=33856;7 n% X6 w- b. O: P/ C" h8 B5 h+ w
t(1:signal_length,1)=0;
9 A; D' x# l4 _4 B' D# R. k Ncable=length(tcable);, ]4 Z' P& m3 R, C
for i=1:Ncable% F7 U; t( w( j6 y) C. c+ g8 O
t(i,1)=tcable(i,1);, r* [2 u h* O# p, z, S) b0 W
end
; U# v4 L& j% O) b4 E ( V8 V9 s0 t7 ]( _7 F/ U
y(1:signal_length,1)=0;
& L: _, Q% }; H# K# o% Mfor i=1:Ncable
1 S: O+ \3 \( P% w/ b( ^, | y(i,1)=ycable(i,1); }$ r7 v- U" H
end
+ U8 s/ M+ t# f2 U) L noise=0.01*rand(1,length(y));7 U b R0 L. L1 v7 b
y_noise=y+noise';
: N. [( N2 G* f! }1 b- n4 l g' g1 ^. }) Y6 I9 U7 _& t1 ?
signal=y_noise;" ?/ Q. E$ A0 s9 f m: M. Z- X
%plot(t,signal)
5 Y0 S! U' T5 u7 D$ n& f# h$ tpoints=length(signal); level=5; sr=360; num_inter=6; wf='db3';
/ R, S2 o5 E; ]1 H5 K) n( b%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称
. B$ v( D+ ?; p& D( P: B9 ]offset=0;* Y" {% R- \, u. e! C8 t
6 F( `+ _, ~- O% _ n7 V
# O% v! r5 w6 N: J! R% O- }) k%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:; D# y6 p# J; Z) [, D' p/ t, z
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器3 p' H; y1 }% {$ k0 P1 Z2 q! W
%Hi_D:分解高通滤波器
( H( C9 P0 N7 I; B8 ]; t8 T %Lo_R:重建低通滤波器
: S x9 n# S- e, y# w4 K0 G# y %Hi_R:重建高通滤波器. `! M: V! \9 J
0 T; ~- a5 E, R% T[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌0 P. _4 E1 y: Y- B0 F" V% v/ I
%swd小波系数6 j. O9 G. L6 T, W V* X
4 |0 b8 B/ G* tfigure;%figure1; s% y6 m2 x% p: h, f9 C
subplot(level,1,1); plot(real(signal)); grid on;axis tight;8 x$ x7 H) C0 X
for i=1:level
, ~9 T& ~, D) n; k4 d& c$ a* }+ K subplot(level+1,2,2*(i)+1);8 ?, t% [% l5 r8 L y
plot(swa(i,:)); axis tight;grid on;xlabel('time');
3 Q9 x; p8 P/ F$ o5 E ylabel(strcat('a ',num2str(i)));1 i3 m: f" ^8 g( J, Z
subplot(level+1,2,2*(i)+2);+ C4 P9 k, l. d6 o0 p
plot(swd(i,:)); axis tight;grid on;6 I' Q# l* C$ u; ?
ylabel(strcat('d ',num2str(i)));
; c0 _6 @9 h7 Oend
/ w6 A8 m$ S+ u8 b# n: z7 ]3 d%以上内容是对信号进行离散小波变换。. B) j! b( l$ n0 ]
%尺度为5
& {8 q5 o% |" u Z e2 H+ Y
- l3 \" ]1 X* _) T4 E
2 ^% ?4 u2 D" `$ I& I% E, T" i# p# |8 D
%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:
7 X6 t8 d6 W, s- Z. D: `7 p% swa:小波概貌; swd:小波细节;
* n& S8 z) D7 ~& C) j3 D% ddw:局部极大位置; wpeak:小波变换的局部极大序列。
* x3 u g6 I/ Z9 Y7 @- _. |9 iddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零
, N, W9 n+ [0 p- Vpddw=ddw;
% Z7 L, {5 `/ znddw=ddw;4 y( Z* {, q% a/ W J: D
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零
: H& o5 b2 \- ~9 N ^* @' _pdw=((posw(:,1:points-1)-posw(:,2:points))<0);3 L% G# H5 c8 i9 U
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);9 Z6 s* M4 b4 a, J9 n; z
negw=swd.*(swd<0);%将swd中大于零的数置零
, P3 X* E5 l1 v3 Vndw=((negw(:,1:points-1)-negw(:,2:points))>0);
' l u% I: m$ V+ f: d& }3 tnddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);& X, D t+ V" B0 k& R+ U% p9 s
ddw=pddw|nddw;%|:或
" |; H1 \+ E6 z' F6 B+ kddw(:,1)=1;
3 [! S+ A: g0 m$ E2 K. e* X1 Rddw(:,points)=1; P$ p$ y1 |7 b, G! Q6 [3 o6 s
wpeak=ddw.*swd;
" a0 W' {% J2 Owpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响 y' i( O- p4 k( H% Q y
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响
) R9 C* u1 J6 U# R4 E%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点8 L0 Z8 h/ Q3 s+ j' J; G% V
8 ~, [% Y1 C v! U6 o( Y" x
wpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));
& d( ]% B3 P" p+ o7 J8 A- dthreshold=0.1; % 阈值
3 [7 B; H' B& e* V0 j) V2 y6 a; g( S# L) t: g" J
for i=1:points;
( a- Z6 [: Y: J if (abs(wpeak_threshold(i))<threshold)0 ~5 ?/ B3 v& j# B, a$ a' J
wpeak(level,i)=0;2 ~# Z: o" B8 j2 P* x/ |
end) k ?. p. i* Q9 B
end; + f& @8 ]: x0 a7 ~
D5_wpeak=wpeak(level,:);$ k i2 ?- r5 g$ l+ N
$ b8 \+ A2 S, \ j4 y9 q7 X6 L
%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,
7 m5 \1 J* D. o6 |" J; ~. m
; b( S/ s& Z' L8 o, \* ^
( n# p. j$ _$ s' G%____进行模极大值的处理:2 z9 s; u" f/ I
%%C=0.8; 2 Z1 E) o* P/ M
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。
4 W" q8 a3 z, f1 c1 R6 `, v%%D5_wpeak=wpeak(level,:);3 ~" u9 E: ]! h! e7 b
%%M=max(abs(D5_wpeak));2 l" @& L0 J" m2 z1 U6 o2 q4 R
%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。3 H7 x' A! q0 n! y' l) J9 J
%%for i=1:points1 |# A+ G% R( f d) I
%% if(abs(D5_wpeak(i))<Thr)- ?& e( L6 U; ^. n8 @; P2 N
%% wpeak(level,i)=0;9 C2 {" v: j3 g# W( i' O3 h
%% end
4 X, t3 k# F5 x# f8 J$ X%%end
6 T" K1 y5 k8 J& W$ k9 o$ `%%D5_wpeak=wpeak(level,:);7 t2 s, e! w* B! @2 `
. q3 T3 {* J% u; ]& f F9 o3 n2 O4 zfigure;%figure26 k' \- W0 o8 O
subplot(level+1,1,1); plot(real(signal)); grid on;axis tight;9 X4 \3 p) M& O) b. r; Z
for i=1:level
( s! a8 D$ {8 V9 m8 p: w3 R. } subplot(level+1,1,i+1);
/ j% I! [9 U/ b: H plot(wpeak(i,:)); axis tight;grid on;$ G0 J) j8 K- x2 m
ylabel(strcat('j= ',num2str(i)));
/ u7 s* V' `: ]end
* g7 _% i, d0 D+ t% ]5 k4 J) e; d1 n9 w8 ]5 ~3 Z4 H
0 ^/ G. g3 N# X3 h# L: K; M- u
%步骤4" l) y: D, I% c
%模极大值的处理方式:
3 ]; T! B( @6 ^* b3 D%在尺度j上极大值点位置,构造一个搜索区域,
+ [3 ~0 }, @3 c0 ^6 f%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;
; ?9 S$ U, o9 N, r9 b# tD4_wpeak=wpeak(level-1,:);
2 y- O$ g( B0 S: osousu=6;
' e: g' w, N5 F! [D5_p=(D5_wpeak~=0);! s3 Q( E9 f8 S4 {! A
O_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。7 P. M X m {. o& F) V
for P_d5=O_d5:(length(D5_wpeak)-O_d5);+ H, R, I" x. q. z
if D5_p(P_d5)==1;
( u% e3 o8 O6 T7 R6 ]* A8 j. {; [8 X( d for i=1:O_d5-1;# |) n+ J7 p3 v: Q
D5_p(P_d5-i)=1;
& u8 r, Z0 Z8 [3 a5 H4 n6 u- K% G end ;
K5 b# D4 s) ~: ]9 X4 y9 Q' J end; \7 k4 O `5 x! ?+ I; E0 n
end;
8 ?, ^5 \' r( ^$ `D4_wpeak=D4_wpeak.*D5_p;& o+ K: m6 ? g: z) A
! g7 u8 H! B6 e6 i& SD3_wpeak=wpeak(level-2,:);
- m. l5 x; ]- k; u" w' E' W8 ]% SD4_p=(D4_wpeak~=0);
! Q, @' @9 o) ]4 G' ~O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。' e+ {* ]0 n0 a; r8 t+ ~% e
for P_d4=O_d4:(length(D4_wpeak)-O_d4);
% R- Y7 C+ b2 _, J1 O5 D1 n if D4_p(P_d4)==1; # X @% b: ~) s) [
for i=1:O_d4-1;( o. v* ]5 l4 D0 v5 e
D4_p(P_d4-i)=1;
9 O3 x& F& o" q) V' B end ;1 d- q# j8 R( Z$ B+ W
end;
/ p$ I. d- M2 xend;
2 L8 e2 ?: L8 h+ J' f. y- b1 dD3_wpeak=D3_wpeak.*D4_p;& w A1 q) p# o7 R v
( [5 O" X8 D8 i
D2_wpeak=wpeak(level-3,:);
3 r: ~. k4 L1 n3 t0 O: vD3_p=(D3_wpeak~=0);+ K4 ?: I5 W' d: D8 f$ o
O_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
; \6 c& j v X# E8 a$ Z( g( A2 ifor P_d3=O_d3:(length(D3_wpeak)-O_d3);
0 O# s8 d# t+ `( C if D3_p(P_d3)==1;
6 W' C. j: O# f for i=1:O_d3-1;
N, s3 _2 ]3 O) ]" a( |/ p D3_p(P_d3-i)=1;9 e. \3 d! v2 @, k; y0 L% @$ Z
end ;# Q9 j+ [+ q; B5 H
end; & x2 Q( I& ^! O
end;; y# A! [" j6 w' z
D2_wpeak=D2_wpeak.*D3_p;! r0 X4 ?6 Z% R1 i
2 _! h' E8 U& w/ Z! V" J
%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:
; }+ K, \0 p# Y" ~D1_wpeak=wpeak(level-4,:);
( U% n3 R% K) aD2_p=(D2_wpeak~=0);
, d" ` Z' p! ~5 b' y4 fD1_wpeak=D1_wpeak.*D2_p;9 a5 Z8 Q# G- s
& {1 _& b/ f/ T" X* q
wpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];
% f) j9 G& ]3 Y( S( f$ G5 ?wpeak=wpeak';
$ h: Q0 F, ~; f; T6 M8 ~3 V+ O3 j5 n6 u; ~
%____重构信号: K/ P+ p! z! c/ e1 {* ~# }
pswa=swa(level,:); % pswa: 为待重建的信号
0 q. g$ w" @3 r) Ewframe=(wpeak~=0); %迭代初始化/ e: w1 H' O( y7 Y5 Y: Y! S7 m3 r; B' z
w0=zeros(1,points);6 _% \" c# u6 X5 C+ u# l5 ~
[a,d]=swt(w0,level,Lo_D,Hi_D);
6 y- ^2 I5 I/ ^w2=d; % w2为待重建小波
, l3 s }" D" Q7 J for j=1:num_inter
3 I7 X0 N, _# b, @ w2=Py_Pgama(d,wpeak,wframe,1,sr); % 先进行Py投影和 Pgama投影
* Y( Z Q- W8 ~* Q! w' I w0=iswt(pswa,w2,Lo_R,Hi_R); % 再进行Pv投影) P# x; A9 _5 A3 b$ u
[a,d]=swt(w0,level,Lo_D,Hi_D); % Pv
7 e! c4 d; d( x# _% q, h' y end
7 _( ~$ {5 \% e+ ^: S5 y! ^' B pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号 / O( F U9 C- O& X- d+ |5 ^7 A
) a% {. t+ k/ {- I; @
xcrr=y'-pswa; % 重建误差/ M/ Y8 ]' e) c5 X+ d0 X
figure;%figure3
* f6 }/ k4 C- b. R" x. A. }subplot(411)
# _) w8 G0 k" L6 g) p' k/ ]( Wplot(y(1:points),'r');
5 b7 O# V( q6 @- H5 c- x5 x+ d3 Naxis tight;
4 `4 a. u8 j; N* Z# ^subplot(412)
+ ?5 Y" g4 p- Zplot(signal(1:points),'r');6 A, H' F$ A$ c- a8 X* `. C
axis tight;
# Q1 S) R* W' T* Bsubplot(413)
# h0 H# ?2 B& Y& t6 y) ]plot(pswa(1:points)); " H. G# {9 C8 H+ f \
axis tight;3 h% ^- m) ?$ j Z) l* M
subplot(414)
. w0 O$ r* N' Lplot(xcrr(1:points));
9 }8 G$ b0 v& ~- P5 l) C$ C( n' Eaxis tight;
7 _2 B1 D1 z( t O- o3 Afigure%figure4
, W1 Y9 _1 ~& xsubplot(611)3 q# B* \) x2 \# t- S3 M! m
plot(signal);. m. g$ j2 Y! x# U; F U* }. N
subplot(612)
1 V/ L5 r- F' P* w9 hplot(D5_wpeak);
9 U) ?. l8 l1 }& B# usubplot(613)4 P8 O$ y, ?, p: I* k) {$ H
plot(D4_wpeak);
) l G& f+ _5 `4 E/ r) usubplot(614)
+ v' C c3 L' D, nplot(D3_wpeak);' ?1 y) b, K/ Q6 m G* U
subplot(615)
. J6 U) I0 D1 @% h9 J Y. t) K# ?plot(D2_wpeak);
7 ]# g: I3 t, Esubplot(616)1 V. s1 G6 P. v2 c2 b3 c& R8 x
plot(D1_wpeak);
: `, D& y; a+ A/ W$ t[value,index]=max(abs(D2_wpeak))8 E0 B/ {+ ~( L' X0 ~2 ~
[value,index]=max(abs(D1_wpeak)) |
|