音频带宽预测与动态参数调整优化报告【音频质量专题】
音频带宽预测与动态参数调整优化报告
目录
本内容全原创,因作者才疏学浅,偶有纰漏,望不吝指出。本内容由灵声讯音频-语音算法实验室整理创作,转载和使用请与“灵声讯”联系,联系方式:音频/识别/合成算法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
加群和关注公众号请戳下面:
福利小贴士:
理科只是为自己插上腾飞的翅膀,文科才能让你飞黄腾达,同意的点赞,谢谢!
赠送原创诗歌公众号“天一色”,以飨读者!