小波分析之多分辨率分解和重构过程详解


前言

傅里叶级数的一个缺点是,它的构造块是无始无终的周期性正弦波和余弦波。这使得该方法适合于滤除或压缩那些具有近似周期性的波动信号。而面对那些具有显著局部特征的信号,正弦波和余弦波就无能为力了。

幸好还有另外一类构造块,称为小波,它适合模拟突变信号——具有显著局部特征的信号

本文首先介绍了小波处理信号的一般步骤;之后分别对分解算法、重构算法进行了详细描述;最后,基于MATLAB展示了信号的分解和重构过程及效果


一、小波处理信号的一般过程

1)取样:这是一个预处理步骤。若信号连续,那么必须以能够捕获原信号必要细节的速率取样。不同的应用决定了不同的取样率。如:原信号的细节频率为20kHz,由Nyquist采样定理,此时的取样率至少应为细节频率的两倍,即40kHz,才能保证细节频率不失真。

2)分解:信号取样后,选择一个最高级近似系数 f j ∈ V j f_j∈V_j fjVj,以便能最佳的逼近 f f f。之后,通过多分辨率分解算法,将信号进行逐级分解。该步骤的输出是各级别的小波系数(细节系数)和最低级别(或自定义的合适级别)的近似系数。该系数集就是下一步信号处理中要处理的对象。

3)信号处理:通过舍弃非显著系数可以压缩信号,或者以某种方式使信号滤波或去噪。该步骤的输出是修改过的系数集(细节系数集),可被存储或立即重构以重组经过处理的信号。但在某些情况下,原信号不再有用,可以舍弃,如:奇异性检测。

4)重构:把经过信号处理步骤修改过的系数集(细节系数集),应用多分辨率重构算法,进行逐级重构,该步骤输出最高级近似系数


二、分解算法

1. 分解迭代

首先,基于取样率和进行什么样的多分辨率分析确定 f f f的近似空间 V j V_j Vj,其能最佳的反映 f f f的各种信息。之后选择一个 f j ∈ V j f_j∈V_j fjVj,以便能最佳的逼近 f f f

f j f_j fj开始,逐级分解为较低级别的近似部分 f j − 1 f_{j-1} fj1小波部分(细节部分) w j − 1 w_{j-1} wj1,即有 f j f_j fj = f j − 1 f_{j-1} fj1 + w j − 1 w_{j-1} wj1。如此,对 f j − 1 f_{j-1} fj1 f j − 2 f_{j-2} fj2采用相同步骤,并一直进行下去,如下图所示,最终终止于第0级分解在这里插入图片描述
为进行分解,需要对近似系数和小波系数进行操作采用离散滤波器实现形式

2. 多分辨率分解算法

如:把一个信号离散化为 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)0k281

下取样:对原信号每隔一个点取一个样本后得到,即舍弃原信号序列中奇数项部分。
定义下取样算子 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=(...,x2,x1,x0,x1,x2,...),那么其下取样序列为
D x = ( . . . , x − 2 , x 0 , x 2 , . . . ) Dx = (...,x_{-2},x_0,x_2,...) Dx=(...,x2,x0,x2,...)

通过离散滤波器(卷积算子),来描述迭代步骤。滤波器 h h h l l l,分别为分解高通和分解低通滤波器。
卷积形式: a j − 1 = D ( l ∗ a j ) a^{j-1} = D(l*a^j) aj1=D(laj) b j − 1 = D ( h ∗ a j ) b^{j-1} = D(h*a^j) bj1=D(haj)
算子形式: a j − 1 = D ( L ( a j ) ) a^{j-1} = D(L(a^j)) aj1=D(L(aj)) b j − 1 = D ( H ( a j ) ) b^{j-1} = D(H(a^j)) bj1=D(H(aj))

注:
① 通过 H ( x ) = h ∗ x H(x) =h*x H(x)=hx L ( x ) = l ∗ x L(x) =l*x L(x)=lx,定义两个离散滤波器(卷积算子) H H H L L L,并记 x = a j x =a^j x=aj
② 离散滤波器和下取样算子不依赖于 j j j,所以存储需求量小,而且由于卷积运算并不耗时,整个迭代过程既快又有效。

在这里插入图片描述


三、重构算法

1. 重构迭代

一旦信号分解完毕,就可以通过修改某些 w j ′ w_{j'} wj,实现对信号的处理。如果想要滤除信号中的噪声,那么 f f f中的 w j ′ w_{j'} wj中相应于不想要的频率部分可被舍弃,结果使得噪声被显著减小。如果想要对原信号进行数据压缩,可将幅值较小的 w j ′ w_{j'} wj分量舍弃,这不会显著的改变原信号特征,但会获得极大的数据压缩效果。当 w j ′ w_{j'} wj分量被修改完成之后,需要一个重构算法,重新组装被滤波或被压缩的信号,这个过程即为信号的重构,算法流程如下:
在这里插入图片描述

2. 多分辨率重构算法

对近似系数和小波系数采用离散滤波器实现形式进行重构

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(k2l)alj1+Σh(k2l)blj1

这几乎就是两个卷积之和,唯一区别是卷积的指标是 k − l k-l kl而不是 k − 2 l k-2l k2l,即上式是一个奇数( l ‾ ( k − ( 2 l + 1 ) ) \overline{l}_{(k-(2l+1))} l(k(2l+1)))缺失的卷积。可以利用上取样算子简单地用0乘奇数项而复原回来。

上取样:把0均匀的分散在序列 a l j − 1 a^{j-1}_{l} alj1中,形成一个在所有的奇数位置为0的新序列原来的每个非零项给定一个新的偶数指标,这只要把原有的指标倍乘即可,例如, a − 1 j − 1 a^{j-1}_{-1} a1j1,现在的下标是-2,上取样定义如下:
x = ( . . . , x − 2 , x − 1 , x 0 , x 1 , x 2 , . . . ) x = (...,x_{-2},x_{-1},x_0,x_1,x_2,...) x=(...,x2,x1,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=(...,x2,0,x1,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=0k(Ux)k=xk/2k

通过离散滤波器(卷积算子),来描述迭代步骤。滤波器 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(aj1))+h(U(aj1))
算子形式: 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(aj1))+H(U(bj1))

注:
① 通过 H ‾ ( x ) = h ‾ ∗ x \overline{H}(x) =\overline{h}*x H(x)=hx L ‾ ( x ) = l ‾ ∗ x \overline{L}(x) =\overline{l}*x L(x)=lx,定义两个离散滤波器(卷积算子) H ‾ \overline{H} H L ‾ \overline{L} L,并记 x = U ( a j − 1 ) x =U(a^{j-1}) x=U(aj1)
② 同分解算法一样,离散滤波器和下取样算子不依赖于 j j j,所以存储需求量小,而且由于卷积运算并不耗时,整个迭代过程既快又有效。

在这里插入图片描述


四、信号的分解和重构(MATLAB)

1. 分解和重构程序

代码如下:

% 导入原始数据 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');

2. 效果展示

Figure 1:
在这里插入图片描述
Figure 2:
在这里插入图片描述

注:为更好显示重构效果,程序中将重构后的数据减去50,以使重构后的波形与原波形更好区分。


总结

1)小波适合模拟突变信号——具有显著局部特征的信号;
2)小波处理信号的一般步骤:取样、分解、信号处理、重构
3)一般采用离散滤波器对近似系数和小波系数进行操作;
4)分解算法中运用下取样重构算法中运用上取样
5)MATLAB的dwt、idwt函数能实现对信号的分解和重构


参考

小波与傅里叶分析基础(第二版)——电子工业出版社。

猜你喜欢

转载自blog.csdn.net/m0_64770246/article/details/124538001