|
|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。
. D, P* P4 X3 c5 O4 j3 }# u! W8 E可是使用模极大值法检测不到第二个波的波头,不知道为什么?
. h3 N# ~2 p/ w% B4 ~请达人指教。
$ }7 a, g2 s6 |1 c( K# P4 e6 V: O$ w源程序在如下 g# A9 }3 d/ `3 U0 o8 K
plot(cable(:,1),cable(:,2)); x: b! v7 d; I0 c4 V
tcable=cable(:,1);
$ k0 Y4 P% n! a) Vycable=cable(:,2);8 l* j! H7 }2 R z9 n# a
length(ycable)
5 P$ J9 l. @ N0 T0 ^8 S% L- C3 l2 v9 A" [
signal_length=33856;5 I- p$ I: Y9 ]' G8 M
t(1:signal_length,1)=0;3 f$ ^" Y& `4 x! e2 y- |
Ncable=length(tcable);; X D) g' i& o/ ?5 \% m
for i=1:Ncable) d' G' f' ^4 D
t(i,1)=tcable(i,1);
" o/ |, Y: }! l4 W, j! r+ k8 T0 O end
: ^5 m* h' B8 s' r" q/ w
; G+ J4 t4 k4 _1 n# c& ~; gy(1:signal_length,1)=0;. ]8 F$ e$ ]5 z! A
for i=1:Ncable
3 ]: c' V: n- y( A: y y(i,1)=ycable(i,1);, R: t, V+ p0 ` R
end4 Z1 y* E/ u* {0 p& M2 t/ x; o
noise=0.01*rand(1,length(y));6 R* N" V3 m' F
y_noise=y+noise';% C# y8 q; s+ P5 Z0 b8 e4 t* ]
: T9 c4 h) u% {% a
signal=y_noise;2 K3 [! |/ ?6 I
%plot(t,signal)( z5 y$ L, {/ |! @' C' v( o; b) y0 N
points=length(signal); level=5; sr=360; num_inter=6; wf='db3';
+ |7 b1 Q0 u) h3 _$ c* A" b# I+ c) R%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称
5 E( G4 \$ V0 g) v5 zoffset=0;
, G: G j4 y9 A; e4 Y& }: n
- @0 ^6 A7 E6 k n }- D2 H
) \3 k& u& M# B/ x! |0 i%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:- p; \- s7 _$ ?$ x; c
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器
3 ]( L" d9 a1 l- l7 k l# b- r %Hi_D:分解高通滤波器
) U( Q) H, f2 H/ V! J; G %Lo_R:重建低通滤波器
8 z$ H) D0 S1 V& q0 C0 S, C+ V %Hi_R:重建高通滤波器; {2 W* w. s; c9 ?, U+ Z" D9 K2 `& B: P
7 T9 ?- C, N, @0 V, t! ]- L' s% b[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌
- A3 D5 q% R9 h- ~% V* o %swd小波系数
+ M0 _) u0 B6 r$ K, ?- M ; J& e; p3 R# g
figure;%figure1
' B+ a' [4 z4 A# |5 q2 asubplot(level,1,1); plot(real(signal)); grid on;axis tight;
. u: F# e, r1 [+ Z6 z% u. H# ]' Yfor i=1:level
0 `. s/ f/ H! h' {# d2 h subplot(level+1,2,2*(i)+1);
5 d R }; t5 q! }7 @ plot(swa(i,:)); axis tight;grid on;xlabel('time');
5 o* z# J: h i& `8 X0 X9 N ylabel(strcat('a ',num2str(i)));
( v" c/ b& k0 _* u subplot(level+1,2,2*(i)+2);/ o' z' W: o, y) o& @; O' o7 S
plot(swd(i,:)); axis tight;grid on;! O; v0 j& v& z, j1 t& O, n6 }
ylabel(strcat('d ',num2str(i)));
, Q; \" [9 p/ J7 tend6 Y3 A6 C- K: n) [
%以上内容是对信号进行离散小波变换。
" W h. P. K. y%尺度为5" C/ J! h# w( a& F5 |- a
' S8 W' h+ w' h2 U/ U" t: R
K0 t4 v @4 g! h- r' m: w6 ~ X; u+ S/ L& A6 I
%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:1 J: ?2 f7 T: x0 M& ]2 v- d* Y9 J8 w
% swa:小波概貌; swd:小波细节;
/ R5 A/ _0 A$ H* |" c S: {% ddw:局部极大位置; wpeak:小波变换的局部极大序列。
/ N( M) X/ M! @& T7 i- X, f% j8 Nddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零
7 [% E" B+ v0 V) p1 npddw=ddw;0 X9 u5 J( r7 |+ {+ j, f4 p
nddw=ddw;* T- W" C6 _8 G+ c
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零& P Q: J7 Z( |( J/ g7 ^ c
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);* L7 I- D( z \! u: A \' |
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);- P" p; B% H9 ^( |/ l
negw=swd.*(swd<0);%将swd中大于零的数置零
5 W# T! F; X0 j& pndw=((negw(:,1:points-1)-negw(:,2:points))>0);
. B' D9 M. j1 A/ |" [nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);2 j% E2 w9 _/ \& m0 P0 D
ddw=pddw|nddw;%|:或5 q$ f" ?. v. {8 O6 i7 o- ~% u* Z
ddw(:,1)=1;
' I5 Y9 B8 X, T9 M! Yddw(:,points)=1;0 F/ `2 l1 ]4 _# {3 J: h
wpeak=ddw.*swd;
% {5 F' h" _% y% \wpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响
: `0 X# w! g: L* ywpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响
9 e% r( W# K6 k! M* J%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点
( o6 t6 Y5 ?1 B: ]
* o$ s) Y9 o U, f) hwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));
7 y! l$ j' K. ?4 ^0 @! U: K4 wthreshold=0.1; % 阈值
4 n7 j% a4 a+ L6 e* A9 Y0 K% M. D' J4 M/ O+ L3 H7 I& |
for i=1:points;
, D! Y. }; G1 |" ~' f if (abs(wpeak_threshold(i))<threshold)0 T2 K: d2 o: R& }& E5 q
wpeak(level,i)=0;
9 M' K) k. ^: @: n2 Q end& ~" r* k7 _3 N) _
end; + i0 L+ T6 f5 \+ `$ `
D5_wpeak=wpeak(level,:);$ z# \% L9 F+ X" e5 t" i \
. g7 ^ B9 G7 i- ^%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,& e& z H4 i' g a8 `
. R! N6 ?+ g9 p& f- s6 | l$ X3 `3 K" O
%____进行模极大值的处理:
0 ?. }" p6 _3 s1 a! J9 _%%C=0.8;
$ L: B2 Q2 [' G# x%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。
; b& g- Y- }3 m/ A%%D5_wpeak=wpeak(level,:);2 R: t! S8 g5 W
%%M=max(abs(D5_wpeak));) Q" {5 R7 J8 j m7 k, d
%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。2 W9 A6 X( s5 p* _
%%for i=1:points
+ C1 N) Q' V" h4 U%% if(abs(D5_wpeak(i))<Thr)
' ]. B: s! g0 j6 K+ K' t5 D& W%% wpeak(level,i)=0;
T; h$ ?/ J7 z# B7 f%% end7 l9 l5 m3 e- i3 s! H3 [2 G2 f
%%end, }: P2 ^) m) ?! ^ l# b8 Y6 y
%%D5_wpeak=wpeak(level,:);& E4 K I3 T+ u
. F3 |0 A+ `0 b+ O( |
figure;%figure2
; }/ O6 f- e: x4 f5 i6 l. e# n1 vsubplot(level+1,1,1); plot(real(signal)); grid on;axis tight;
. f: y) z/ X8 t9 Ofor i=1:level5 ?- A8 q `/ _1 R* y
subplot(level+1,1,i+1);
u! h5 U9 N6 ~8 a; L9 ` plot(wpeak(i,:)); axis tight;grid on;
5 t- M8 d% K4 |ylabel(strcat('j= ',num2str(i)));
: V& ]( N1 ~$ a: d9 A- P; s4 Hend
5 r" q8 r- e5 @+ W
7 v$ A% c! ^0 ]4 ~
* C1 [" F3 f3 i) `%步骤4
|% `1 e& L8 r/ Y6 w j%模极大值的处理方式:
' M4 s Z& D$ ^, w$ Z9 e%在尺度j上极大值点位置,构造一个搜索区域,
9 \6 C" |7 s2 G0 Y7 d6 h%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;! F9 J# _5 Z0 e w
D4_wpeak=wpeak(level-1,:);: @3 s' V& V) q$ P0 ^
sousu=6;. R1 a8 ^$ P* M; u4 b
D5_p=(D5_wpeak~=0);& j8 J# _/ M9 S, v9 @
O_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
/ T5 v4 u; T' I) mfor P_d5=O_d5:(length(D5_wpeak)-O_d5);7 O* g$ b9 x4 H4 [
if D5_p(P_d5)==1;
$ ]3 C, N8 R, `* O0 G for i=1:O_d5-1;4 r+ |2 u- m1 w. n
D5_p(P_d5-i)=1; 8 s: l9 F. |; H! n
end ;* W3 i# E) f3 r, H" b T8 i
end; * M+ K4 `' |. S4 ~7 ~
end;7 ^0 D; K/ }( e3 _' U5 B
D4_wpeak=D4_wpeak.*D5_p;5 K# W; T3 d5 |8 B+ j) M
5 t- W) W, y" F% F8 ~$ b4 l5 Y
D3_wpeak=wpeak(level-2,:);, w; R2 n2 q- |, [' {8 |
D4_p=(D4_wpeak~=0);
$ v/ Y$ M. N& O3 z$ z1 _) y! GO_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。7 ~( d5 i2 J+ X0 S# e Y
for P_d4=O_d4:(length(D4_wpeak)-O_d4);) p+ [# B5 G2 `! u( |
if D4_p(P_d4)==1;
& P4 H) w/ D" |# _( _* e+ g6 Y w for i=1:O_d4-1;
/ j3 P' H3 K% C$ \# O D4_p(P_d4-i)=1;
* `+ L4 R8 w% ]8 F% p N$ E end ;
. {* R( U9 k$ v' o3 i1 W end; ( R' E, k& E: A
end;: R$ [5 V- x: y' c, E& @
D3_wpeak=D3_wpeak.*D4_p;
- p: K) l) K& ~$ V* `+ _2 R
7 d K/ z# o9 y& C* H! bD2_wpeak=wpeak(level-3,:);
" z* J3 t; c/ \$ \. gD3_p=(D3_wpeak~=0);
* p8 j7 g# V# p$ T) @" O% ~O_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。5 e. T: k# b6 d2 K7 X
for P_d3=O_d3:(length(D3_wpeak)-O_d3);# [2 @6 ?+ J5 D, M. t" W
if D3_p(P_d3)==1; 0 w9 N3 h* s! P3 l0 g* r
for i=1:O_d3-1;
( a; J$ _3 c5 G# u7 @ D3_p(P_d3-i)=1;) w4 { X# X5 |* E+ N
end ;
+ h$ U7 \- U3 c! |! [/ Y end;
1 i! `* t$ {/ x4 V6 ^: Hend;% i1 g& M& h7 W( m
D2_wpeak=D2_wpeak.*D3_p;3 Z4 B) w1 T/ h! t6 n
3 \; y* L, e4 f7 p9 }%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:
+ k1 ^# {8 X; ?2 K! dD1_wpeak=wpeak(level-4,:);
% O! X8 P/ t8 e2 e* pD2_p=(D2_wpeak~=0);* |5 g+ T3 G1 H+ V
D1_wpeak=D1_wpeak.*D2_p;
# S q+ M# i: i- r% a" J2 G0 J; P) { {4 L% j5 N. s
wpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];
( Z8 c. D7 w' ? T% V8 l) G* T( Awpeak=wpeak';& p" C0 W% L0 f0 q5 ^0 g
$ |$ t& q; |, Y- X, d: u q5 k%____重构信号:+ R1 U6 {5 {- T8 A
pswa=swa(level,:); % pswa: 为待重建的信号
$ k) [& X! \. z+ N3 Uwframe=(wpeak~=0); %迭代初始化
/ \; v' |8 [- v5 o0 q) Hw0=zeros(1,points);" ~9 O* `. Z0 ?, Z r% O/ i
[a,d]=swt(w0,level,Lo_D,Hi_D);
3 H' I$ E3 X, p: Z4 M! cw2=d; % w2为待重建小波
* w3 I5 r& f: }, @ `# |+ j! Q for j=1:num_inter
" ^1 [6 f, T7 ?! U w2=Py_Pgama(d,wpeak,wframe,1,sr); % 先进行Py投影和 Pgama投影. `# W6 Y: E/ ]8 I4 k) R
w0=iswt(pswa,w2,Lo_R,Hi_R); % 再进行Pv投影
# Q& u/ \- X- D" X1 R [a,d]=swt(w0,level,Lo_D,Hi_D); % Pv
& }4 d0 Q( {# M: M& ?/ V end
* D, U! {3 V2 T* s+ j pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号
% H2 A. [# J+ N
5 e* P; ?4 l) U9 v, V Txcrr=y'-pswa; % 重建误差
# s2 ~- y# D7 ?$ X' lfigure;%figure3
+ O0 x& D+ w2 q; ]& f2 i, ]subplot(411)
# S& ~! N9 Q+ I$ z) r' l( N3 ?plot(y(1:points),'r');
8 }5 Y$ ]% G( H+ Taxis tight;* h1 k5 N# X7 ^) b1 m9 x4 e4 x- Y
subplot(412)
2 D5 e: Y6 p: A5 z; k: W) S9 @0 `plot(signal(1:points),'r');' B) [) e% t: [4 p
axis tight;1 _- a. B3 L7 x
subplot(413)
3 D6 s( v7 g4 b6 C* y9 H2 Dplot(pswa(1:points));
0 A6 D: c G4 S. raxis tight;5 n/ v5 z# G$ V. U) \) }) F7 [' J. c4 J
subplot(414)! w, n9 X+ P$ o. R# v! |- y; i
plot(xcrr(1:points)); $ D) n5 z2 Y; _1 `( V0 x7 c1 r
axis tight;
S) p! U# C$ Ifigure%figure4! t9 l- P7 d9 s5 h1 v0 Q) j
subplot(611)
* S* R: s$ }' xplot(signal);9 }$ y, _ d3 D' w* @ `' S
subplot(612)
; e/ y' G5 U8 ?$ X4 X6 ^plot(D5_wpeak);
/ Q% U3 u Z6 E& R) rsubplot(613)4 K5 l5 f8 T2 t6 R' B( {; L
plot(D4_wpeak);' P' X. s1 M9 a
subplot(614)
6 {1 h) J5 f* Q4 Vplot(D3_wpeak);
; X( c! z" x2 D! v' lsubplot(615)
a6 c K+ Q1 {4 j l bplot(D2_wpeak);0 q2 q% }! C ^& X6 R; \- _
subplot(616)/ b; j: O. H! r* \1 I8 j8 h
plot(D1_wpeak);8 ~$ w) A. u1 t X* r4 f
[value,index]=max(abs(D2_wpeak))
" q3 T+ t* R2 o, o# n2 |[value,index]=max(abs(D1_wpeak)) |
|