一维离散小波分析

数据挖掘流程

在数字信号处理中常常需要同时获取信号的时域和频域特征,但窗口傅里叶变换不可能在时间和频率两个空间同时以任何精度逼近被测信号。但小波分析提供了一种灵活性很高的方法,可以根据需要选取时间或者频率的精度,可以在多分辨率下进行分解信号的小波分析。在此选择工业上应用广泛的一维离散小波分析(1-D Discrete Wavelet Analysis)。

算法原理

离散小波变换定义

与傅里叶序列展开相似,小波序列展开将一个连续变量函数映射成一系列数序列。如果待展开函数是一个数字序列,如连续函数f(x)的抽样值,得到的系数就称为f(x)的离散小波变换(DWT),由连续小波变换定义的序列展开变为DWT变换对:

python 实现离散小波变换 离散小波分析_小波变换

python 实现离散小波变换 离散小波分析_小波分析_02

分别称作近似系数和小波系数。

python 实现离散小波变换 离散小波分析_ wavelet_03

分别为不同尺度和不同位置下的尺度函数和小波函数。j为尺度的阶数,j越大,尺度越小,相当于频率越高,越靠近细节。k为位置的偏移量。

 

快速小波变换算法(FWT)

一维离散小波变换主要用在信号处理中,实现的算法一般是mallat算法,即先对较大尺度的信号进行小波变换,再选取其中的低频部分在原尺度的1/2尺度上再进行小波变换。这种算法被称为快速小波变换的算法(FWT)。

给定一个长度为N的信号,那么整个算法在至多 步内完成,第一步从原始信号s开始,产生两组参数,一组是作用低通滤波器

python 实现离散小波变换 离散小波分析_python 实现离散小波变换_04

 

重复以上做法,把其中的低频信号部分作为信号再次分解,直到所需要的层数。

python 实现离散小波变换 离散小波分析_高通滤波_05

 

 

 

Matlab的算法实现

Matlab调用的基本方式

第一种调用方式是根据给定的小波’vname’求信号X的多尺度分解,分解的层数为N,N必须是一个正整数,第二种调用方式则是求信号X在给定的低通滤波器 和高通滤波器 下进行多尺度分解,分解层数也是N。这个函数返回一个分解向量C和长度向量L。C和L记录如下图。

python 实现离散小波变换 离散小波分析_小波变换_06

 

在Matlab中,离散信号小波变换分解算法主要使用以下常用命令:

dwt       用于信号的单层分解

wavedec   用于信号的多层分解

wmaxlev   在多层分解前求最大的分解层数

Matlab脚本使用实例

以下是通过wavedec函数进行的一维离散小波变换的具体过程和结果(完全分解图)

python 实现离散小波变换 离散小波分析_小波分析_07

python 实现离散小波变换 离散小波分析_python 实现离散小波变换_08

分解后的信号是平铺在数组C中的,每段信号的长度有数组L标示。

Matlab小波工具箱使用实例

选择App中Wavelet Analyzer中的Wavelet 1-D。采用示例with ab3 at level 5 ->sum of sines 得到完全分解图和树形模型图。

python 实现离散小波变换 离散小波分析_ wavelet_09

python 实现离散小波变换 离散小波分析_ wavelet_10


写在最后:这是我之前做的一些技术初步调研,主要目的是了解和展示一些技术,并进行了一些个人总结,其中必然有疏漏。其中引用了不少论文,百科和他人博客,但因为时间太久大都忘了出处,如果侵权提示后删除