快速傅立叶变换执行$ \ mathcal O(N \ log N)$操作,而快速小波变换执行$ \ mathcal O(N)$。但是,FWT具体计算什么呢?

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



(另一个示例)

左图显示了STFT是一堆FFT的方式随着时间的流逝彼此堆叠(此表示法是声谱图的起点),而右侧显示了二进线WT,它在高频时具有更好的时间分辨率,在低频时具有更好的频率分辨率(此表示称为比例图)。在此示例中,STFT的$ N $是垂直列数(6),并且单个$ \ mathcal O(N \ log N)$ FFT运算从$ N $个样本计算出一行$ N $系数。总共是6个点的8个FFT,或时域中的48个采样。

我不明白的是:


单个$ \ O(N)$ 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.        ])]


评论

为了更好地理解这些小波分解的工作原理,一个有用的工具将是能够对现实信号进行处理:例如音频信号(我在这个方向上有一个问题dsp.stackexchange.com/问题/ 12694 / stft-and-dwt-wavelets)

@endolith是否仍要求您提出问题?如果是这样,我可以添加其他提示

@LaurentDuval是的,它仍然打开,我还是不明白。我可能会感到困惑,因为CWT使用的是Morlet之类的东西,而DWT使用的只是Haar或Daubechies之类的东西。我不确定快速FWT是仅Haar还是可以使用其他类型的小波。

@ndolith对此发表评论:连续的CWT承认数量惊人的潜在小波形状。只能使用尊重某些“海森堡”不等式的采样模式(时间或比例)来精确离散它们。这些模式取决于小波。在大多数情况下,这些模式会使离散的CWT变得多余。有些人希望它是非冗余的,具有二进位比例。只有极少数的小波允许这样做。如果然后将小波支持强加为有限的,那么Haar就是其中之一,几乎不可能获得“自然小波”,这就是为什么建立Daubechies的小波的原因

#1 楼

您是正确的,FWT最好被认为是STFT的“表亲”,而不是FT。实际上,FWT只是CWT(连续小波变换)的离散采样,因为FFT / DFT是傅立叶变换的离散采样。这看似微妙,但在选择离散化转换方式时却很重要。

CWT和STFT都是信号的冗余分析。换句话说,您拥有的“系数”(在离散情况下)比完全代表信号所需的更多。但是,傅立叶变换(或仅使用一个尺度的小波变换)对从-无限到+无限的信号进行积分。这在现实世界的信号上不是很有用,因此我们将转换截短(即窗口化)为较短的长度。信号的窗口化会改变变换-您在时间/空间上乘以窗口,因此在变换空间中,您将窗口的变换与信号的变换进行卷积。在STFT的情况下,窗口通常始终具有相同的长度(非零范围),并且与频率无关(将10 Hz的信号与10 kHz的信号宽度相同的窗口)。这样您就可以像绘制矩形图一样。

由于小波随着比例尺的减小而变短(在时间或空间上)(例如更高的频率),因此CWT内置了这种窗口。因此,对于较高的频率,有效窗口的持续时间较短,并且最终得到的比例尺看上去就像为FWT绘制的一样。

如何离散化CWT取决于您,尽管我认为在位移和比例尺上都存在最小采样量才能完全表示信号。通常(至少我是如何使用它们的)对于最小比例(最高频率),您将在所有班次位置(时间/空间)进行采样。随着规模的增加(频率的降低),您可以减少采样的频率。理由是低频不会迅速改变(想像c碰撞与贝司吉他-crash碰撞具有非常短的瞬态,而贝司吉他需要更长的时间来改变)。实际上,在最短的范围内(假设您在所有移位位置采样),您可以完整地表示信号(您可以仅使用此范围内的系数来重构它)。我不太确定抽样量表的理由。我认为这建议是对数的,(我认为)较短刻度之间的间距较小。我认为这是因为较长尺度的小波具有更宽的傅里叶变换(因此它们“拾取”了更多频率)。

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

评论


$ \ begingroup $
“它实际上是班次/比例的最小采样,不是多余的表示。”啊!我认为您是对的,这可以解释为什么总是将它与FFT(它也是最小表示)进行比较。
$ \ endgroup $
– Endolith
09年11月24日在17:11

$ \ begingroup $
FWT是CWT的重要样本。我仍在尝试更好地理解它,但是我了解到STFT和CWT都是Frames。框架理论超越了我,但是一个有趣的概念是不确定性公式,对于STFT,dw * dt> C(dw是频率分辨率,dt是时间分辨率)。换句话说,当您尝试更好地解决频率问题时,您将失去时间分辨率。 CWT没有此限制。一旦我弄清楚了,我将继续阅读并尝试并澄清上面的答案。
$ \ endgroup $
–帕特里克(Patrick)
09年12月10日在16:24

$ \ begingroup $
据我所知,CWT具有相同的局限性,但要权衡利弊。
$ \ endgroup $
– Endolith
09年12月12日在19:58

$ \ begingroup $
“ STFT都是信号的冗余分析”。我认为那不是真的。如果您有一个100点的信号,请将其分成10个点的块,然后对每个点进行10点的FFT,您仍然将相同的信息存储在相同数量的样本中。
$ \ endgroup $
– Endolith
2011-2-15在19:01

#2 楼

考虑Haar小波的情况。快速小波变换递归地细分您的信号,并每次计算两个一半的和与差。差异是当前小波的变换幅度,总和返回给调用者以计算频率为一半的膨胀小波的变换幅度。因此,FWT使用您给定的图中描述的模式覆盖了时频平面。他们真正要告诉您的是,您以最低的频率获得一个样本,以该频率的两倍获得两个样本,以该频率的四倍获得四个样本,依此类推。每个小波的时频特性都不足以覆盖小块。实际上,每个小波都将覆盖无限的区域,因为它们具有紧凑的支持,因此必须在频率上完全离域。因此,您只需要考虑这些图块的中心即可。因此,离散小波的时频特性通常是糟糕的(例如,Daubechies小波要么具有鲜明的特征,要么具有变化的频率),并且在FWT的情况下,时频平面的实用性大大降低。但是,连续小波用于计算信号的时频表示。

评论


$ \ begingroup $
是的,我了解系数的本地化。与FFT相同。当您说“必须遵守”时,您是什么意思?如果您要获取信号的最小/非冗余表示,这是否只是一个要求?如果您只是试图对其进行分析/可视化怎么办?我将为这个问题添加一个更具体的示例。
$ \ endgroup $
– Endolith
2010-2-8 15:18

$ \ begingroup $
遵循可采性标准可确保存在同一性的解析度,即所有信号都可以从其小波变换中恢复。如果您不遵守它,那么您将无法从其变换中恢复信号,这时您必须质疑您正在分析的信号到底是什么(它甚至反映出信号中包含的任何信息吗?如果不需要最小/非冗余表示,则可以使用CWT中较宽松的可接纳性标准(可让您定义更多“理想”小波)。
$ \ endgroup $
–乔恩·哈罗普(Jon Harrop)
2010-2-11在0:54

$ \ begingroup $
我想您会发现我的博士学位论文非常有用。我会为您在线上...
$ \ endgroup $
–乔恩·哈罗普(Jon Harrop)
2010-2-11在0:54

$ \ begingroup $
你把它放在网上了吗? :)
$ \ endgroup $
– Endolith
2010-2-25在16:23

$ \ begingroup $
我确实做到了:flyingfrogblog.blogspot.com/2010/02/…
$ \ endgroup $
–乔恩·哈罗普(Jon Harrop)
2010-2-26在3:44

#3 楼

您的参考文献有:


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


有关更多信息,您可以可能喜欢DWT页面。在那里介绍了Haar小波,Daubechies小波和其他。它指出了小波如何定位–(1,1,–1,–1)小波对应于“左侧”对“右侧”,而最后两个小波
正弦波没有位置-它们散布在整个空间中-但确实有相位-第二和第三波是平移彼此相对应,例如与余弦和正弦相差90°,它们是离散形式。 ,您可能会从小波系列开始。

除了维基百科,一本教科书和一门课程可能对您很有帮助。

评论


$ \ begingroup $
我不明白这个答案。它回答了我的问题吗?左侧和右侧是什么?这与时频表示有什么关系?
$ \ endgroup $
– Endolith
09年11月24日15:11

$ \ begingroup $
“左侧与右侧”说明是DWT页面的摘录预览,显示该页面包括一个简单的示例,用于解释正弦波基和Haar小波基的相对优点。您在问小波变换中系数的性质。听起来您在寻找直觉。我认为您可能会发现该示例(在其原始上下文中)很有用。
$ \ endgroup $
–伊万·托德(Ewan Todd)
09年11月24日15:44

$ \ begingroup $
是的,在发布此问题之前,我已经阅读了Wikipedia文章多次。我不知道您的答案是否/与我有关时频表示的问题有关。如果可以,您能否将点连接起来? n个样本的FFT将产生n个系数,这些系数构成STFT频谱图的单列。 WT产生的系数与比例尺之间是否存在对应关系?如果是这样,那是什么?通过FWT一次运行可以填充右下图中的哪个框?
$ \ endgroup $
– Endolith
09年11月24日在16:08

$ \ begingroup $
维基百科页面上与小波相关的几乎所有内容目前都是错误的。
$ \ endgroup $
–乔恩·哈罗普(Jon Harrop)
2010-2-15在21:34

#4 楼

基本上,FFT(快速傅立叶变换)和FWT(快速小波变换)是离散化变换的两种实现方式,它们是基于连续变换,转为离散的,比起$ O(N ^ 2)$(对于一维矩阵变换),它要快得多数据)。一种更适合谐波信号,一种适合瞬态信号(或多或少)。

注意,传递时FWT不需要正交,并且还存在其他快速版本,例如提升方案。还要注意,这些估计不是渐近的,对于短数据来说,它们不容易比较。换句话说,在非渐近状态下,$ O(N)$不比$ O(N \ log(N))$“必须更快”,因为$ O(\ cdot)$中的常数可以改变处理。从更高的维度看,东西并不是那么简单。

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

从CWT(连续形式)开始。连续的CWT允许大量潜在的小波形状。只能通过考虑某些“海森堡”不等式的采样模式(时间或比例)来精确离散它们:每单位表面一个样本。这些模式取决于小波。在大多数情况下,这些模式会使离散的CWT变得多余,并产生小波帧。

有些人希望它是非冗余的,具有二进位刻度(DWT)。只有极少数的小波(仍然是无穷小,但您无法偶然发现它们)允许这样做。第一批是Haar,Franklin和Meyer小波。如果然后将小波支持强加为有限的,那么Haar在相当长的时间内是唯一的。从“自然连续小波”中获得正交小波几乎是不可能的,这就是建立Daubechies的小波以及后来的Symmlet和Coiflets的原因。那些形状怪异的小波没有像Morlet小波那样好的简单公式。并且通过一些巧妙的技巧,他们最终得到了O(N)$算法。您有FWT。因此,我略有不同意:


实际上,FWT只是CWT的离散采样。DWT(或FWT)是精确的,例如DFT / FFT。大多数其他离散CWT(具有任何小波)都差不多(如果有足够的冗余,不会造成太大损害)。

所以:


单个FWT操作可计算不同级别的所有系数。 DWT为每个矩形提供$ k $点,您可以想象它位于中心,但这是一个约定。基本上,这是对未知连续CWT平面的采样:每个“单位”表面的$ k $个采样。每个点“代表”整个矩形,有点像DFT点代表他周围的整个DFT框。完全不正确,但这就是主意。 $ k $由信号长度给出。在图形中,假设您在$ 0 $和$ 4T $之间有$ 8 $点。 DWT的第一级给您$ 2乘以4 $点(一个低通,一个高通,下采样为$ 2 $)。这就是您第一次尝试Python所获得的。高频滤波产生的$ 4 $会以最高频率$ [ω/ 2,\ω$]为您的每个扁平矩形提供一个样本。一个低通,一个高通将另外的$ 4 $积分再次分解为$ 2 \ times2 $。与上述类似,$ 2 $会为您提供两个方格的一个样本。使用其余的低通/高通,您可以在$ [\ omega / 8,\ omega / 4] $中获得一个样本。最后一个样本是最终的低通系数,位于最左边的高矩形框中。那就是您最终的Python代码所拥有的:$ [1,1,2,4] $系数
矩形将被CWT填充。使用DWT时,它们不会被填充,每个样本只有$ k $个样本,就像没有“填充” DFT容器一样。这总是在计算效率上更高吗?不确定,取决于$ O(N)$中的常数。对于正弦分析? FWT永远都不好(特别是由于有限长度的过滤器)。但是对于图像的紧凑表示(例如JPEG2000),它们可能非常不错。在这里,您可以使用稍微更快的方案,例如提升方案。

下图显示了如何将Haar小波的连续版本


采样到正交离散小波:


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