小波变换

  • 傅里叶变换(Fourier Transform,FFT)
  • 短时傅里叶变换(Short-time Fourier Transform,STFT)
  • 小波变换(Wavelet transform,WT)



傅里叶变换和小波变换之间的关系


1. 傅里叶变换
2. 短时傅里叶变换
3. 小波变换

傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。下面我就按照傅里叶—短时傅里叶变换—小波变换,讲一下为什么会出现小波这个东西、小波究竟是怎样的思路。(假装很明白)

傅里叶变换(Fourier Transform,FFT)

关于傅里叶变换的概念就不说了(baidu),傅里叶变换最广泛的应用是信号分析,分析信号的频谱。

缺点:“对非平稳信号,具有局限性”

平稳和非平稳信号:

光谱小波变换 python 小波变换频谱_小波变换


光谱小波变换 python 小波变换频谱_光谱小波变换 python_02


图1、2 是频率始终不变的平稳信号,FFT后,可以在频谱上看到清晰的四条线,信号包含四个频率(10Hz、25Hz、50Hz、100Hz)成分;图3、4 则是频率随着时间改变的非平稳信号,它们同样包含相同频率的四个成分。

平稳信号和非平稳信号同样做FFT变换后,这四个在时域上有巨大差异的信号,频谱(幅值谱)却一致。尤其是下边两个非平稳信号,我们从频谱上无法区分它们,因为它们包含的四个频率的信号的成分确实是一样的,只是出现的先后顺序不同。

可见,傅里叶变换对处理非平稳信号有天生缺陷。它只能获取一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻并无所知。因此时域相差很大的两个信号,可能频谱图一样,然而平稳信号大多是人为制造的,生物界的大量信号几乎都是非平稳的,所以在生物医学信号分析等领域中,基本看不到单纯傅里叶变换这样的方法。

短时傅里叶变换(Short-time Fourier Transform,STFT)

最简单可行的方法就是——加窗。“把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再对每个小过程进行傅里叶变换,就知道在哪个时间点上出现了什么频率了。” 即短时傅里叶变换。

来咯来咯,最简单粗暴的图(chuangkou)

光谱小波变换 python 小波变换频谱_光谱小波变换 python_03


但是窗口选择的宽窄关系依然对其有影响

光谱小波变换 python 小波变换频谱_光谱小波变换 python_04


光谱小波变换 python 小波变换频谱_光谱小波变换 python_05


窗口太窄,窗口内的信号太短,会导致频率分析不够精准,频率分辨率差 即(频域分辨率差);

窗口太宽,时域上又不够精细,时间分辨率低 即(时域分辨率差)。

一句很有逼格的话来形容:鱼和熊掌不可兼得

所以窄窗口时间分辨率高、频率分辨率低,宽窗口时间分辨率低、频率分辨率高。对于时变的非稳态信号,高频适合小窗口,低频适合大窗口。然而STFT的窗口是固定的,在一次STFT中宽度不会变化,所以STFT还是无法满足非稳态信号变化的频率的需求。

小波变换(Wavelet transform,WT)

如果让窗口大小变起来,多做几次STFT可以吗?!yes,没错,小波变换就是这样的思路。

但事实上小波并不是这么做的,如果小波变换“只是根据算法,加不等长的窗,对每一小部分进行傅里叶变换”就不准确了。小波变换并没有采用窗的思想,更没有做傅里叶变换。至于为什么不采用可变窗的STFT呢,我认为是因为这样做冗余会太严重,STFT做不到正交化,这也是它的一大缺陷。

于是小波变换的出发点和STFT还是不同的。STFT是给信号加窗,分段做FFT;而小波直接把傅里叶变换的基给换了——将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率,还可以定位到时间。

【解释】

傅里叶变换:傅里叶变换可以得到信号各个频率成分,即:傅里叶变换把无限长的三角函数作为基函数:

光谱小波变换 python 小波变换频谱_小波变换_06


这个基函数会伸缩、会平移(其实本质并非平移,而是两个正交基的分解)。对应高频,缩得窄;对应低频,伸得宽。然后这个基函数不断和信号做相乘。某一个尺度(宽窄)下乘出来的结果,就可以理解成信号所包含的当前尺度对应频率成分有多少。于是,基函数会在某些尺度下,与信号相乘得到一个很大的值,因为此时二者有一种重合关系。那么我们就知道信号包含该频率的成分的多少。这一步其实是在计算信号和三角函数的相关性

光谱小波变换 python 小波变换频谱_光谱小波变换 python_07


光谱小波变换 python 小波变换频谱_傅里叶变换_08


这两种尺度能乘出一个大的值(相关度高),所以信号包含较多的这两个频率成分,在频谱上这两个频率会出现两个峰。这是粗浅意义上的傅里叶变换原理。

如前边所说,小波做的改变就在于,将无限长的三角函数基换成了有限长的会衰减的小波基。

光谱小波变换 python 小波变换频谱_傅里叶变换_09


why叫小波呢,因为…是很小的波(简单皮一下)

光谱小波变换 python 小波变换频谱_傅里叶变换_10


由公式可以看出,不同于傅里叶变换,变量只有频率ω,小波变换有两个变量:尺度a(scale)和平移量 τ(translation)。尺度a控制小波函数的伸缩,平移量 τ控制小波函数的平移。尺度就对应于频率(反比),平移量 τ就对应于时间。

光谱小波变换 python 小波变换频谱_时域_11


当伸缩、平移到这么一种重合情况时,也会相乘得到一个大的值。这时候和傅里叶变换不同的是,这不仅可以知道信号有这样频率的成分,而且知道它在时域上存在的具体位置。当在每个尺度下都平移着和信号乘过一遍后,就知道信号在每个位置都包含哪些频率成分。(有了小波,再也不怕非稳定信号啦!时 and 频兼得)

傅里叶变换只能得到一个频谱,小波变换却可以得到一个时频谱。

对于突变信号,傅里叶变换存在吉布斯效应,我们用无限长的三角函数怎么也拟合不好突变信号:

光谱小波变换 python 小波变换频谱_时域_12


对于突变信号,小波变换可以解决吉布斯效应:

光谱小波变换 python 小波变换频谱_傅里叶变换_13


以上是小波变换的简单描述,如有不妥之处,请求指正!