如转载请注明出处!
最近工作需要,对Equalizer算法进行了初步研究,并在本地进行了简单实现。
一. 声学背景
心理声学研究证实人耳可闻的声音频率范围为20Hz--20kHz。在可闻的频率范围内,不同的频段对人耳的感知影响不同。
如下所述:
“1. 20Hz--60Hz部分
这一段提升能给音乐强有力的感觉,给人很响的感觉,如雷声。是音乐中强劲有力的感觉。如果提升过高,则又会混浊不清,造成清晰度不佳,特别是低频响应差和低频过重的音响设备。
2. 60Hz--250Hz部分
这段是音乐的低频结构,它们包含了节奏部分的基础音,包括基音、节奏音的主音。它和高中音的比例构成了音 {MOD}结构的平衡特性。提升这一段可使声音丰满,过度提升会发出隆隆声。衰减这两段会使声音单薄。
3. 250Hz--2KHz部分
这段包含了大多数乐器的低频谐波,如果提升过多会使声音像电话里的声音。如把600Hz和1kHz过度提升会使声音像喇叭的声音。如把3kHz提升过多会掩蔽说话的识别音,即口齿不清,并使唇音“mbv”难以分辨。如把1kHz和3kHz过分提升会使声音具有金属感。由于人耳对这一频段比较敏感,通常不调节这一段,过分提升这一段会使听觉疲劳。
4. 2KHz--4kHz部分
这段频率属中频,如果提升得过高会掩盖说话的识别音,尤其是3kHz提升过高,会引起听觉疲劳。
5. 4kHz--5KHz部分
这是具有临场感的频段,它影响语言和乐器等声音的清晰度。提升这一频段,使人感觉声源与听者的距离显得稍近了一些;衰减5kHz,就会使声音的距离感变远;如果在5kHz左右提出升6dB,则会使整个混合声音的声功率提升3dB。
6. 6kHz--16kHz部分
这一频段控制着音 {MOD}的明亮度,宏亮度和清晰度。一般来说提升这几段使声音宏亮,但不清晰,不可能会引起齿音过重,衰减时声音变得清晰,但声音不宏亮。”
二. 数字信号处理原理
从声学原理出发,Equalizer的物理意义在于通过对频域进行频带划分(根据个人需要,通常为5,10,12,15个子带)并对不同的频带施加相应的增益,从而改变原始数据频域能量分布,达到改变主观听感的作用(常用的低音增强bassboost效果也可通过该方式实现)。常用的Equalizer分类包含Pop(流行乐), Jazz(爵士), HeavyMetal(重金属),Electronic(电音),Classic(古典)等等
在移动端实现Equalizer是,考虑到实时处理特性(特别对于第三方APK不能利用底层系统底层编译处理),尽量避免FFT切换到频域处理,而采用时域滤波的方式。因此可以考虑利用IIR滤波器的进行时域的滤波处理。
设滤波系统传递函数H(z),原始音频通过滤波系统,输出Y(z) = X(z)*H(z)。考虑到频带的划分及频带滤波增益。最终的信号输出
其中BandCount表示划分的子带个数;系数a表示对应频带的增益;H(w)为对用频段的带通滤波器传递函数。
滤波系统H(z)的常规表示为:
转换到时域系统单位冲击响应表示为:
三. 工程实现
1. 首先确定设计EQ的频带分割数。5,10,或者其它个数、
2. 根据所划分的频带,确定其截至频率并构建带通滤波器。
通常可采用ButterWorth滤波器,以10个频带为例,可以设计一个低通,一个高通,八个带通。通过此步骤,来确定每个频带对用的滤波器系数。另外,考虑到实时处理特性,滤波器的阶数不宜过高,以减少滤波处理延时。
3. 对输入的信号进行时域滤波。
工程实现中,将每个时域输入点分别经过所有的滤波器,并将每个滤波器的输出加权求和。鉴于采用的IIR滤波器要参考之前的输入和输出,可采用环形buffer来更新存储x(n-k)和y(n-k).
注意:在切换音频帧后,不能对环形buffer进行重置位操作,x(n-k)和y(n-k)独立于数据帧,贯穿整个音频数据处理。
时域滤波及最终的输出数据如下式:
四. 实验结果
下面给出pop处理结果:
如转载请注明出处!
最近工作需要,对Equalizer算法进行了初步研究,并在本地进行了简单实现。
一. 声学背景
心理声学研究证实人耳可闻的声音频率范围为20Hz--20kHz。在可闻的频率范围内,不同的频段对人耳的感知影响不同。
如下所述:
“1. 20Hz--60Hz部分
这一段提升能给音乐强有力的感觉,给人很响的感觉,如雷声。是音乐中强劲有力的感觉。如果提升过高,则又会混浊不清,造成清晰度不佳,特别是低频响应差和低频过重的音响设备。
2. 60Hz--250Hz部分
这段是音乐的低频结构,它们包含了节奏部分的基础音,包括基音、节奏音的主音。它和高中音的比例构成了音 {MOD}结构的平衡特性。提升这一段可使声音丰满,过度提升会发出隆隆声。衰减这两段会使声音单薄。
3. 250Hz--2KHz部分
这段包含了大多数乐器的低频谐波,如果提升过多会使声音像电话里的声音。如把600Hz和1kHz过度提升会使声音像喇叭的声音。如把3kHz提升过多会掩蔽说话的识别音,即口齿不清,并使唇音“mbv”难以分辨。如把1kHz和3kHz过分提升会使声音具有金属感。由于人耳对这一频段比较敏感,通常不调节这一段,过分提升这一段会使听觉疲劳。
4. 2KHz--4kHz部分
这段频率属中频,如果提升得过高会掩盖说话的识别音,尤其是3kHz提升过高,会引起听觉疲劳。
5. 4kHz--5KHz部分
这是具有临场感的频段,它影响语言和乐器等声音的清晰度。提升这一频段,使人感觉声源与听者的距离显得稍近了一些;衰减5kHz,就会使声音的距离感变远;如果在5kHz左右提出升6dB,则会使整个混合声音的声功率提升3dB。
6. 6kHz--16kHz部分
这一频段控制着音 {MOD}的明亮度,宏亮度和清晰度。一般来说提升这几段使声音宏亮,但不清晰,不可能会引起齿音过重,衰减时声音变得清晰,但声音不宏亮。”
二. 数字信号处理原理
从声学原理出发,Equalizer的物理意义在于通过对频域进行频带划分(根据个人需要,通常为5,10,12,15个子带)并对不同的频带施加相应的增益,从而改变原始数据频域能量分布,达到改变主观听感的作用(常用的低音增强bassboost效果也可通过该方式实现)。常用的Equalizer分类包含Pop(流行乐), Jazz(爵士), HeavyMetal(重金属),Electronic(电音),Classic(古典)等等
在移动端实现Equalizer是,考虑到实时处理特性(特别对于第三方APK不能利用底层系统底层编译处理),尽量避免FFT切换到频域处理,而采用时域滤波的方式。因此可以考虑利用IIR滤波器的进行时域的滤波处理。
设滤波系统传递函数H(z),原始音频通过滤波系统,输出Y(z) = X(z)*H(z)。考虑到频带的划分及频带滤波增益。最终的信号输出
其中BandCount表示划分的子带个数;系数a表示对应频带的增益;H(w)为对用频段的带通滤波器传递函数。
滤波系统H(z)的常规表示为:
转换到时域系统单位冲击响应表示为:
三. 工程实现
1. 首先确定设计EQ的频带分割数。5,10,或者其它个数、
2. 根据所划分的频带,确定其截至频率并构建带通滤波器。
通常可采用ButterWorth滤波器,以10个频带为例,可以设计一个低通,一个高通,八个带通。通过此步骤,来确定每个频带对用的滤波器系数。另外,考虑到实时处理特性,滤波器的阶数不宜过高,以减少滤波处理延时。
3. 对输入的信号进行时域滤波。
工程实现中,将每个时域输入点分别经过所有的滤波器,并将每个滤波器的输出加权求和。鉴于采用的IIR滤波器要参考之前的输入和输出,可采用环形buffer来更新存储x(n-k)和y(n-k).
注意:在切换音频帧后,不能对环形buffer进行重置位操作,x(n-k)和y(n-k)独立于数据帧,贯穿整个音频数据处理。
时域滤波及最终的输出数据如下式:
四. 实验结果
下面给出pop处理结果: