|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。
' n' Y9 @0 @0 |可是使用模极大值法检测不到第二个波的波头,不知道为什么?
, k& [5 j d# Y请达人指教。
$ I Q: K+ U0 q/ d3 r/ p! x源程序在如下
+ Y* k$ U6 }7 U7 m w* C- @0 l: nplot(cable(:,1),cable(:,2))
% v+ K. H; i* g' a# D8 l7 E' L0 S7 B) G2 Ptcable=cable(:,1);
' ]6 k# n# `1 ~( Xycable=cable(:,2);( e7 [! a/ ~2 b( a+ S) {) W
length(ycable)
' D/ Q$ s6 p6 Y {
- z8 u# U! Y+ W* m/ zsignal_length=33856;
' H. \" ~: b1 ? t(1:signal_length,1)=0;) m/ o7 \# k% ]4 p% B, [
Ncable=length(tcable);
* W% L( Q# o# X for i=1:Ncable5 s1 x' m h7 _7 y+ s2 l( H9 C* _
t(i,1)=tcable(i,1);
8 M4 W" B. ]8 [. p8 l! X. S5 ~4 u end
" E$ i$ [2 o5 D7 K
6 M2 s. e8 K- b' g' ky(1:signal_length,1)=0;* _2 K( M% h! u; s' J0 [9 j
for i=1:Ncable5 g- T7 {' [7 V% ]. I
y(i,1)=ycable(i,1); r1 P% f8 f. b% O# C7 D. G
end9 Z& b. n; c i! s; ~
noise=0.01*rand(1,length(y));; O3 g: w1 z) G# X
y_noise=y+noise';# h$ h# z( l6 O% a* Z' U* o* H
+ b+ c' _3 s% n3 w w/ k
signal=y_noise;8 v3 L/ U+ W, b5 Y; ^* c4 l2 p
%plot(t,signal)
+ b, f3 {5 m- o2 s- F, Z! _8 x8 kpoints=length(signal); level=5; sr=360; num_inter=6; wf='db3';; L2 a: c& Z% G8 Q- }
%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称
7 l8 F6 q+ f2 Zoffset=0;
3 J* ?% }( I6 H; Z' Z8 U5 m
% R$ j: o$ t2 n4 u$ Y9 _' z+ O% e3 L) @4 F2 f
%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:# s- m- j% {( _4 V* y" D
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器: X; j' E$ [' l' | O8 v
%Hi_D:分解高通滤波器/ P: O5 O3 Y! F6 s' S: w
%Lo_R:重建低通滤波器0 o2 P9 z: ]% H+ T! i! L# {
%Hi_R:重建高通滤波器
. x/ U5 z- e6 i3 ?1 A) T9 \ 3 Z3 b* M. \! d& Y9 u9 V
[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌5 w5 z* d9 a- E4 T
%swd小波系数. q6 q1 v1 B* k c5 j, R& d; y
6 m+ E: c# b/ J7 p0 u0 N7 Hfigure;%figure19 z1 e2 P5 }2 }$ k' x+ C
subplot(level,1,1); plot(real(signal)); grid on;axis tight;2 @& D4 l( g- ?% ]/ b
for i=1:level
5 u. t* J/ u% k8 g- {' J x3 e( v subplot(level+1,2,2*(i)+1);! F, W4 m/ ^8 ~; F. \. f
plot(swa(i,:)); axis tight;grid on;xlabel('time');
. }4 e: v# M* B+ d5 K ylabel(strcat('a ',num2str(i)));. o2 r* {) i/ d/ i
subplot(level+1,2,2*(i)+2);
+ c) _0 f# D2 n1 P plot(swd(i,:)); axis tight;grid on;1 Q$ K1 D1 q) K' R+ E
ylabel(strcat('d ',num2str(i)));/ R! V9 ^0 c. t* `
end5 V4 L# b* \3 n f/ f# \
%以上内容是对信号进行离散小波变换。4 i: i9 A7 o+ C
%尺度为5 ^; i* D# Z' _' B3 E
1 P# j. F, T+ n/ O- o, P, O
& B$ t& L) I4 X# f( H9 P; J2 ?: G& g; [3 r/ H
%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:
3 S2 `; t. X$ A5 i, i- z% y% swa:小波概貌; swd:小波细节;
6 U, h+ F& F, }2 y' k, }% ddw:局部极大位置; wpeak:小波变换的局部极大序列。
' W' p* b! T$ M" _, l: Tddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零1 f$ Y8 x) Q7 {- b# K- D
pddw=ddw;
- ]: f1 d4 L) U0 Wnddw=ddw; M& N9 m6 v8 G! x9 E
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零
& H* V& e9 L2 L" qpdw=((posw(:,1:points-1)-posw(:,2:points))<0);
2 c+ k( E; E% e: F; c% Ppddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);3 Q) U& P6 v6 y$ ~
negw=swd.*(swd<0);%将swd中大于零的数置零; [3 |1 R' ~+ V+ E9 f9 B9 n
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);$ K- m7 [2 n, n q" Z
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
# o* P& C% M8 C( e1 g3 o C' |; pddw=pddw|nddw;%|:或
& l0 B' D) n6 j0 ] M0 Xddw(:,1)=1;
+ F0 G! A5 \) q4 k) G: Gddw(:,points)=1;' i0 S( r3 Z6 U1 E- _
wpeak=ddw.*swd;
) M2 B- d/ o# x# ^9 {, d$ gwpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响% Y k V* k8 y8 ?6 C0 r0 S
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响+ S; o* m& s& S6 w2 M |8 }
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点. M. G5 M* [' ?9 U) B& R9 k; r) Z
/ [4 t' ], Q* Lwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));
7 r- a$ @4 i! w! {3 i7 s; cthreshold=0.1; % 阈值 $ A3 c1 N, g% J1 h+ G1 T6 Y2 O9 l
% f% N3 ^$ R5 y4 b: d* `for i=1:points;
# g! P/ L. y' V2 H1 `5 W if (abs(wpeak_threshold(i))<threshold)
8 }2 g: U; L- N; F wpeak(level,i)=0;1 g3 x: H% D: Y& U; ?/ Z' Z+ t' d
end
1 L( D) T* _2 g. T- kend;
/ W; w% }" p0 h, Y- ~9 B( H) e2 zD5_wpeak=wpeak(level,:);
9 z7 t; Y8 Q4 O% l" `7 F, d, [, q# q+ J' d
%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,+ \5 h% B0 s3 C: H7 U
. c: a# H: r8 X) Y" ?6 b1 h1 g! Q0 p
%____进行模极大值的处理:' r* i0 A( Z2 b9 d* V& R- C
%%C=0.8; - ~; x5 h5 Q* x- ]: I
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。5 i; c" a. X& }7 | K2 _
%%D5_wpeak=wpeak(level,:);
$ Q) x J' P7 P%%M=max(abs(D5_wpeak));
* x& K4 Y: \: l0 r%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
6 N- F+ p0 s0 {" r%%for i=1:points% }# K8 W X6 F; A! O
%% if(abs(D5_wpeak(i))<Thr)
0 L; \( l A8 y0 B%% wpeak(level,i)=0;
$ g+ Y E6 O! Q+ {: X; y%% end
/ b7 d' C9 F# ^2 S8 k%%end
- ]: {* u9 n$ A%%D5_wpeak=wpeak(level,:);3 q+ b9 L- }* j6 l* u
z G" A& f B7 Z
figure;%figure2
. I$ g* h/ r" z# d' N9 S0 zsubplot(level+1,1,1); plot(real(signal)); grid on;axis tight;" A* d! e7 A" @4 z7 S
for i=1:level
* e" j5 V+ Q* g+ y3 B subplot(level+1,1,i+1);+ Z- k) f- i* X+ R- G' r+ q
plot(wpeak(i,:)); axis tight;grid on;1 H4 @1 m3 M4 N5 U$ ]* t
ylabel(strcat('j= ',num2str(i)));2 m8 R0 @$ s/ b3 U
end( a- u6 D4 o2 j. s
) |; v" g$ h# U4 a
6 _/ N( M% {( I! c7 S+ y1 A
%步骤4
/ v/ f4 B) g( H* F9 c4 l5 `0 s2 k%模极大值的处理方式:/ ^/ v5 X" K3 ~( @' u6 t
%在尺度j上极大值点位置,构造一个搜索区域,
& w4 ]% c, z U/ S/ F- F0 l; }%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;3 }& ]0 {* {* k8 V& \' e9 V
D4_wpeak=wpeak(level-1,:);
6 F6 A' P1 t7 u: Qsousu=6;1 H# i T% |# g1 N( r% F
D5_p=(D5_wpeak~=0);: F! _- `1 Q9 J( q
O_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。2 Y; D- [0 U5 {& h
for P_d5=O_d5:(length(D5_wpeak)-O_d5);/ u/ A+ F8 ^) I. N& y
if D5_p(P_d5)==1; 7 D, ^1 K" y3 j8 o% x- v: l
for i=1:O_d5-1;8 ?% Y0 w/ e; G! O7 ^5 J6 |
D5_p(P_d5-i)=1;
3 t$ `+ F* D/ X$ y" D& E6 T$ V& }. Q6 o end ;
9 C4 ?; k t9 \* v \" w end; # o& m$ c6 C& k& e; i
end;( {4 |& w) K8 u3 o1 z0 E
D4_wpeak=D4_wpeak.*D5_p;
8 H1 W5 y' s, u: B4 k9 m
' J+ E, E" u5 P7 mD3_wpeak=wpeak(level-2,:);* w( N) \4 X; F8 S) x1 W3 \
D4_p=(D4_wpeak~=0);& t/ L: \2 ~) m8 A- f' L8 I
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。 w! V2 [ u/ V1 ^, X4 B# y, b
for P_d4=O_d4:(length(D4_wpeak)-O_d4);/ I6 \! _; N/ Z8 |$ I
if D4_p(P_d4)==1;
, P3 ^2 w0 H4 T: `9 p for i=1:O_d4-1;5 H) w( c% L1 }* }$ R y
D4_p(P_d4-i)=1; 2 ]+ Y; B# W! O$ h: z4 U4 s# k J
end ;
1 G9 H3 H: t0 a: @( N0 [6 n end; 0 R# E+ \! z# f/ n3 M+ t+ j1 Z
end;5 ~& V5 t; H! f7 z2 J+ v2 L" H
D3_wpeak=D3_wpeak.*D4_p;5 p1 B- M. N" P5 T* ]
2 l) c; K$ H8 {7 O6 f! \D2_wpeak=wpeak(level-3,:);
" L+ N3 y" s( P# x1 m6 yD3_p=(D3_wpeak~=0);
. t% ?) c& p. q" O$ {9 }' pO_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。9 p4 z8 @4 s" m) Q9 s: I
for P_d3=O_d3:(length(D3_wpeak)-O_d3);! o/ I( G2 x1 }6 B5 c1 X! m
if D3_p(P_d3)==1; / L# a# {) m6 H$ ~
for i=1:O_d3-1;
( v; T& d$ V! G6 L D3_p(P_d3-i)=1;
( N% m9 s3 O- r( q. E0 }0 |, ^ end ;9 ?! D/ m' G6 {" [/ |
end;
2 A3 G# X1 X7 { z `/ e& m' hend;- Y8 f4 f0 q/ t5 ?% b
D2_wpeak=D2_wpeak.*D3_p;
9 r( W7 ^& s- ~( t1 u5 Z! y3 Y
q0 ]2 @5 r o9 R. g%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:/ P2 G3 t- Y o4 _( D* ~
D1_wpeak=wpeak(level-4,:);
0 M2 d1 _. c9 N# i$ R$ SD2_p=(D2_wpeak~=0);. | l+ _$ T- q; m8 Q" [, `
D1_wpeak=D1_wpeak.*D2_p;9 X2 q) O0 J5 C
' Y8 t- n' w! ^/ O# _. U P( M
wpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];; u$ f( ~" d9 g6 Z7 K8 y5 f' i9 q/ {
wpeak=wpeak';
9 T) v2 v9 q9 o' @. s$ g. ^+ ]4 Z& |* U
%____重构信号:
( Y3 `. f3 ~) Z6 t. {pswa=swa(level,:); % pswa: 为待重建的信号% ~) f8 T1 f( }- A+ d
wframe=(wpeak~=0); %迭代初始化
* U @1 \/ i4 r7 R/ \w0=zeros(1,points);
# e: T/ r: X6 ?6 c0 s[a,d]=swt(w0,level,Lo_D,Hi_D);0 C, o$ _+ N8 z! [
w2=d; % w2为待重建小波- D+ V7 N2 n* Y3 N) @( N. C
for j=1:num_inter, {/ X8 E, M% V. m: _% A4 @
w2=Py_Pgama(d,wpeak,wframe,1,sr); % 先进行Py投影和 Pgama投影
+ l- E7 @ S- P) K7 K$ { w0=iswt(pswa,w2,Lo_R,Hi_R); % 再进行Pv投影8 {$ w! ~+ |0 g) f
[a,d]=swt(w0,level,Lo_D,Hi_D); % Pv( P1 V W) k1 A
end
! A5 R, i" g$ l/ l& @5 |& w7 m5 y4 ] pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号 ! \* }% I2 K- |2 v
! c. S0 z1 V9 T) {1 v2 I6 Nxcrr=y'-pswa; % 重建误差
4 x* h7 [# c2 _figure;%figure3
& z3 ], d. x0 E0 [subplot(411)' d; L: E$ R" Q+ F
plot(y(1:points),'r');
+ X/ G2 m9 d8 [) e! Iaxis tight;) S; W) l3 Z) N! {; q) C
subplot(412)" M% c* Z' `7 H) _
plot(signal(1:points),'r');3 F% D3 F$ \% n3 A
axis tight;) N. } A, K* q0 X9 T; P8 g
subplot(413), g. _3 _, E! d4 ?
plot(pswa(1:points)); 1 S# [+ W! w. ~# Y
axis tight;
. a+ y9 a. {4 S, r' ~subplot(414)' Q# M, \1 N' r
plot(xcrr(1:points));
7 F& k8 O' c# t1 T' i1 e2 {axis tight;
: ~, U' U2 d' hfigure%figure4
$ ]5 Y3 W% a2 T, `subplot(611)
: B7 \" ~# N/ X( e0 d J3 E w$ |1 Z7 Uplot(signal);) L1 R0 q" }: [8 P- z, d8 C
subplot(612)
) S# Q- l) \ Zplot(D5_wpeak);& L( I; j6 F* X& ] N2 E
subplot(613)0 C' D/ x$ O8 M4 B' U; s
plot(D4_wpeak);
! I) d7 K2 F5 {* v5 D% O \subplot(614)
9 w6 \9 ^/ o$ s% r% o" N8 |- A7 @plot(D3_wpeak);
& `. l6 z( y1 ? A0 F5 psubplot(615) I* J! ]# e" T: [) a9 M
plot(D2_wpeak);
7 j5 H, l+ v3 c k, wsubplot(616)/ [- g" s3 M3 ~& h! ^2 q1 _! c
plot(D1_wpeak);
& ?# I- f5 f( C+ s' ~[value,index]=max(abs(D2_wpeak))3 W5 G7 V6 ]6 F+ L8 D, D
[value,index]=max(abs(D1_wpeak)) |
|