小波变换计算哪些时频系数?

信息处理 频率 fft 小波
2021-12-27 22:35:58

快速傅里叶变换需要操作,而快速小波变换需要但是,具体来说,FWT 计算什么?O(NlogN)O(N)

尽管经常将它们进行比较,但 FFT 和 FWT 似乎是苹果和橘子。据我了解,将 STFT(随着时间的小块的 FFT)与复杂的 Morlet WT进行比较会更合适,因为它们都是基于复杂正弦曲线的时频表示(如果我错了,请纠正我)。这通常用这样的图表来表示:

显示 FFT 和 WT 的系数如何对应于时频平面的网格

另一个例子

左边显示了 STFT 是如何随着时间的流逝而堆叠在一起的一堆 FFT(此表示是频谱图的来源),而右边显示了二元 WT,它在高频处具有更好的时间分辨率和更好的频率低频分辨率(这种表示称为scalogram)。在此示例中,是垂直列数 (6),单个个系数的单行总共有 8 个 FFT,每个有 6 个点,或时域中的 48 个样本。NO(NlogN)NN

我不明白的是:

  • FWT 操作计算多少个系数,它们在上面的时频图中位于哪里? O(N)

  • 哪些矩形被单次计算填充?

  • 如果我们使用两者来计算一个等面积的时频系数块,我们会得到相同数量的数据吗?

  • 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.        ])]
4个回答

您是正确的,FWT 最好被视为 STFT 的“表亲”,而不是 FT。实际上,FWT 只是 CWT(连续小波变换)的离散采样,因为 FFT/DFT 是傅里叶变换的离散采样。这似乎是一个微妙的点,但在选择如何离散化变换时它是相关的。

CWT 和 STFT 都是信号的冗余分析。换句话说,您拥有的“系数”(在离散情况下)比完全表示信号所​​需的要多。然而,傅立叶变换(或者说只使用一个尺度的小波变换)将信号从 -infinity 积分到 +infinity。这对现实世界的信号不是很有用,所以我们将变换截断(即窗口)到更短的长度。信号的窗口化改变了变换——你乘以时间/空间中的窗口,所以在变换空间中你有窗口变换与信号变换的卷积。

在 STFT 的情况下,窗口(通常)始终具有相同的长度(非零范围),并且与频率无关(您将 10 Hz 信号与 10 kHz 信号的宽度相同)。所以你得到了像你画的那样的矩形网格频谱图。

CWT 内置了这种窗口,因为随着尺度减小(如更高的频率),小波变得更短(在时间或空间上)。因此,对于较高的频率,有效窗口的持续时间较短,您最终会得到一个看起来像您为 FWT 绘制的比例图。

您如何离散化 CWT 在某种程度上取决于您,尽管我认为在移位和比例中都有最小的采样来完全表示一个信号。通常(至少我是如何使用它们的),对于最低比例(最高频率),您将在所有班次位置(时间/空间)进行采样。随着规模越来越大(频率越来越低),您可以减少采样频率。基本原理是低频变化不会那么快(想想钹碰撞与低音吉他 - 钹碰撞的瞬态非常短,而低音吉他需要更长的时间才能改变)。事实上,在最短的范围内(假设您在所有移位位置进行采样),您可以获得信号的完整表示(您可以仅使用此比例的系数重建它)。我不太确定抽样规模的基本原理。一世' 已经看到这建议为对数,(我认为)较短的刻度之间的间距更近。我认为这是因为较长尺度的小波具有更广泛的傅立叶变换(因此它们“拾取”更多频率)。

我承认我并不完全了解 FWT。我的直觉是它实际上是移位/比例的最小采样,而不是冗余表示。但是我认为你失去了在短时间内分析(和处理)信号的能力,而不会引入不需要的伪影。我会阅读更多关于它的信息,如果我学到任何有用的东西,请回来报告。希望其他人愿意发表评论。

考虑 Haar 小波情况。快速小波变换递归地细分您的信号并每次计算两半的和和差。差值是当前小波的变换幅度,总和返回给调用者以计算具有一半频率的扩张小波的变换幅度。因此,FWT 使用您给出的图表中描述的模式覆盖时频平面。

请注意,您提供的图表有点误导。他们真正想告诉你的是,你得到一个最低频率的样本,两个这个频率的样本,四个这个频率的四倍样本,等等。每个小波的时频特性不会覆盖它们的瓦片。实际上,每个小波将覆盖无限区域,因为它们具有紧凑的支持,因此必须在频率方面完全离域。所以你应该只考虑这些瓷砖的中心。

此外,FWT 需要一个离散小波,它必须遵守比 CWT 的连续小波更严格的可接受性标准。因此,离散小波的时频特性通常很糟糕(例如,Daubechies 小波要么充满尖锐的特征,要么具有不断变化的频率),并且在 FWT 的背景下,时频平面的效用大大降低。然而,连续小波用于计算信号的时频表示。

你的参考有它:

基于小的有限波或小波的正交基的系数序列。

更多信息,您可能会喜欢DWT 页面其中介绍了 Haar 小波、Daubechies 小波等。它指出了如何

  • 小波有位置——(1,1,–1,–1) 小波对应“左侧”与“右侧”,而最后两个小波在左侧或右侧都有支撑,一个是平移的另一个。
  • 正弦波没有位置——它们遍布整个空间——但确实有相位——第二波和第三波是彼此的平移,对应于相位差 90°,如余弦和正弦,它们是离散的版本.

如果您现在想了解连续小波或复小波,而不是离散小波,则可以从小波系列开始。

除了维基百科,一本教科书和一门课程可能对你有好处。

基本上,FFT(快速傅里叶变换)和 FWT(快速小波变换)是离散化变换的两种实现,源于连续变换,转为离散,比标准矩阵实现快得多O(N2)(对于一维数据)。一种更适合谐波信号,一种更适合瞬态信号(或多或少)。

请注意,FWT 不需要是正交的,并且存在其他快速版本,例如提升方案还要注意,这些估计是渐近的,并且对于短数据来说它们不能容易地进行比较。换一种说法,O(N)不是“必须更快”比O(Nlog(N))在非渐近状态下,因为常数在O()可以改变交易。而在更高维度上,事情并不是那么简单。

从通用的窗口 STFT(连续形式)开始。如果插入单位高度的无限窗口,则可以将傅里叶变换恢复为特殊情况。您可以离散化(并获得 DFT)并使其快速(并获得 FFT)。

从 CWT(连续形式)开始。连续 CWT 承认数量惊人的潜在小波形状。它们只能通过尊重某些“海森堡”不等式的采样模式(时间或规模)精确离散化:每单位表面一个样本。这些模式取决于小波。在大多数情况下,这些模式会产生一个冗余的离散 CWT,并产生一个小波框架。

有些人希望它是非冗余的,具有二元规模 (DWT)。只有极少数的小波(仍然是无限数量,但您无法偶然找到它们)允许这样做。第一个是 Haar、Franklin 和 Meyer 小波。如果然后将小波支持限制为有限,那么很长一段时间以来,Haar 都是唯一的。从“自然连续小波”中获得正交小波几乎是不可能的,这就是构建Daubechies的小波以及后来的SymmletsCoiflets的原因。那些形状怪异的小波没有像 Morlet 小波那样漂亮而简单的公式。

但是,它们可以通过过滤器和下采样来实现,而不是积分。并通过一些巧妙的技巧,他们最终在 O(N)算法。你有 FWT。因此,我有点不同意:

实际上,FWT 只是 CWT 的离散采样

DWT(或 FWT)是精确的,就像 DFT/FFT。大多数其他离散化 CWT(带有任何小波)大致如此(如果您有足够的冗余,则不会造成太大伤害)。

所以:

  • 一个单一的 FWT 操作计算不同级别的所有系数。DWT 为您提供k每个矩形的点,你可以想象它在中心,但这是一个约定。基本上,这是您未知的连续 CWT 平面的样本:k每个“单位”表面的样本。每个点“代表”整个矩形,有点像一个 DFT 点代表他周围的整个 DFT bin。没有完全正确,但这就是想法。k由信号长度给出。在您的图形中,假设您有8之间的点04T. 一级 DWT 为您提供2×4点(一个低通,一个高通,下采样2)。这就是你第一次尝试 Python 时得到的结果。4来自高频过滤为您的每个平面矩形提供一个样本[ω/2,ω],最高频率。另一个4点被分解为2×2又是一低通,一高通。与上述类似,2给你两个正方形的每一个样本。剩下的低通/高通,你得到一个样本[ω/8,ω/4]. 最后一个样本是最终的低通系数,放在最左边的高矩形中。这就是你最终的 Python 代码所拥有的:[1,1,2,4]系数
  • 矩形将用 CWT 填充。使用 DWT,它们没有被填充,只有k每个样本,就像 DFT bin 没有“填充”一样。
  • FWT 渐近地减少+×比 FFT。这总是在计算上更有效率吗?不确定,取决于中的常数O(N). 用于正弦分析?FWT 从来都不是很好(尤其是由于有限长度的过滤器)。但是对于图像的紧凑表示,例如在 JPEG2000 中,它们可能非常好。在那里,您可以使用稍快的方案,例如提升方案。

下图揭示了 Haar 小波的连续版本 连续 Haar 小波

可以被采样成一个正交的离散小波: 离散临界 Haar 小波

请注意,有时使用 FFT 计算一些离散小波,尤其是长小波(如样条):)