赞
踩
傅里叶级数的一个缺点是,它的构造块是无始无终的周期性正弦波和余弦波。这使得该方法适合于滤除或压缩那些具有近似周期性的波动信号。而面对那些具有显著局部特征的信号,正弦波和余弦波就无能为力了。
幸好还有另外一类构造块,称为小波,它适合模拟突变信号——具有显著局部特征的信号。
本文首先介绍了小波处理信号的一般步骤;之后分别对分解算法、重构算法进行了详细描述;最后,基于MATLAB展示了信号的分解和重构过程及效果。
1)取样:这是一个预处理步骤。若信号连续,那么必须以能够捕获原信号必要细节的速率取样。不同的应用决定了不同的取样率。如:原信号的细节频率为20kHz,由Nyquist采样定理,此时的取样率至少应为细节频率的两倍,即40kHz,才能保证细节频率不失真。
2)分解:信号取样后,选择一个最高级近似系数 f j ∈ V j f_j∈V_j fj∈Vj,以便能最佳的逼近 f f f。之后,通过多分辨率分解算法,将信号进行逐级分解。该步骤的输出是各级别的小波系数(细节系数)和最低级别(或自定义的合适级别)的近似系数。该系数集就是下一步信号处理中要处理的对象。
3)信号处理:通过舍弃非显著系数可以压缩信号,或者以某种方式使信号滤波或去噪。该步骤的输出是修改过的系数集(细节系数集),可被存储或立即重构以重组经过处理的信号。但在某些情况下,原信号不再有用,可以舍弃,如:奇异性检测。
4)重构:把经过信号处理步骤修改过的系数集(细节系数集),应用多分辨率重构算法,进行逐级重构,该步骤输出最高级近似系数。
首先,基于取样率和进行什么样的多分辨率分析确定 f f f的近似空间 V j V_j Vj,其能最佳的反映 f f f的各种信息。之后选择一个 f j ∈ V j f_j∈V_j fj∈Vj,以便能最佳的逼近 f f f。
由
f
j
f_j
fj开始,逐级分解为较低级别的近似部分
f
j
−
1
f_{j-1}
fj−1和小波部分(细节部分)
w
j
−
1
w_{j-1}
wj−1,即有
f
j
f_j
fj =
f
j
−
1
f_{j-1}
fj−1 +
w
j
−
1
w_{j-1}
wj−1。如此,对
f
j
−
1
f_{j-1}
fj−1和
f
j
−
2
f_{j-2}
fj−2采用相同步骤,并一直进行下去,如下图所示,最终终止于第0级分解。
为进行分解,需要对近似系数和小波系数进行操作,采用离散滤波器实现形式。
如:把一个信号离散化为
2
8
2^8
28个采样点,于是得
a
k
8
=
f
(
k
/
2
8
)
,
0
≤
k
≤
2
8
−
1
a^{8}_{k} = f(k/2^{8}),0≤k≤2^8-1
ak8=f(k/28),0≤k≤28−1
下取样:对原信号每隔一个点取一个样本后得到,即舍弃原信号序列中奇数项部分。
定义下取样算子
D
D
D如下:
若
x
=
(
.
.
.
,
x
−
2
,
x
−
1
,
x
0
,
x
1
,
x
2
,
.
.
.
)
x = (...,x_{-2},x_{-1},x_0,x_1,x_2,...)
x=(...,x−2,x−1,x0,x1,x2,...),那么其下取样序列为
D
x
=
(
.
.
.
,
x
−
2
,
x
0
,
x
2
,
.
.
.
)
Dx = (...,x_{-2},x_0,x_2,...)
Dx=(...,x−2,x0,x2,...)
通过离散滤波器(卷积算子),来描述迭代步骤。滤波器
h
h
h和
l
l
l,分别为分解高通和分解低通滤波器。
卷积形式:
a
j
−
1
=
D
(
l
∗
a
j
)
a^{j-1} = D(l*a^j)
aj−1=D(l∗aj),
b
j
−
1
=
D
(
h
∗
a
j
)
b^{j-1} = D(h*a^j)
bj−1=D(h∗aj);
算子形式:
a
j
−
1
=
D
(
L
(
a
j
)
)
a^{j-1} = D(L(a^j))
aj−1=D(L(aj)),
b
j
−
1
=
D
(
H
(
a
j
)
)
b^{j-1} = D(H(a^j))
bj−1=D(H(aj));
注:
① 通过
H
(
x
)
=
h
∗
x
H(x) =h*x
H(x)=h∗x,
L
(
x
)
=
l
∗
x
L(x) =l*x
L(x)=l∗x,定义两个离散滤波器(卷积算子)
H
H
H和
L
L
L,并记
x
=
a
j
x =a^j
x=aj;
② 离散滤波器和下取样算子不依赖于
j
j
j,所以存储需求量小,而且由于卷积运算并不耗时,整个迭代过程既快又有效。
一旦信号分解完毕,就可以通过修改某些
w
j
′
w_{j'}
wj′,实现对信号的处理。如果想要滤除信号中的噪声,那么
f
f
f中的
w
j
′
w_{j'}
wj′中相应于不想要的频率部分可被舍弃,结果使得噪声被显著减小。如果想要对原信号进行数据压缩,可将幅值较小的
w
j
′
w_{j'}
wj′分量舍弃,这不会显著的改变原信号特征,但会获得极大的数据压缩效果。当
w
j
′
w_{j'}
wj′分量被修改完成之后,需要一个重构算法,重新组装被滤波或被压缩的信号,这个过程即为信号的重构,算法流程如下:
对近似系数和小波系数采用离散滤波器实现形式进行重构。
a k j = Σ l ‾ ( k − 2 l ) a l j − 1 + Σ h ‾ ( k − 2 l ) b l j − 1 a^{j}_{k} = Σ\overline{l}_{(k-2l)}a^{j-1}_{l} + Σ\overline{h}_{(k-2l)}b^{j-1}_{l} akj=Σl(k−2l)alj−1+Σh(k−2l)blj−1
这几乎就是两个卷积之和,唯一区别是卷积的指标是 k − l k-l k−l而不是 k − 2 l k-2l k−2l,即上式是一个奇数( l ‾ ( k − ( 2 l + 1 ) ) \overline{l}_{(k-(2l+1))} l(k−(2l+1)))缺失的卷积。可以利用上取样算子简单地用0乘奇数项而复原回来。
上取样:把0均匀的分散在序列
a
l
j
−
1
a^{j-1}_{l}
alj−1中,形成一个在所有的奇数位置为0的新序列。原来的每个非零项给定一个新的偶数指标,这只要把原有的指标倍乘即可,例如,
a
−
1
j
−
1
a^{j-1}_{-1}
a−1j−1,现在的下标是-2,上取样定义如下:
另
x
=
(
.
.
.
,
x
−
2
,
x
−
1
,
x
0
,
x
1
,
x
2
,
.
.
.
)
x = (...,x_{-2},x_{-1},x_0,x_1,x_2,...)
x=(...,x−2,x−1,x0,x1,x2,...)为一序列,那么其上取样算子
U
U
U为
U
x
=
(
.
.
.
,
x
−
2
,
0
,
x
−
1
,
0
,
x
0
,
0
,
x
1
,
0
,
x
2
,
0
,
.
.
.
)
Ux = (...,x_{-2},0,x_{-1},0,x_0,0,x_1,0,x_2,0,...)
Ux=(...,x−2,0,x−1,0,x0,0,x1,0,x2,0,...)
或
(
U
x
)
k
=
0
,
若
k
为
奇
数
;
(
U
x
)
k
=
x
k
/
2
,
若
k
为
偶
数
(Ux)_k = 0, 若k为奇数;(Ux)_k = x_{k/2}, 若k为偶数
(Ux)k=0,若k为奇数;(Ux)k=xk/2,若k为偶数
通过离散滤波器(卷积算子),来描述迭代步骤。滤波器
h
‾
\overline{h}
h和
l
‾
\overline{l}
l,分别为重构高通和重构低通滤波器。
卷积形式:
a
j
=
l
‾
∗
(
U
(
a
j
−
1
)
)
+
h
‾
∗
(
U
(
a
j
−
1
)
)
a^{j} = \overline{l}*(U(a^{j-1}))+ \overline{h}*(U(a^{j-1}))
aj=l∗(U(aj−1))+h∗(U(aj−1));
算子形式:
a
j
=
L
‾
(
U
(
a
j
−
1
)
)
+
H
‾
(
U
(
b
j
−
1
)
)
a^{j} = \overline{L}(U(a^{j-1}))+\overline{H}(U(b^{j-1}))
aj=L(U(aj−1))+H(U(bj−1));
注:
① 通过
H
‾
(
x
)
=
h
‾
∗
x
\overline{H}(x) =\overline{h}*x
H(x)=h∗x,
L
‾
(
x
)
=
l
‾
∗
x
\overline{L}(x) =\overline{l}*x
L(x)=l∗x,定义两个离散滤波器(卷积算子)
H
‾
\overline{H}
H和
L
‾
\overline{L}
L,并记
x
=
U
(
a
j
−
1
)
x =U(a^{j-1})
x=U(aj−1);
② 同分解算法一样,离散滤波器和下取样算子不依赖于
j
j
j,所以存储需求量小,而且由于卷积运算并不耗时,整个迭代过程既快又有效。
代码如下:
% 导入原始数据 leleccum load leleccum; s = leleccum(1:4096); % 单尺度一维离散小波变换(分解) [cA1,cD1] = dwt(s, 'db4'); % 一次分解(原始信号) [cA2,cD2] = dwt(cA1,'db4'); % 二次分解(一次分解后近似系数cA1) [cA3,cD3] = dwt(cA2,'db4'); % 三次分解(二次分解后近似系数cA2) figure(1); % 原始信号 subplot(2, 2, 1),plot(s, 'r');hold on, legend('原始信号'); % 一次分解下近似和细节系数 subplot(2, 2, 2),plot(cA1,'r'),hold on,plot(cD1,'b'),legend('近似cA1','细节cD1'); % 二次分解下近似和细节系数 subplot(2, 2, 3),plot(cA2,'r'),hold on,plot(cD2,'b'),legend('近似cA2','细节cD2'); % 三次分解下近似和细节系数 subplot(2, 2, 4),plot(cA3,'r'),hold on,plot(cD3,'b'),legend('近似cA3','细节cD3'); % 单尺度一维离散小波逆变换(重构) R_cA2 = idwt(cA3,cD3,'db4'); R_cA1 = idwt(cA2,cD2,'db4'); R_S = idwt(cA1,cD1,'db4'); figure(2); % 原始信号s与由cA1,cD1重构后的R_S比较 % 注:为更好显示重构效果,将重构后的数据减去50 subplot(2, 2, 1),plot(s,'r'), hold on,plot(R_S-50, 'b'),legend('s', 'R_S-50'); % 一次分解下近似cA1和由cA2,cD2重构后的近似R_cA1比较 subplot(2, 2, 2),plot(cA1,'r'),hold on,plot(R_cA1-50,'b'),legend('cA1','R_cA1-50'); % 二次分解下近似cA2和由cA3,cD3重构后的近似R_cA2比较 subplot(2, 2, 3),plot(cA2,'r'),hold on,plot(R_cA2-50,'b'),legend('cA2','R_cA2-50');
Figure 1:
Figure 2:
注:为更好显示重构效果,程序中将重构后的数据减去50,以使重构后的波形与原波形更好区分。
1)小波适合模拟突变信号——具有显著局部特征的信号;
2)小波处理信号的一般步骤:取样、分解、信号处理、重构;
3)一般采用离散滤波器对近似系数和小波系数进行操作;
4)分解算法中运用下取样,重构算法中运用上取样;
5)MATLAB的dwt、idwt函数能实现对信号的分解和重构。
小波与傅里叶分析基础(第二版)——电子工业出版社。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。