音频均衡器Equalizer算法研究与实现
来源:互联网 发布:淘宝中差评沟通技巧 编辑:程序博客网 时间:2024/04/29 17:29
如转载请注明出处!
最近工作需要,对Equalizer算法进行了初步研究,并在本地进行了简单实现。
一. 声学背景
心理声学研究证实人耳可闻的声音频率范围为20Hz--20kHz。在可闻的频率范围内,不同的频段对人耳的感知影响不同。
如下所述:
“1. 20Hz--60Hz部分
这一段提升能给音乐强有力的感觉,给人很响的感觉,如雷声。是音乐中强劲有力的感觉。如果提升过高,则又会混浊不清,造成清晰度不佳,特别是低频响应差和低频过重的音响设备。
2. 60Hz--250Hz部分
这段是音乐的低频结构,它们包含了节奏部分的基础音,包括基音、节奏音的主音。它和高中音的比例构成了音色结构的平衡特性。提升这一段可使声音丰满,过度提升会发出隆隆声。衰减这两段会使声音单薄。
3. 250Hz--2KHz部分
这段包含了大多数乐器的低频谐波,如果提升过多会使声音像电话里的声音。如把600Hz和1kHz过度提升会使声音像喇叭的声音。如把3kHz提升过多会掩蔽说话的识别音,即口齿不清,并使唇音“mbv”难以分辨。如把1kHz和3kHz过分提升会使声音具有金属感。由于人耳对这一频段比较敏感,通常不调节这一段,过分提升这一段会使听觉疲劳。
4. 2KHz--4kHz部分
这段频率属中频,如果提升得过高会掩盖说话的识别音,尤其是3kHz提升过高,会引起听觉疲劳。
5. 4kHz--5KHz部分
这是具有临场感的频段,它影响语言和乐器等声音的清晰度。提升这一频段,使人感觉声源与听者的距离显得稍近了一些;衰减5kHz,就会使声音的距离感变远;如果在5kHz左右提出升6dB,则会使整个混合声音的声功率提升3dB。
6. 6kHz--16kHz部分
这一频段控制着音色的明亮度,宏亮度和清晰度。一般来说提升这几段使声音宏亮,但不清晰,不可能会引起齿音过重,衰减时声音变得清晰,但声音不宏亮。”
二. 数字信号处理原理
从声学原理出发,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部分
这段是音乐的低频结构,它们包含了节奏部分的基础音,包括基音、节奏音的主音。它和高中音的比例构成了音色结构的平衡特性。提升这一段可使声音丰满,过度提升会发出隆隆声。衰减这两段会使声音单薄。
3. 250Hz--2KHz部分
这段包含了大多数乐器的低频谐波,如果提升过多会使声音像电话里的声音。如把600Hz和1kHz过度提升会使声音像喇叭的声音。如把3kHz提升过多会掩蔽说话的识别音,即口齿不清,并使唇音“mbv”难以分辨。如把1kHz和3kHz过分提升会使声音具有金属感。由于人耳对这一频段比较敏感,通常不调节这一段,过分提升这一段会使听觉疲劳。
4. 2KHz--4kHz部分
这段频率属中频,如果提升得过高会掩盖说话的识别音,尤其是3kHz提升过高,会引起听觉疲劳。
5. 4kHz--5KHz部分
这是具有临场感的频段,它影响语言和乐器等声音的清晰度。提升这一频段,使人感觉声源与听者的距离显得稍近了一些;衰减5kHz,就会使声音的距离感变远;如果在5kHz左右提出升6dB,则会使整个混合声音的声功率提升3dB。
6. 6kHz--16kHz部分
这一频段控制着音色的明亮度,宏亮度和清晰度。一般来说提升这几段使声音宏亮,但不清晰,不可能会引起齿音过重,衰减时声音变得清晰,但声音不宏亮。”
二. 数字信号处理原理
从声学原理出发,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算法研究与实现
- 音频均衡器Equalizer算法研究与实现
- 音频Equalizer算法研究与实现
- [DirectSound] 基于DirectSound的音频均衡器实现
- 算法系列之二十四:离散傅立叶变换之音频播放与均衡器
- 基于MEL算法的音频ID比对技术的研究与实现[00原创]
- Unity中实现获取音频的频谱的可视化均衡器
- 电脑音频均衡器使用方法
- HAProxy负载均衡器的配置与算法
- Android OpenSLES 实现Equalizer
- 声音处理中Equalizer(均衡器)的原理
- AudioEffect中如何应用Equalizer均衡器控制改变音量
- CRC编码算法研究与实现
- RSA算法研究与PYTHON实现
- 【算法研究与实现】最小二乘法直线拟合
- 【算法研究与实现】最小二乘法直线拟合
- Ogre与Equalizer的集成
- 窗体分割与合并算法的研究与实现
- js 文本输入判断 及 正则表达式判断 总结
- Java并发概念汇总
- weka数据准备
- Shader学习笔录--Unity3D教程宝典之Shader篇:第一讲Shader总篇
- 【深入了解cocos2d-x 3.x】定时器(scheduler)的使用和原理探究(1)
- 音频均衡器Equalizer算法研究与实现
- Algorithms—13.Roman to Integer
- JMeter报错the target server failed to respond--JMeter的坑
- 深入理解Java虚拟机到底是什么
- 黑马程序员——java基础——异常笔记
- poj 2479 Maximum sum
- android - lint 常见错误
- TP excel 导入类
- iOS通过http post上传图片