音效处理Reverb 混响算法简介
Posted 芥末的无奈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了音效处理Reverb 混响算法简介相关的知识,希望对你有一定的参考价值。
系列文章目录
文章目录
一、混响
混响是一种自然发生的声学现象。在房间中放置一个扬声器用于发声,放置一个麦克风用于收集声音。当声音与墙壁或者其他材料相遇时,声音发生反射,因此麦克风收集到的信号,除了扬声器到麦克风的径直路径外,还有很多其他方式到达的声音,如下图所示。
由于声波的传播距离稍长,反射的声波到达我们耳朵的时间会比直达的声波晚一点。声波的振幅会弱一点,因为墙面会吸收一些声音的能量。根据房间的大小,时间和振幅的差异是不同的。这就是为什么我们可以在音乐厅里比在客厅里更容易分辨出反射效果。
在一个足够大的房间里,反射会重复许多次,然后一系列延迟和衰减的声波,这被称为回声,到达我们的耳朵。这就是我们如何感受到一个房间的“空间感”
二、人工混响
对人工混响的需求首先出现在录音广播和音乐背景下,在录音室录制的声音往往过于 “干” 了,缺乏音乐表演所需的音乐厅声学效果。早在 20 世纪 20 年代,混响是通过将 “干” 的录音室信号发送到一个混响环境中,通常是一个专门建造的回音室,来人为地制造混响。人们在浴室唱歌时会感觉更有效果,浴室、卫生间等可以认为就是一种回音室。
虽然回音室可以产生高质量的混响,但它们的物理性质通常限制了它们在录音室和广播场合的使用。它们通常很难甚至不可能运输,对外部的声学或机械干扰很敏感,并且需要专门的知识来维护和调音。相比之下,由计算过程产生的人工混响具有便利性、便携性和可重复性,并允许自动化(记录、编辑和回放混响器控制参数随时间变化的情况)。这促使人们研究数字合成高质量混响的方法。
三、数字混响算法
由于数字处理设备和计算机技术的发展,人们能够完成复杂的模拟,找到自然产生混响的数字解决方案。这个混响问题的最早的数字解决方案是由贝尔电话实验室的Manfred Schroeder在1961年建立的(Schroeder)。这个解决方案被称为 Schroeder 的混响器,它是本文的重点,将在下面的章节中详细说明。
3.1 混响的脉冲响应信号
为了研究混响器的工作原理,我们首先要了解声音在房间中的发射性质。
上图是某个房间的脉冲响应信号,从图中可以观察到:
- 直达声以直线路径传播,是第一个到达听众耳朵的声波。
- 离散的早期反射在直达声到达后 80ms 内进入听众耳朵。
- 接下来的后期混响包含了成千上万的紧密间隔的回声,但需要超过80毫秒的时间来建立,然后逐渐消失。
下图是两个真实环境的脉冲响应:
总的来说,reverb 信号可以分为三个部分:pre-delay、early reflections 和 late reverberation,因此一种可行 reverb 模型为:
3.2 RT60
不同的空间、场所有着不同的混响,如何区分混响的不同呢?有一个重要的指标:混响时间(Reverberation Time),也叫 RT60,具体的定义是指声场衰减 60 dB 所用的时间,单位为「秒」。通俗的说就是,你在一个房间里,“啊”的大叫了一声,这一声“啊”的分贝衰减了 60db 所花费的时间。
有些研究给出了 RT60 估计模型,例如在公式【1】
R
T
60
=
0.5
V
R
S
R
A
R
A
v
e
(1)
R T_60=0.5 \\fracV_RS_R A_R A v e \\tag1
RT60=0.5SRARAveVR(1)
其中
- V R V_R VR 表示房间体积(立方英寸)
- S R S_R SR 表示房间表面积(平方英寸)
- A R A v e A_R A v e ARAve 表示平均吸收系数
不同的材料有着不同的吸收系数,例如墙面、瓷砖、沙发、床等都有着不同吸收系数,你需要单独计算这些物品的面积,加权求平均得到平均吸收系数。
几乎所有的混响插件都会有混响时间的参数控制,我们在分析各类算法时,重要的一点是知道哪些参数控制这混响时间。
3.3 Schroeder 混响算法
现在让我们回到 1960s,跟着 Schroeder 的论文来窥探当时是如何创造出第一个混响算法的,相关论文有两篇:
3.3.1 梳妆滤波(Comb Filter)混响器
作者首先想 “咦,这个混响不就是声音在空间中不断的碰撞,产生很多回声的过程吗?那我搞一个系统让它产生很多很多回声就可以了”,于是乎,作者发明了第一个混响器:梳妆滤波混响器。浅浅地用公式描述下推导过程。假定
h
(
t
)
h(t)
h(t) 是这个系统的单位冲击响应,如果只有一个回声的情况,那么:
h
(
t
)
=
δ
(
t
−
τ
)
h(t) = \\delta(t - \\tau)
h(t)=δ(t−τ)
其中
δ
(
t
)
\\delta(t)
δ(t) 为狄拉克函数(即理想的冲击信号),
τ
\\tau
τ 为回声的延迟时间。
h
(
t
)
h(t)
h(t) 的频谱长啥样呢?我们对它做傅里叶变换得到:
H
(
ω
)
=
∫
−
∞
+
∞
h
(
t
)
e
−
i
ω
t
d
t
=
e
−
i
ω
τ
H(\\omega)=\\int_-\\infty^+\\infty h(t) e^-i \\omega td t= e^-i\\omega\\tau
H(ω)=∫−∞+∞h(t)e−iωtdt=e−iωτ
那么多个回声,且回声音量以指数函数衰减的
h
(
t
)
h(t)
h(t) 为:
h
(
t
)
=
δ
(
t
−
τ
)
+
g
δ
(
t
−
2
τ
)
+
g
2
δ
(
t
−
3
τ
)
+
⋯
h(t)=\\delta(t-\\tau)+g \\delta(t-2 \\tau)+g^2 \\delta(t-3 \\tau)+\\cdots
h(t)=δ(t−τ)+gδ(t−2τ)+g2δ(t−3τ)+⋯
其中
g
g
g 表示衰减系数,对上述的
h
(
t
)
h(t)
h(t) 做傅里叶变换得到:
H
(
ω
)
=
e
−
i
ω
τ
+
g
e
−
2
i
ω
τ
+
g
2
e
−
3
i
ω
τ
+
⋯
H(\\omega)=e^-i \\omega \\tau+g e^-2 i \\omega \\tau+g^2 e^-3 i \\omega \\tau+\\cdots
H(ω)=e−iωτ+ge−2iωτ+g2e−3iωτ+⋯
简易起见,我们令
a
=
e
−
i
ω
τ
a = e^-i \\omega \\tau
a=e−iωτ,那么:
H
(
ω
)
=
a
+
g
a
2
+
g
2
a
3
+
⋯
g
H
(
ω
)
=
g
a
+
g
2
a
2
+
g
3
a
3
+
⋯
\\beginaligned H(\\omega) &= a + ga^2 + g^2a^3 + \\cdots \\\\ gH(\\omega) &= ga + g^2a^2 + g^3a^3 + \\cdots \\\\ \\endaligned
H(ω)gH(ω)=a+ga2+g2a3+⋯=ga+g2a2+g3a3+⋯
你看,
g
H
(
ω
)
gH(\\omega)
gH(ω) 是一个等比数列,我们用等比数列求和公式对
g
H
(
ω
)
gH(\\omega)
gH(ω) 求和可得:
g
H
(
ω
)
=
g
a
1
−
g
a
gH(\\omega) = \\fracga1-ga
gH(ω)=1−gaga
最后两边除以
g
g
g 得:
H
(
ω
)
=
a
1
−
g
a
=
e
−
i
ω
τ
1
−
g
e
−
i
ω
τ
(2)
H(\\omega) = \\fraca1-ga = \\frace^-i \\omega \\tau1-ge^-i \\omega \\tau \\tag2
H(ω)=1−gaa=1−ge−iωτe−iωτ(2)
H
(
ω
)
H(\\omega)
H(ω) 就是该系统的传递函数,我们计算它的频谱响应来观察该系统对频率的影响:
∣
H
(
ω
)
∣
2
=
∣
e
−
i
ω
τ
∣
2
∣
1
−
g
e
−
i
ω
τ
∣
2
=
∣
cos
(
ω
τ
)
−
i
sin
(
ω
τ
)
∣
2
∣
1
−
g
(
cos
(
ω
τ
)
−
i
sin
(
ω
τ
)
)
∣
2
=
1
1
+
g
2
−
2
g
cos
ω
τ
.
\\beginaligned |H(\\omega)|^2 &= \\frac|e^-i \\omega \\tau|^2|1-ge^-i \\omega \\tau|^2 \\\\ &= \\frac|\\cos(\\omega \\tau) -i\\sin(\\omega\\tau)|^2|1 - g(\\cos(\\omega\\tau) -i\\sin(\\omega\\tau))|^2 \\\\ &=\\frac11+g^2-2 g \\cos \\omega \\tau .\\\\ \\endaligned
∣H(ω)∣2以上是关于音效处理Reverb 混响算法简介的主要内容,如果未能解决你的问题,请参考以下文章