最近在学习数据挖掘的数据预处理一章中碰到了小波变换,之前并没有学习过有关信号处理的东西,所以参考网上的资料,对其做一个简单的了解,后面如果用得到,再做深入的学习。
本人是相关方面的小白,如有搬运理解的不对的地方,还望大家指正,感谢其他人辛勤的付出!!!

译自原文: A guide for using the Wavelet Transform in Machine Learning

基础概念:

  • 基(basis):在线性代数中我们都曾学过,它表示空间中的一系列线性独立的向量,空间中的其他向量都可以通过它的线性组合表示。在傅里叶变换中是无限长的三角函数基,在小波变换种是有限长的会衰减的小波基
  • 变换:不管是压缩、滤波还是图像处理,本质都是变换,就是基。例如傅里叶变换就是将信号用该空间的基的线性组合进行表示 •
  • 正交:在Hilbert空间种用来刻画两个向量的夹角,当内积为0时,两个向量正交,若g为Hilbert空间里的正交基的时候,内积为f向基上的正交投影 f ⋅ g = f T g = < f , g > = ∫ f ( t ) g ( t ˉ ) d t = f 1 g 1 + f 2 g 2 = ∣ f ∣ ∣ g ∣ c o s θ f\cdot g=f^Tg=<f,g>=\int f(t)g(\bar t)dt=f1g1+f2g2=|f||g|cos\theta fg=fTg=<f,g>=f(t)g(tˉ)dt=f1g1+f2g2=fgcosθ
    如果两个向量的内积为0,它们就是正交的;如果一个向量序列相互对偶正交,并且长度为1,它们就是正交归一化的。

通常我们使用傅里叶变换可以把信号从时域变换到频域。频谱中的峰表示信号中出现频率最多的频率。峰值越大越尖锐,信号中的频率就越普遍。频谱中峰值的位置(频率值)和高度(振幅)可以作为分类器(比如随机森林、梯度增强树等)的输入。

傅里叶变换在处理平稳信号时效果很好,所谓平稳是指信号中出现的频率和时间无关,如果一个信号中包含一个Xhz的频率,那么它应该在信号的任何地方都相等。

但是傅里叶变换在处理非平稳/动态的信号时 ,效果也不太好。而在真实生活中大多数的信号都是非平稳的信号,比生物电信号、股票市场的波动、传感器数据等等。在处理这样的非平稳信号时,小波变换就可以起到很好的作用。

From Fourier Transform and Wavelet Transform

傅里叶变换本质上是用在两个方向上都无限伸展的正弦曲线作为正交基函数,把周期函数展成傅里叶级数,把非周期函数展成傅里叶积分,利用傅里叶变换对函数做频谱分析,反映整个信号的时间频谱特性,较好的揭示平稳信号的特征。具体来说,傅里叶变换是通过将一个信号和一系列频率不同的正弦波相乘,就能够确定信号中存在哪些频率。如果信号中的某个频率和正弦波之间的点积(用于衡量两个向量/信号重叠的程度)导致振幅很大,就意味着这两个信号之间有很多的重叠,信号中就包含这个特定的频率。

但是傅里叶变换存在的一个问题就是,它只能告诉我们有哪些频率,却无法准确的告诉我们这些频率存在的具体的时间点。如下图所示,两个不同的时序信号使用傅里叶变换处理后,得到了右边对应的频谱图,从中我们可以看出虽然原始信号有很明显的差距,第一个信号中存在四个不同的频率(4、30、60、90)。这些频率在任何时刻都存在,而在下面的第二个信号中四种频率是依次出现的。有趣的是表现在频谱图中却很相近,因为他们的有一样的频率,表现在图上即有相同的四个峰。所以通过傅里叶变换,有时我们无法识别两个相差很大的信号 。


在这里插入图片描述

为了解决这个无法分辨频率出现时间的问题,提出了短时傅里叶变换(Short-Time Fouier Transform),它的主要思想是在使用傅里叶变换前,通过相同的滑动窗口将原始的信号分割成几部分相等长度的信号(可能有重叠部分),在这些小的部分,将其看成近似平稳的信号,然后再使用傅里叶变换,这样我们不仅可以知道信号中存在哪些频率,而且还知道它们出现的时间点。例如假设我们将其分割为10部分,如果后面使用的傅里叶变换在第二部分探查到一种特殊的频率,我们就可以根据这个信息知道它存在于原始信号的2/10和3/10的中间部分。

但是短时傅里叶变换也存在一个问题:我们无法确定使用多宽的窗口得到最好的效果。如果窗口窄会使得窗内的信号太短,对于频率的分析不够准确,频率的分辨率低;而窗口太大时域上又不太精细,时间的分辨率低。理论上分时间辨率高、频率分辨率低的适合窄窗口,而时间分辨率低、频率分辨率高的适合宽窗口,但是在短时傅里叶变换中,窗口的大小是固定的,所以它还是不能很好的满足非稳定信号的处理需求


在这里插入图片描述

为了解决短时傅里叶变换中出现的问题,就出现了小波变换(Wavelet Transform),它在时域和频域上都有相当高的分辨率,不仅可以告诉我们信号中存在哪些频率,同时还能告诉不同频率出现的具体时刻。这通过使用不同的缩放实现。

小波变换(wavelet transform,WT)是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够充分突出问题某些方面的特征,能对时间(空间)频率的局部化分析,通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节,解决了Fourier变换的困难问题,成为继Fourier变换以来在科学方法上的重大突破。


在这里插入图片描述

从上图我们可以看到不同的变换方式在时间分辨率和频率分辨率的差别,块的大小和方向表明了在时域和频域中我们能分辨的最小的特征。如图所示的原始信号中,时域的分辨率高,频域分辨率为零,意味着我们可以在时域中分辨出非常小的特征,而在频域中没有特征。而傅里叶变换在频域具有高分辨率,在时域具有零分辨率。短时傅里叶变换相对于上面的两种方法,它在时域和频域具有中等的分辨率。

而小波变换有如下的特点:

  • 对于小频率值,频域分辨率高,时域分辨率低
  • 对于大频率值,频域分辨率低,时域分辨率高

小波变换在频域分辨率和时域分辨率两者之间做了权衡:在与时间相关的特征上上,它在时域具有高分辨率;而在与频率相关的特征上,它在频域具有高分辨率。


How does the Wavelet Transform work?

傅里叶变换使用了一系列不同频率的正弦波去分析信号,即将原始信号表示为一系列正弦波的线性组合。而小波变换使用了一系列称为小波的函数,每个小波都具有不同的尺度。


在这里插入图片描述

从上图我们可以看出,小波相比于正弦波的最大的一个特点就是关于时间它有很好的局部性,而正弦波在时域上是没有这个特点的(它从负无穷延申到正无穷),这就决定了小波变换可以获得除频率信息外更加准确的时间信息。

借助小波变换在时间上具有局部性的这个优点,我们可以将信息的不同时间的部分与小波进行相乘,从信号的开始处,慢慢的移到信号的末尾,这个过程也成为卷积(convolution)。在我们对原始信号(也称母小波)进行这些操作后,可以对它进行缩放,使它变得更大,不断重复这个过程(原文中是GIF,可以看到在不同部分的卷积的变化情况)。


在这里插入图片描述

从上图我们可以看出一维信号的小波变换具有二维特征,这种二维小波变换的输出是以尺度图的形式表示信号的时间尺度。这个维度叫什么?由于傅里叶变换保留了频率,所以小波变换通常用尺度(scale)来表示。这就是为什么尺度图的两个维度是时间和尺度。如果频率比尺度更加直观的话,可以使用下面的公式将其转换成伪频率(pseudo-frequencies)。 f a = f c a f_{a}=\frac {f_{c}}{a} fa=afc

其中 f a fa fa就是最后的伪频率, f c fc fc是母小波的中心频率, a a a是缩放因子。

我们可以使用一个更大的尺度因子(更长的小波)来对应一个更小的频率,通过对小波在时域进行尺度变换,我们可以在频域中分析更小的频率(获得更高的分辨率)。反之通过使用更小的尺度,我们在时域中有了更多的细节。所以尺度基本上是频率的倒数(在PyWavelets中使用scale2frequency来完成尺度域到频率域的转换)。

小波变换的另一个优点是它可以很好的处理突变信号,对于傅里叶变换来来说,在处理突变信号时存在吉布斯效应(对于这种变换突然而剧烈的信号,即使只有一小段变换,傅里叶变换也不得不用大量的三角波去拟合)

在这里插入图片描述

而在小波变换中,只有小波函数和信号突变处重叠时,系数不为零。


在这里插入图片描述

The different types of Wavelet families

不同于傅里叶变换只有正弦波,小波变换有许多不同类型的小波。小波族之间的不同,来自于对小波紧凑性和平滑性的权衡,它方便了我们根据自己的任务,从中选择特定的小波,在信号中寻找特征。

在PyWavelets库中有如下的14种母小波,每种类型的小波都有不同的形状、平滑度和紧凑性,用于不同的目的。因为小波只需满足两个数学条件(归一化约束和正交约束),所以我们很容易构造一种新的小波。

    import pywt
    
    print(pywt.families(short=False))
    	['Haar', 'Daubechies', 'Symlets', 'Coiflets', 'Biorthogonal', 'Reverse biorthogonal', 'Discrete Meyer (FIR Approximation)', 'Gaussian', 'Mexican hat wavelet', 'Morlet wavelet', 'Complex Gaussian wavelets', 'Shannon wavelets', 'Frequency B-Spline wavelets', 'Complex Morlet wavelets']

小波必须有如下的的条件:
• 有限的能量
• 均值零
• 可以正交也可以不正交
• 可以是双正交的,也可以不是
• 可以是对称的,也可以不是
• 可以是负数,也可以是实数
• 如果它是复数,通常分为表示振幅的实部和表示相位的虚部
• 被归一化为单位能量

第一个条件意味着它在时间和频率上具有局部性的;它是可积的,小波与信号的内积始终存在。第二个条件意味着小波在时域中均值为零,在时域中频率为零时均值为零。这对于保证小波变换的可积性和计算小波变换的逆是必要的。


在这里插入图片描述

上图是几个不同的小波族的图,第一行包含四个离散小波,第二行包含四个连续小波。可在 Wavelet Properties Browser 查看不同的小波的情况。

在每个小波族中,可以有许多不同的子小波。可以通过系数的数量(如消失矩的数量)和分解的级别来区分小波的不同的子小波。下面的这个小波族称为“Daubechies”。从图中我们可以看到,在第一列中,我们可以看到一阶(db1)的Daubechies小波,在二阶(db2)的第二列中,一直到第五列中的第五阶。小波包含多达20阶(db20)的Daubechies小波。


在这里插入图片描述

阶数表示消失力矩的个数。所以db3有3个消失力矩db5有5个消失力矩。消去矩的个数与小波的逼近阶数和平滑度有关。如果一个小波有p个消失矩,它可以近似p - 1次多项式。

在选择小波时,我们还可以指出分解的级别。默认情况下,PyWavelets为输入信号选择可能的最大分解级别。分解的最大级别(参见pywt.dwt_max_level())取决于输入信号长度和小波的长度。

可以看出,随着消失矩数的增加,小波的多项式阶数增加,小波变得更加平滑。随着分解程度的增加,这个小波的样本数以增加的形式表示。

Continuous Wavelet Transform vs Discrete Wavelet Transform

小波变换有连续小波变换(Continuous Wavelet Transform)和离散小波变换(Discrete Wavelet Transform)两种风格。数学上,连续小波变换可以由下面的公式表示 X w ( a , b ) = 1 ∣ a ∣ 1 / 2 ∫ x ( t ) ψ ˉ ( t − b a ) d t X_{w}(a,b)=\frac{1}{|a|^1/2}\int x(t) \bar{\psi}(\frac {t-b}{a})dt Xw(a,b)=a1/21x(t)ψˉ(atb)dt

其中为 φ ( t ) φ(t) φ(t)连续母波, a a a是尺度因子, b b b为平移因子。尺度因子和平移因子的值是连续的,这意味着可能有无限多的小波。你可以用1.3,或1.31,1.311,和1.3111等因子来缩放母小波。

离散小波变换和连续小波变换主要的区别是:离散小波变换对尺度和平移因子使用离散值。缩放因子 a a a的幂增加为2( a = 1 , 2 , 4 … … a = 1,2,4…… a=1,2,4),平移因子 b b b增加整数值 ( b = 1 , 2 , 3 ) (b = 1,2,3) (b=1,2,3)

上面提到的离散小波变换在尺度和平移域上是离散的,但在时域上不是离散的。为了能够处理数字和离散信号,我们还需要在时域对小波变换进行离散化。这些形式的小波变换分别称为离散时间小波变换(Discrete-Time Wavelet Transform)和离散时间连续小波变换(Discrete-Time Continuous Wavelet Transform)。

More on the Discrete Wavelet Transform:The DWT as a filter-bank

在实践中,DWT总是作为一个过滤器库来实现。这意味着它被实现为高通滤波器和低通滤波器的级联。这是因为滤波器组是一种非常有效的方法,将一个信号分解成几个子频带。

在信号数据上使用DWT,我们从最小的尺度开始,小尺度对应高频,这意味着我们首先分析高频行为。在第二阶段,尺度随大小为2的因子的增大而增大(频率随因子的减小而减小),我们分析的是最大频率的一半左右的行为。在第三阶段,尺度因子为4,我们正在分析最大频率的四分之一左右的频率行为。这样一直进行下去,直到达到最大分解水平。

那么什么是最大分解水平?为了理解这一点,我们还应该知道,在随后的每个阶段,信号中的样本数量都减少了一倍。在较低的频率值,你将需要更少的样本,以满足奈奎斯特率,所以没有必要保持较高的样本数量的信号;它只会导致转换的计算开销。由于这种向下采样,在这个过程的某个阶段,我们的信号中样本的数量将小于小波滤波器的长度,我们将达到最大的分解水平。
举个例子,假设我们有一个频率高达1000赫兹的信号。在第一个阶段,我们把信号分成低频部分和高频部分,即0- 500hz和500- 1000hz。在第二阶段,我们取低频部分,再次将其分为两部分:0-250赫兹和250-500赫兹。在第三阶段,我们将0-250赫兹的部分分为0-125赫兹的部分和125-250赫兹的部分。这种情况会一直持续下去,直到我们达到了所需的精化水平,或者直到我们的样本耗尽为止。

通过将DWT应用于chirp signal,我们可以很容易地将这个想法形象化。chirp signal是具有动态频谱的信号;频谱随时间而增加。信号的开始包含低频值,信号的结束包含高频值。这使得我们很容易通过简单地观察时间轴来直观地看到频谱的哪一部分被过滤掉了。


在这里插入图片描述
在这里插入图片描述

Sym 5小波(1 - 5级)的近似和细节系数应用于chirp signal信号(1 - 5级)。在左边,我们可以看到一个示意图表示的高通和低通滤波器应用于信号的每一级。其中还需知道如下:
• 在PyWavelets中,DWT由pywt.dwt()实现
• DWT返回两组系数;近似系数和细节系数
• 近似系数表示小波变换的低通滤波器(平均滤波器)的输出
• 细节系数表示小波变换的高通滤波器(差分滤波器)的输出
• 通过对上一级小波变换的近似系数进行小波变换,得到下一级小波变换
• 每下一层,原始信号的采样率也下降2倍

DWT作为过滤器库的含义;在随后的每一级,近似系数被划分为较粗的低通和高通部分,并在低通部分再次应用DWT。我们可以看到,我们的原始信号现在被转换成几个信号,每个信号对应不同的频段。这种在不同尺度上分析信号的思想也称为多分辨率/多尺度分析,以这种方式分解信号也称为多分辨率分解,或子带编码。

总体来说小波变换具有如下的优点:
• 可以覆盖整个频域
• 通过选择合适的滤波器,可以极大的减小或去除所提取不同特征之间的相关性
具有“变焦”的特性,可以根据频率的高低调整窗口,在低频可用高频率分辨率和低时间分辨率,在高频段可用低频率分辨率和高时间分辨率


形象易懂讲解算法I——小波变换
小波变换
完美通俗解读

小波变换(wavelet
transform)的通俗解释(一)

小波变换

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐