从概念上讲,实时卷积混响是如何工作的?

信息处理 卷积 冲动反应 即时的
2022-01-14 06:02:29

我有一个大厅的脉冲响应,它有 10 秒长。

现在说我想将此混响应用到一些歌唱的 wav 文件中。我将对两个 wav 文件中的数据进行卷积,结果将是第三批数据,这次是混响。伟大的。

但是,在像 GarageBand 这样的程序中,使用像电吉他这样的现场输入,这将如何真正发挥作用呢?

Garageband 无法对完整的吉他音轨进行卷积,因为它还不存在(因为它正在现场播放!)我想到的一种方法是,如果程序对 256 个最近的吉他输入样本执行卷积。

但这引发了两个问题:

计算机每秒能执行这么多的卷积吗?这肯定会在等待处理计算时引入某种延迟?

如果有人能帮忙解释一下,那就太好了。

3个回答

它归结为延迟与复杂性。如果您的过滤器是 10 秒长,您需要存储最后 10 秒的音频数据,然后您可以计算当前输出音频样本,延迟基本为零(忽略此处计算所需的时间) :

y[0]=k=0lx[k]h˙[k]

其中是脉冲响应的长度,始终假定为当前样本。虽然这基本上给你零延迟,但它归结为朴素卷积的性能,这很容易太多,特别是如果脉冲响应很长。lhx[0]

现在,您可以使用重叠保存等技术,这些技术已经通过拆分信号并分块执行卷积来执行非常长的信号的卷积。但是,为了能够计算输出,您首先需要捕获一个块的所有输入样本,以便定义您的延迟(再次忽略计算时间)。这些算法的效率通常介于直接卷积方法和纯 FFT 方法之间,对于较长的块,每个样本的计算量会较少,但会以延迟为代价。

重叠保存的问题是块需要至少是脉冲响应的大小,因此对于 10 秒的响应,延迟将至少为 10 秒,几乎不是实时的。对于这种情况,已经开发了所谓的分区卷积算法,它可以拆分脉冲响应和输入信号。我在这里找到了一篇描述这些技术的非常好的论文(点击我),所以我将它链接起来。我几乎无法比他们更好地描述它。

据我所知,延迟应该不超过 3-5 毫秒,否则优秀的音乐家会注意到延迟。

添加到 jan 的答案:大多数商业混响效果(插件或硬件)不是基于具有脉冲响应的卷积,而是基于某些网络配置中的参数算法。这有很多优点:

  1. 更少的内存
  2. 更少的 MIPS
  3. 它是参数化的,因此“房间大小”、“混响时间”、“颜色”等不同的参数可以连续实时调整。
  4. 如果做得好,实际上听起来更好

是的,实时卷积混响做卷积窗口,但有趣的是,它们实际上并没有做显式卷积。事实证明,“时间空间”中的卷积与“频率空间”中的乘法相同。这意味着如果您对吉他音乐窗口进行 FFT,并将其乘以先前生成的混响 FFT,然后进行 IFFT 将其放回时间空间而不是频率空间,您将拥有卷积混响。事实证明这样做的处理要少得多,所以机器可以实时做这些事情(: