|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。
, U- k. Z- @0 i& ~" d X9 f可是使用模极大值法检测不到第二个波的波头,不知道为什么?
7 k w2 M) @" G请达人指教。
2 g' v/ k' f3 t/ L源程序在如下& q' U: j( e! k2 V3 N- f) s1 l" s
plot(cable(:,1),cable(:,2)); Z8 a/ T7 h- v/ u9 ~- g1 R
tcable=cable(:,1);
: Z, o8 p6 j6 c# a( [7 G! L- a& {ycable=cable(:,2);
9 E1 N8 g! w* I6 ^, Ulength(ycable)
& z- s* z( _8 B
) M0 ~/ W8 B" a5 R" B y3 Qsignal_length=33856;
$ Z7 j3 v0 Y. k8 o! E7 J t(1:signal_length,1)=0;4 F7 z0 L/ |3 I. n$ N2 U, `
Ncable=length(tcable);% E# |' U, K0 z$ C/ P. B+ j$ [
for i=1:Ncable' a {& \. y6 k; _7 d& x: `& P
t(i,1)=tcable(i,1);* I3 n" S: V2 t8 _+ ~/ b& p$ X% o# f
end
* \) F; j, U! m; M/ e1 V0 j% |
1 z3 L* l+ \3 C; `4 oy(1:signal_length,1)=0;
& x) \' B _/ m. nfor i=1:Ncable/ \& n9 |. ]/ C: q
y(i,1)=ycable(i,1);* F. ~" C4 O' {0 w# Y, [7 r
end9 X6 M: d; H) \# Y& y: @
noise=0.01*rand(1,length(y));
1 j% P. b! X9 v" m5 ]0 x1 h N. Ny_noise=y+noise';2 t1 t8 _7 t7 c9 ]$ k/ D
; e. p m+ T3 e* M
signal=y_noise;
2 B6 u6 ~' I* P2 |%plot(t,signal) D7 b6 F: a2 ^4 Q( e; L* r
points=length(signal); level=5; sr=360; num_inter=6; wf='db3';
7 O, M& e! C( u6 u( W%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称' Z5 y' ^& B" G: ^9 D
offset=0;
8 a% }1 J1 K0 f, s6 Z5 M! a" P/ F' {" J/ o7 X+ ^% \
0 J+ s. C6 v x2 W%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:. U6 a% A5 O5 T
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器- i* C' L" t0 K4 x+ d9 p
%Hi_D:分解高通滤波器
% R3 P8 R9 s, N: w% f3 C %Lo_R:重建低通滤波器
4 \" o1 Q; c2 E3 `; j# V' O %Hi_R:重建高通滤波器- @' I: l9 Z4 _: a$ [( C
) K7 ` k* W9 ?; W$ z[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌2 }1 K& \- m% h& |! r2 k
%swd小波系数% T: S6 m5 d' E _% d' S! a
" T A5 d4 s4 jfigure;%figure1
9 L5 L: n' G0 C, q8 Psubplot(level,1,1); plot(real(signal)); grid on;axis tight;
/ n- a6 ~, l" k: W$ M3 Tfor i=1:level
& R# E' e& z4 C5 B/ k subplot(level+1,2,2*(i)+1);- V H" A- u% P
plot(swa(i,:)); axis tight;grid on;xlabel('time');- f$ P9 [0 I& e! f$ I8 L7 l q* W
ylabel(strcat('a ',num2str(i)));
- X- q7 w N# A' ^& M& Y" e subplot(level+1,2,2*(i)+2);+ Q5 @0 G6 f. N; s, d
plot(swd(i,:)); axis tight;grid on;* G( N6 v7 \/ U1 A* k1 r
ylabel(strcat('d ',num2str(i)));( y, P6 W3 ?0 S. w3 K
end( X+ x. G+ Z. x8 G' }% y4 R& Z: h0 {
%以上内容是对信号进行离散小波变换。8 L; J( g- ]) K# E" a& K
%尺度为5
) O1 t* l) \+ X i3 @
5 h3 R' s8 X8 Z3 F! ~' x% G% m. ^! ?7 L0 k8 B% l; L. r
2 B+ Z, O, N; H8 F0 h%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:7 v+ @9 u; a0 d6 f
% swa:小波概貌; swd:小波细节;
( A' _8 M8 c; B& y5 |, R% ddw:局部极大位置; wpeak:小波变换的局部极大序列。
+ z- ? R! b- f6 k: d$ ^ddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零# n8 l3 H+ @ F& l1 A
pddw=ddw;6 s/ b( D: r. f
nddw=ddw;! a5 v6 L% a. `1 u7 \
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零
# H' e3 B! }2 y( \( a: M, W# l6 b, xpdw=((posw(:,1:points-1)-posw(:,2:points))<0);
B8 K, R) @0 Zpddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);$ v8 [- b0 |4 p+ {2 G# K7 C
negw=swd.*(swd<0);%将swd中大于零的数置零/ \3 {0 O4 ^5 {- l
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);
; Z/ T; y; q* a, {5 ?1 rnddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);
0 B, \6 B2 t2 h! i! K3 ` Mddw=pddw|nddw;%|:或
- Q7 D O, T% K6 C7 o0 Z4 }8 Wddw(:,1)=1;
]# M4 ~( H0 Z( M& J4 g' ^! B6 p6 _ddw(:,points)=1;
* L2 p# L/ _& Z4 T; c0 O, twpeak=ddw.*swd;
! f' w, }& h; c) K, n+ vwpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响; |" v# T1 r* ]1 \7 x$ `3 j$ T o% t
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响4 n9 ~; }+ [9 l
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点
" [8 m' c( O8 z8 ^% X$ d$ d. R9 @/ e8 I3 Q; F' i
wpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));
4 H7 Y, k4 @* I/ n1 y. |2 cthreshold=0.1; % 阈值 + M- L$ V0 A$ Z- B& Z* @4 `# s
5 P& x' S* _4 y {+ [6 x
for i=1:points;" T( E9 \' V2 i/ G
if (abs(wpeak_threshold(i))<threshold). D1 X _5 s6 A" Z
wpeak(level,i)=0;
" A( @: e! R; i( W' G4 c end/ k- [0 _) q: I3 ?
end; ) R( R# h, z0 b8 h+ f- r! H
D5_wpeak=wpeak(level,:);
' I! S# @' h# _( r/ T3 r; ^ G- O
%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,
. K3 `# A" ^7 G# }2 g
! E3 r7 k# J, u# h
+ ]. l5 @; k9 k! Z( B2 U%____进行模极大值的处理:. S ^! ~6 j; a# J1 v! ~4 c
%%C=0.8; ! Z! k- O9 p8 C; ?! t
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。
' J9 c2 {$ H1 S, o+ M' e- K%%D5_wpeak=wpeak(level,:);" E9 c9 j1 F% V0 L2 w, J
%%M=max(abs(D5_wpeak));! s2 {# c# W u9 r
%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。+ \# D. Q( \8 S7 y, Q, G
%%for i=1:points6 h1 C6 F" i" m$ L$ T0 b& s
%% if(abs(D5_wpeak(i))<Thr)" j) r8 M" c% U8 G0 U# U
%% wpeak(level,i)=0;
$ ~4 H- l3 a2 W. ^%% end
+ A8 s$ C* j- ]7 D2 ^; ~0 m1 m%%end
) k1 X l% |' d2 y S# Z%%D5_wpeak=wpeak(level,:);
" U3 n( F1 V6 r
7 z8 c" E l6 Z7 i, b5 wfigure;%figure2# r# I7 r$ q/ ?& g M
subplot(level+1,1,1); plot(real(signal)); grid on;axis tight;. F( E' l! J: T
for i=1:level
- d4 K" w! Y9 t$ e) I4 o+ O. \ subplot(level+1,1,i+1);0 x+ N2 D+ S8 q0 ?
plot(wpeak(i,:)); axis tight;grid on;. X( }; h5 r& L0 N0 j
ylabel(strcat('j= ',num2str(i)));8 S) U! ]4 d& n# ?
end7 A9 c( J( e* p0 y Q
: I8 j) K5 X3 [' _! ] ^) w
% H* ]' [+ D$ v e: p%步骤48 T1 d! {* B3 ]9 ~ N
%模极大值的处理方式:
9 Y4 {5 h7 I. n6 p/ c%在尺度j上极大值点位置,构造一个搜索区域,& C& U& H! p: C* H3 W* N
%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;
, j/ a- s: i6 P& }1 v& SD4_wpeak=wpeak(level-1,:);
0 g6 V* d4 C8 ~$ Q0 L& _5 asousu=6;) o' n6 z: v, C+ v# ^& A( D
D5_p=(D5_wpeak~=0);
' N' m" b0 O4 C2 U& nO_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
9 P- R( Q4 d+ A8 `0 u; Sfor P_d5=O_d5:(length(D5_wpeak)-O_d5);( W+ z2 e4 D2 l" x/ n' Q+ n" X( x
if D5_p(P_d5)==1; 8 }. X; c7 n2 f
for i=1:O_d5-1;
% N# T, ?3 o+ U0 d6 z H! ` D5_p(P_d5-i)=1;
- b, v: Z4 z$ B9 F0 C- R* G9 A end ;/ h0 F2 J- T9 s7 W1 s/ L* f/ R+ z
end;
) d x$ ~8 X* ]+ Y* ~4 r+ }* {end;0 {! b( j3 z" r4 r9 s2 E% M* r8 Q0 ~
D4_wpeak=D4_wpeak.*D5_p;
( c- x0 n% y+ z; W5 i6 a; q9 e$ D! A; K, u4 l! G
D3_wpeak=wpeak(level-2,:);5 p/ k) f5 r# Z! T2 ^! \
D4_p=(D4_wpeak~=0);* M/ A3 V$ B! y; {( K6 N
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。( L$ r+ r( H) r
for P_d4=O_d4:(length(D4_wpeak)-O_d4);' F9 D" f8 R& U. F
if D4_p(P_d4)==1; 2 t7 _: F, L6 d
for i=1:O_d4-1;
* f. g) y7 `& B w D4_p(P_d4-i)=1; , ?( S6 E9 Y+ F# s. t4 J3 }* p
end ;5 b: `2 N* x" ^4 z% e- O- K; \
end;
9 V. r2 S# W# F6 R) A8 m3 r2 eend;
, L" E# k8 ?$ ?% A! TD3_wpeak=D3_wpeak.*D4_p;
- }# c# {# E; \5 A+ I M+ y/ D3 |6 j: n( ~# }
D2_wpeak=wpeak(level-3,:);" }6 e1 w+ c8 |6 b
D3_p=(D3_wpeak~=0);( p; L+ A9 |4 a
O_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。0 m0 h7 ?9 x% W+ g, X0 I* s; Q7 g
for P_d3=O_d3:(length(D3_wpeak)-O_d3);( H, ^$ N# r) \# r+ F
if D3_p(P_d3)==1;
2 u6 h9 b0 ?" c* |4 K for i=1:O_d3-1;$ p3 [6 t. ~. i" i
D3_p(P_d3-i)=1;
) b* ~" |" e0 r. H end ;& v1 k j' o" r4 H* I% v7 L
end; + x0 ~6 @; M8 n- |( D
end;
% D$ `# S5 l; J! B; _2 VD2_wpeak=D2_wpeak.*D3_p;) k; v* Q2 u& ^$ |# \( `
9 o1 y, |5 Y. K1 A' S) u%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:
. }$ m4 h6 t( BD1_wpeak=wpeak(level-4,:);" Z* D) `9 ]& Q1 V; g& q& m p
D2_p=(D2_wpeak~=0);
2 r7 n& [( v$ v& dD1_wpeak=D1_wpeak.*D2_p;" f& f0 c8 J# q8 q: T3 m
4 ^7 t: P. Y/ n5 x
wpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];" R# k3 w" L# N) m7 ]( U
wpeak=wpeak';3 R: S8 w- m) N- d" T' ~9 I
4 b+ ^5 z5 |& b" U
%____重构信号:
+ l( e. O& C# O% q8 q4 h, c* [1 cpswa=swa(level,:); % pswa: 为待重建的信号0 c M) A* k4 I: [ W% }
wframe=(wpeak~=0); %迭代初始化
$ } H- o1 ]5 {' f# A5 V Dw0=zeros(1,points);
9 o! E9 \) Y7 O; O3 t[a,d]=swt(w0,level,Lo_D,Hi_D);8 p8 X8 u9 s7 h- u f' ]3 q+ Y% r7 w
w2=d; % w2为待重建小波
- V2 E5 ^+ g, [$ ^% q5 B9 E for j=1:num_inter: Y/ P8 |: i+ }. z" V# l/ c. v
w2=Py_Pgama(d,wpeak,wframe,1,sr); % 先进行Py投影和 Pgama投影
& ^$ }- w* c; N/ o7 W& U g w0=iswt(pswa,w2,Lo_R,Hi_R); % 再进行Pv投影
, j% f9 x% s* B, c) K* r" C [a,d]=swt(w0,level,Lo_D,Hi_D); % Pv
% H* o7 [+ ]- w/ \ end
/ y% N0 ` V1 N, ]1 t pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号
3 m) N, w- B5 z, M. D3 q# W. A* @
7 S# a' c* o: N! e, E% xxcrr=y'-pswa; % 重建误差
3 U+ z1 u7 K7 E2 a1 }* c& mfigure;%figure3
$ V- @5 q% D/ g1 \5 D. Xsubplot(411)/ m7 ]# m. k+ g
plot(y(1:points),'r');; B' j1 z* l; V
axis tight;
" M, m4 `! _- R* N+ msubplot(412) t( y$ \1 g9 T1 Y6 q
plot(signal(1:points),'r');
: f, v& {9 U7 n) m# saxis tight;
2 _! W9 L6 b' asubplot(413)
( q! v" w2 p0 a$ U% qplot(pswa(1:points));
& Q4 ~7 E$ [6 haxis tight;
0 U( }4 R4 N) q- Y- Z" l, Csubplot(414)! v4 t$ z9 {$ p% C6 W
plot(xcrr(1:points)); 1 z/ f9 I7 Z3 K. C3 ?3 Z
axis tight;/ v2 V! f# h j9 f$ R* u4 C
figure%figure4
: H+ b; G' A3 m5 E. W* jsubplot(611)
1 _( b% o% D/ C" Mplot(signal);. G' A. r k$ _( p
subplot(612)* q- H* K/ @5 g0 R% W' t
plot(D5_wpeak);6 f+ n; d5 N* @. L' K
subplot(613); n( O4 ~: U* l2 q; A
plot(D4_wpeak);2 _9 ^0 J# o+ h d7 r1 {
subplot(614)
" E4 f# G( A" S# i) F6 R K+ Lplot(D3_wpeak);
`* @ {/ L7 z9 lsubplot(615)! c! \6 t6 U* S- _4 y, U
plot(D2_wpeak);
4 W u1 Y$ g, \0 l% tsubplot(616)
. e; e4 a* Y* |5 R4 U# f- ^plot(D1_wpeak);) ^7 }" f) U# m) a0 ?2 M1 X u
[value,index]=max(abs(D2_wpeak))
" F/ l; f' i6 O6 b1 {( k[value,index]=max(abs(D1_wpeak)) |
|