|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
原始图形如下,添加了噪声,使用的是db3小波,做了5层分解。
0 Y8 G2 f( Z+ k5 w0 |: ]3 u可是使用模极大值法检测不到第二个波的波头,不知道为什么?
/ q# l& d- g! _ e" V请达人指教。- Q& j, `4 \4 B$ L
源程序在如下
4 o$ m& {1 \3 F9 H: c6 C8 [plot(cable(:,1),cable(:,2))
, j! n# E1 E+ V$ x! I4 ^* d* E3 A6 t1 ktcable=cable(:,1);
/ I% H& L3 \& R! w# r' _ycable=cable(:,2);
, n7 p8 g2 A2 j' o# G# \length(ycable)
7 z; u7 y5 F/ p
# U/ y. j( ~7 Gsignal_length=33856;2 W5 \0 Q3 b3 B8 l+ ?: P6 { ^
t(1:signal_length,1)=0;( T# b# D4 l! K6 R; J& F) @
Ncable=length(tcable);% H- ?6 p6 b, a G+ J% m8 ~
for i=1:Ncable
5 U% C) x K: J+ ` t(i,1)=tcable(i,1);
' D9 l& _! |! B8 J2 T/ v; I end
p: }* G2 B0 _6 P0 m9 J" a( B
1 g; [1 E, [& Jy(1:signal_length,1)=0;: U& U" k4 l8 P
for i=1:Ncable2 r q; a! S. H) L
y(i,1)=ycable(i,1);! g! x( h/ ~& B: e4 q! p6 K
end
2 `6 w8 M+ S& Q* U \ noise=0.01*rand(1,length(y));4 b7 z( v$ }5 }) n) u0 s
y_noise=y+noise';
' L* n5 |9 X0 {, i2 r* ]- R
1 B" u4 T3 S( a- M/ lsignal=y_noise;
: S" p* \) }$ [! L0 v: X%plot(t,signal)
2 J+ [0 v* I% k Y1 vpoints=length(signal); level=5; sr=360; num_inter=6; wf='db3';
4 K* t' Y/ F: J9 x, | T%所处理数据的长度 分解的级数 抽样率 迭代次数 小波名称
2 l; [5 y! B5 K3 woffset=0;
$ W; ]) E) G% j j) ~' N) U) q6 r+ u/ M1 \# u# x( u% i
, I. o& _. g& I' F) _%____进行二进制小波变换(离散平稳小波变换),并给出各级波形:# X T7 x4 l# d! H
[Lo_D,Hi_D,Lo_R,Hi_R]=wfilters(wf);%Lo_D:分解低通滤波器 k6 B* U J7 a# b7 |$ ]; n
%Hi_D:分解高通滤波器
v6 Q+ i0 Y3 N1 v) b0 w4 Z7 v %Lo_R:重建低通滤波器
# v- e( y9 ~' _ %Hi_R:重建高通滤波器
4 i1 N- P! y/ Y" E8 G0 C4 k9 [1 `
$ ]5 s! _5 x* V! }) h[swa,swd] = swt(signal,level,Lo_D,Hi_D);%swa小波概貌% R5 D, L, y- I; Q
%swd小波系数
4 V0 k# p$ i) d7 {6 Z% q" E, ]2 k 8 Z3 z) F0 f9 i, ~# c9 v' P" L0 f
figure;%figure1
( J: R( t. U; e7 r' V2 s, |3 Bsubplot(level,1,1); plot(real(signal)); grid on;axis tight;
K, Z4 ]# ?: k, f5 X* ~8 cfor i=1:level! ]( h8 M9 }0 Q
subplot(level+1,2,2*(i)+1);- ?, @, L: _. [5 v1 N4 W* F4 p' G
plot(swa(i,:)); axis tight;grid on;xlabel('time');" e. i9 U2 s$ z+ w; g* g9 X
ylabel(strcat('a ',num2str(i)));
( Z- c6 |4 k' ^' n; k7 N subplot(level+1,2,2*(i)+2);- P" x: ]6 g. m9 e. S/ p8 J
plot(swd(i,:)); axis tight;grid on;
0 N2 {# |* U' s7 ]& O0 L7 ?ylabel(strcat('d ',num2str(i)));
' z5 E/ x# l: Z# h. ~end5 p: ?# T' |2 w( U
%以上内容是对信号进行离散小波变换。
2 I$ O4 f. Z- J- y7 T+ D8 m%尺度为54 t% Q$ ?1 H# S z. T$ [
+ |& Q! W7 d& M5 s
9 w R/ U D& G/ W% u
0 @$ o+ }% A# r/ n4 L3 s9 Z# Z* I%____求小波变换的模极大值及其位置,并按级给出小波变换模极大的波形:4 x( }; w" ^1 L+ @$ s
% swa:小波概貌; swd:小波细节;" Q5 q4 Z" u1 {4 f- Q, h
% ddw:局部极大位置; wpeak:小波变换的局部极大序列。
; I* r5 s' Z1 c9 G1 G* j( c tddw=zeros(size(swd));%建立与swd维数相同的矩阵,矩阵值都为零7 }& e6 q/ d( ~$ F% B5 e
pddw=ddw;
, g7 I+ {. `+ v/ ?1 snddw=ddw;# O2 @$ f; d4 F8 d
posw=swd.*(swd>0);%.*数组乘法,将swd中小于零的数置零/ a% t9 ]) U4 [ p
pdw=((posw(:,1:points-1)-posw(:,2:points))<0);
0 E) w. M2 L( b, [' {pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))>0);
# a I. J% t hnegw=swd.*(swd<0);%将swd中大于零的数置零( v( ]0 f- L/ o$ w0 k
ndw=((negw(:,1:points-1)-negw(:,2:points))>0);
9 s+ C) e" Y3 m3 R: Z+ s4 h" x1 ^nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))>0);' t! }" p" a/ I9 n# V+ J: Y
ddw=pddw|nddw;%|:或
8 Z( w' L6 W+ m+ `+ f7 R3 hddw(:,1)=1;
! a3 q4 C* Y7 W$ Zddw(:,points)=1;
/ j0 W8 \( T6 m7 Rwpeak=ddw.*swd;" h. k* W/ N* D4 n, v
wpeak(:,1)=wpeak(:,1)+1e-10;%第一列的值加上1e-10,不知道出于什么目的,目前看来不会对结果产生影响5 @# S& b9 M4 E k* c! |5 {; }
wpeak(:,points)=wpeak(:,points)+1e-10;%同理,将最后一列的值加上1e-10,不知道出于什么目的,目前看来同样不会对结果产生影响" t- b4 Z5 T! g& Q
%以上内容为:寻找每级尺度上小波变换系数对应的模极大值点
1 k# D/ A4 N3 Y5 Q1 J' S
* k$ }) q1 O1 O3 E& kwpeak_threshold=wpeak(level,:)/max(abs(wpeak(level,:)));: w7 N* X F) j: v( R5 I# \
threshold=0.1; % 阈值
1 H. {9 t: B- m4 |
- Y: z* _0 r' A/ Q% Vfor i=1:points;
2 g. ~" h& L5 n- k/ X+ E2 K2 z( J, J9 X if (abs(wpeak_threshold(i))<threshold)% i8 N) i8 H& w) g+ N" o1 l( n- R
wpeak(level,i)=0;
8 u- Y- C8 R! B; V* l3 g: d end
1 F9 Z( ^1 a( f+ Y' a( tend; 6 v# Z0 Z* V7 C- O
D5_wpeak=wpeak(level,:);
. M: |# p: Q6 H: a# A
; @7 \& o2 T0 Z) i! Y%对最大尺度2.^J上的极大值点设定阈值T0,将低于阈值T0的模极大值点去掉,! m$ F u6 i* [; j0 y" K
: x4 i4 E" {* W* [/ {
0 ?/ B& b" t" E, p8 w( X$ U) N%____进行模极大值的处理:0 V2 v; x: R' [; w" q
%%C=0.8; 4 T3 {8 L1 F/ ?
%此参数需要调节,为了在最大尺度上设定合适阈值,以确定最大尺度上该保留的模极大值点。
. i, e. t: G: |) i( A%%D5_wpeak=wpeak(level,:);
4 q. f9 _1 [/ j% d%%M=max(abs(D5_wpeak));
; F/ P' V2 ~8 B; ?3 Y" q%%Thr=C*M/level; %阈值计算,可参考论文:"3mm波段脉冲雷达系统研究和小波去噪分析"。
& e0 v0 m+ b$ X, s%%for i=1:points
0 q; O) A& h$ E: ]8 u%% if(abs(D5_wpeak(i))<Thr)
- o, e$ d- c5 @* @8 g5 V%% wpeak(level,i)=0;
4 {) o+ A0 l. S! x; Q%% end
! Z7 H8 y; ] C6 M$ |%%end
& f% G. N) a1 r9 R: n7 Z%%D5_wpeak=wpeak(level,:);
7 K" N) Y8 J+ g' Q/ a- T
N. O2 X! ~0 x* E; a3 F) Pfigure;%figure2
+ Z9 ~: }* m( fsubplot(level+1,1,1); plot(real(signal)); grid on;axis tight;
+ b, t1 Z) k, Q0 P; ^0 X1 q0 d* nfor i=1:level
8 h, U" \8 d2 G2 `! |- e subplot(level+1,1,i+1);
. D. ~9 D% D0 j- _* o) w plot(wpeak(i,:)); axis tight;grid on;
4 X! ?, M2 y1 w( u( [( v5 eylabel(strcat('j= ',num2str(i)));
u* L1 y; {8 g3 Wend
/ R0 h0 W E: O
( [! m8 y( I+ U! z( T8 K" X: Q0 }- Q# }
%步骤4
6 M4 G& f6 G9 Q# m: C4 t: y4 R K%模极大值的处理方式:0 `/ m3 M) W. [% i [1 N
%在尺度j上极大值点位置,构造一个搜索区域,
: U9 G, I/ H! v5 J; B1 L2 _%在尺度j-1中,极大值点落在该区域的点保留,其他的置0;* q/ C" A& p! m) Z& B. o7 Y
D4_wpeak=wpeak(level-1,:);
- k* ?" U W7 r ?% z* usousu=6;
( u# ] C, m& n H! iD5_p=(D5_wpeak~=0);
, L9 U5 H9 E, I' x8 @& YO_d5=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
! Z% o' y; x0 l) O2 N5 Ufor P_d5=O_d5:(length(D5_wpeak)-O_d5);
2 T* m0 P7 q) N4 c if D5_p(P_d5)==1;
6 C9 n X) Y; D/ V3 ? for i=1:O_d5-1;
. [! L- q4 X' y y0 ~/ f D5_p(P_d5-i)=1; * R! a! v4 h4 ^3 Z5 \! Q3 y* G$ ^
end ;% K J U L! L
end; * b- n8 G+ w2 F' v: z5 F5 }
end;1 k; n3 z$ a4 o& i
D4_wpeak=D4_wpeak.*D5_p;
; n5 {0 k+ W& a% L' n3 A
2 ^# R! K! q L- A& _; @D3_wpeak=wpeak(level-2,:);4 j0 Q7 {7 O: S: [, z5 k4 _9 ]
D4_p=(D4_wpeak~=0);1 U4 V, q& x' c& _2 D Q% u' ~
O_d4=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。
# @& N! ~$ K/ |3 J& x0 |: Bfor P_d4=O_d4:(length(D4_wpeak)-O_d4);+ ]8 m% O9 i, q
if D4_p(P_d4)==1;
6 H- I/ @; v) X' `7 r for i=1:O_d4-1;
V" j3 c- ]4 w8 [) A D4_p(P_d4-i)=1;
}1 ]1 x* U! \( d& T4 O6 [. k# Q end ;. h2 y$ q; F9 A- S" @6 g9 r2 U
end; ! I4 g& v( N, l5 H( U! G
end;- i$ [1 F& x$ h4 q Q
D3_wpeak=D3_wpeak.*D4_p;9 a+ a c3 ]9 E* g$ q' n
7 s; d) _9 C% H0 p' n
D2_wpeak=wpeak(level-3,:);
1 B. k; a' _1 T9 k' [9 f$ yD3_p=(D3_wpeak~=0);
9 k, k+ A, k" F5 ?; uO_d3=sousu;%该参数确定在上一级搜索极大值的范围,可以调整。4 e6 B: ?+ ^+ b3 @/ D7 j2 l
for P_d3=O_d3:(length(D3_wpeak)-O_d3);( A1 x4 `; b' V7 I$ N) m1 X; L" C
if D3_p(P_d3)==1; 3 `0 p; [. ` R, T
for i=1:O_d3-1;* ]3 A+ d& y3 T, s/ v' m5 d- m
D3_p(P_d3-i)=1;
1 G2 W0 V1 K6 S0 S% R1 T end ;0 O" r. A/ B/ q( A h; B0 k
end;
+ S6 b; w, q- r3 ]; ^9 Fend;
+ \. G1 G. e; tD2_wpeak=D2_wpeak.*D3_p;
3 G' w, ?. y7 }0 G: X E
! M$ Z2 P8 O1 R; E%第一层单独处理,在第二层极大值点位置上,保留第一层相应极大值点:# e7 J/ B) t! S2 M2 r
D1_wpeak=wpeak(level-4,:);9 S9 l- g; O3 k4 g& B- P7 D
D2_p=(D2_wpeak~=0);; r- q6 S) q" |" h' w
D1_wpeak=D1_wpeak.*D2_p;
0 W* [- L9 e4 `. @, t$ \, F6 g
; e5 j7 Y4 J( U0 gwpeak=[D1_wpeak' D2_wpeak' D3_wpeak' D4_wpeak' D5_wpeak'];9 ^. H$ m" W# l. Q
wpeak=wpeak';
7 p d* J8 o$ J) q! C
r, `8 R7 z/ l `; a/ k7 T%____重构信号:
- {, K! @: Q+ v1 [8 l: Upswa=swa(level,:); % pswa: 为待重建的信号
0 E; H: N# \. Pwframe=(wpeak~=0); %迭代初始化2 ?& z) o; C# V0 K. N. F6 L# @
w0=zeros(1,points);- `# G+ a7 E; {& f/ q+ |# F' q
[a,d]=swt(w0,level,Lo_D,Hi_D);+ o) `0 ~9 s0 w- v- g
w2=d; % w2为待重建小波
: k5 j" {8 d0 p for j=1:num_inter" h$ v7 J' j* H+ r* g
w2=Py_Pgama(d,wpeak,wframe,1,sr); % 先进行Py投影和 Pgama投影/ { O# D- @2 K# B- q5 ?4 y
w0=iswt(pswa,w2,Lo_R,Hi_R); % 再进行Pv投影% w; q5 x2 K" F- X/ \; W
[a,d]=swt(w0,level,Lo_D,Hi_D); % Pv4 ]9 C0 G" v3 h/ ]" y
end
5 r$ e2 ` N4 |: W$ Q9 w8 n0 \, B8 _ pswa=iswt(swa(level,:),w2,Lo_R,Hi_R); % 计算重建信号
* l5 |, z- g* c$ z" U- E" Q ( s% Y9 ]4 o+ s& K
xcrr=y'-pswa; % 重建误差( G3 {. p/ b. G
figure;%figure3- S: M: e* P3 p- j% r
subplot(411)
# B: j! c+ C d% q# Bplot(y(1:points),'r');
9 v/ E3 u+ G9 s, m$ Qaxis tight;4 s1 ~* Q, a A4 s
subplot(412)% z: H+ f9 n8 v6 h! w
plot(signal(1:points),'r');1 J, ?/ o4 R( _; \$ p
axis tight;8 @6 _) u+ H5 S! @' }
subplot(413)& @3 x+ G* T% T9 o6 }
plot(pswa(1:points));
# R. N- L- B5 s2 h9 i2 yaxis tight;8 ]8 x- Q& [0 |, @* R
subplot(414)
- S# h9 X* D6 E5 t* u! [plot(xcrr(1:points));
; m M3 G/ J+ taxis tight;
; [/ U0 s) F/ Ffigure%figure49 g* A5 G. `6 D/ N4 z
subplot(611)7 P) K4 v9 ^4 n5 I: W' p: N5 B
plot(signal);
9 h5 U) {/ x Nsubplot(612)' C2 m) M9 ]1 U6 v. K- c9 \
plot(D5_wpeak);
) e$ ]9 C3 `* {# W" lsubplot(613)
: l; Z' ?$ g- s/ O9 M# L& W* f. i" u/ uplot(D4_wpeak);* Q8 B8 ]6 A" E6 D0 J1 ^5 G" Y
subplot(614)
3 w% C, v P6 S" d0 `5 Q( @plot(D3_wpeak);
* w; ^0 ^0 Y& Z3 D) i8 q/ Fsubplot(615)
! T' k! T1 l6 G* _; S6 rplot(D2_wpeak);
q$ `& v3 H# q: {; ~subplot(616)' Q6 b \+ S; O8 x# z$ F
plot(D1_wpeak);
n% G0 O4 ^3 C: R4 L' n+ o+ M1 @[value,index]=max(abs(D2_wpeak))$ w% X _2 A+ ?+ _- Q2 Q$ f
[value,index]=max(abs(D1_wpeak)) |
|