EQ(Equaliser)为音频均衡器,通过对声音某一个或多个频段进行增益或者衰减,其他频段保持不变从而达到调整音色的目的。音频均衡器在各个音乐 app 中,各个 RTC 厂商中都可以设置。以声网的 RTC 的 demo 为例,图中红色的部分就是音频均衡器。:
首先我们来了解一下各个频段对人声的影响。人耳可分辨的声音频率大约是在 20Hz~20kHz,因此调音台中的四段均衡器把其分为的 4 个频段,根据德国柏林音乐研究所资料介绍,它们是:
• HF(高频):6kHz-16kHz,影响音色的表现力、解析力。
• MID HF(中高频):600Hz-6kHz,影响音色的明亮度、清晰度。
• MID LF(中低频):200Hz-600Hz,影响音色和力茺和结实度。
• LF(低频):20Hz-200Hz,影响音色的混厚度和丰满度。
下面是关于调音的一些知识(来源于EQ各频段的基本知识-调音必看),我也没有自己调过,拿出来让大家对各个频段有个感性的认识
EQ 的设计原理不复杂,但是如何调节各个波段的增益保持声音动听这是一大难点。EQ 通常使用滤波器来对各个频段滤波来实现。通常我们会把 EQ 设置为 10 个频段,每个频段有中间频率,截止频率,起始频率。在书籍《Audio Effects》有如下表,其中左边代表倍频,右边代表 1/3 倍频:
根据以上的介绍,我们知道 EQ 中最重要的参数包括:
1)进行增益的中心频率:f0
2) 当前频段要进行的增益:G Gain 增益可以为正为负
3)设定进行增益或衰减频段宽度的参数:Q Quantize,Q 越小,频段越宽;反之,频段越窄。
确定好 EQ 中需要的参数后,下一步就是设计对各个频段进行增益 or 衰减的滤波器,滤波器一般使用 IIR 滤波器,原始数据经过音频滤波后便可达到美声的效果。
滤波器常见的有低通、高通、带通滤波器。这些滤波器都有一个共同的点,理想情况下,在滤波器截止频率范围以外,增益基本为 0。而 EQ 需要对声音某一个或多个频段进行增益或者衰减,其他频段保持不变从而达到调整音色的目的。因此,理想情况下,滤波器截止频率范围以外,增益基本为 1。因此,EQ 中使用的滤波器为 lowself,highself,peak 滤波器。下面详细介绍下这 3 种滤波器。
lowself 滤波器是低通滤波器的一个变形版本,需设置截止频率外增益为 1。因此,lowshelf 滤波器可以认为是低通滤波器在截止频率外并联一个直通信号。
lowself 滤波器的增益曲线为:
一阶 lowself 滤波器的传输函数表示为:
其中 A(z)是一个一阶全通滤波器。
highself 滤波器与 lowself 的设计是一样的。只需要将 Z 变化为 1/Z 即可。
highself 滤波器的增益曲线为:
peak 滤波器是带通滤波器的变形。
滤波器的增益曲线为:
一阶 peak 滤波器设计为
其中 A2(z)为一个二阶全通滤波器
这里我对各个滤波器的传输函数介绍的比较简易:详细的可以看一阶shelf IIR数字滤波器的设计和实现和IIR peaking filter探秘。
对于 EQ 各个频段使用滤波器时,第一个频段需要使用 lowshelf filter,最后一个频段使用 highshelf filter,其余频段使用 peak filter
滤波器使用二阶的 IIR 滤波器,可以表示为
频域行为:
b0 + b1*z^-1 + b2*z^-2
H(z) = ------------------------
a0 + a1*z^-1 + a2*z^-2
时域形式为:
y[n] = (b0/a0)*x[n] + (b1/a0)*x[n-1] + (b2/a0)*x[n-2]- (a1/a0)*y[n-1] - (a2/a0)*y[n-2]
求解滤波器可以使用 Audio_EQ_CookBook 中的方法,Audio_EQ_CookBook 使用双线性变换法将滤波器从 S 域转换到 Z 域,为方便示意,下列参数示意都在 S 域。关于双线性变换法可以参考:知乎-双线性变换法
首先设置中间参数 dBgain 增益 f0 截止频率
A = sqrt( 10^(dBgain/20) )= 10^(dBgain/40)
w0 = 2*pi*f0/Fs
alpha = sin(w0)/(2*Q) (case: Q)
= sin(w0)*sinh( ln(2)/2 * BW * w0/sin(w0) ) (case: BW)
= sin(w0)/2 * sqrt( (A + 1/A)*(1/S - 1) + 2 ) (case: S)
loweshelf filter 设计为
H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1)
//计算可得IIR滤波器参数为:
b0 = A*( (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha )
b1 = 2*A*( (A-1) - (A+1)*cos(w0) )
b2 = A*( (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha )
a0 = (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha
a1 = -2*( (A-1) + (A+1)*cos(w0) )
a2 = (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha
highshelf filter 设计为
H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A)
b0 = A*( (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha )
b1 = -2*A*( (A-1) + (A+1)*cos(w0) )
b2 = A*( (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha )
a0 = (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha
a1 = 2*( (A-1) - (A+1)*cos(w0) )
a2 = (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha
peak filter 设计为
H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1)
b0 = 1 + alpha*A
b1 = -2*cos(w0)
b2 = 1 - alpha*A
a0 = 1 + alpha/A
a1 = -2*cos(w0)
a2 = 1 - alpha/A
开源音频编辑软件 audacity 实现了 EQ,可参照其实现自己的 EQ。
本文介绍了音频 EQ 及其原理,侧重点还是在 EQ 的滤波器的设计上。EQ 的滤波器一般使用 IIR 滤波器,这样节省了很多运算复杂度,但是实现 IIR 滤波器的时候,一定要考虑滤波器的稳定性。关于 EQ 的代码剖析,如果有时间,会补上。
领取专属 10元无门槛券
私享最新 技术干货