在线视频/语音通话逐渐成为人们日常生活的一部分,而复杂多变的网络环境会导致部分音频包无法传送到接收端,造成语音信号的短时中断或者卡顿,这会严重影响通话体验,为解决这类问题,阿里云视频云音频技术团队在综合考虑效果、性能开销、实时性等诸多因素后,研发了实时因果的智能丢包补偿算法 AliPLC (Ali Packet Loss Concealment),采用低复杂度的端到端的生成对抗网络来解决语音在传输过程中的丢包问题。

实时通信中,信号不好怎么办?

随着互联网技术的飞速发展,直播,在线教育,音视频会议,社交泛娱乐,互动游戏等新兴的交互方式正在改变着人们的生活。值得一提的是,它们的兴起都离不开实时通信技术 (Real Time Communication, RTC) 的发展。图 1 展现了 RTC 通信中音频链路的简要流程,主要包含:采集、前处理 (3A)、编码、传输、解码、丢包补偿、混音、播放等环节。



图 1. RTC 中的音频链路示意图

语音信号通过编码压缩技术,在网络上进行分帧传送。然而由于网络环境的影响会导致部分音频包无法传送到接收端,造成语音信号的短时中断或者卡顿,进而影响长时通话过程中的音质和可懂度。为解决以上问题,丢包补偿 (Packet Loss Concealment,PLC) 算法应运而生。PLC 算法可以通过利用所有已得到的信息对丢失的音频包进行恰当的补偿,使之不易被察觉,从而保证了接收侧音频的清晰度和流畅度,给用户带来更好的通话体验。

音频补偿算法业内研究现状

丢包是数据在网络中进行传输时会经常遇到的一种现象,也是引起 VOIP(Voice Over Internet Phone, VOIP) 通话中语音质量下降的主要原因之一。传统的 PLC 解决方案主要基于信号分析原理 [1-2],大致可以分为基于发送端补偿的方案和基于接收端补偿的方案。前者的基本原理是利用编码冗余信息来恢复丢包的内容。

然而,该方法需要占用额外带宽,且存在编解码器不兼容的问题。后者的基本原理是利用丢包前的解码参数信息来重构出丢失的语音信号。传统的 PLC 方法最大的优点是计算简单,可在线补偿;缺点是补偿的能力有限,只能有效对抗 40ms 左右的丢包。应对长时连续突发丢包时,传统算法会出现机械音,波形快速衰减等无法有效补偿的情况。因此,上述传统的 PLC 方法的处理能力满足不了现网业务的需求。

近年来,硬件和算法都有了显著的进步,越来越多深度学习的方法被应用到语音信号处理领域。当然,PLC 算法也不例外。现有的深度 PLC 方法都是在接收端利用深度学习的模型生成丢失的音频包,大致可以分为两个通用的工作框架:

第一个是实时因果处理框架,只使用历史的未丢失帧进行后处理。在进行实时处理时,按迭代方法的不同大致可以分为基于循环神经网络的自回归方法 [3-4] 和基于生成对抗网络的并行方法 [5-6] 两种,但往往涉及较大的参数量和计算量。

第二个是离线非因果处理框架,除了使用历史未丢失帧之外,还有可能使用了包括未来帧的更广泛的上下文信息 [7-8]。离线处理方法通常关注的是如何填充语音信号中的空白,而且通常不考虑计算复杂度,难以在实际应用场景中部署。

智能丢包补偿算法:AliPLC

1. 算法原理

在综合考虑业务使用场景,补偿效果、性能开销、实时性等诸多因素后,阿里云视频云音频技术团队研发了实时因果的智能丢包补偿算法:AliPLC(Ali Packet Loss Concealment),采用低复杂度的端到端的生成对抗网络来解决语音在传输过程中的丢包问题。该算法具有以下优点:

• 算法没有任何延时;

• 可以实时流式处理;

• 可以生成高质量的语音;

• 不用单独进行平滑操作就能保证丢包前后音频的平滑和连贯性。

2. 算法性能

AliPLC 算法的参数量为 590k, 在主频为 2GHz 的 Intel Core i5 四核机器上补偿一帧 20ms 的音频数据所需时间为 1.5ms, 在推演的过程中不产生任何延时。

3. 应用场景

4. 效果展示

下面分别对中文男女生测试语料的丢包补偿前后效果进行展示。主观听感上,补偿之后的语音卡顿减少,流畅度和清晰度都有明显的提升。

中文男声固定连续丢包60ms:

丢包音频音频

Webrtc neteq plc 补出音频

opus plc 补出音频音频

AliPLC 补出音频音频

不同方法的波形图对比:

从图中可以明显的看出,在固定丢包 60ms 时,经过 AliPLC 算法处理后的音频的连贯性更好,也不存在衰减等无法补偿的情况。

中文女声固定连续丢包120ms:

丢包音频音频

WebRTC neteq plc 补出音频

opus plc 补出音频音频

AliPLC 补出音频音频

从图中可以明显的看出,在固定丢包 120ms 时,AliPLC 算法的补偿效果较其他算法好一些;neteq_plc 算法通过简单的基因周期的重复和衰减完成丢包补偿,在长时丢包发生时,听起来有很重的机械音,而且会影响未丢包部分的波形;opus_plc 算法的补偿能力有限,只能有效补偿 40ms 左右,多于 40ms 的丢包会被衰减为静音。

AliPLC 客观指标评测

我们采用 POLQA 和 STOI 两种客观指标对不同 PLC 算法的补偿效果进行了测评,在不同丢包率下它们的分数如下图所示。其中横坐标表示丢包率,纵坐标表示分数。POLQA 分数的取值范围为 0-4.5,STOI 分数的取值范围为 0-1,两种客观指标的分数越高,说明补偿后语音信号的质量越好,可懂度越高。

从图中可以明显的看出 AliPLC 算法在 POLQA 和 STOI 两种客观指标上都优于其他 PLC 算法。AliPLC 算法与 neteq_plc 算法相比:POLQA 平均提升 0.54 分 ,STOI 平均提升 21.7%;AliPLC 算法与 opus_plc 算法相比:POLQA 平均提升 0.45 分 ,STOI 平均提升 3.4%; AliPLC 算法在丢包 30% 时的指标比 neteq_plc 算法在丢包 20% 时的指标还要好一些,即 AliPLC 算法可以使接受侧多抗 10%-20% 的丢包。

AliPLC 补偿算法的后续创新

AliPLC 作为阿里云视频云音频技术团队音频解决方案的一部分,充分利用深度学习中 GAN 网络能够有效地生成高质量的音频这一能力,在方法上进行创新,用较低的计算复杂度,提供连续丢包补偿的能力,提升用户在弱网环境下的通话体验。在未来,阿里云视频云音频技术团队将继续探索基于深度学习 + 信号处理的的音频技术,为更广泛的用户创造极致的音频体验。

参考文献

[1] S. M. Kay and S. L. Marple, “Spectrum analysis A modern perspective,” Proceedings of the IEEE, vol. 69, no. 11, pp. 1380–1419, 1981.

[2] C. A. Rodbro, M. N. Murthi, S. V. Andersen, and S. H. Jensen, “Hidden Markov model-based packet loss concealment for voice over IP,” IEEE Transactions on Audio, Speech, and Language Processing, vol. 14, no. 5, pp. 1609–1623, 2006.

[3] M. M. Mohamed and B. W. Schuller, “ConcealNet: An End- to-end Neural Network for Packet Loss Concealment in Deep Speech Emotion Recognition,” arXiv:2005.07777 [cs, eess], May 2020, arXiv: 2005.07777.

[4] F. Stimberg et al., "WaveNetEQ — Packet Loss Concealment with WaveRNN," 2020 54th Asilomar Conference on Signals, Systems, and Computers, 2020, pp. 672-676.

[5] S. Pascual, J. Serra, and J. Pons, “Adversarial Auto-Encoding for Packet Loss Concealment,” arXiv:2107.03100 [cs, eess], Jul. 2021, arXiv: 2107.03100.

[6] J. Wang, Y. Guan, C. Zheng, R. Peng, and X. Li, “A temporal-spectral generative adversarial network based end-to-end packet loss concealment for wideband speech transmission,” The Journal of the Acoustical Society of America, vol. 150, no. 4, pp. 2577–2588, Oct. 2021.

[7] O. Ronneberger, P. Fischer, and T. Brox, “U-Net: Convolutional Networks for Biomedical Image Segmentation,” arXiv:1505.04597 [cs], May 2015, arXiv: 1505.04597 version: 1.

[8] A. Marafioti, N. Perraudin, N. Holighaus, and P. Majdak, “A context encoder for audio inpainting,” IEEE/ACM Transactions on Audio, Speech, and Language Processing, vol. 27, no. 12, pp. 2362–2372, 2019.

「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。公众号后台回复【技术】可加入阿里云视频云产品技术交流群,和业内大咖一起探讨音视频技术,获取更多行业最新信息。

AliPLC 智能丢包补偿算法,提升弱网环境的通话质量的更多相关文章

  1. 深入剖析iLBC的丢包补偿技术(PLC)

    转自:http://blog.csdn.net/wanggp_2007/article/details/5136609 丢包补偿技术(Packet Loss Concealment——PLC)是iLB ...

  2. 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(15)-Fiddler弱网测试,知否知否,应是必知必会

    1.简介 现在这个时代已经属于流量时代,用户对于App或者小程序之类的操作界面的数据和交互的要求也越来越高.对于测试人员弱网测试也是需要考验自己专业技术能力的一种技能.一个合格的测试人员,需要额外关注 ...

  3. 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(11)-Charles如何模拟弱网环境

    1.前言 张三:"我写的软件好奇怪啊,在网络好的时候一点问题也没有,但是信号差的时候明显卡顿,看来我只能一直蹲在卫生间.电梯或者地铁(信号差)调bug了". Charles:&qu ...

  4. App-IOS与Android弱网环境测试

    弱网环境下App的功能是否正常使用,是否会发生Crash的等情况? 1.IOS ios系统一般自带弱网环境测试,可以通过设置各种网络环境,模拟弱网环境,如3G,wifi,very bad Networ ...

  5. Fiddler如何模拟弱网环境进行测试

    1.模拟弱网环境 打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多 2.Fiddler弱网的 ...

  6. Fiddler实战之使用Fiddler模拟弱网环境(限速)

    1.模拟弱网环境 打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多 2.Fiddler弱网的 ...

  7. fiddler的使用:抓包定位、模拟弱网

    一.fiddler抓包定位 Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(cookie,htm ...

  8. Facebook ATC弱网环境搭建

    用户的网络环境千姿百态,弱网的.高延时的.丢包的.常有用户反馈偶发bug,我们测试人员却始终无法复现,根据用户的描述,开发排查可能是网络不稳定导致的,所以急需建个弱网环境来测试. 弱网工具简介: Au ...

  9. Charles-模拟弱网环境

    在做弱网测试时,经常需要模拟各种网络环境,Charles恰好也提供了网络限制的功能,我们可以在"Proxy->Throttle Settings"路径下找到它,如下图所示. ...

  10. 【APP测试】APP弱网环境测试

    方法一:利用抓包工具 1.利用fiddler通过代理连接上手机之后,进入Fiddler->Rules->Customize Rules,点击弹出的CustomRules.js文件,找到m_ ...

随机推荐

  1. JavaScript Date转字符串格式

    JavaScript Date转字符串格式

  2. 【scipy 基础】--信号处理

    scipy.signal模块主要用于处理和分析信号.它提供了大量的函数和方法,用于滤波.卷积.傅里叶变换.噪声生成.周期检测.谱分析等信号处理任务. 此模块的主要作用是提供一套完整的信号处理工具,从而 ...

  3. (数据科学学习手札155)基于martin为在线地图构建字体切片服务

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,在之前的一篇文章(基于mart ...

  4. 【Javaweb】servlet七 | 解决post请求中文乱码问题

    问题描述 在get请求时(可以接收) post请求时(出现了中文乱码问题) 解决方案 在doPost函数中添加如下代码 // 设置请求体字符为UTF-8,从而解决post请求的中文乱码问题// 也要在 ...

  5. YOLO: Real-Time Object Detection 遇到的问题

    YOLO: Real-Time Object Detection 官方介绍的方法安装好了yolo之后,然后使用命令: ./darknet detect cfg/yolov3.cfg yolov3.we ...

  6. java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present

    完整的报错信息 java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present at ...

  7. python生成列表的时间复杂度

    在刷题的时候,经常碰到需要生成非常大的邻接矩阵,往往我们都是用 list 存储,但是我在最近刷题的过程中就遇上了TLE的情况,原因就是生成邻接矩阵时间太花时间了. 先说结论:[ ]* n 比 [ fo ...

  8. 阿里云+智能ai+gpt

    1.阿里 百度 腾讯分词 知识库.     阿里云(项目具体的费用预算展示,实际功能核算.) 向量智库 https://developer.aliyun.com/article/1234278?spm ...

  9. Salesforce LWC学习(四十七) 标准页面更新以后自定义页面如何捕捉?

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platfor ...

  10. OpenFeign:Spring Cloud声明式服务调用组件

    OpenFeign:Spring Cloud声明式服务调用组件 问题总结 OpenFeign? Feign VS OpenFeign? OpenFeign实现远程服务调用? OpenFeign超时控制 ...