又被“過運營商語音認證”虐了一回
又被“過運營商語音認證”虐了一回!虐的傷痕累累、疲憊不堪!過程是痛苦的,但結果是美好的,收穫也是挺多的!既然用了“又”,那以前肯定被虐過。是的,沒錯。那是7年多前(2011年底),同樣是在秋冬,不過一個是2011年底,一個是2018年底。同樣是在晶片公司, 不過一個是老牌外企,一個是本土新秀。當時我們在公司的晶片上做了一個語音通訊解決方案(具體怎麼做的見我前面的文章: 如何在嵌入式Linux上開發一個語音通訊解決方案 ),只有過了中國電信的語音認證客戶才會用我們的。老闆把這個任務交給了我,我那時是第一次弄這些,一臉懵逼。既然交給了我,我就盡全力把它做好。認證主要有兩方面內容:音質相關的MOS(Mean Opinion Score,平均主觀意見分)和時延相關的delay。當時MOS的評分標準是PESQ(Perceptual Evaluation of Speech Quality,語音質量的感知評估),即ITU-T的P.862。經過近幾年的發展,如今變成了POLQA(Perceptual Objective Listening Quality Analysis,感知客觀語音質量評估),即ITU-T的P.863。P.863標準(POLQA)是對P.862標準(PESQ)的升級,適應範圍更廣,評價結果更接近主觀的MOS。經過近三個月的努力,成功過了認證,心裡別提多高興了。雖然很累,但技術能力提高了不少,也特別有成就感。這次過的是中國移動(CMCC)手機上的EVS音訊電學認證。關於EVS,我在前面的文章( 行動通訊最先進的音訊編解碼器EVS及用好要做的工作 )中講過。下面就講講是怎麼過認證的以及怎麼被虐的。
前面的文章( Android智慧手機上的音訊淺析 )講了安卓手機上音訊相關的軟硬體,文章( 談談我開發過的幾套語音通訊解決方案 )講了在安卓手機上打傳統電話時的方案,知道了通話時主要是CODEC晶片、Audio DSP(ADSP)和CP參與語音資料的傳輸,具體如下圖:
codec晶片主要負責語音的採集和播放,ADSP上主要是編解碼以及語音增強(voice Enhancement,簡稱VE,包括AEC、ANS、AGC等)等,CP上主要是網路側及空口的處理。CMCC以前對EVS是可選項,但2018年四月份開始變成了必選項,即要入庫的手機一定要支援EVS。我們公司的手機晶片是支援EVS的,這功能是我和CP的同事共同完成的(我負責Audio DSP上EVS codec相關的,CP同事負責網路側IMS相關的)。那時中國移動關於EVS認證的case還沒公佈,我們在實網下對EVS做了基本的調測,能用了。到了七八月份具體case公佈了,全面調測EVS就提上了日程。CP同事、測試同事和我三人組成了一個小分隊,由於EVS codec在Audio DSP上,這件事就由我來牽頭向前推進。先在實網下做全面的測試,解決了不少語音質量相關的問題(比如噪聲斷續等)。這些問題相對都是較難弄的,花了近一個月。實網下測下來基本感覺不到噪聲斷續等問題了,我們決定開始過移動EVS認證的case。
CMCC EVS音訊電學認證的case也主要分兩類:MOS和delay。測試時儀器通過音訊線和手機的耳機孔連線進行語音資料的傳輸,儀器通過射頻線和手機上的射頻口相連進行空口資料的傳輸,其框圖如下:
MOS有良好網路下的上下行MOS、惡劣網路下的下行MOS、LTE向2/3G切換的切換中和切換後的MOS、資料業務併發時的MOS等。算上行MOS時,儀器把參考音訊經音訊線送給手機,手機上行處理後經射頻線再把碼流送給儀器,儀器解碼碼流得到PCM再基於POLQA(上面說過現在MOS的評分標準用的是POLQA)跟參考音訊比較得到MOS分,上圖中的uplink方向給出了示意。算下行MOS時,儀器把參考音訊的碼流經射頻線送給手機,手機下行處理後經音訊線把語音再送給儀器,儀器基於POLQA把收到的語音跟參考音訊比較得到MOS分,上圖中的downlink方向給出了示意。Delay同樣有良好網路下的delay、惡劣網路下的delay、LTE向2/3G切換的切換前後的delay、資料業務併發時的delay等,這裡delay是指單向時延(one-way-delay),即從發端到收端的延時。算delay的框圖如下:
儀器把參考音訊經音訊線送給手機,手機上行處理後經射頻線再把碼流送給儀器,儀器中形成一個loopback(上圖中紅色粗體處),把這個碼流經射頻線送給手機。手機下行處理後把語音資料經音訊線送給儀器,儀器把收到手機語音資料的時間和參考音訊的傳送時間做比較從而得到delay值。不管是MOS還是delay都是測多次(MOS測10次或者20次,delay測50次),然後算平均值作為最終得分。
測試EVS音訊電學的這套儀器非常貴,沒有幾百萬是搞不定的,後面還有每年向儀器廠商繳的維護費用。大廠一般都會買上一套來除錯各種音訊電學指標。上文說過我現在的公司是本土新秀,老闆不是很願意花這麼多錢在這上面。幸好CMCC有儀器裝置免費給相關廠商用,要提前預約,通常一星期批一次,一次兩三個小時。但是經過兩三個星期這樣的運作後發現效率太低(手機校準(校準是為了找到最好的靈敏度值和gain值,相同的儀器和手機只需要做一次校準,如果有一個變化了就需要重新做校準)一次要花近兩個小時,我們的手機在實網下打EVS電話沒什麼問題,但是在儀器環境下測時好多case的EVS通話都建立不起來,需要各個領域的同事一起調查,也需要儀器側技術人員的support,但是儀器側的support力度很弱,進展太慢),老闆決定向儀器廠商租裝置來除錯(租金也是相當昂貴的),即我們到儀器廠商的實驗室去除錯。儀器廠商的實驗室在北京,這樣就有了我和CP同事的北京之行(我們公司北京有office,測試同事就在北京)。在北京呆了一星期,同樣遇到了不少問題,由於是在儀器廠商的實驗室,遇到問題時他們支援的力度較大,大部分case都能測起來了,進而也就得到了相應的MOS分和delay值。良好網路下的MOS分不僅沒有一個達標的,而且有的離達標還很遠,良好網路下的delay部分達標了。儀器廠商的技術人員安慰我們說第一次過EVS認證都是這樣的。在過EVS認證這件事上他們見多識廣,我們就當信以為真,哈哈。
回到公司後我們簡單總結了一下,並制定了後面的策略:每星期由北京測試同事去儀器廠商實驗室測試一到兩天,一方面驗證前面遇到的問題是否fix,修改後MOS分是否有提高,delay值是否有減小,另一方面再繼續測未測的case,即採用迭代的方式向前推進。先主攻良好網路下的MOS分。調查MOS分低(即音質差)主要是把各個處理過程後的語音資料dump出來,再輔以我們自己開發的各種工具,最終都變成PCM資料用CoolEdit聽,從而得出是哪個處理過程把音質降低了(主要是噪聲斷續等),然後再在這個處理過程中找到使音質降低的根本原因。在前面文章( webRTC中音訊相關的netEQ(一):概述 )中也說過我們語音通訊中也用到了netEQ,只不過MCU模組在CP上,DSP模組在ADSP上。下行CP給ADSP發語音包和netEQ的控制命令,上行ADSP 給CP發語音包和netEQ的反饋資訊(主要是上一幀的處理模式和時間戳等)。我們主要做了四個工具。一是EVS decoder(基於3GPP EVS reference code),把EVS碼流解碼成PCM;二是解析下行dump出來的CP發給ADSP的語音碼流和netEQ控制命令;三是解析上行ADSP發給CP的語音碼流和netEQ反饋資訊;四是netEQ DSP模組的simulator(模擬器),把下行dump出來的CP發給ADSP的語音碼流和控制命令作為輸入,netEQ中DSP模組處理後的PCM作為輸出,就能完全覆盤出問題的場景,從而找到根本原因。在這些工具的輔助下發現了一些問題,也都一一解決了。經過幾個星期的迭代,良好網路下的MOS分穩步提升,上下行都達到了3.9x,但是不達標(達標是4.0)。討論下來在傳輸環節已經沒有什麼可做的了(依據是用CoolEdit聽儀器中的結果音訊,已經聽不出任何噪聲斷續了),該負責VE的演算法同事上場了。剛開始時演算法同事也沒什麼招,後來聽測試同事講儀器廠商實驗室有參考機,可以拿這個參考機測測,如果達標了看儀器上的結果音訊是什麼樣的,好有參考。參考機測下來達標了,上行4.09,下行4.16。把結果音訊發給演算法同事,研究頻譜等特性。演算法同事嘗試著修改VE裡的引數,前三次以失敗告終,讓人好失望,甚至有點絕望,就差這零點零幾分了!第四次嘗試後總算達標了(上行4.10,下行4.20),好不容易啊!總結下來就是儘量減少對語音訊號的處理,保持原有訊號的頻譜等特性。改好後又測了良好網路下的其他case的MOS分,全都達標了。後面由於時間不多了,就開始兵分兩路,一路負責惡劣網路下的MOS,另外一路負責各種場景下的delay。惡劣網路主要分三個等級(1%丟包10ms jitter/2%丟包20ms jitter/3%丟包40ms jitter),相對OTT語音(比如微信語音,OTT語音經常會出現高於5%的丟包率)不是很惡劣,主要是因為LTE網路處理語音資料的QoS的級別較高,而OTT語音的QoS級別同其他資料業務(比如上網)是一樣的,需要做好多補償措施,具體有FEC、重傳等,我在前面的文章( 語音通訊中提高音質的方法 )對這些措施做過具體介紹,有興趣可以看一看。提高惡劣網路下EVS的音質主要是用好丟包補償、平滑等演算法。減少delay先是算出各個環節引入了多少delay,然後看是否能減少以及減少多少,主要是減少語音資料緩的時間。例如下行先有鈴聲資料進DMA buffer播放出來,語音資料到來後如放在未播放的鈴聲資料後就會引入delay,這就需要立刻用語音資料去覆蓋DMA buffer中未播放的鈴聲資料從而減少delay。不管是MOS還是delay,要想達標,就在幾個核心的點上,比如前面講的改VE中的引數就是一個很重要的點,改了後就能提高0.2左右的MOS分。點找到了,達標也就不是很難了,往往是找到一個點並解決了需要不少時間,有時候花了很多時間也不一定能找到,需要很強的專業知識,還是以修改VE引數的點為例,需要精通音訊演算法的專家。
過EVS音訊電學認證前前後後花了四個月左右的時間,遇到了很多問題,參與人數也眾多(我們建了一個EVS認證的群,從最初的三四人到最終的近50人,不僅有信令處理、媒體處理的,還有硬體的平臺的以及空口的,都是遇到問題涉及到相關人員而拉進群的),可以算是一個不小的專案了。我作為過EVS認證的牽頭者,不僅要解決好媒體處理相關的問題,同時還要跟蹤專案的狀態制定計劃等,部分承擔了PM(專案經理)的角色,不管是技術上還是專案管理上都收穫頗多。