信号处理:FFT重叠处理资源

时间:2011-02-22 12:20:32

标签: audio signal-processing fft overlap

是否有关于重叠处理的可用(如果可能的科学)资源(网络或书籍)。由于要求不同,我对分析信号时使用重叠处理和窗口的效果不感兴趣。它更多的是关于以下实时情况:(我目前正在处理音频信号)

  • 将信号分成更小的部分。
  • 创建重叠窗口。
  • 对窗口块进行FFT。
  • 在频域中进行处理。
  • IFFT结果。
  • 将这些块连续放在一起。

我特别感兴趣的是窗口对产生的错误的影响以及重叠长度的影响。但是我找不到任何有关该主题的好资源。有什么建议吗?

修改

经过一番讨论后,如果使用窗口函数是合适的,我找到了一个很好的讲义,解释了重叠和添加/保存方法。 http://www.ece.tamu.edu/~deepa/ecen448/handouts/08c/10_Overlap_Save_Add_handouts.pdf

然而,在做了一些测试之后,我注意到窗口版本在大多数情况下比重叠&添加/保存方法。有谁可以证实这一点? 我不想在计算时间方面得出任何结论......

EDIT2:

以下是我测试中的一些图表:

我创建了一个由三个余弦波组成的信号 enter image description here

我在时域中使用此过滤器功能进行过滤。 (它是对称的,因为它应用于FFT的整个输出,对于实际输入信号也是对称的) enter image description here

IFFT的输出如下所示:可以看出,低频在中频范围内衰减的频率高于频率。 enter image description here

对于重叠添加/保存和窗口化处理,我将输入信号分成8个256个样本的块。重新组装后,它们就像那样。 (样本490 - 540) enter image description here enter image description here enter image description here

可以看出,重叠添加/保存过程与块放在一起的点处的窗口版本不同(样本511)。这是在比较窗口化过程和重叠添加/保存时导致不同结果的错误。窗口化过程更接近于在一个大垃圾中处理的过程。

然而,我不知道为什么他们在那里或者他们根本不应该在那里。

3 个答案:

答案 0 :(得分:2)

这是众所周知的信号处理领域,一般来说,如果你正在沿着FFT线进行处理 - >光谱处理 - > IFFT您需要使用“重叠和添加”方法。两个输入的互相关是一个典型的例子,在谱域中比在时域中更容易完成。

这是我通过谷歌发现的一篇简短论文(我刚刚搜索了“fft overlap and add”):http://www.coe.montana.edu/ee/rmaher/ee477/ee477_fftlab_sp07.pdf

我建议你投资一本好的信号处理书,比如经典的Rabiner&金“数字信号处理的理论与应用”(Prentice-Hall ISBN 0-13-914101-4)。这应该涵盖重叠和添加处理的概念。

答案 1 :(得分:1)

当使用FFT进行重叠相加或重叠保存快速卷积滤波时,通常您不希望使用窗口函数。当在规范重叠添加/保存过滤中组合连续的FFT帧时,圆形窗口伪像被抵消。

增加:

如果您使用非矩形窗口,您可能需要确保窗口的所有重叠帧总和为DC,否则您产生的滤波信号将具有幅度扇形。如果重叠量是窗口宽度的精确约数,则矩形窗口和凸起余弦(von Hann)窗口将总和为DC(当然,除了重叠序列的开始和结束时)。

答案 2 :(得分:1)

我一直在玩这个试图回答自己的问题为什么人们会使用一个窗口。我对合成窗口的唯一引用是这样的: https://ccrma.stanford.edu/~jos/sasp/Inverse_FFT_Synthesis.html

http://recherche.ircam.fr/anasyn/roebel/amt_audiosignale/VL2.pdf

http://www.dspdimension.com/tutorials/

Stephan Bernsee有一些很好的概述信息。他的smbpitchshift代码使用了一个合成窗口 - 他在输入块上使用升余弦,然后在输出块上再次应用它,但我认为这是必要的,因为音高移位算法不是线性滤波操作,所以它是肯定的窗口边界上可能存在不连续的伪影,因此使用合成窗口在帧之间创建平滑过渡。

我认为没有太多专门针对频域实时卷积窗口化的信息的原因是因为它没有实际应用,除非你还需要做一些分析(即某种自适应滤波器)那么与光谱传播相关的主题再次受到关注。

我使用升余弦窗口和重叠相加方法绘制了滤波信号的输出,最终结果是相同的IR和相同的信号。毫不奇怪,因为在时域中执行的相同操作产生相同的结果。

另一方面,如果我实现了破碎的滤波器内核,平滑的窗口函数可以帮助掩盖伪像。这在某种意义上是破坏IR的窗口,因此帧之间存在更紧密的过渡。在时域中限制为长度为nfft / 2的IR仍然会更好。如果您需要获得IR大于nfft / 2的滤波器响应,那么您应该考虑使用更大的FFT大小(如果延迟不是问题)或使用分区卷积方案:

http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CB4QFjAA&url=http%3A%2F%2Fpcfarina.eng.unipr.it%2FPublic%2FPapers%2F164-Mohonk2001.PDF&ei=qtH0TorDEoKziQKAloHEDg&usg=AFQjCNGDmz79DiuG1kmPXifbWJ7M-gr9rQ&sig2=CMopEcGc1VArZ3gipWTr_w

http://www.music.miami.edu/programs/mue/Research/jvandekieft/jvchapter2.htm

我希望这对阅读此内容的人有所帮助

我希望这些链接有所帮助,即使它没有直接解决实时频域过滤中使用的窗口问题。