基于安卓系统的均衡器算法的仿真及应用

2020-12-28 08:09林金阳庄伟达
福建工程学院学报 2020年6期
关键词:均衡器巴特高阶

林金阳,庄伟达

(福建工程学院 微电子技术研究中心,福建 福州 350118)

近年来,数字均衡器算法随音频质量需求的提升也在不断发展,但与应用平台的结合研究相对较少。如今基于安卓系统的智能手机市场占有率达80%以上,数字均衡器算法与安卓系统的结合应用很重要[1],对安卓系统平台音效处理的研究也尤为必要[1-2]。

目前主流安卓系统中的音频均衡器部分,其原生Audio Effect框架仅能支持16 bit音频数据处理,对更为流行的32 bit音频缺乏支持。FFmpeg是一个集多媒体转码、音视频流化传输于一体的第三方开源框架,能够实现对音频数据及视频数据的编解码工作,支持各种格式的转换,广泛应用于各类音乐播放软件、视频播放软件以及直播软件中[3-5]。FFmpeg开源音视频框架包含有许多均衡器算法,如allpass、anequalizer、bandpass、bass、biquad以及treble等[6]。本研究选用安卓平台深入分析高阶音频参数多波段均衡器算法,并进行仿真验证和应用研究。

1 高阶音频参数多波段均衡器分析与仿真

1.1 算法运行流程分析

音频均衡器算法实际上就是滤波器原理设计,可分为3步。首先,获得具体的模拟域的传输函数模型,根据每个类型的滤波器推导出具体的设计参数;其次,根据双线性变换法把第一步得到的滤波器数字化;最后,根据频率变换把数字化后的数字低通滤波器转换到对应的中心频率点。FFmpeg音视频框架中的高阶音频参数多波段均衡器算法便是遵循该设计方法所得,该算法中共包含3种原型滤波器类型,依次为巴特沃斯型、切比雪夫I型以及切比雪夫II型[7]。

在使用时,FFmpeg根据音频数据的带宽不同选用相应的类型进行数据处理,最后通过差分方程计算得到新的音频数据并输出,本研究选用与平台音频均衡器框架结合较好的巴特沃斯型作为滤波器,具体过程如下:

(1)根据系统输入的增益大小进行带宽增益的计算,在高阶音频参数多波段均衡器算法中,该部分为compute_bw_gain_db;

(2)计算滤波器设计参数进而得到滤波器系数,在高阶音频参数多波段均衡器算法中,此部分为bp_filter;

(3)最后,经由差分方程计算获得经过处理后的输出数据,在高阶音频参数多波段均衡器算法中,差分方程计算由fo_section部分完成[8]。

分析高阶音频参数多波段均衡器算法源码可知,当音频数据输入,系统首先需要根据用户设置的峰值增益G计算出对应的带宽增益GB;再根据每个类型的滤波器传输函数模型推导出滤波器设计参数,不同类型的滤波器所需计算的设计参数也不一样,从而获得不同的数字低通坡型滤波器系数a0…a4和b0…b4,以及带通均衡器二阶和四阶子块的系数a0…a4和b0…b4;最后由输入的音频数据以及计算所得滤波器系数根据系统的差分方程计算得到新的输出,至此用户所设增益才算生效。图1为FFmpeg的运行流程图。

图1 FFmpeg主要部分运行流程Fig.1 Workflow of the major part of FFmpeg

1.2 带宽增益计算

在响应用户设置增益时,多频段音频均衡器的相邻频段通常会相互影响,使得音频均衡器系统无法得到一个较为平坦的通带。所以,在高阶音频参数多波段均衡器算法中,针对不同类型的滤波器特点设计相应的带宽增益计算方法。相对切比雪夫I型以及切比雪夫II型滤波器,巴特沃斯型与Android系统结合的效果更好,故本研究仅选用巴特沃斯型滤波器进行算法仿真及音频均衡器开发[9]。

针对巴特沃斯型滤波器,高阶音频参数多波段均衡器算法设计其带宽增益计算公式为:

(1)

1.3 巴特沃斯型音频均衡算法部分

针对巴特沃斯型滤波器的零极点进行计算可得,巴特沃斯型滤波器模拟域传输函数为:

Ha(s)=

(2)

其中,各设计参数定义为:

g=G1/N

(3)

(4)

β=ε-1/NΩB=ε-1/Ntan(Δω/2)

(5)

ΩB=tan(Δω/2)

(6)

式中,设左边界频率f1转换到数字域为ω1,右边界频率f2转换到数字域为ω2,则Δω=ω1-ω2。

(7)

ui=(2i-1)/N,i=1,2,…,L

(8)

si=sin(π×ui/2),i=1,2,…,L

(9)

(10)

根据高阶音频参数多波段均衡器算法源码可知,其算法中N为4,L为2。

得到上述模拟域传输函数以及各设计参数后,应用双线性变换公式便可推出系数计算式[10],在高阶音频参数多波段均衡器算法源码中,其系数计算部分分为两种情况:

当c0=cosω0的值为1或-1时,

(11)

当c0=cosω0的值不为1或-1时,

(12)

1.4 差分方程计算

通过参数计算后,得到根据用户所设增益大小计算而来的滤波器系数a0…a4和b0…b4,差分方程的作用就是将前文计算所得的滤波器系数与原始音频的数据进行计算,得到新的音频数据。在高阶音频参数多波段均衡器算法中,也有其自己选用的差分方程式,差分方程的具体计算式为:

y[n]=b0×X[n]+b1×X[n-1]+

b2×X[n-2]+b3×X[n-3]+

b4×X[n-4]-a1×y[n-1]-

a2×y[n-2]-a3×y[n-3]-

a4×y[n-4]

(13)

式中y[n]为输出,X[n]、X[n-1]、X[n-2]、X[n-3]、X[n-4] 、y[n-1]、y[n-2]、y[n-3]、y[n-4]为历史音频数据。

根据式(13)计算完成后,输出的音频数据便为与用户设计的增益相匹配的输出,从而可根据用户的偏好调整音乐效果。目前大多数音频均衡器的增益大小设置为[-15,+15]或[-6,+6],而可调频率范围为20 ~20 000 Hz,用户根据个人的听感喜好,调节不同频段的增益大小,系统根据用户的设置,处理完音频数据后输出,便完成了整个音频数据处理的全部流程。

2 仿真与应用分析

2.1 FFmpeg音频均衡器仿真

本研究根据FFmpeg音视频框架中的高阶音频参数多波段均衡器算法原理,选择将其在MATLAB平台进行算法的仿真分析。

图2为巴特沃斯频响曲线,其中曲线为频响曲线,小圆点为所设置增益大小。选定算法后,便可对算法做正确性的验证。以正弦波作为输入波形进行测试。图3为输入波形频率为125 Hz和500 Hz的相应图,横轴为采样点,纵轴为振幅大小。从图3可以看出,该算法经仿真后,可以按照系统设定增益进行工作,正确实现均衡器的功能,符合预期要求。

图2 巴特沃斯频响曲线Fig.2 Frequency response curve of the Butterworth type equalizer algorithm

图3 不同输入波形频率的测试图Fig.3 Diagrams of different input waveform frequencies

2.2 应用分析

根据仿真验证,在Android Studio下进行相关开发操作,首先点击获取音乐列表进行音乐选择,其次选择所需处理声道,可单独选择左声道或右声道,也可选择两个声道同时处理的立体声,然后设置各频段增益,最后点击生成音乐便可在指定路径下生成处理后的输出文件并进行播放。得到处理后的文件后,可将输入以及输出文件载入Adobe Audition软件中,通过该软件得到输入以及输出文件的音频数据,同时依据音频数据便可绘制出其相应的频率分析曲线。

将左声道设置为-15 dB增益,右声道设置为+15 dB增益,对左右声道的处理前后频率进行分析。处理前后左、右声道频率分析曲线对比如图4所示,从图4可以看出,正负增益情况均表现正确。由此可见,将FFmpeg音视频框架中所包含音频均衡器算法应用于Android平台的均衡器开发的方案是可行的,

图4 音效处理频率分析曲线Fig.4 Frequency analysis curves of the audio processing

3 结语

从应用层方向验证了FFmpeg音视频框架中的高阶音频参数多波段均衡器算法在Android平台实现均衡器功能的可行性。采用JNI的开发方式,通过FFmpeg的命令行方式进行了算法的应用方案测试,实验结果表明,高阶音频参数多波段均衡器算法可以在应用层实现均衡器的功能。

但是,对于高阶音频参数多波段均衡器算法的底层移植方案,在测试时还是未能达到开发要求,后续可进一步对原生Audio Effect框架深入分析,并完善算法从浮点到定点的转换工作;完成算法移植后,可仿照原生Audio Effect框架进行新框架的自定义开发,解决其仅支持16 bit支持音频数据处理的问题。

猜你喜欢
均衡器巴特高阶
心情如曲调般平衡缤纷
基于Kalman滤波的水声混合双向迭代信道均衡算法
采用负电容结构的新型CTLE均衡器设计
有限图上高阶Yamabe型方程的非平凡解
高阶各向异性Cahn-Hilliard-Navier-Stokes系统的弱解
滚动轴承寿命高阶计算与应用
巴特王国的故事 第四章 糟糕,假戏做歪了
基于高阶奇异值分解的LPV鲁棒控制器设计
叶尼塞碑铭威巴特第九碑浅释
晨练的男人