梁 靜,謝 佳,徐山峰,王兆偉
(中國電子科學(xué)研究院,北京 100041)
隨著互聯(lián)網(wǎng)的迅猛發(fā)展,VoIP技術(shù)得到越來越廣泛的應(yīng)用。話音編解碼技術(shù)作為VoIP體系架構(gòu)的核心之一,也在不斷推陳出新。Opus[1]是一款由Xiph.Org、Mozilla、微軟、Broadcom、Octasic和Google聯(lián)合開發(fā)的有損音頻壓縮格式,特別適合互聯(lián)網(wǎng)上的話音實(shí)時(shí)交互需求。2010年12月由IETF正式批準(zhǔn)成為國際標(biāo)準(zhǔn),版本號是RFC6716。Opus是由聲碼器SILK[2]和CELT融合發(fā)展而來,Opus編碼后碼率范圍是6 kbps到510 kbp,具備靜音檢測功能,支持單聲道和立體聲,最多可支持255路聲道的混音,成幀周期范圍覆蓋2.5 ms到120 ms,采樣率范圍是8 kHz到48 kHz,可以較好的兼容話音通話和多媒體立體聲[3]。
Opus編解碼器由兩款編解碼器融合而成:基于線性預(yù)測(LP)的SILK編解碼器;基于改進(jìn)的離散余弦變換(MDCT)[4]的CELT編解碼器。Opus工作在以下三種模式:SILK模式;CELT模式;混合模式。其中SILK模式適用于寬帶話音信號,CELT模式適用于音樂盒高碼率話音信號,混合模式適用于SILK與CELT同時(shí)工作的超帶寬與全帶寬話音信號。圖1展示了Opus的宏觀架構(gòu)。
圖1 Opus架構(gòu)圖
CELT模式始終工作在48 kHz的采樣率,而SILK模式可以在8 kHz,12 kHz或16 kHz采樣率下工作。在混合模式下,兩種模式可以進(jìn)行無縫切換,交叉頻率為8k Hz,當(dāng)SILK的采樣率為16 kHz時(shí),CELT將會(huì)丟棄所有低于8 kHZ的頻率[3]。
Opus編解碼器融合了CELT和SILK兩種編解碼器,下面分別對CELT和SILK這兩種編解碼器的關(guān)鍵技術(shù)進(jìn)行綜述。
圖2 SILK編碼器結(jié)構(gòu)圖
SILK編碼適合采樣率不超過16 kHz采樣率的低頻信號,因此Opus編碼中的所有低于16 kHz采樣率的音頻內(nèi)容都由SILK編碼。SILK編碼器包含一系列組件,總結(jié)為4個(gè)部分:音頻分析、預(yù)過濾、編碼和輸出。首先,基音分析將音頻信號分為清音幀和濁音幀兩部分,噪聲整形分析將周圍環(huán)境中重復(fù)的噪音打包為越小越好的音頻子幀,使其占用更小的帶寬。利用分析階段獲得的信息,就可以進(jìn)行預(yù)過濾和頻率量化處理,這一步的目的是讓數(shù)據(jù)流在保證質(zhì)量的同時(shí),越少越好。對濁音幀進(jìn)行預(yù)白化(pre-whitened)處理,經(jīng)過長時(shí)預(yù)測濾波器(LTP)去除濁音中的周期成分,在通過短時(shí)濾波(LPC)去除近樣點(diǎn)之間的冗余信息。對于清音幀信號,由于其信號的周期性并不明顯,則不需要通過長時(shí)濾波器(LTP)進(jìn)行濾波。因此清幀信號將被丟棄,直接通過短時(shí)濾波器(LPC)進(jìn)行分析。將產(chǎn)生的激勵(lì)信號進(jìn)行LSF量化和增益量化,最后經(jīng)過區(qū)域編碼器進(jìn)行無損壓縮形成編碼比特流。SILK編碼器結(jié)構(gòu)圖如圖2所示。
SILK解碼器是一個(gè)高度模塊化的結(jié)構(gòu),主要包含熵解碼、參數(shù)解碼、激勵(lì)信號生成、幀重建、立體聲分離以及采樣率變換,其中幀重建模塊主要包含LTP合成濾波器和LPC合成濾波器兩個(gè)模塊。
SILK的解碼過程如下:首先,編碼比特流通過區(qū)間解碼器對輸入的比特流進(jìn)行熵解碼,熵解碼是基于區(qū)間編碼(Range coding)的熵編碼的方法,將解碼后的音頻數(shù)據(jù)流傳入?yún)?shù)解碼器中,參數(shù)解碼器輸出標(biāo)志位脈沖、信號增益、高音延遲、長時(shí)預(yù)測系數(shù)和線形預(yù)測系數(shù)等,其中標(biāo)志位脈沖和信號增益用來產(chǎn)生激勵(lì)信號,而長時(shí)預(yù)測系數(shù)和線性預(yù)測系數(shù)來用于LTP和LPC合成,激勵(lì)信號需要經(jīng)過幀重建模塊。幀重建后產(chǎn)生的音頻信號包括立體聲音頻和單聲道音頻,對于立體聲音頻需要進(jìn)行立體聲分離,單聲道音頻則直接跳過這個(gè)過程。最后,將產(chǎn)生的音頻信號經(jīng)過采樣率變換過濾器進(jìn)行重采樣編號,得到最終的解碼音頻信號[5]。SILK解碼器結(jié)構(gòu)圖如圖3所示。
圖3 SILK解碼器結(jié)構(gòu)圖
圖4 CELT編解碼器結(jié)構(gòu)圖
如同大多數(shù)的變換編碼算法,CELT編解碼器是基于改進(jìn)的離散余弦變換(MDCT)實(shí)現(xiàn)的,擁有高質(zhì)量、低時(shí)延兩大特點(diǎn)。CELT編解碼器的基本思想是話音的頻譜包絡(luò),能夠精確的編碼接近聽覺系統(tǒng)的關(guān)鍵頻帶能量,保證了頻譜包絡(luò)的輸入與輸出相匹配,從而實(shí)現(xiàn)了其原始的高質(zhì)量音質(zhì)。通過改進(jìn)的離散余弦變換(MDCT),將輸入信號劃分為256個(gè)樣本幀,每個(gè)MDCT窗口由兩個(gè)樣本幀組成,重疊窗口時(shí)長僅2.5 ms,在質(zhì)量、比特率開銷很小的情況下降低了算法時(shí)延。
CELT主要編解碼過程如下,將編碼前的時(shí)域語音信號,利用MDCT變換將時(shí)域轉(zhuǎn)換為頻域。而在解碼時(shí),IMDCT變換則是將數(shù)據(jù)從頻域轉(zhuǎn)換為時(shí)域的語音信號。由于人耳對于能量大的關(guān)鍵頻帶比較敏感,每個(gè)幀只有少量的比特率是可用的,CELT必須限制或消除元信息,所以講MDCT頻譜粗略的劃分為20個(gè)頻帶,將每個(gè)頻帶的頻譜進(jìn)行規(guī)范化,并分別對能量及頻譜進(jìn)行編碼,使得每個(gè)頻帶上矢量化的能量和頻譜傳輸?shù)浇獯a器端,從而能夠更精確的恢復(fù)其語音信號。CELT通過基音預(yù)測估計(jì)模塊對合成后的語音信號的密集諧波進(jìn)行建模,用于產(chǎn)生低延時(shí)和高分辨率的諧波信號。由于短塊變換只能解決周期為整數(shù)倍幀大小的諧波信號,因此基音預(yù)測被編碼為時(shí)間偏移,在頻域時(shí)則需要基音增益進(jìn)行編碼。最后經(jīng)過分析合成模塊,恢復(fù)語音信號的原始增益,減少噪音對原始音質(zhì)的影響,從而獲得高質(zhì)量的語音輸出[7]。CELT編解碼流程如圖4所示。
在整合、優(yōu)化CELT和SILK兩款編解碼器的基礎(chǔ)上,Opus兼具了以下四種技術(shù),具有較強(qiáng)的魯棒性。
(1)前向差錯(cuò)糾正(FEC)
前向差錯(cuò)糾正是在數(shù)據(jù)傳輸中進(jìn)行錯(cuò)誤控制,當(dāng)傳輸中出現(xiàn)錯(cuò)誤,允許接收端利用數(shù)據(jù)傳輸?shù)娜哂嘈畔⒃俳〝?shù)據(jù),將丟失包解碼出來。將前一幀或前兩幀的冗余信息加到當(dāng)前幀,對于每一幀,編碼器根據(jù)以下信息決定是否使用FEC:外部提供的信道丟失率估計(jì)值;外部提供的信道容量估計(jì)值;音頻信號對丟包的敏感度;接收端解碼器是否顯示可以利用“帶內(nèi)”FEC信息。前向差錯(cuò)糾正(FEC)的好處就是在數(shù)據(jù)傳輸中進(jìn)行控制,使得Opus不會(huì)產(chǎn)生大的延時(shí),最多也就是一個(gè)包的延時(shí),適用于實(shí)時(shí)的交互應(yīng)用。
(2)靈活的誤差傳播(Flexible Error Propagation)
在話音編碼中經(jīng)常利用幀與幀之間的相關(guān)性,以增加誤差傳播為代價(jià)來減少編碼比特率,在話音包丟失后,解碼器需要接收到幾個(gè)話音包之后,才能準(zhǔn)確的重建話音信號。Opus利用幀與幀之間的相關(guān)性,能夠動(dòng)態(tài)的調(diào)整編碼比特率與誤差傳播數(shù)量之間的比例,從而靈活的控制誤差傳播。
(3)不連續(xù)傳輸(DTX)
由于SILK編解碼器是碼率自適應(yīng)的,對于特定的輸入信號,比如靜音周期或背景有雜音,碼率會(huì)被自動(dòng)削減。
在連續(xù)模式下,當(dāng)碼率被削減時(shí),接收端的傳輸不會(huì)被中斷。因此,接收到的信號在全部傳輸過程中能夠使碼率最小化并且保持較高水平的音質(zhì)。
當(dāng)設(shè)置成不連續(xù)傳輸(DTX)時(shí),部分編碼信號不能被傳送到接收端,在接收端,沒有傳送的部分將被SILK解碼器當(dāng)作丟失幀處理,即產(chǎn)生舒適噪音信號代替沒有傳送的音頻信號部分。
(4)數(shù)據(jù)丟包隱藏(PLC)
PLC的意義在于當(dāng)FEC和重傳之后還是無法恢復(fù)時(shí),通過信號處理的方法在接收端對丟失的數(shù)據(jù)進(jìn)行補(bǔ)償。PLC產(chǎn)生一個(gè)與丟失的語音包相似的代替語音,這種技術(shù)是基于語音的短時(shí)相似性,可以處理較小的丟包率和較小的語音包。Opus在解碼端利用PLC技術(shù),將丟失數(shù)據(jù)包對語音產(chǎn)生的影響隱藏,從而減輕語音的失真,進(jìn)一步提高了音質(zhì)。
如圖5所示,在編碼碼率較低的情況下,相同碼率條件下,Opus比業(yè)界流行的實(shí)時(shí)聲碼器iLBC、Speex和AMR的音質(zhì)更高;在編碼碼率較高的情況下,相同碼率條件下,Opus比實(shí)時(shí)聲碼器G.719、G.722和G.711的音質(zhì)更高,甚至超過了AAC、Vorbis和MP3等專業(yè)多媒體音樂格式。
圖5 不同比特率下各編碼器音質(zhì)對比[6]
如圖6所示,相對于業(yè)界其他流行的聲碼器,Opus聲碼器具備更寬編碼碼率范圍的同時(shí),編解碼處理的時(shí)延開銷卻只有20 ms左右,這是Vorbis、AAC和MP3等追求更高音質(zhì)的專業(yè)多媒體聲碼器難以達(dá)到的。即使是AMR、G.722、Speex和G.729等在VoIP中較流行的高實(shí)時(shí)性聲碼器也望塵莫及。
圖6 不同比特率下各編碼器延遲對比[6]
圖7是對Opus丟包隱藏技術(shù)的性能評測,紅線表示無丟包情況下的話音解碼片段,紫線表示丟失的話音片段,綠線表示Opus采用PLC技術(shù)擬合生成的話音解碼片段,可以看出綠線和紅線差別并不大,達(dá)到了丟包隱藏的效果,體現(xiàn)了Opus優(yōu)良的糾錯(cuò)能力。
圖7 無誤碼,解碼端丟包后重建與丟包對比圖[7]
另一個(gè)實(shí)驗(yàn)評估了Opus解碼音質(zhì)和網(wǎng)絡(luò)丟包率的關(guān)系,用感知語音質(zhì)量評價(jià)(PESQ)算法經(jīng)過下采樣后解碼器輸出8 kHz的話音信號,如圖8所示,縱坐標(biāo)表示PESQ LQO-MOS,橫坐標(biāo)表示網(wǎng)絡(luò)隨機(jī)丟包率,在隨機(jī)丟包率為5%時(shí)解碼音質(zhì)依然較好,這充分反映了Opus聲碼器優(yōu)良的魯棒性。
圖8 PESQ LQO-MOS根據(jù)隨機(jī)丟包率變化[7]
綜上所述,在VoIP等實(shí)時(shí)語音通信場合,Opus聲碼器在網(wǎng)絡(luò)狀況較差、實(shí)時(shí)性要求較高、帶寬容量有限的條件下,依然能夠保持較高的音質(zhì),各方面性能明顯優(yōu)于業(yè)界主流的其他聲碼器,更為重要的是,它還是一個(gè)開放源碼、版稅免費(fèi)、遵從GPL協(xié)議的聲碼器。
OPUS話音編解碼器因其開放源碼、版稅免費(fèi)、低延遲和高音質(zhì)的優(yōu)勢,在VoIP網(wǎng)絡(luò)電話、語音聊天室、視頻會(huì)議甚至遠(yuǎn)程在線音樂會(huì)等領(lǐng)域的應(yīng)用前景非常廣闊。目前,OPUS的最新開源版本是Opus1.1.4,隨著OPUS話音編解碼技術(shù)的不斷更新和完善,其必將在業(yè)界得到廣泛的推廣和使用。