|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。$ h# G3 K. s8 \) k
可是使用模极大值法检测不到第二个波的波头,不知道为什么?
H5 v' e0 b7 ^4 T请达人指教。
- ~* q$ `" [. f0 W/ }+ b0 a源程序在如下
# L* k+ t, E! P" ^( Aplot(cable(:,1),cable(:,2))" x+ z& t% d7 q* d
tcable=cable(:,1);! b1 M) R" ^7 M9 V/ @
ycable=cable(:,2);
3 s2 H/ O2 d1 g3 T& ~0 clength(ycable)
. G2 V/ ?/ e" _5 a4 C8 ?+ R1 i! L* E# B+ m: F6 I' y4 r( }' T
signal_length=33856;( a. U A$ o: o4 R5 C/ R
t(1:signal_length,1)=0;
2 v" l2 d8 g8 `. X" \' s Ncable=length(tcable);
& J7 ]# R. C }: b* w% v0 |: E for i=1:Ncable
$ f" b1 s0 Q3 m' v5 S6 { t(i,1)=tcable(i,1);
' h, p8 m1 A) ~0 S end
$ p" M( a/ p q/ E 4 \6 f6 A% `! a0 j* K. J
y(1:signal_length,1)=0;: K: ]& ^1 c' ^9 _- M k" ?
for i=1:Ncable
- y& d1 V$ D+ G. F7 Q y(i,1)=ycable(i,1);5 m b7 Q! k8 f' j1 b; c7 w7 d' |, d
end: S/ U. Y- }+ S. _
noise=0.01*rand(1,length(y));1 `0 }* U3 ]: C1 @
y_noise=y+noise';
) P5 Z1 B0 v h3 c! ~6 A* z$ Z% ]! T5 W$ g. t
signal=y_noise;
. C3 C. H+ x/ k4 M- f1 {%plot(t,signal)
- b7 V" Z" x5 q. x# \' a* dpoints=length(signal); level=5; sr=360; num_inter=6; wf='db3';
4 t! B4 E, `% V; i7 R%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称
: l, @# {9 m( Y6 ~* c) joffset=0; f/ G' d6 h% A, h: D U1 G
, E! B: ^1 I8 @2 O
8 s7 A9 r$ I1 X8 J5 |%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:9 i- H% a1 l! ?; \: `) C
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器. K0 ~0 I& F$ q; \/ b
%Hi_D:分解高通滤波器
" a: N$ T0 {3 s& }6 f9 R %Lo_R:重建低通滤波器5 t" e9 N7 \1 d# T6 I- b0 Z* K7 O
%Hi_R:重建高通滤波器
$ v# a/ g9 N) ^: g: ~0 i/ j: R
: R. V2 O- n1 u) J/ U[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌
& K6 s+ S7 n0 X+ Q$ x2 V %swd小波系数
( D9 K& \+ F4 l ) X- v& A" K) ^! @
figure;%figure15 c0 V; Y6 v0 n# ^
subplot(level,1,1); plot(real(signal)); grid on;axis tight;$ H0 w* s8 k& }/ z% E! Q
for i=1:level: R4 u8 H6 n+ Z( G" t# ]2 x
subplot(level+1,2,2*(i)+1);
; c+ e7 h* s+ i* S# C* t plot(swa(i,:)); axis tight;grid on;xlabel('time');
3 t9 O2 q$ W6 I6 M3 S ylabel(strcat('a ',num2str(i))); u i/ C& `! C: _5 x$ b. @1 W4 ~
subplot(level+1,2,2*(i)+2);
2 u4 H5 p! B- g/ b1 U plot(swd(i,:)); axis tight;grid on;. F! Z. w3 w& U' {( x/ \
ylabel(strcat('d ',num2str(i)));. s* ^' S l: O5 o8 |0 ~) `# e; e
end
) x" i3 N2 z+ U4 ^, w+ z1 h%以上内容是对信号进行离散小波变换。
1 n0 d9 f% ^! F8 u6 Y, [# `& j%尺度为5# ]& H5 r4 A4 Y. H. T% T8 x
& C0 e) ~1 T. |3 Q% n7 b
% r) I- J$ Y/ X% u0 ?) b% p# V D7 N) m/ c* K N5 s% p
%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:
- M1 |1 E5 H* W- D Q1 P% swa:小波概貌; swd:小波细节;' n4 p9 Y" \7 Q1 ]! H- h, t) g* `
% ddw:局部极大位置; wpeak:小波变换的局部极大序列。3 ? G, s a5 ?
ddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零 @: @4 q/ x8 u. v
pddw=ddw;( p$ m: {$ H: k! ?1 q, `" L% g9 |
nddw=ddw;
$ {9 {; v) {% B6 k* c6 gposw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零" g: [0 A7 ?: w9 e4 v) {! [8 e9 K8 T
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);/ o3 b A4 Y* b% Z0 ~" N! }/ ]( D
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);9 ^: J5 z1 D/ r2 y, x H
negw=swd.*(swd<0);%将swd中大于零的数置零$ l" i% i, h( |- C5 `9 A5 H2 C
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);% p. P" L' H0 M( J) V9 {
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);8 O/ M) H4 F( @1 c) ~! X
ddw=pddw|nddw;%|:或
, o9 q5 ?- A2 L% V# p4 wddw(:,1)=1;) {1 l& `* z1 c. p0 Q
ddw(:,points)=1;
8 V% J6 I4 w7 A$ z8 Y4 }7 _wpeak=ddw.*swd;! p' v C, ^# m7 E4 x# A5 N/ U
wpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响5 _- u5 Q2 k& X
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响# {1 j. x4 ~" X/ P) ]
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点
; a7 B- a9 ~3 s# `: I: k" S% D3 c
7 h4 h7 d& |5 t6 y, W6 E s4 l: ^! C) Bwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));" i$ ] \8 V1 ?6 ?
threshold=0.1; % 阈值
$ X3 h, n, W( |# O* ?1 U
) }) Y4 e, q& s# x, j2 i5 }' gfor i=1:points;
3 @' j" r7 L" C8 B; D8 T if (abs(wpeak_threshold(i))<threshold)
2 ~9 Y$ c4 d: ]4 |+ W, M. O9 | wpeak(level,i)=0;, \3 ]1 y1 k5 K; F [
end* Y, C6 s6 b$ \. v0 |6 ~9 ?
end; ( @ t8 m" |, z& O8 }5 Q4 n' j
D5_wpeak=wpeak(level,:);
- }' G0 _- E1 @# t) I7 I5 _
) S# M7 p1 Y' O* Y%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,7 C# G* I( a2 E$ G, j: `
$ I% F; C1 N, A* m( C0 ^
& i2 f; g. C) N) f* W8 U. n%____进行模极大值的处理:) R) f& _: n* h8 F; R
%%C=0.8; ; j, a6 b8 }9 W
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。) v- U" n; P% ?
%%D5_wpeak=wpeak(level,:);
; _! e' |$ C4 {3 ]' ?0 Q%%M=max(abs(D5_wpeak));$ v8 [" E# v; O" w/ Y! K* M. i, c- Z
%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
, ?- Y6 l1 p; V) W5 x t%%for i=1:points
# l! Y2 k* k2 u- c. C# z1 Q5 [%% if(abs(D5_wpeak(i))<Thr)
# _7 H5 w9 V7 {9 W: |%% wpeak(level,i)=0;
1 {: C1 X/ q! Y. u%% end
" y! U3 U: U- a; F, j%%end; c" [; \, t# S5 f2 Y+ ]% l
%%D5_wpeak=wpeak(level,:);
6 d# @1 ^, C2 o3 p
Q$ ]8 ]# W, s( q0 Z. Wfigure;%figure2
, }, K) @% c8 }subplot(level+1,1,1); plot(real(signal)); grid on;axis tight;
8 G3 l/ N) R. a/ V( X1 qfor i=1:level8 w8 G6 y- {+ t5 S' ?! q5 w
subplot(level+1,1,i+1);
& e7 f0 B' b- p; H0 C plot(wpeak(i,:)); axis tight;grid on;+ d- b% G' j& E( ?2 z# z- U9 E8 O2 `7 S
ylabel(strcat('j= ',num2str(i)));
9 s4 s3 M6 N7 r8 A% M" Bend8 C+ s; ^! F" E* n) {+ F0 b9 J
# T( C) G4 j) R1 n( h. |0 B2 V) [
& W8 _& Y$ @. _% [ u
%步骤46 e9 G! e- w5 F4 J- M, R
%模极大值的处理方式:
" I7 |7 N: j! H! a%在尺度j上极大值点位置,构造一个搜索区域,4 k) ?/ n+ ~* z
%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;% U# ]0 \% s1 G! M. ?
D4_wpeak=wpeak(level-1,:);6 c6 H' k; n& w
sousu=6;0 I8 g7 J' W- [4 R" E4 y
D5_p=(D5_wpeak~=0);
9 i; N$ n& [- F& kO_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
( V8 V1 K* r$ N1 Vfor P_d5=O_d5:(length(D5_wpeak)-O_d5);; {( M; q2 y1 o& _6 e4 u
if D5_p(P_d5)==1; ! T8 p# l4 K% `- u+ T! z
for i=1:O_d5-1;! B; o' I& k7 r
D5_p(P_d5-i)=1;
) w1 O T/ s$ C' v6 ^ end ;
# |6 o/ Z6 k, z0 r( B$ [3 C end;
\3 u/ |' A+ t3 g" eend;
0 {: X" K- R( \D4_wpeak=D4_wpeak.*D5_p;! W6 `$ z s: J- C& x, l5 t+ i2 Y
% ~! W. `# j( P9 f
D3_wpeak=wpeak(level-2,:);
" T7 `/ H- F1 E: Y! w( ND4_p=(D4_wpeak~=0);0 M3 H) }. s+ |3 O# J
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
% x. W) @; F" X4 Ofor P_d4=O_d4:(length(D4_wpeak)-O_d4);' S! }/ m( H' \9 {. t# c& K
if D4_p(P_d4)==1;
+ ^5 b! o6 }& _/ H6 I6 y* D for i=1:O_d4-1;6 ^% h! l7 e3 {2 V% k6 z
D4_p(P_d4-i)=1;
0 N2 S- w$ I6 D# I! ~' l end ;
+ s- k& A( K, [* F, u; E5 q end;
- C2 r6 t. C+ r+ D' Fend;
+ J% | ^# N9 H; r* TD3_wpeak=D3_wpeak.*D4_p;! ?* f( V% ] f
* [: h( [5 x# A5 y
D2_wpeak=wpeak(level-3,:);1 \ v( z/ V+ z6 e! Y$ K- v" t
D3_p=(D3_wpeak~=0);, Z' J& Z7 f$ U
O_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
/ y. d6 X' J% Vfor P_d3=O_d3:(length(D3_wpeak)-O_d3);2 {: u. Z4 K$ u; m
if D3_p(P_d3)==1; / R$ i% o$ `6 Y4 {1 q
for i=1:O_d3-1;
# y. d( L" p5 i& x D3_p(P_d3-i)=1;4 H- f$ [) q/ o* F ^/ L
end ;$ g2 @: j2 ?) o, e) n+ Q
end; # W9 z: z: J0 j; b
end;0 `. `. z) `7 l
D2_wpeak=D2_wpeak.*D3_p;
6 k4 n# @, k/ z5 E' |" g7 \' Q+ J: A. f4 G
%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:
0 b9 T5 A9 t/ _( q2 i) }D1_wpeak=wpeak(level-4,:);) R0 S* f# p/ E" ^9 o* C Q3 ?
D2_p=(D2_wpeak~=0);
+ m5 w: J. C3 H' L% ?% ~6 Y k. [7 xD1_wpeak=D1_wpeak.*D2_p;
% K$ N" A0 U$ `- V
9 V: p4 Z0 A" fwpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];' N0 u m' p/ t
wpeak=wpeak';- `7 r x& e& \1 [9 L
. j) _; m. g7 `% _+ I2 I- T: V/ i%____重构信号:+ K* ?, k) N7 {2 W0 _$ w
pswa=swa(level,:); % pswa: 为待重建的信号
1 `8 T) |9 i( k4 r' f; T9 |5 l7 Kwframe=(wpeak~=0); %迭代初始化1 d8 l6 d3 E0 @9 Y4 _
w0=zeros(1,points);; t1 A( D, x5 u
[a,d]=swt(w0,level,Lo_D,Hi_D);
( m% K7 ?, t4 Ew2=d; % w2为待重建小波
8 J" {0 X# h1 x6 G5 t& R s& W1 @ for j=1:num_inter7 \0 ^" ~) w1 P7 ?
w2=Py_Pgama(d,wpeak,wframe,1,sr); % 先进行Py投影和 Pgama投影
+ `* k& o- g' L2 I8 K, a w0=iswt(pswa,w2,Lo_R,Hi_R); % 再进行Pv投影( p8 u7 B3 r/ M3 C5 K4 Z3 @
[a,d]=swt(w0,level,Lo_D,Hi_D); % Pv
8 K: J% n7 V" b6 b end
4 }! a* @; ^& \( e6 g pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号
# Z e; N$ u% x" k7 N5 \' E
3 e3 r% m8 b: y, x$ s1 A" Y0 ^xcrr=y'-pswa; % 重建误差
8 f/ Y- W/ q; K; ^! C3 jfigure;%figure3
7 q- l$ n1 F) q8 F7 E" Psubplot(411)9 o6 n$ C, d& ~, z4 {1 a0 [
plot(y(1:points),'r');3 }+ I$ {* y! i) u4 f" _' X# M
axis tight;
' ^7 s g1 |- J2 e7 w0 Dsubplot(412)9 m" R% n( O* q2 J
plot(signal(1:points),'r');
4 E) K" V% y$ {- waxis tight;
8 [$ W; o/ l) Y( C9 z% x9 Ysubplot(413)
6 `+ c6 y7 |, A0 Z6 B9 [. n* y2 V% C6 Dplot(pswa(1:points));
, d9 o7 A7 {: j+ Oaxis tight;
9 ?5 N# t# i9 K( C" Esubplot(414)
+ m8 G; R- |. J" D+ d/ Uplot(xcrr(1:points)); " z5 t3 Y- d! h4 M Z8 r4 Y
axis tight;" I7 G* |* x& _0 k5 q# J
figure%figure48 J0 ?/ e6 K- P6 ^& B9 o- A
subplot(611)3 M& T( ^# R9 c6 ^+ ]7 i$ L: v
plot(signal);1 J/ }: |/ z" e( P- N, \( Y" w1 X
subplot(612)
' V4 u" t' m5 |' ]1 F1 Wplot(D5_wpeak);. ]. Z$ N; u4 x0 p5 K. g
subplot(613)2 P% k0 \! j; d9 ]6 G. g9 n0 m5 O
plot(D4_wpeak);5 i, ?# H2 Y; `
subplot(614)
, v/ O1 l# J4 w" \, Dplot(D3_wpeak);$ D$ w4 M, e$ T {% o. K. T! T
subplot(615)' |3 y; p0 a9 M X
plot(D2_wpeak);
6 ^) e7 E6 K( z: [1 q1 S0 ^6 Ssubplot(616)
3 D8 f/ L8 i8 I, |7 \9 k. Pplot(D1_wpeak);
5 D7 O& M9 S: y6 T6 Y5 h0 ?[value,index]=max(abs(D2_wpeak))) P) _' T) N; I5 t" z* |* o5 @
[value,index]=max(abs(D1_wpeak)) |
|