STFT和DWT(小波)


12

STFT可以成功用于声音数据(例如带有.wav声音文件),以便进行某些频域修改(例如:噪声消除)。
N=441000(即以采样率10秒fs=44100),,的情况下windowsize=4096overlap=4STFT近似生成一个430x4096数组(第一坐标:时间帧,第二坐标:频率箱)。可以在此数组上进行修改,并可以使用重叠加法(*)进行重构。

小波怎么可能做类似的事情?(DWT),即得到a x b具有a时间帧和b频率段的相似形状数组,对此数组进行一些修改,最后恢复信号?怎么样 ?小波等于重叠叠加是什么?这里涉及的Python函数是什么(我还没有找到使用pyWavelets... 进行音频修改的简单示例)?

(*):这是可以使用的STFT框架:

signal = stft.Stft(x, 4096, 4)    # x is the input
modified_signal = np.zeros(signal.shape, dtype=np.complex)

for i in xrange(signal.shape[0]):    # Process each STFT frame
    modified_signal[i, :] =  signal[i, :] * .....  # here do something in order to
                                                   # modify the signal in frequency domain !
y = stft.OverlapAdd(modified_signal, 4)   # y is the output

目的是找到一个具有小波的类似框架。


附带评论:在STFT上进行这种“过滤”是一个非常糟糕的主意。这不是做大多数您真正想做的事情的好方法。您实际上想实现什么?
Peter K.

请注意,PyWavelets仅用于离散小波变换。如果您想做类似STFT的工作,您会更容易理解连续小波变换,例如常数Q变换(它是Gabor变换),与复杂的Morlet连续小波变换本质上是相同的,但其目的是可逆:grrrr.org/research/software/nsgt
endolith 2014年

1
(在我看来,这个问题由“社区”恢复。),小波重叠并以与STFT非常相似的方式添加。所以我不太明白问题的本质。
罗伯特·布里斯托

是否需要更多详细信息?
Laurent Duval

Answers:


4

短时傅立叶变换通常是冗余变换,通常在每个频率上使用相同的子采样来实现。如果窗口选择正确,则说明窗口已完成:您可以将其反转并恢复任何初始信号。

由于它是冗余且完整的,因此具有许多完美的逆。可以使用更通用的工具来实现和理解它:(过采样)复杂的滤波器组。给定窗口的类型和长度以及重叠,可以为您提供分析过滤器库,您可以为其计算是否可逆。如果是这样,则可以计算自然逆,也可以优化逆。重叠相加只是许多潜在逆中的一个,可能是最常见的逆,这通常会限制窗口的选择。

标准离散小波变换也是滤波器组,不同之处在于子采样在每个频带中都不相同(或更恰当地定标)。每个刻度的长度变成不均匀。但是,存在冗余小波实现,可以产生可以使用的系数“矩形数组”。以不同的名称调用最著名的方案:不变位移小波时不变小波,未抽取小波,平稳小波变换(SWT),有时甚至是循环纺纱。它的标准重构涉及类似于重叠叠加的步骤,但由于跨比例的采样因子不同,它们更“嵌入”。您可以将它们与库中的任何离散小波一起使用,甚至可以设计自己的小波。原因是设计标准离散小波时要考虑到非冗余性,这限制了小波的选择。使用冗余,由于要满足的约束不太严格,因此小波选择会增加。“最终”化身是连续小波变换,它允许“几乎”每个逆合成小波。我的最后一句话很糟糕,希望您理解其中的含义:当方阵是可逆的时,它只有一个逆。当“矩形”矩阵以广义方式左不可逆时,

似乎存在平稳小波变换的python实现。您可以在2.3.4中找到一些参考链接论文的翻译不变小波章节

在实际应用中(地球物理,无损检测,超声,振动),它通常具有更强的检测,降噪或恢复能力。


“冗余”的意思是“输出中的信息多于再现输入所必需的信息”?
endlith 2015年

1
究竟。通常,对于样本信号,变换后可获得M > N系数。这意味着您可以利用此好处。例如,您得到几个潜在的逆,其中一些反比其他的更实际。更重要的是,在变换域中进行处理(增强,检测,降噪,自适应滤波,恢复,解卷积,源分离)时,您将获得鲁棒性并降低对噪声的敏感性。这来自转换后的数据中的附加“多样性”。仅在正确使用时……NM>N
洛朗·杜瓦尔

3

使用短时间傅立叶变换进行滤波时需要重叠添加/重叠保存的原因基本上是,在一定的时间范围内定义了与所获得的系数相关的基函数(而不是单个时间点)。用于计算扩展系数的傅立叶变换还可以在由信号帧长度定义的圆形域上实现卷积。这意味着框架的两个端点确实被识别并围成一圈。这就是为什么必须确保所编辑系数的基函数不会通过缠绕而影响帧的两端。

小波既不是时间平移特征向量,也不是使用圆卷积来计算的。这意味着您不需要重叠添加或保存或任何其他处理圆形卷积副作用的方法。相反,小波基向量只是描述信号的可能依据。因此,(完整的,离散的,可能正交的)小波变换只是从时域基础到小波域基础的基础变化。基础变化可以反转(通过应用使您到达那里的基础变化矩阵的逆函数),您可以切换回时域。

您提供的作为窗口大小,重叠,采样率的参数均不适用于小波变换。您唯一需要的是母亲小波。如果要将结果与STFT输出进行比较,则可以选择任何STFT基向量(即,窗口乘以复数指数载波)作为小波原型。然后,您应用快速小波变换,它将信号分解为高通和低通滤波和抽取信号的树,最终成为您的系数。每个系数与小波基向量及其参数(比例,时间)或(频率,时间)相关联。您可以操纵系数,然后应用逆离散小波变换。它将获取您的系数,并将其通过重新合成滤波器组,以再次产生信号。

这些过程并不简单,对于初学者来说可能很难消化。但是您应该能够为您选择的平台找到实现快速小波变换及其逆函数的库/工具箱。但是,如果要实现自己的小波基础,则必须导出分解和合成滤波器组的滤波器系数。这需要一些深入的理论,您可能必须首先学习它。

小波变换还有其他形式,即连续小波变换在不完全的基础上工作。它既要慢得多,又要求逆,因此目前不是您要执行的操作的选项。


1
感谢您的回答。我尝试建立代码框架的主要原因是,我一直注意到(从我的童年到几年前,当我完成博士学位时(当然,这与DSP无关,如果这样的话,我不会问因此,这里有新手问题!))是,处理一些现实生活中的材料(例如DSP中的音频信号)有助于极大地理解深度理论。我想编码的是:Audio sound -> Wavelet transform -> (do something on the array) -> Inversion -> Audio output。有了很多(在数组上做些事情),我敢肯定我会进一步了解小波的工作原理。
巴斯基

1
@Basj,然后按照我说的做。查找一个同时支持快速小波变换及其逆函数的python库,然后使用生成的系数树进行播放。祝好运并玩得开心点!
Jazzmaniac 2013年

“都不适用于小波变换”它们适用于CWT,对吗?
endlith 2015年

1

有许多定义小波基础的方法。小波通常看起来像:

wx0,k0(x)=Aexp(ik0x)e(k0(xx0))

x0k0eAk

(x0,k0)(x0,k0)

因为变换后的数据的维数超过信号的维数,所以小波基将不会是正交的。即以下内容将是错误的:

wk0,x0|wk0,x0=δ(x0,x0)δ(k0,k0)

Aw

x0,k0|wx0,k01k0wx0,k0|=identity

换句话说,只需将其组成小波相加即可完美地重构信号。

您的“修改”可以简单地插入上述金额中:

my_filter=x0,k0|wx0,k0f(x0,k0)wx0,k0|

2013-11-19更新:根据要求在下面添加实施详细信息。

f(x)

cx0,k0=wx0,k0|f

k0cx0,k0x0ffw0,k0cx0,k0

  • ff^
  • k01/4
    • f^w^0,k0
    • [kl,kr)w^0,k0
    • 对它应用傅立叶逆变换。
    • exp(ixkl+kr2)cx0,k0x0

k0x0w0,k0k0k0

cx0,k0k0

截断频谱有时会引入归一化问题,具体取决于FFT的定义方式。在这里,我不会尝试涵盖所有可能性。规范化基本上是一个简单的问题。;-)

w^x0,k0(k)wx0,k0(x)

w^x0,k0=Aexp(i(kk0)x0)exp((Qlog(k/k0))2)

QAk0


1
感谢您回顾有关小波理论的这些要点,这些要点对于理解它的工作原理确实是必需的。但是这里的问题更多是关于构建一个框架代码,该代码可以处理例如音频信号。问题是:如何处理这些无穷和,如何选择窗口(或者更确切地说是wavelet),如何在python中使用pyWavelets(或另一种等效语言,我将翻译成Python),如何选择参数(例如在我的音频示例中:采样率= 44100,fft窗口= 4096,重叠= 4等)
2013年

akk|kakk|=Id

K

akakf

1
观察它是否有效的最佳方法是提供一个最小的代码示例(例如,以pyWavelet为例,我想像的几行应该是可能的)(一旦我理解了,我会做的很好。还需要几天阅读有关小波的信息!)
Basj 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.