对于非平稳信号,傅里叶变换不能很好反映出其频率随时间的变化。因为我们在应用傅里叶变换时,计算出的每个频率分量都是对应于整个时间轴(或有信号的时间范围),这就使得原始信号的时间信息丢失了,不能分析出频率随时间的变化,也不能定位出某一时刻发生的突变。
下图的三个信号在时域上有很大不同,第一张是不同频率信号相加混合在一起,后两张包含与第一张相同的频率成分,不过分时出现。但从傅里叶频谱上看,三者差别并不大,尤其是后两个非平稳信号,我们无法从频谱上区分它们。
这种局限性也表现在突变信号上,因为突变信号本身也是非平稳信号。比如单位阶跃信号u(t),就是如此简单的信号,做傅里叶变换时也不得不使用取极限等复杂操作。因为u(t)在时域上只在一个时间点上变化了一下,你傅里叶变换非要从整个时间轴考虑问题,你不复杂谁复杂?
为了弥补FT的不足,把整个时间域分解成无数个等长的小过程(加窗),每个过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率。
但此时仍然有问题,那就是窗的宽度。窄窗口时间分辨率高、频率分辨率低;宽窗口时间分辨率低、频率分辨率高(如下图)。所以,对于时变非稳态信号,高频部分适合用小窗,低频部分适合用大窗。然而,在一次STFT中,窗口的宽度是固定。所以STFT也有其局限性,这就引出了我们的小波变换。
小波变换干脆直接把傅里叶变换的基给换了,将无限长的三角函数基换成了有限长的会衰减的小波基,它的能量有限,都集中在某一点附近,而且积分的值为零。傅里叶变换,变量只有w,而小波变换则有尺度a和平移量b,尺度对应于频率,平移量对应于时间,所以小波变换可以用于时频分析,得到信号的时频谱。下面是小波函数的一般形式。
(1)把小波w(t)和原函数f(t)的开始部分进行比较(实际上就是作內积),计算系数C。系数C表示该部分函数与小波的相似程度。
(2)把小波向右移k单位,得到小波w(t-k),重复1。重复该步骤直至函数f结束.
(3)扩展小波w(t),得到小波w(t/2),重复步骤1,2.
(4)不断扩展小波,重复1,2,3
变换公式如下,通过参数a定位频率,通过参数b定位时间。
变换后可以得到如下的标度图,两个坐标轴分别为time和Scales(即b和a)Lower Scales对应高频成分,High Scales对应低频成分。
在CWT中,参数a和b都是连续变化的,可以有无穷多个取值,但这种计算对于现代计算机来说是无法在有限时间内完成的。所以我们把a和b根据一定的规则取成离散的,这就是DWT。
根据a和b抽取方式的不同,DWT有两种,分别是冗余小波变换和多重解析度分析(MRA)
a以指数扩张,
因为对于宽小波我们希望以更大的步长去平移,故可以定义
由此这种形式的小波函数和变换公式分别由下面两式给出
在MRA中,尺度和位置参数按照2的幂选取,并且进行了下采样,所以这种DWT更加高效和准确。小波函数和变换公式:
基于多解析理论(multi resolution theory),我们可以用FIR数字滤波器对信号进行小波分解,分解成为低频部分和高频部分。这在图像处理中很有用处,具体实现可以查看我的另一片文章→图像处理与小波变换-Python实现
一级分解:(因为进行的是下2采样,所以1000个数据点得到500个细节系数和500个近似系数)
对一级分解得到的低频部分还可以进一步分解,最大分解级数log2N
下表展示了常见的小波函数及其对应于Matlab中的函数名称,其中最简单的就是Haar小波
下表是根据对小波函数的分类,分为是否带有filters、是否紧凑支持、正交or双正交等:
参考:
https://blog.csdn.net/baidu_27643275/article/details/84826773
https://blog.csdn.net/qq_30815237/article/details/89704855
https://www.bilibili.com/video/BV18y4y1y7Uf