林金陽,莊偉達(dá)
(福建工程學(xué)院 微電子技術(shù)研究中心,福建 福州 350118)
近年來,數(shù)字均衡器算法隨音頻質(zhì)量需求的提升也在不斷發(fā)展,但與應(yīng)用平臺(tái)的結(jié)合研究相對較少。如今基于安卓系統(tǒng)的智能手機(jī)市場占有率達(dá)80%以上,數(shù)字均衡器算法與安卓系統(tǒng)的結(jié)合應(yīng)用很重要[1],對安卓系統(tǒng)平臺(tái)音效處理的研究也尤為必要[1-2]。
目前主流安卓系統(tǒng)中的音頻均衡器部分,其原生Audio Effect框架僅能支持16 bit音頻數(shù)據(jù)處理,對更為流行的32 bit音頻缺乏支持。FFmpeg是一個(gè)集多媒體轉(zhuǎn)碼、音視頻流化傳輸于一體的第三方開源框架,能夠?qū)崿F(xiàn)對音頻數(shù)據(jù)及視頻數(shù)據(jù)的編解碼工作,支持各種格式的轉(zhuǎn)換,廣泛應(yīng)用于各類音樂播放軟件、視頻播放軟件以及直播軟件中[3-5]。FFmpeg開源音視頻框架包含有許多均衡器算法,如allpass、anequalizer、bandpass、bass、biquad以及treble等[6]。本研究選用安卓平臺(tái)深入分析高階音頻參數(shù)多波段均衡器算法,并進(jìn)行仿真驗(yàn)證和應(yīng)用研究。
音頻均衡器算法實(shí)際上就是濾波器原理設(shè)計(jì),可分為3步。首先,獲得具體的模擬域的傳輸函數(shù)模型,根據(jù)每個(gè)類型的濾波器推導(dǎo)出具體的設(shè)計(jì)參數(shù);其次,根據(jù)雙線性變換法把第一步得到的濾波器數(shù)字化;最后,根據(jù)頻率變換把數(shù)字化后的數(shù)字低通濾波器轉(zhuǎn)換到對應(yīng)的中心頻率點(diǎn)。FFmpeg音視頻框架中的高階音頻參數(shù)多波段均衡器算法便是遵循該設(shè)計(jì)方法所得,該算法中共包含3種原型濾波器類型,依次為巴特沃斯型、切比雪夫I型以及切比雪夫II型[7]。
在使用時(shí),F(xiàn)Fmpeg根據(jù)音頻數(shù)據(jù)的帶寬不同選用相應(yīng)的類型進(jìn)行數(shù)據(jù)處理,最后通過差分方程計(jì)算得到新的音頻數(shù)據(jù)并輸出,本研究選用與平臺(tái)音頻均衡器框架結(jié)合較好的巴特沃斯型作為濾波器,具體過程如下:
(1)根據(jù)系統(tǒng)輸入的增益大小進(jìn)行帶寬增益的計(jì)算,在高階音頻參數(shù)多波段均衡器算法中,該部分為compute_bw_gain_db;
(2)計(jì)算濾波器設(shè)計(jì)參數(shù)進(jìn)而得到濾波器系數(shù),在高階音頻參數(shù)多波段均衡器算法中,此部分為bp_filter;
(3)最后,經(jīng)由差分方程計(jì)算獲得經(jīng)過處理后的輸出數(shù)據(jù),在高階音頻參數(shù)多波段均衡器算法中,差分方程計(jì)算由fo_section部分完成[8]。
分析高階音頻參數(shù)多波段均衡器算法源碼可知,當(dāng)音頻數(shù)據(jù)輸入,系統(tǒng)首先需要根據(jù)用戶設(shè)置的峰值增益G計(jì)算出對應(yīng)的帶寬增益GB;再根據(jù)每個(gè)類型的濾波器傳輸函數(shù)模型推導(dǎo)出濾波器設(shè)計(jì)參數(shù),不同類型的濾波器所需計(jì)算的設(shè)計(jì)參數(shù)也不一樣,從而獲得不同的數(shù)字低通坡型濾波器系數(shù)a0…a4和b0…b4,以及帶通均衡器二階和四階子塊的系數(shù)a0…a4和b0…b4;最后由輸入的音頻數(shù)據(jù)以及計(jì)算所得濾波器系數(shù)根據(jù)系統(tǒng)的差分方程計(jì)算得到新的輸出,至此用戶所設(shè)增益才算生效。圖1為FFmpeg的運(yùn)行流程圖。
圖1 FFmpeg主要部分運(yùn)行流程Fig.1 Workflow of the major part of FFmpeg
在響應(yīng)用戶設(shè)置增益時(shí),多頻段音頻均衡器的相鄰頻段通常會(huì)相互影響,使得音頻均衡器系統(tǒng)無法得到一個(gè)較為平坦的通帶。所以,在高階音頻參數(shù)多波段均衡器算法中,針對不同類型的濾波器特點(diǎn)設(shè)計(jì)相應(yīng)的帶寬增益計(jì)算方法。相對切比雪夫I型以及切比雪夫II型濾波器,巴特沃斯型與Android系統(tǒng)結(jié)合的效果更好,故本研究僅選用巴特沃斯型濾波器進(jìn)行算法仿真及音頻均衡器開發(fā)[9]。
針對巴特沃斯型濾波器,高階音頻參數(shù)多波段均衡器算法設(shè)計(jì)其帶寬增益計(jì)算公式為:
(1)
針對巴特沃斯型濾波器的零極點(diǎn)進(jìn)行計(jì)算可得,巴特沃斯型濾波器模擬域傳輸函數(shù)為:
Ha(s)=
(2)
其中,各設(shè)計(jì)參數(shù)定義為:
g=G1/N
(3)
(4)
β=ε-1/NΩB=ε-1/Ntan(Δω/2)
(5)
ΩB=tan(Δω/2)
(6)
式中,設(shè)左邊界頻率f1轉(zhuǎn)換到數(shù)字域?yàn)棣?,右邊界頻率f2轉(zhuǎn)換到數(shù)字域?yàn)棣?,則Δω=ω1-ω2。
(7)
ui=(2i-1)/N,i=1,2,…,L
(8)
si=sin(π×ui/2),i=1,2,…,L
(9)
(10)
根據(jù)高階音頻參數(shù)多波段均衡器算法源碼可知,其算法中N為4,L為2。
得到上述模擬域傳輸函數(shù)以及各設(shè)計(jì)參數(shù)后,應(yīng)用雙線性變換公式便可推出系數(shù)計(jì)算式[10],在高階音頻參數(shù)多波段均衡器算法源碼中,其系數(shù)計(jì)算部分分為兩種情況:
當(dāng)c0=cosω0的值為1或-1時(shí),
(11)
當(dāng)c0=cosω0的值不為1或-1時(shí),
(12)
通過參數(shù)計(jì)算后,得到根據(jù)用戶所設(shè)增益大小計(jì)算而來的濾波器系數(shù)a0…a4和b0…b4,差分方程的作用就是將前文計(jì)算所得的濾波器系數(shù)與原始音頻的數(shù)據(jù)進(jìn)行計(jì)算,得到新的音頻數(shù)據(jù)。在高階音頻參數(shù)多波段均衡器算法中,也有其自己選用的差分方程式,差分方程的具體計(jì)算式為:
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]為歷史音頻數(shù)據(jù)。
根據(jù)式(13)計(jì)算完成后,輸出的音頻數(shù)據(jù)便為與用戶設(shè)計(jì)的增益相匹配的輸出,從而可根據(jù)用戶的偏好調(diào)整音樂效果。目前大多數(shù)音頻均衡器的增益大小設(shè)置為[-15,+15]或[-6,+6],而可調(diào)頻率范圍為20 ~20 000 Hz,用戶根據(jù)個(gè)人的聽感喜好,調(diào)節(jié)不同頻段的增益大小,系統(tǒng)根據(jù)用戶的設(shè)置,處理完音頻數(shù)據(jù)后輸出,便完成了整個(gè)音頻數(shù)據(jù)處理的全部流程。
本研究根據(jù)FFmpeg音視頻框架中的高階音頻參數(shù)多波段均衡器算法原理,選擇將其在MATLAB平臺(tái)進(jìn)行算法的仿真分析。
圖2為巴特沃斯頻響曲線,其中曲線為頻響曲線,小圓點(diǎn)為所設(shè)置增益大小。選定算法后,便可對算法做正確性的驗(yàn)證。以正弦波作為輸入波形進(jìn)行測試。圖3為輸入波形頻率為125 Hz和500 Hz的相應(yīng)圖,橫軸為采樣點(diǎn),縱軸為振幅大小。從圖3可以看出,該算法經(jīng)仿真后,可以按照系統(tǒng)設(shè)定增益進(jìn)行工作,正確實(shí)現(xiàn)均衡器的功能,符合預(yù)期要求。
圖2 巴特沃斯頻響曲線Fig.2 Frequency response curve of the Butterworth type equalizer algorithm
圖3 不同輸入波形頻率的測試圖Fig.3 Diagrams of different input waveform frequencies
根據(jù)仿真驗(yàn)證,在Android Studio下進(jìn)行相關(guān)開發(fā)操作,首先點(diǎn)擊獲取音樂列表進(jìn)行音樂選擇,其次選擇所需處理聲道,可單獨(dú)選擇左聲道或右聲道,也可選擇兩個(gè)聲道同時(shí)處理的立體聲,然后設(shè)置各頻段增益,最后點(diǎn)擊生成音樂便可在指定路徑下生成處理后的輸出文件并進(jìn)行播放。得到處理后的文件后,可將輸入以及輸出文件載入Adobe Audition軟件中,通過該軟件得到輸入以及輸出文件的音頻數(shù)據(jù),同時(shí)依據(jù)音頻數(shù)據(jù)便可繪制出其相應(yīng)的頻率分析曲線。
將左聲道設(shè)置為-15 dB增益,右聲道設(shè)置為+15 dB增益,對左右聲道的處理前后頻率進(jìn)行分析。處理前后左、右聲道頻率分析曲線對比如圖4所示,從圖4可以看出,正負(fù)增益情況均表現(xiàn)正確。由此可見,將FFmpeg音視頻框架中所包含音頻均衡器算法應(yīng)用于Android平臺(tái)的均衡器開發(fā)的方案是可行的,
圖4 音效處理頻率分析曲線Fig.4 Frequency analysis curves of the audio processing
從應(yīng)用層方向驗(yàn)證了FFmpeg音視頻框架中的高階音頻參數(shù)多波段均衡器算法在Android平臺(tái)實(shí)現(xiàn)均衡器功能的可行性。采用JNI的開發(fā)方式,通過FFmpeg的命令行方式進(jìn)行了算法的應(yīng)用方案測試,實(shí)驗(yàn)結(jié)果表明,高階音頻參數(shù)多波段均衡器算法可以在應(yīng)用層實(shí)現(xiàn)均衡器的功能。
但是,對于高階音頻參數(shù)多波段均衡器算法的底層移植方案,在測試時(shí)還是未能達(dá)到開發(fā)要求,后續(xù)可進(jìn)一步對原生Audio Effect框架深入分析,并完善算法從浮點(diǎn)到定點(diǎn)的轉(zhuǎn)換工作;完成算法移植后,可仿照原生Audio Effect框架進(jìn)行新框架的自定義開發(fā),解決其僅支持16 bit支持音頻數(shù)據(jù)處理的問題。