快速傅里叶变换需要操作,而快速小波变换需要。但是,具体来说,FWT 计算什么?
尽管经常将它们进行比较,但 FFT 和 FWT 似乎是苹果和橘子。据我了解,将 STFT(随着时间的小块的 FFT)与复杂的 Morlet WT进行比较会更合适,因为它们都是基于复杂正弦曲线的时频表示(如果我错了,请纠正我)。这通常用这样的图表来表示:
(另一个例子)
左边显示了 STFT 是如何随着时间的流逝而堆叠在一起的一堆 FFT(此表示是频谱图的来源),而右边显示了二元 WT,它在高频处具有更好的时间分辨率和更好的频率低频分辨率(这种表示称为scalogram)。在此示例中,是垂直列数 (6),单个个系数的单行。总共有 8 个 FFT,每个有 6 个点,或时域中的 48 个样本。
我不明白的是:
FWT 操作计算多少个系数,它们在上面的时频图中位于哪里?
哪些矩形被单次计算填充?
如果我们使用两者来计算一个等面积的时频系数块,我们会得到相同数量的数据吗?
FWT 是否仍然比 FFT 更有效?
使用PyWavelets 的具体示例:
In [2]: dwt([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[2]:
(array([ 0.70710678, 0. , 0. , 0. ]),
array([ 0.70710678, 0. , 0. , 0. ]))
它创建了两组 4 个系数,因此它与原始信号中的样本数相同。但是这 8 个系数和图中的瓦片有什么关系呢?
更新:
实际上,我可能做错了,应该使用wavedec()
进行多级 DWT 分解:
In [4]: wavedec([1, 0, 0, 0, 0, 0, 0, 0], 'haar')
Out[4]:
[array([ 0.35355339]),
array([ 0.35355339]),
array([ 0.5, 0. ]),
array([ 0.70710678, 0. , 0. , 0. ])]