DTMWiki 编曲中文百科
首页 chevron_right 百科 chevron_right 数字音频处理 chevron_right 混响

混响

混响是一类模拟声音在空间扩散反射的效果器

person IAMMRGODIE schedule 更新于 2025-05-14

混响

混响是一类模拟声音在空间扩散反射的效果器,按照实现方式的不同可以分为卷积混响和算法混响。

卷积混响

卷积混响是使用卷积来物理级模拟声音在空间中反射的效果器。一般地可以将卷积混响定义如下

Y[n]=(XI)[n]Y[n] = (X * I)[n]

其中 X[n]X[n] 为输入音频 I[n]I[n] 为实现录制的脉冲响应 (Impulse Response, 简称 IR) Y[n]Y[n] 为输出。

脉冲响应

脉冲响应是某个空间中理想脉冲信号的声学响应记录,保留该空间中的混响特性。一般以在目标空间中录制的一个瞬态信号经去卷积处理后得到。不过由于 IR 的任意性,在电子音乐中 IR 也可以用作声音染色。

实践

在实践中,因为卷积混响的计算复杂度较高,一般会通过卷积定理配合快速傅里叶变换、SIMD、多线程等手段加速运算(如将 IR 分块与输入音频帧长度一致,之后执行 FFT,在频域逐分量相乘后在进行 IFFT 并将重叠部分输出)。

算法混响

算法混响是使用算法来模拟混响效果的方式,一般通过物理方式建模等等。下面列举了一些经典的算法混响。下文中如未作特殊说明,则 X[n]X[n] 表示输入音频流Y[n]Y[n] 表示输出音频流。

Schroeder 混响

物理学家 Manfred Schroeder 在 1962 年提出的混响,主要思想是利用并联的梳状滤波器​和​​串联的全通滤波器模拟自然混响。

结构

Schroeder 混响通常由 kk 个并联的 Comb Filtermm 个串联的 Allpass Filter 实现,其结构如下(以 k=4,m=2k = 4, m = 2 为例,下同):

flowchart LR 输入信号 --> 反射滤波1[Comb Filter] 输入信号 --> 反射滤波2[Comb Filter] 输入信号 --> 反射滤波3[Comb Filter] 输入信号 --> 反射滤波4[Comb Filter] 反射滤波1 --> 扩散滤波1[Allpass Filter] 反射滤波2 --> 扩散滤波1[Allpass Filter] 反射滤波3 --> 扩散滤波1[Allpass Filter] 反射滤波4 --> 扩散滤波1[Allpass Filter] 扩散滤波1 --> 扩散滤波2[Allpass Filter] 扩散滤波2 --> 输出

其中 Comb Filter 用以模拟反射回声,其差分方程如下

Y[n]=X[nT]+aY[nT]Y[n] = X[n - T] + a Y[n - T]

其中 TT 是延迟时间,一般选择互质的毫秒级长度避免周期性,如 31,37,41,4331,37,41,43aa 为反馈系数控制衰减速度,一般 a(0,1)a \in (0, 1)

而 Allpass Filter 用于模拟回声信号的扩散,其差分方程如下

Y[n]=gX[n]+X[nD]+gY[nD]Y[n] = -g X[n] + X[n - D] + g Y[n - D]

其中 DD 是延迟时间,一般选择较短的长度如 55ms,gg 为反馈系数控制衰减速度,一般 g(0.5,0.7)g \in (0.5, 0.7)

该混响持续时间 tt 由以下公式给出

t=3Tfslgat = -\frac{3 T}{f_s \lg a}

kk 个 Comb filter 所确定的持续时间的最大值。

此混响的效果具备较强的金属质感,优势在于计算效率高但缺乏真实空间的早期反射建模。

实现

已有的实现如 Sonicbits SphereFreeverb,你也可以自行用 Max for Live、Fl Studio 的 Patcher 或是其他手段自行实现。

反馈延迟网络

反馈延迟网络 (Feedback Delay Network, 简称 FDN) 是通过多个延迟线生成衰减信号的方法。

结构

反馈延迟网络通常由多个独立的延迟线组成,设系统总共有 kk 个延迟线,则其状态向量定义为 S[n]=(s1[n],,sk[n])T\boldsymbol{S}[n] = (s_1[n], \cdots, s_k[n])^T 其满足

S[n+1]=MD(S)[n]+X[n]b\boldsymbol{S}[n + 1] = \boldsymbol{M} \cdot \boldsymbol{D}(\boldsymbol{S})[n] + X[n] \cdot \boldsymbol{b}

其中 MMk(R)\boldsymbol{M}\in M_k(\mathbb{R}),称作反馈矩阵,通常取正交矩阵保证混响正常衰减。D() ⁣:(NR1×k)(NR1×k)\boldsymbol{D}(\cdot) \colon (\mathbb{N} \to \mathbb{R}^{1\times k}) \to (\mathbb{N} \to \mathbb{R}^{1\times k}) 是延迟线操作,其定义为

D(S)[n]=[s1[nd1],,sk[ndk]]T\boldsymbol{D}(\boldsymbol{S})[n] = [s_1[n- d_1], \cdots, s_k[n- d_k]]^T

即向历史状态的每一个分量添加不等的延迟 d1,,dkd_1, \cdots, d_k,通常互质。b\boldsymbol{b} 是输入分配向量,表示向每一条延迟线输入多大的输入,一般可以直接取作 (1,,1)TR1×k(1, \cdots, 1)^T \in \mathbb{R}^{1 \times k}
而系统输出满足

Y[n]=cS[n]+dX[n]Y[n] = \boldsymbol{c} \cdot \boldsymbol{S}[n] + d \cdot X[n]

其中 cRk×1\boldsymbol{c}\in\mathbb{R}^{k \times 1} 是输出混合向量,一般可以直接取 (1,,1)Rk×1(1, \cdots, 1)\in\mathbb{R}^{k \times 1},而 dRd\in\mathbb{R} 是原始信号的比例,一般取 00 避免原始信号过强。

即整个系统可以由下图描述(以 k=3k = 3 为例)

graph LR  input[输入信号] --> adder1[混合器] adder1 --> delay1[延迟线 3] adder1 --> delay2[延迟线 2] adder1 --> delay3[延迟线 1] delay1 --> mixer[延迟并按特定方式混合] delay2 --> mixer delay3 --> mixer mixer -->|反馈信号1| adder1 mixer -->|反馈信号2| adder1 mixer -->|反馈信号3| adder1 delay1 --> final_process[最终处理]     delay2 --> final_process     delay3 --> final_process     final_process --> output[输出信号]

实践中反馈矩阵常使用 Householder 反馈矩阵,其定义如下

M=I2v,vvvT\boldsymbol{M} = I - \frac{2}{\langle v, v \rangle} vv^T

其中 vv 是任意一个向量,II 是单位矩阵 ,\langle \cdot, \cdot \rangle 是内积。

实践中为了更好的模拟混响对高频的衰减,延迟线中音色往往还会经过低通滤波器,也会在末尾添加 Allpass filter 以更好的模拟回声信号的扩散。

混响持续时间 tt(无低通)由下述公式给出

t=3max{d1,,dk}fst = \frac{3\max \{ d_1, \cdots, d_k \}}{f_s}

其中 fsf_s 是采样率

实现

市面上常见的混响如 ValhallaShimmer, Valhalla Room, FabFilter Pro-R​2 等等均基于 FDN 实现,也有一些免费混响如 u-he Protoverb 可以使用。

物理模拟方案

除了上述主流方案还有其他基于物理模拟的解决方案,如基于有限元分析或者有限差分法求解声学方程,或引入深度学习方案(如扩散网络混响)等等。在此受限于篇幅原因略过。

search Ctrl K ESC
manage_search 输入关键词开始搜索