孫 王 楊永全 宮飛翔
基于Speex的音頻壓縮算法分析與優(yōu)化
孫 王 楊永全 宮飛翔
隨著移動(dòng)互聯(lián)網(wǎng)的深入普及,人們?cè)絹?lái)越習(xí)慣通過(guò)語(yǔ)音發(fā)送消息來(lái)代替文字輸入。因此,改善音頻壓縮質(zhì)量會(huì)提高語(yǔ)音的傳輸效率。本文提出了一種改進(jìn)了在無(wú)線網(wǎng)絡(luò)環(huán)境中speex音頻數(shù)據(jù)壓縮的方法,該方法先將原有的碼激勵(lì)線性預(yù)測(cè)編碼技術(shù)(CELP)中的感覺加權(quán)過(guò)濾器進(jìn)行了簡(jiǎn)化,再將語(yǔ)音編碼中基音搜索的計(jì)算復(fù)雜度進(jìn)行簡(jiǎn)化,并在基于XMPP協(xié)議的即時(shí)通訊系統(tǒng)中進(jìn)行實(shí)驗(yàn)驗(yàn)證。使得在高壓縮比的情況下降低CPU運(yùn)算復(fù)雜度,保證了音頻數(shù)據(jù)傳輸?shù)牡脱舆t性。
社交網(wǎng)絡(luò)成為目前互聯(lián)網(wǎng)上最為流行的溝通方式之一,互聯(lián)網(wǎng)提供了文字、圖片、語(yǔ)音、視頻等豐富多樣的媒介方式來(lái)滿足人們?nèi)粘5慕涣?。伴隨著智能手機(jī)日益的普及,人們通過(guò)手機(jī)IM(Instant Message)交流的需求也日益擴(kuò)大,尤其是語(yǔ)音信息的交流,大大增加了人們的溝通效率。但通常IM協(xié)議中沒(méi)有對(duì)語(yǔ)音傳輸提供很好的支持,它們一般將音頻以文件的方式進(jìn)行傳輸,沒(méi)有考慮到無(wú)線網(wǎng)絡(luò)環(huán)境中流量的問(wèn)題和移動(dòng)設(shè)備中系統(tǒng)資源的使用效率。除此之外,各移動(dòng)平臺(tái)設(shè)備的音頻格式也不盡相同,在不同平臺(tái)上的音頻轉(zhuǎn)碼會(huì)消耗更多系統(tǒng)資源。因此,需要實(shí)現(xiàn)一個(gè)高壓縮比和低資源消耗的音頻壓縮,以適應(yīng)無(wú)線網(wǎng)絡(luò)中語(yǔ)音通信的需求。
Speex是一種基于CELP編碼技術(shù)的開源算法,在網(wǎng)絡(luò)通話的應(yīng)用背景下而提出。該算法靈活多變,具有多采樣率、多碼率、高壓縮比等特性,非常適合在無(wú)線網(wǎng)絡(luò)環(huán)境中進(jìn)行語(yǔ)音傳輸。然而,早期CELP(碼激勵(lì)線性預(yù)測(cè))編碼技術(shù)的運(yùn)算量比較大。為適應(yīng)其在移動(dòng)端上應(yīng)用,在簡(jiǎn)單介紹Speex的編碼原理后,從感覺加權(quán)過(guò)濾器和基音搜索中的互相關(guān)計(jì)算方法進(jìn)行簡(jiǎn)化和調(diào)整,使其在保持高壓縮比和前提下減少CPU占有率,提高編碼效率。
Speex編碼原理
CELP全稱為碼激勵(lì)線性預(yù)測(cè),是用碼本(信號(hào)集)作為激勵(lì)源,根據(jù)語(yǔ)音發(fā)音的特點(diǎn),通過(guò)激勵(lì)源中濁音和清音的不同來(lái)創(chuàng)建碼本:自適應(yīng)碼本和隨機(jī)碼本。自適應(yīng)碼本中的碼矢量用來(lái)逼近語(yǔ)音的長(zhǎng)時(shí)周期性(基音)結(jié)構(gòu)。隨機(jī)碼本中的碼字用來(lái)逼近語(yǔ)音經(jīng)過(guò)短時(shí)、長(zhǎng)時(shí)預(yù)測(cè)后的殘差信號(hào)。編碼器中的分析濾波器用來(lái)計(jì)算兩個(gè)碼本的最優(yōu)碼矢,并預(yù)測(cè)最佳增益矢量后生成殘差激勵(lì)信號(hào)。圖1為語(yǔ)音分析與合成模型圖。
語(yǔ)音分析時(shí),先緩存一幀的語(yǔ)音信號(hào),然后對(duì)該信號(hào)進(jìn)行線性預(yù)測(cè),確定一組LPA(線性預(yù)測(cè))系數(shù),接著利用已確定的LPA系數(shù)和分析濾波器A(z)來(lái)計(jì)算未量化的殘差信號(hào)。在實(shí)際分析中,為提高分析精度,每一幀都會(huì)被分成幾個(gè)子幀來(lái)確定基音預(yù)測(cè)參數(shù),隨后用激勵(lì)碼本中的某矢量合成語(yǔ)音,最后計(jì)算合成語(yǔ)音與原始語(yǔ)音的最小均方誤差作為最佳矢量。
線性預(yù)測(cè)分析
線性預(yù)測(cè)是眾多編碼器的重要成分之一,核心思想是用過(guò)去若干個(gè)語(yǔ)音值加權(quán)線性組合來(lái)預(yù)測(cè)當(dāng)前時(shí)刻語(yǔ)音抽樣值。具體采用最小均方預(yù)測(cè)誤差逼近方法來(lái)實(shí)現(xiàn),公式如下:
y[n]是x[n]的線性預(yù)測(cè)值,其誤差值為:
線性預(yù)測(cè)的目的是為了找到最佳的預(yù)測(cè)因子ai,使得均方誤差值最?。?/p>
其中R(m)是信號(hào)x[ n]的自動(dòng)調(diào)節(jié)系數(shù),該值由公式5計(jì)算得出:
圖1 語(yǔ)音分析與合成模型圖
R(m)是通過(guò)Levinson-Durbin算法求出,該算法可以證明線性預(yù)測(cè)綜合濾波器1/A(z)總是穩(wěn)定的。以上公式的計(jì)算復(fù)雜度比較大,因此在實(shí)際應(yīng)用中使用略大于1的浮點(diǎn)數(shù)與R(0)相乘,相當(dāng)于在信號(hào)中添加微小的噪音來(lái)降低信號(hào)中的共振尖峰。
合成分析
合成分析法通過(guò)感知優(yōu)化閉環(huán)中的解碼信號(hào)來(lái)分析的。其目的是使原始語(yǔ)音和合成語(yǔ)音之間的誤差最小,而評(píng)判誤差則是利用信號(hào)中的余量信息來(lái)確定。余量信息是通過(guò)比較合成語(yǔ)音與原始語(yǔ)音所得,根據(jù)規(guī)定誤差范圍來(lái)動(dòng)態(tài)調(diào)整各個(gè)計(jì)算參數(shù),從而保證兩者信號(hào)之間的誤差最小。
合成分析方式為閉環(huán)分析感知優(yōu)化,閉環(huán)分析是指利用系統(tǒng)輸出引用編碼參數(shù)來(lái)分析,而不將系統(tǒng)輸出引入編碼端則稱為開環(huán)分析。
感覺加權(quán)過(guò)濾
由于混合編碼的合成語(yǔ)音與原始語(yǔ)音在波形上沒(méi)有一一對(duì)應(yīng),為了使語(yǔ)音信號(hào)的合成更符合人類主觀感受,因此在編碼中添加感覺加權(quán)濾波器,使合成的語(yǔ)音主觀上聽起來(lái)更加平滑。感覺加權(quán)濾波器的傳輸公式為:
算法優(yōu)化
語(yǔ)音編碼致力于降低傳輸所需要的信道帶寬和編解碼所需的系統(tǒng)資源,同時(shí)保持輸入語(yǔ)音的質(zhì)量。而為達(dá)到這一目的,在CELP編碼中應(yīng)盡可能的降低編碼復(fù)雜度或以較低的比特率進(jìn)行編碼。本文通過(guò)簡(jiǎn)化濾波器和自適應(yīng)編碼中基音搜索的運(yùn)算量來(lái)減少CPU占有率。
感覺加權(quán)濾波器的調(diào)整
Speex編碼器在語(yǔ)音編碼時(shí)加入了感覺加權(quán)濾波器,而在解碼器中加入了感知加強(qiáng)分析。為減少計(jì)算復(fù)雜度,將其中的感覺加權(quán)過(guò)濾分析進(jìn)行簡(jiǎn)化,以達(dá)到提高編碼速率。編碼語(yǔ)音合成用到感覺加權(quán)分析的有自適應(yīng)碼本、隨機(jī)碼本,自適應(yīng)碼本是對(duì)元音信號(hào)的優(yōu)化,隨機(jī)碼本是對(duì)清音和背景噪音信號(hào)的優(yōu)化。元音信號(hào)具有周期性,信號(hào)能量強(qiáng)特點(diǎn),再加上移動(dòng)端語(yǔ)音輸入模式比較固定,加權(quán)后信號(hào)改變的幅度比較小,因此在這里可以不考慮對(duì)其進(jìn)行感覺加權(quán)分析。而清音信號(hào)沒(méi)有固定周期,信號(hào)較弱,因此保留該處的感覺加權(quán)過(guò)濾。
優(yōu)化前后流程對(duì)比如圖2所示,其中(a)圖為優(yōu)化前程序流程,(b)圖為優(yōu)化后程序流程,W(z)為感覺加權(quán)濾波器。通過(guò)語(yǔ)音質(zhì)量評(píng)估,自適應(yīng)碼本搜索在不通過(guò)感覺加權(quán)過(guò)濾器的情況下,合成語(yǔ)音的質(zhì)量沒(méi)有明顯差別。
簡(jiǎn)化自適應(yīng)碼本的運(yùn)算規(guī)則
簡(jiǎn)化的第二個(gè)思路為減少自適應(yīng)碼本中語(yǔ)音幀的樣點(diǎn)分析值,根據(jù)移動(dòng)客戶端語(yǔ)音輸入的環(huán)境,通過(guò)減少樣點(diǎn)值計(jì)算的復(fù)雜度來(lái)分析最終合成語(yǔ)音的質(zhì)量。
在自適應(yīng)碼本的基音周期搜索中,這種傳統(tǒng)的運(yùn)算方法可用公式7表示:
圖2 調(diào)整前后的編碼圖
可以看出傳統(tǒng)的自適應(yīng)碼本搜索算法中,基音周期的搜索需通過(guò)127次頻率帶寬對(duì)比,每次對(duì)比還需要分析40個(gè)樣點(diǎn),在社交網(wǎng)絡(luò)的語(yǔ)音傳輸中,這種運(yùn)算量過(guò)于復(fù)雜,尤其是在移動(dòng)端。為了降低運(yùn)算復(fù)雜度,在原先的算法基礎(chǔ)上,采取一種簡(jiǎn)單的搜索算法。其算法可以用公式8表示:
從簡(jiǎn)化后的公式可以看出,樣點(diǎn)數(shù)由原來(lái)的40減少到現(xiàn)在的10個(gè),當(dāng)n=0時(shí),xa(0),xb(0)分別表示樣點(diǎn)值的最大值和最小值,從最值兩邊再取兩個(gè)相鄰點(diǎn)來(lái)保證運(yùn)算的預(yù)測(cè)值相差不大。因?yàn)樵谧赃m應(yīng)碼本中,語(yǔ)音信號(hào)的能量比較大,其頻率分布與基音周期值近似相等,在解碼時(shí),其近似運(yùn)算結(jié)果所解析的語(yǔ)音質(zhì)量可以滿足大部分移動(dòng)網(wǎng)絡(luò)的要求。與公式7相比,其運(yùn)算量有明顯降低。
本次測(cè)試將從語(yǔ)音質(zhì)量評(píng)估和CPU占有率兩方面來(lái)判斷speex算法優(yōu)化效果。測(cè)試的樣本會(huì)在三種噪音環(huán)境下產(chǎn)生,其中語(yǔ)音質(zhì)量評(píng)估采用ITU的P.862來(lái)評(píng)分,評(píng)分值為MOS(平均主觀評(píng)分),MOS值的區(qū)間為0-5.0,音質(zhì)越好,評(píng)分越高。語(yǔ)音波形圖則借助Adobe Audition軟件,語(yǔ)音內(nèi)容為“今天是農(nóng)歷初八”。
圖3 安靜環(huán)境下波形對(duì)比
圖4 低噪環(huán)境下波形對(duì)比
圖5 高噪聲環(huán)境下波形對(duì)比
圖6 安靜環(huán)境下波形放大對(duì)比
圖3至圖5分別為安靜、低噪和高噪聲三種環(huán)境下語(yǔ)音波形對(duì)比圖,第一條波形圖為優(yōu)化前的speex算法波形圖,第二條為優(yōu)化后的波形圖??梢钥闯?,兩條波形圖大體一致,背景環(huán)境越安靜,波形越一致。噪聲越大,對(duì)自適應(yīng)碼本中元音發(fā)音的干擾更加強(qiáng)烈,即計(jì)算所得的偏差度越大。
圖6為是將圖3中波形信號(hào)放大32倍后的波形對(duì)比圖,圖中第一條波形為原始語(yǔ)音波形,隨后分別是算法優(yōu)化前和優(yōu)化后的波形。從第二、第三條波形中可以看出,speex算法所產(chǎn)生的語(yǔ)音質(zhì)量較好,音質(zhì)比較平滑。對(duì)比后兩條波形圖可以觀察到未優(yōu)化的波形更為細(xì)膩,而優(yōu)化后的波形雖不如前者細(xì)致,但總體上保持音質(zhì)與前者一致,音質(zhì)的實(shí)際效果也沒(méi)有發(fā)生明顯差別。這主要是算法簡(jiǎn)化過(guò)程中減少幀的采樣分析所致,基音搜索從默認(rèn)的40個(gè)減少到10個(gè)。
實(shí)際上,語(yǔ)音的編碼是在編碼復(fù)雜度和語(yǔ)音質(zhì)量之間尋找平衡,不同的應(yīng)用需求會(huì)在此兩者上尋找不同的平衡點(diǎn)。表1為speex算法優(yōu)化前后音質(zhì)與復(fù)雜度的對(duì)比。從表格中可以看出噪聲越大,算法復(fù)雜度越高,這是因?yàn)閟peex編碼過(guò)程中有噪聲預(yù)處理階段,該過(guò)程會(huì)增加編碼的復(fù)雜度。在安靜環(huán)境下,MOS值相差0.05,高噪聲中MOS值相差0.15,表明MOS的差值也會(huì)隨著噪聲的增加而增大。
表1 Speex優(yōu)化前后語(yǔ)音質(zhì)量和復(fù)雜度對(duì)比
優(yōu)化后算法的MOS值與原算法的差幅約為0.1,占總分值的2%。而計(jì)算復(fù)雜度卻有8%的提高??梢钥闯?,優(yōu)化后的speex算法具有實(shí)用性。
在不影響語(yǔ)音質(zhì)量的前提下,通過(guò)對(duì)speex壓縮算法中感覺加權(quán)過(guò)濾器和基音搜索過(guò)程中采樣值分析的簡(jiǎn)化,來(lái)降低編碼復(fù)雜度,提升了系統(tǒng)的整體性能。
本文優(yōu)化的speex算法適合低噪環(huán)境,但在高噪聲環(huán)境下語(yǔ)音質(zhì)量下降幅度比較大。在今后的研究學(xué)習(xí)中,會(huì)將改善speex解碼器中感知加強(qiáng)部分來(lái)改善噪音的分辨。
10.3969/j.issn.1001-8972.2015.10.017