1. 程式人生 > >語音編解碼技術演進和應用選型

語音編解碼技術演進和應用選型

640?wx_fmt=jpeg


本文來自現網易雲音樂音視訊實驗室負責人劉華平在LiveVideoStackCon 2017大會上的分享,並由LiveVideoStack整理而成。分享中劉華平以時間為主線,講述了語音編解碼技術的演進路線及實際應用中的技術選型。


文 / 劉華平

整理 / LiveVideoStack


大家好,我是劉華平,從畢業到現在我一直在從事音視訊領域相關工作,也有一些自己的創業專案,曾為早期Google Android SDK多媒體架構的構建作出貢獻。


就音訊而言,無論是演算法多樣性,Codec種類還是音訊編解碼複雜程度都遠遠比視訊要高。視訊的Codec目前還主要是以巨集塊為處理單元,預測加變換的混合編碼框架,例如H.264和H.265都是在這一框架下,另外在應用中,某一時間往往單的視訊編碼能主導,當前H.264就佔據了90%以上的市場份額。,而音訊則相當複雜,且不同的場景必須要選擇不同的音訊編解碼器。以下就是本次為大家分享的主要內容,希望通過此次分享可以使大家對音訊編解碼有一個整體的認識,並在實際應用中有參考的依據。


640?wx_fmt=png


1. 語言/音訊編碼總表


640?wx_fmt=png


上圖展示的是語言/音訊編碼總表,可以看到其比視訊編碼要複雜得多,單純的演算法也遠遠比視訊要更加複雜。


2. 數字語言基本要素


640?wx_fmt=png


數字聲音具有三個要素:取樣率、通道數、量化位數。


3. 為什麼要壓縮


640?wx_fmt=png


壓縮音訊,主要是為了在降低頻寬負擔的同時為視訊騰出更多頻寬空間。


4. 編碼器考慮因素


640?wx_fmt=png


通過一些特定的壓縮演算法,可以壓縮音訊檔案至原來的1/10,同時人耳也無法分辨壓縮前後的聲音質量差異,需要滿足多種條件才能實現這種效果;而對於編碼器,無論是設計階段還是使用階段,我們都需要考慮最佳壓縮效果、演算法的複雜度與演算法的延時,結合特殊場景進行特定的設計;而相容性也是我們不能不考慮的重點。


4.1 語音經典編碼模型——發音模型


640?wx_fmt=png


我們的很多編解碼器都是基於綜合人的發音模型與一些和聽覺相關的理論支援研究提出的特定編解碼演算法。初期我們通過研究人的發音原理來設計音訊編解碼的演算法,包括端到端的濾波或輕濁音等,只有充分理解人的發聲原理我們才能在編解碼端做出有價值的優化。


1)LPC


640?wx_fmt=png

640?wx_fmt=png

LPC作為經典語音編碼模式,其本質是一個線性預測的過程。早期的G.7系列編碼模型便是通過此模型對整個語音進行編碼,上圖展示的過程可與之前的人發聲過程進行匹配,每個環節都有一個相應的模組用來支撐人發聲的過程。其中使用了AR數學模型進行線性預測,此演算法也是現在很多語音編碼的重要組成模組。


2)G.729


640?wx_fmt=png


G.729同樣是經典的語音編碼模型之一,也是我們學習語音編碼的一個入門級Codec。G.729的文件十分完善,包括每個模組的原始碼在內都可直接下載。G.729可以說是在早期發聲模型基礎上的改進,需要關注的效能指標是幀長與演算法上的延時,包括語音質量的MOS分。G.729也有很多變種,由於語音需要考慮系統相容性,不同的系統指定攜帶的Codec也不同,音訊編碼的複雜程度要遠高於視訊編碼。


4.2 語音經典編碼模型——聽覺模型


640?wx_fmt=png


除了研究人發聲的原理,我們還需要研究人聽聲的原理,從而更好實現聲音的收集與處理。一個聲音訊號是否能被人耳聽見主要取決於聲音訊號的頻率、強度與其他音的干擾。心理聲學模型便是用來找出音訊訊號中存在的冗餘資訊從而實現在壓縮聲音訊號的同時不影響聽覺的目的。心理聲學理論的成熟為感知編碼系統奠定了理論基礎,這裡的感知編碼主要是ISO編碼模型,主要覆蓋的聲學原理有臨界頻帶、絕對聽覺閾值、頻域掩蔽、時域掩蔽等。


640?wx_fmt=png


無論是MP3還是AAC以至於到後面的杜比音效都是基於聽覺模型進行的探索與創新。


1)臨界頻帶


640?wx_fmt=png


臨界頻帶主要用於心理聲學模型。由於聲音訊率與掩蔽曲線並非線性關係,為從感知上來統一度量聲音訊率,我們引入了“臨界頻帶”的概念。人耳對每段的某個頻率的靈敏度不同,二者關係是非線性的。通常我們會將人可以聽到的整個頻率也就是從20Hz到16KHz分為24個頻帶,可在其中進行時域或頻域類的掩蔽,將一些冗餘資訊從編碼中去除從而有效提升壓縮率。


2)絕對聽覺閾值


640?wx_fmt=png


絕對聽覺閾值也可有效提升壓縮率,基於心理聲學模型,可去除編碼中的冗餘部分。


4.3 經典音訊編碼:ISO


640?wx_fmt=png


我們可將最早的MP3 Layer1理解為第一代的ISO感知編碼,隨後的一些純量化內容更多的是在壓縮上進行改進而核心一直未改變。從MP3 Layer1到Layer2與Layer3,主要的改變是心理聲學模型的迭代。


640?wx_fmt=png

640?wx_fmt=png

上圖展示的是Encode與Decode的迴路。輸入的PCM首先會經過多子帶分析與頻域中的心理聲學模型冗餘處理,而後進行量化編碼;Layer III中的是我們現在常說的MP3的Codec:Encode與Decode之間的整體迴路,相比於Layer1多了幾個處理環節以及霍夫曼編碼。


4.4 AAC協議族


640?wx_fmt=png


AAC與G.719一樣包括很多系列,但AAC的巧妙之處在於向下相容的特性。開始時我們就強調,所有Codec在設計時都需要考慮相容性,瑞典的Coding Technology公司曾提出在相容性上特別優化的方案。AAC Plus V1包括AAC與SBR,AAC Plus V2包括AAC+SBR+PS,現在常見的很多音樂類或直播音訊編碼都是基於AAC Plus協議族進行的。


德國的霍朗浦學院曾在AAC低延時協議擴充套件方面做出一些探索並得到了AAC LD協議族,其原理仍基於傳統的AAC模組,但在後端會對處理長度進行調整,例如之前是以1024bit為一個處理單位,那改進後則以960bit為一個處理單位。除此之外AAC LD加入了LD-SBR與LD-MPS等,從而形成一個規模較大的AAC-ELD V2模組,可以說是十分巧妙。


1)AACPlus核心模組——SBR(Spectral Band Replication)


640?wx_fmt=png


我們可以看到,AAC可以說充分利用了頻域擴充套件,用很小的代價實現諸多功能優化。AAC的核心之一是SBR,這是一種使用極少位數就可描述高頻部分並在解碼時進行特殊優化從而實現頻域擴充套件的模組。上圖展示的是不同壓縮率模組所覆蓋的頻率取值範圍,而使用AAC時需要注意一個被稱為“甜點位元速率”的指標。無論是取樣率還是位元速率都是變化的,在應用時選擇何種位元速率十分關鍵。例如直播時採用64Kbps即可在覆蓋整個頻段的同時保持良好音質。


2)AACPlus核心模組——PS(Parametric Stereo)


640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png


PS模組也是AAC的核心模組之一,主要用於分析左右聲道屬性並使用非常少的位數表示左右聲道相關性,而後在解碼端將左右聲道分離。這裡比較巧妙的是PS的向下相容特性,整體資料打包是分開進行的。如果獲取到AAC、SBR、PS三者的基本資料包後,在解碼階段我們就只需AAC—LC。上圖展示的就是AAC的解碼框架,如果大家讀過3GPP的程式碼就可發現其每一個模組都相當清楚。我們可根據文件讀取程式碼並對應到每一個環節。


3)甜點位元速率


640?wx_fmt=png


甜點位元速率是一項很關鍵的指標。例如在手機直播應用場景中,一般的視訊解析度為640×360,音訊位元速率大約在800K左右。如果音訊位元速率過大則會直接影響視訊質量,因而我們需要控制音訊位元速率在一個較為合適的範圍內從而實現最佳的音畫效果。在很多應用場景中可能需要系統根據不同的網路環境下載不同音質的檔案,例如在2G環境中下載較小的檔案,這樣做主要是為了節省頻寬並提高音訊檔案的播放流暢程度。


4.5 AAC-ELD家族


640?wx_fmt=png


AAC-ELD家族帶來的主要改進是低延遲。如果Codec的延遲太長便無法在一些特定場景中被使用。例如早期AAC Plus V2的整體延遲可達100ms,如此高的延遲肯定無法被應用於語音通話等對實時性要求極高的應用場景。霍朗普學院推出的AAC-ELD可在保持音質的前提下將延遲降低至15ms,相對於MP3最高長達200ms的延遲而言提升巨大。


4.6 應用中端到端的延遲


640?wx_fmt=png


編解碼過程也存在延時問題,這也是我們選擇編解碼器時需要考慮的最主要因素之一,編解碼的延時主要由處理延時與演算法延時組成,例如G.729的演算法延時為15ms,而AAC-LC可達到一百毫秒以上。另外,播放端或採集端的長幀數量太多,播放時快取太多等也會直接影響延時,我們在選擇編解碼器時需要考慮延時帶來的影響。


編解碼器已經歷了兩個發展方向:一個是以G.7(G.729)為例,根據發聲模型設計的一套主要集中於語音方面的編解碼演算法,另一個是以ISO的MP3和AAC為例,根據心理聲學模型設計的一套感知編碼。最近的趨勢是編碼的統一,原來在語音場景下我們使用8K或16K進行取樣,音樂場景下則需使用覆蓋到全頻帶的44.1K進行取樣,每個Codec都有一個頻域覆蓋的範圍。在之前的開發中,如果應用場景僅針對壓縮語音那麼需要選擇語音編碼方案,如果應用場景針對壓縮音樂則需要選擇音樂編碼方案,而現在的發展方向是通過一套編碼從容應對語音與音樂兩個應用場景,這就是接下來將要被提到的USAC。


這裡介紹兩個比較典型的Codec:一個是Opus,通過其中整合的模組可實現根據傳入音訊檔案的取樣率等屬性自動選擇語音編碼或音樂編碼;另一個是EVS這也是霍朗普等組織推行的方案,已經嘗試用於4G或5G之中。


640?wx_fmt=png


由框圖我們可以瞭解到USAC向下相容的特性。編解碼器可總結為經歷了三個時代:發聲模型、聽覺感知、融合方案。接下來我將展示目前所有的Codec情況並整理為表格以方便大家檢索查閱。


5. Codec總結


5.1 IETF系列


640?wx_fmt=png


IETF作為標準協議聯盟組織之一推出了以上Codec:Opus包括取樣率為8kHz、甜點位元速率為11kbps的窄帶單聲語音(SILK),取樣率為16kHz、甜點位元速率為20kbps的寬頻單聲語音與取樣率為48kHz、甜點位元速率為32kbps的全帶單聲語音(CELT),採用甜點位元速率意味著將壓縮率和音質保持在一個良好的平衡狀態。在一些窄帶單聲語音應用場景例如常見的微信語音聊天,其壓縮率可達到原來的8.5%。Opus沒有技術專利和原始碼的門檻,使得其受到現在很多流媒體廠商的歡迎,Opus支援更廣的位元速率範圍,具備豐富取樣率選擇,可實現極低延遲與可變幀大小,也具備以往一些Codec的許多特性如CBR、VBR、動態調整等,支援的通道數量也更多。除此之外,Opus同樣具備許多從SILK移植而來的特性或功能。如在VUIB傳輸上集成了扛丟包模式等。


iLBC早在SILK未出現時就被提出同樣具備抗丟包。的特性,高達15.2kbps的甜點位元速率與4.14的Mos使其音質較為良好,超過G.729的相關指標;GSM就是最早手機網路仍停留在2G時代時流行的編碼形式,主要用於蜂窩電話的編碼任務。


5.2 AMR系列


640?wx_fmt=png


AMR早在3G時期就被廣泛應用,AMR-NB是最流行的語音編碼器,具有壓縮效果好,支援多種位元速率形式的特點;與此同時,這也是GSM與3G時期Android平臺最早支援的窄帶語音編碼方案。AMR-WB作為AMR-NB向寬頻的擴充套件版,主要用於3G和4G通話標準協議中,其甜點位元速率為12.65kbps。在實踐中我們將位元速率引數調整為此值即可實現壓縮率與質量的平衡。AMR-WB+則是上述兩者的融合,三者共同構成AMR系列。


5.3 ITU-T G系列


640?wx_fmt=png


ITU-T G系列包括最早的波形編碼G711到現在大家熟悉的G.729這裡我想強調的是G722.1 Siren7、G722.1c Siren14與G719 Siren22,例如G.719可覆蓋整個前頻帶且支援立體聲。即使都屬於老協議,但由於其優秀的相容性,不應被我們忽略。


640?wx_fmt=png


將Opus與其他一些Codec進行對比我們可以看到,無論是質量還是延時控制,Opus的優勢十分明顯;加之Opus作為開源的免費方案,不存在專利限制,受到業界追捧也不足為奇。


5.4 ISO系列


640?wx_fmt=png


ISO裡我想強調的是MP3與AAC,二者同樣支援很多位元速率。MP3的甜點位元速率為128kbps,MP3 Pro的位元速率可達到MP3的一半;AAC支援8~96khz的取樣率,AAC-LC的甜點位元速率為96kbps,HE-AAC的甜點位元速率為32kbps,AAC-LD與ELD做到了AAC的低延時,實現了延時與壓縮比的最佳平衡。


5.5 3GPP系列:EVRC


640?wx_fmt=png


高通公司主推的3GPP是CDMA中使用的語音編解碼器,在未來選擇編解碼器型別時我們需要特別考慮延時與幀長。由於語音編碼種類很多,幀長也是複雜多變的,其背後的演算法複雜程度,RAM、ROM佔用等都是在實踐當中需要著重考慮的。


5.6 極低位元速率


640?wx_fmt=png


極低位元速率主要的應用場景是對講機、衛星通訊、軍工等。圖表中的MELP最早由美國軍方開發,現在絕大多數的對講機都基於此模型進行擴充套件開發,壓縮後的位元速率可達到2.4kbps而目前最極端的極低位元速率可實現300bps,相當於壓縮為原資料的0.2%,此時的音訊檔案僅能被用於傳達語音內容而丟失了很多聲色。


5.7 全頻帶


640?wx_fmt=png


全頻帶中的組合也是多種多樣。


6. 編解碼使用注意


6.1 License


640?wx_fmt=png


國內大部分企業在開發時容易忽視包括專利安全性在內的與License相關的內容。如果企業計劃得比較長遠,需要長期使用某項技術或企業規模不斷擴大時則不能不考慮專利問題。專利費用包括Open Source與演算法專利,二者完全獨立互不干涉,如果我們從某家專利公司購買了AAC的專利演算法,並不能獲得此AAC專利的原始碼,僅能獲得與此技術相關的專利使用授權。專利公司會給予需要下載的檔案列表,通過這種方式實現技術的授權使用。


640?wx_fmt=png


上面的二叉樹圖比較清晰地展示了程式碼授權的具體流程,隨著企業的規模化發展日趨成熟,企業應當規範自身的技術使用行為,儘可能避免專利糾紛帶來的不利影響。


6.2 專利


640?wx_fmt=png


主流語音編解碼技術擁有兩個專利池:MPEG-LA與Via Licensing。很多非常複雜的Codec涉及高達上千個專利,與之相關的企業或組織多達幾十個,為專利授權而與每一個企業或組織進行洽談顯然是不現實的,因而專利池的出現使得技術授權更加規範清晰,方便企業統一處理技術授權問題。


6.3 常見Codec Patent License


640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png


希望大家在使用技術的同時尊重智慧財產權,助力技術創新可持續發展。



精品文章推薦






線上分享:



技術乾貨: