【问题标题】:Signal processing: FFT overlap processing resources信号处理:FFT重叠处理资源
【发布时间】:2011-07-01 23:19:00
【问题描述】:

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

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

我对所使用的窗口对结果误差的影响以及重叠长度的影响特别感兴趣。但是,我找不到任何详细处理该主题的好资源。有什么建议吗?

编辑:

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

但是,在进行了一些测试之后,我注意到窗口版本在大多数情况下会比重叠和添加/保存方法更准确。有人可以证实这一点吗? 不过,我不想就计算时间得出任何结论......

编辑2:

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

我创建了一个信号,它由三个余弦波组成

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

IFFT 的输出如下所示: 可以看出,低频比中频衰减得更多。

对于重叠添加/保存和加窗处理,我将输入信号分成 8 块,每块 256 个样本。重新组装后,它们看起来像这样。 (样品 490 - 540)

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

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

【问题讨论】:

标签: audio signal-processing fft overlap


【解决方案1】:

这是信号处理中相当知名的领域,一般来说,如果您按照 FFT -> 频谱处理 -> IFFT 的方式进行处理,则需要使用“重叠和相加”方法。两个输入的互相关是一个经典示例,在谱域中比在时域中更容易完成。

这是我立即通过 Google 找到的一篇简短论文(我刚刚搜索了“fft overlay and add”):http://www.coe.montana.edu/ee/rmaher/ee477/ee477_fftlab_sp07.pdf

我建议您购买一本好的信号处理书籍,例如经典的 Rabiner & Gold “数字信号处理的理论和应用”(Prentice-Hall ISBN 0-13-914101-4)。这应该涵盖了重叠和相加处理的概念。

【讨论】:

  • 谢谢,是的,这就是我感兴趣的东西。但是,到目前为止,我发现的所有内容都涵盖了与您提到的论文相似的程度。还没有找到更详细的东西。例如。不同窗口和重叠有什么影响?什么是足够的应用程序?发生的影响背后的解释是什么?将订购您提到的书 - 今天已经考虑过了。
  • +1 用于 Rabiner 和 Gold 参考,它有我见过的最好的重叠保存解释。
【解决方案2】:

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

添加:

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

【讨论】:

  • 我又试了一次。使用我的输入信号的一部分,添加零,对其进行 FFT,应用滤波,对其进行 IFFT,将其添加到处理后的信号中。结果:增加了噼啪声。在没有非矩形窗口的情况下,我看不到使用overlapp-add 的工作。但是,例如,使用 Hann 窗口,一切都可以正常工作。不过仍然需要深入的解释。
  • +1 - 我同意您在进行重叠保存(或重叠添加)处理时永远不想使用窗口函数。您正在使用 FFT 快速实现卷积,并使用填充来解决使用 FFT 固有的循环卷积。 Windows 可用于频率分析,即查看频谱结果。在过滤时,您不需要关心特定的光谱值。
  • 请解释一下。像这样的文章,AAT刚刚发到这里,推荐使用窗口函数做STFT:coe.montana.edu/ee/rmaher/ee477/ee477_fftlab_sp07.pdf我现在很困惑,因为没有窗口函数我无法取得好的结果。
  • @codeySmurf - 您对您想要做的事情的描述让我觉得您正在尝试过滤时域信号。您不需要 STFT 来执行此操作。过滤需要时域卷积或重叠保存处理。两者都不使用窗口函数。如果您想检查频率内容,使用 FT、功率谱、STFT 等,您可能需要一个窗口函数。以这种方式处理的数据不适合作为过滤过程的输入。
  • @codeySmurf :更准确的意思是什么?黄金测试是将直接线性卷积与滤波器的完整脉冲响应进行比较。您只是将 FFT 箱归零吗?如果是这样,那就是导致您的问题的过滤器损坏/损坏。
【解决方案3】:

我一直在玩这个,试图自己回答为什么要使用窗户的问题。我对合成窗口的唯一引用是: 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

我希望这对阅读本文的人有所帮助

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

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多