音頻帶寬預測與動態參數調整優化報告
目錄
本內容全原創,因作者才疏學淺,偶有紕漏,望不吝指出。本內容由靈聲訊音頻-語音算法實驗室整理創作,轉載和使用請與“靈聲訊”聯繫,聯繫方式:音頻/識別/合成算法QQ羣(696554058)
-
優化背景與目的
基於18年8月份對listensin項目開發,還存在弱網絡環境下動態參數調整不合理或不匹配的情況,導致點對點音頻質量下降明顯造成溝通不暢等問題,近期在依照友商產品體驗的基礎上進行全方位優化和改善。經過多輪反覆試驗,最終在原來優化的基礎上增加了音頻帶寬估計和探測模塊,實時探測網絡狀態以此來增加動態參數調整的精準性和穩定性。
-
優化內容與思路
目前的優化內容主要分兩大塊,第一塊是根據視頻帶寬估計算法研發適合音頻帶寬估計算法,並以音頻RTCP上報參數爲輸入,合理且準確的探測實時網絡狀態。第二塊是在**項目原來動態參數調整優化的基礎上,重新依據音頻帶寬預測算法的結果進行校準和加強,更進一步的提升參數調整的精準性和穩定性。具體的算法流程如下圖所示:
測試結果彙總
1) 測試環境:
- oppo A53m,vivo YS1A
- listensin,360隨身wifi(所有測試不支持穿透)
2) 測試版本:
- demo(*_*優化版)
3) 測試日期:
20180927-20190103
4) 測試數據:
整個優化結果測試分三部分內容,第一部分是針對隨機丟包型網絡環境的模擬測試;第二部分是針對帶寬受限網絡環境的模擬測試;第三部分是公司內外環境實測。下面給出所有測試數據的可視化結果:
A. 隨機丟包網絡
以下是隨機丟包時音頻質量客觀打MOS分優化前後的對比數據及結果:
優化前:
oppo-vivo(丟包型網絡測試20180814.pm) |
|||||||
PESQ |
loss_0(2) |
loss_5(2) |
loss_10(2) |
loss_15(2) |
loss_20(2) |
loss_25(2) |
loss_30(2) |
1 |
3.370061 |
2.905927 |
3.499287 |
3.404371 |
3.295826 |
3.297021 |
3.338209 |
2 |
3.385545 |
2.834871 |
3.435212 |
3.309201 |
3.420796 |
3.237281 |
3.203207 |
3 |
3.549577 |
2.792232 |
3.553399 |
3.422488 |
3.311166 |
3.038989 |
3.129062 |
4 |
3.460091 |
2.743378 |
3.381129 |
3.398325 |
3.39405 |
3.394241 |
3.053357 |
5 |
3.40444 |
2.6114 |
3.380411 |
3.323582 |
2.689613 |
3.388399 |
3.415845 |
6 |
3.573653 |
2.892318 |
3.139908 |
3.151786 |
3.373795 |
3.232671 |
3.247233 |
7 |
3.606637 |
3.57055 |
3.35731 |
3.424259 |
3.472592 |
3.271495 |
2.929102 |
8 |
3.538327 |
3.484503 |
3.46594 |
3.407129 |
3.498017 |
3.279175 |
3.291739 |
9 |
3.480042 |
3.574271 |
3.449543 |
3.450506 |
3.439924 |
3.28474 |
3.082016 |
10 |
3.535377 |
3.475205 |
3.557088 |
3.465139 |
3.500109 |
3.291108 |
3.413235 |
11 |
3.544504 |
3.402068 |
3.51105 |
3.095682 |
3.342456 |
3.286378 |
3.0514 |
12 |
3.450694 |
3.533487 |
3.491782 |
3.45277 |
3.386364 |
3.087695 |
3.348873 |
13 |
3.52391 |
3.382691 |
3.488458 |
3.470394 |
3.415443 |
3.292772 |
3.125211 |
14 |
3.543186 |
3.398965 |
3.485341 |
3.271558 |
3.409754 |
3.347441 |
3.305228 |
15 |
3.358573 |
3.536434 |
3.315572 |
3.378471 |
3.450915 |
3.001553 |
3.194984 |
16 |
3.554061 |
3.543655 |
3.206439 |
3.445502 |
3.393796 |
3.311512 |
3.024478 |
17 |
3.54502 |
3.560767 |
3.507227 |
3.367013 |
3.40395 |
3.235411 |
3.289442 |
18 |
3.542076 |
3.511924 |
3.516299 |
3.375159 |
3.485049 |
3.203533 |
3.163313 |
19 |
3.540627 |
3.487232 |
3.483391 |
3.419155 |
3.503042 |
3.138331 |
3.293976 |
20 |
3.574316 |
3.47036 |
3.497866 |
3.267719 |
3.436174 |
3.293526 |
3.297687 |
ave |
3.50404 |
3.28561 |
3.43613 |
3.36501 |
3.38114 |
3.24566 |
3.20988 |
優化後:
音頻帶寬預測與動態參數調整優化後測試(丟包型) |
|||||
PESQ |
loss_0 |
loss_10 |
loss_20 |
loss_30 |
|
1 |
3.581892 |
3.3530384 |
3.323348 |
3.4051845 |
|
2 |
3.693079 |
3.3812542 |
3.4506771 |
3.1282094 |
|
3 |
3.640126 |
3.2701449 |
3.4046766 |
3.2826426 |
|
4 |
3.550487 |
3.2745932 |
3.1507787 |
3.3590552 |
|
5 |
3.631282 |
3.3795495 |
3.498502 |
3.3592153 |
|
6 |
3.658274 |
3.4505254 |
3.6146792 |
3.323378 |
|
7 |
3.634765 |
3.3026954 |
3.4580843 |
3.2250086 |
|
8 |
3.633726 |
3.180577 |
3.6640651 |
3.2564071 |
|
9 |
3.597269 |
3.3062328 |
3.455854 |
3.262503 |
|
10 |
3.608318 |
3.0994845 |
2.9999142 |
3.2511825 |
|
11 |
3.617133 |
3.4360691 |
3.4581188 |
3.2747811 |
|
12 |
3.591663 |
3.4123199 |
3.1360772 |
3.0440633 |
|
13 |
3.602614 |
3.1443354 |
3.4811986 |
3.3711946 |
|
14 |
3.579307 |
3.2638493 |
3.4981088 |
3.1625546 |
|
15 |
3.485615 |
3.1380241 |
3.2499485 |
3.4597067 |
|
16 |
3.614804 |
3.1591571 |
3.6183229 |
3.289511 |
|
17 |
3.55441 |
3.3615295 |
3.2055085 |
3.2561232 |
|
18 |
3.577459 |
3.2388448 |
3.4639943 |
3.2591554 |
|
19 |
3.661506 |
3.2797162 |
3.3081652 |
3.1793327 |
|
20 |
3.635031 |
3.3373805 |
3.3173479 |
3.3076838 |
|
ave |
3.60744 |
3.28847 |
3.38787 |
3.27284 |
對於丟包10% 情況的補測:
PESQ |
loss_10 |
loss_20 |
1 |
3.5853458 |
3.54228643 |
2 |
3.4604239 |
3.64773385 |
3 |
3.5217533 |
3.56190119 |
4 |
3.3528071 |
3.53825506 |
5 |
3.6429737 |
3.57656051 |
6 |
3.5365111 |
3.48528114 |
7 |
3.3628605 |
3.55925245 |
8 |
3.5415521 |
3.52325164 |
9 |
3.069106 |
3.51530436 |
10 |
3.5859071 |
3.48828 |
ave |
3.46592 |
3.543811 |
對比結果:
對於丟包型網絡優化前後MOS差別並不大,但是增加了帶寬預測大幅度提升了動態參數調整的穩定性。對於10%丟包時,原來是做1倍FEC,補測時候優化了FEC倍數,大部分情況是固定在2倍,通過客觀打分可知,2倍FEC效果明顯比1倍要好。
下面給出隨機丟包時音頻帶寬預測與動態參數調整的對應圖:
1) loss_0
當丟包爲0時,整個網絡狀態正常,FEC = 0,碼率穩定在32Kbps,打包時長爲20ms,語音流程及舒服。
2) loss_10
當丟包爲10%時,整個網絡判斷爲隨機丟包型,FEC 從0升到1倍,碼率從32Kbps下降到28Kbps或者24Kbps,由於丟包率實時不穩,導致FEC和碼率出現波動,但大部分時間FEC維持在1倍,打包時長爲20ms,語音偶有抖動。經過進一步優化,當丟包在10% 時,FEC大部分時間是在2倍,碼率維持在24Kbps,偶爾出現28Kbps。
3) loss_20
當丟包爲20%時,整個網絡判斷爲隨機丟包型,FEC 從1升到2倍,碼率從28Kbps下降到24Kbps或者20Kbps,在此丟包環境中FEC長期維持在2倍,打包時長爲20ms,語音質量良好。
4) loss_30
當丟包爲30%時,整個網絡判斷爲隨機丟包型,FEC 從2升到3倍,碼率從24Kbps下降到20Kbps或者16Kbps,大部分時間是碼率是在16Kbps,在此丟包環境中FEC長期維持在3倍,打包時長爲20ms,語音質量偶有斷續。
B.帶寬受限網絡
以下是帶寬受限時音頻質量客觀打MOS分優化前後的對比數據及結果:
優化前:
oppo_vivo_bandwidth_limited |
||||||
PESQ |
BW_10Kbps |
BW_20Kbps |
BW_30Kbps |
BW_40Kbps |
BW_50Kbps |
BW_60Kbps |
1 |
2.601568 |
1.67448 |
3.06806 |
2.820486 |
2.959418 |
3.594051 |
2 |
2.339853 |
2.79228 |
3.131402 |
2.697895 |
3.150837 |
3.686515 |
3 |
2.291011 |
2.788003 |
3.105273 |
3.013852 |
3.268429 |
3.627768 |
4 |
1.982152 |
2.946084 |
3.023104 |
2.567237 |
3.12272 |
3.58907 |
5 |
1.642909 |
2.96764 |
3.132432 |
2.667567 |
3.168038 |
3.645766 |
6 |
1.570973 |
2.759303 |
3.105778 |
2.952561 |
3.162108 |
3.653011 |
7 |
2.201833 |
2.961261 |
3.128179 |
2.842049 |
3.151019 |
3.601191 |
8 |
2.088249 |
3.077856 |
3.084443 |
2.742224 |
3.179106 |
3.453066 |
9 |
2.419226 |
3.000576 |
3.126656 |
2.346461 |
2.910072 |
3.634661 |
10 |
2.273802 |
2.968391 |
3.245327 |
2.71915 |
3.128245 |
3.611123 |
11 |
NULL |
2.448584 |
3.083232 |
2.252314 |
3.13823 |
3.548242 |
12 |
NULL |
2.848855 |
3.122928 |
2.491703 |
3.161694 |
3.654188 |
13 |
NULL |
2.961658 |
3.150632 |
2.173534 |
3.241694 |
3.659575 |
14 |
NULL |
2.939521 |
3.134724 |
2.59373 |
3.267812 |
3.650173 |
15 |
NULL |
2.464737 |
2.970218 |
2.512123 |
3.159766 |
3.581073 |
16 |
NULL |
2.774561 |
3.147867 |
2.822346 |
3.184654 |
3.54242 |
17 |
NULL |
2.927303 |
3.087036 |
2.631536 |
3.112652 |
3.618958 |
18 |
NULL |
3.039998 |
3.1227 |
1.989405 |
3.117034 |
3.617706 |
19 |
NULL |
2.769489 |
3.132696 |
2.737104 |
3.120486 |
3.593507 |
20 |
NULL |
3.458922 |
3.070295 |
2.152924 |
2.678733 |
3.671388 |
ave |
2.14116 |
2.82847 |
3.10865 |
2.58631 |
3.11914 |
3.61167 |
優化後:
音頻帶寬預測與動態參數調整優化後測試(帶寬受限型) |
|||||
PESQ |
20Kbps |
30Kbps |
40Kbps |
50Kbps |
|
1 |
2.905216 |
3.2000843 |
3.2515887 |
3.1305338 |
|
2 |
2.830818 |
3.1909283 |
3.329109 |
3.4737558 |
|
3 |
2.944941 |
3.1782422 |
3.039244 |
3.2050032 |
|
4 |
2.808687 |
2.9882597 |
3.2651568 |
3.2217209 |
|
5 |
2.955799 |
3.1333501 |
3.1390289 |
3.2314285 |
|
6 |
2.903797 |
3.1760258 |
3.3278516 |
3.2023102 |
|
7 |
2.982072 |
3.2496957 |
3.1075692 |
3.3539428 |
|
8 |
3.157925 |
3.0950396 |
3.2951549 |
3.2776835 |
|
9 |
2.980941 |
3.2288895 |
3.274097 |
3.2184626 |
|
10 |
2.944647 |
3.0519907 |
3.3424703 |
3.2973596 |
|
11 |
2.911858 |
3.1840512 |
3.1366697 |
3.3087954 |
|
12 |
2.931631 |
3.1525966 |
3.1209302 |
3.2480386 |
|
13 |
2.984569 |
3.0784391 |
3.1623669 |
3.3535867 |
|
14 |
2.815945 |
3.1931631 |
3.0871016 |
3.2677181 |
|
15 |
2.800154 |
3.1147891 |
3.3107909 |
3.2988959 |
|
16 |
2.87494 |
2.860091 |
3.1214618 |
3.3347192 |
|
17 |
2.932218 |
2.8556505 |
2.5044113 |
3.2178878 |
|
18 |
2.861084 |
2.8268298 |
3.3791481 |
3.2784919 |
|
19 |
2.899303 |
2.8874664 |
3.1854166 |
3.2596039 |
|
20 |
2.836517 |
2.6819692 |
3.1459508 |
3.3006196 |
|
ave |
2.91315 |
3.06638 |
3.17628 |
3.27403 |
對比結果:
對於帶寬受限型網絡,從客觀打MOS分來看,質量提升明顯,且能做到穩定精確,對於不同的網絡受限能採取相對應的策略,整個動態參數調整合理且有效。
下面給出帶寬受限時音頻帶寬預測與動態參數調整的對應圖:
1) 20Kbps_Network_limited
當帶寬受限20Kbps時,整個網絡判斷爲帶寬受限型,動態參數的調整主要集中在碼率,FEC始終保持爲0倍。碼率從正常網絡的32Kbps下降到8Kbps,最終穩定在8Kbps,只有在網絡狀態完全正常,所有的判斷都重新開始的時候纔有細微波動,這是算法重新收斂的過程屬於合理現象。整個過程語音清晰但聲音質量只能是8Kbps碼率的標準,不是很飽滿。
2) 30Kbps_Network_limited
當帶寬受限30Kbps時,整個網絡判斷爲帶寬受限型,FEC爲0倍,碼率從8Kbps升到12Kbps,最終穩定在12Kbps。整個過程語音清晰但聲音質量比8Kbps碼率好,但聲音還不不飽滿。
3) 40Kbps_Network_limited
當帶寬受限40Kbps時,整個網絡判斷爲帶寬受限型,FEC爲0倍,碼率從12Kbps升到16Kbps,最終穩定在16Kbps。整個過程語音清晰聲音飽滿,失真小。
4) 50Kbps_Network_limited
由於帶寬受限在50Kbps的時候,由於opus編碼目前在demo中的最大碼率爲32Kbps,再剛開始帶寬受限時碼率還是維持在32Kbps,但是隨着檢測的深入,經過優化大部分情況是可以檢測到帶寬受限的,只要帶寬受限標誌位置爲1,後面的動態參數就會被鎖定,近期多次測試結果來看,鎖定爲24Kbps和20Kbps的可能性最大,所以這樣優加強了參數調整的穩定性,使得語音質量良好,且清晰流暢,當比起不受限時語音還是存在失真。
C.實際網絡
在實際網絡測試時,選擇公司內部的listensin WIFI,主叫和被叫都連接統一WIFI,當不支持穿透。一端在走廊和洗手間門口走動時,此端會短時間內判斷爲帶寬受限,按帶寬受限的策略去調整動態參數,卻能長時間鎖定一檔碼率,符合算法設計初衷,保證了通話順暢,提升了語音質量的穩定性。當到工作位置時,帶寬估計算法會探測到已解除帶寬受限,經過長時間的跟蹤最終確定網絡確實正常後,開始全面提升碼率,提升語音質量,且進入新一輪判斷。
-
優化結論
1. 經過多輪測試,動態參數的調整比原來更加精確和穩定,基本達到算法設計要求。
2. 增加了音頻帶寬估計和探測算法後,對不同網絡狀態的判斷更加準確,增加了動態參數調整的穩定性。
3. 通過優化前後音頻質量客觀打分可知,優化後參數調整更加穩定,尤其對於帶寬受限型網絡,MOS分提升明顯。
附件:
1.demo
2.整理後數據:
3.項目音頻動態參數優化說明
4.優化前測試報告
靈聲訊
整理於2019-03-01
加羣和關注公衆號請戳下面:
福利小貼士:
理科只是爲自己插上騰飛的翅膀,文科才能讓你飛黃騰達,同意的點贊,謝謝!
贈送原創詩歌公衆號“天一色”,以饗讀者!