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

Audio 信号处理:FFT重叠处理资源,audio,signal-processing,fft,overlap,Audio,Signal Processing,Fft,Overlap,如果可能的话,是否有关于重叠处理的好的科学资源或书籍。我对分析信号时使用重叠处理和窗口的效果不太感兴趣,因为要求不同。更多的是关于以下实时情况:我目前正在处理音频信号 把信号分成更小的部分。 创建重叠窗口。 把有窗口的块放进去。 在频域中进行处理。 如果没有结果。 将块放在一起形成一个连续的流。 我特别感兴趣的是使用的窗口对结果误差的影响以及重叠长度的影响。然而,我找不到任何关于这个主题的好资源。有什么建议吗 编辑: 在讨论了使用窗口功能是否合适之后,我找到了一份不错的讲义,解释了重叠和添加/保

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

把信号分成更小的部分。 创建重叠窗口。 把有窗口的块放进去。 在频域中进行处理。 如果没有结果。 将块放在一起形成一个连续的流。 我特别感兴趣的是使用的窗口对结果误差的影响以及重叠长度的影响。然而,我找不到任何关于这个主题的好资源。有什么建议吗

编辑:

在讨论了使用窗口功能是否合适之后,我找到了一份不错的讲义,解释了重叠和添加/保存方法

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

编辑2:

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

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

我在时域中使用这个过滤函数进行过滤。它是对称的,因为它应用于FFT的整个输出,而FFT对实际输入信号也是对称的

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

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

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


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

这是信号处理的一个相当著名的领域,一般来说,如果您按照FFT->频谱处理->IFFT的思路进行处理,则需要使用重叠和添加方法。两个输入的互相关是一个经典的例子,在光谱域比在时域更容易实现

这是我通过谷歌找到的一篇短文,我刚刚搜索了fft重叠并添加:


我建议您投资一本好的信号处理书籍,如经典的Rabiner&Gold数字信号处理理论与应用Prentice Hall ISBN 0-13-914101-4。这应该包括重叠和添加处理的概念。

当使用FFT进行重叠添加或重叠保存快速卷积滤波时,通常不希望使用窗口功能。在标准重叠添加/保存滤波中组合连续FFT帧时,循环加窗伪影被抵消

增加:


如果确实使用非矩形窗口,则可能需要确保窗口的所有重叠帧总和为DC,否则得到的滤波信号将具有振幅扇形。如果重叠量是窗口宽度的精确次倍数,矩形窗口和升余弦von Hann窗口的总和将为DC,当然,重叠序列的开始和结束除外。

我一直在玩这个游戏,试图为自己回答为什么要使用窗口的问题。我对合成窗口的唯一引用如下:

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

我认为,没有太多专门针对频域实时卷积加窗的信息是因为它没有实际应用,除非你还需要做一些分析,例如,和某种类型的自适应滤波器,那么与频谱扩展相关的主题再次令人感兴趣

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

另一方面,如果我实现了一个坏掉的过滤器内核,平滑窗口函数可以帮助屏蔽工件 行为。从某种意义上说,这将打开损坏的IR窗口,以便在帧之间有更紧密的过渡。在时域中,IR的长度限制为nfft/2仍然更好。如果需要获得一个IR响应大于NFFT/2的滤波器响应,那么如果延迟不是问题或使用分区卷积方案,则应该考虑使用较大的FFT大小:

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


我希望这些链接能有所帮助,尽管它不能直接解决实时频域滤波中使用的加窗问题。

这有帮助吗?这是一个有趣的页面,但它们更关注将频域中的信号划分为更小的频带并处理这一问题。与其说是在频域中处理连续的时域信号,不如说是创建滤波器带,这正是我要寻找的。谷歌搜索他可能会有所帮助。快速卷积是另一种与你所寻找的内容相关的方式。我在和中写了几个重叠保存处理的例子。根据我的经验,理解正在发生的事情的最好方法是在时域中绘制每个块的中间结果。谢谢,是的,这是我感兴趣的事情。然而,到目前为止,我发现的所有内容都在一定程度上涵盖了这个主题,与你提到的论文类似。没有找到更详细的内容。例如,不同窗口和重叠的影响是什么?对于哪个应用程序,什么是足够的?发生的影响背后的解释是什么?我会订购你提到的那本书-今天已经考虑过了。+1对于《兔子和黄金参考》,它有我见过的最好的解释。我只是又试了一次。使用我的一块输入信号,加零,FFT,应用滤波,IFT,将其添加到处理过的信号中。结果:增加了裂纹。如果没有非矩形窗口,我看不到使用OverlappAdd的效果。然而,例如,使用Hann窗口,一切都正常工作。仍然需要深入的解释。+1-我同意,在进行重叠保存或重叠添加处理时,您永远不希望使用窗口功能。您正在使用FFT快速实现卷积,并使用填充来处理使用FFT固有的循环卷积。窗口可用于频率分析,即查看光谱结果。在过滤中,您不关心特定的光谱值。请解释。像这篇文章,AAT刚刚发布在这里,建议使用窗口函数进行STFT:我现在很困惑,因为没有窗口函数我无法获得好的结果。@CodeySurf-你对你想做什么的描述让我觉得你在尝试过滤时域信号。你不需要STFT来做这件事。滤波需要时域卷积或重叠保存处理。两者都不使用窗口功能。如果您希望使用FTs、功率谱、STFTs等检查频率内容,您可能需要一个窗口功能。以这种方式处理的数据不适合作为过滤过程的输入。@CodeySurf:什么是更准确?黄金测试是比较直接线性卷积与您的滤波器的全脉冲响应。你只是在调零FFT垃圾箱吗?如果是这样的话,就是坏的/坏的过滤器导致了您的问题。