audio - FFT实时混响算法

标签 audio fft convolution

我正在尝试使用FFT创建/实现实时混响算法。我尝试了FDN和其他更简单的算法,但听起来还不够好。
因此,通过将变换后的信号与变换后的脉冲响应相乘来进行快速卷积是可行的,而且听起来不错。

我所看到的问题是,如果我想要一个持续几秒钟的混响,则脉冲响应将包含100000+个值,并且由于我的输入缓冲区是256个样本,因此卷积的结果是100 255+个结果值与先前的卷积结果相加,更不用说为256个输入采样的每个缓冲区计算100000+值的FFT。

必须对此问题有更好的解决方案。是否可以仅计算256个值的FFT(因为它不是循环信号,所以要加上256个填充零)。
混响不必绝对正确,只需要听起来不错即可。

最佳答案

您可能希望考虑使用“频率延迟线”,或称为分区卷积。简而言之,您可以将混响IR分成几个分区,进行FFT,与输入信号进行卷积,然后将其插入到输出中,延迟时间设置为所讨论分区的延迟。在几秒钟的完整IR内,这仍然占用大量CPU,因此...

其他技巧包括将“头部相关传递函数”(HRTF)馈入更常规的混响合成算法。这是基于这样的哲学,即在第一组反射中代表了房间的频率响应。然后可以将HRTF馈入更常规的平坦响应混响合成算法中,以创建多重反射。使用HRTF代替传统的梳状滤波器。

更具体地说,针对您的问题,请查看Fons Adriaensen的作品。
http://kokkinizita.linuxaudio.org/papers/aella.pdf
http://kokkinizita.linuxaudio.org/papers/index.html(更多有趣的论文)

在他的网站上浏览其他有趣的插件和源代码。

CCRMA(斯坦福大学)的Julius O Smith也有很多不错的信息。

我在这里无法详细回答,但我希望Fons的论文能回答您的问题。

关于audio - FFT实时混响算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15877280/

相关文章:

java - 使用 Java (Android) 改变音频音高

python - 生成随机音频或以不同的偏移量播放文件

audio - j转换DoubleFFT_1D的前两个值

c# - 使用傅立叶级数或其他算法通过给定值重建函数

python - 像Audacity一样绘制波谱

python - convolve2d和filter2D之间的差异。为什么输出形状有所不同?

python - 对两个数组进行卷积和反卷积

android - 具有多个播放器的超强大SDK弹出声音

javascript - 带有 Ogg 比特流的 MediaSource API

python - CNN 中的 8 个预定义二进制卷积滤波器 - Tensorflow