浅谈语音质量保障:如何测试 RTC 中的音频质量?
日常音视频开会中我们或多或少会遭遇这些场景:“喂喂喂,可以听到我说话吗?我听你的声音断断续续的”,“咦,我怎么可以听到回声?”,“太吵啦,我听不清楚你在说啥” 等等。这些语音质量问题影响音视频开会体验,如若是重要的会议,那足够让人 “恼羞成怒”。那么如何有效的减少这些问题发生呢?本系列文章就将为大家分享阿里云视频云在保障 RTC 语音质量方面的测试经验。
作者|柯淮
审校|泰一
背景介绍
音频质量是指正常网络下的听觉质量和音频 3A 算法质量。听觉质量,是在无损网络情况下人耳对语音优劣的主观感受。但在实际生活中,不同人对同一声音可能会有不同的优劣判断,另外还会受到收听环境和收听心理影响。在测试时,我们可以从声音三要素:响度、音高、音色纬度出发,对一些指标进行量化评估。另外业内标准还会将这些量化指标通过一定的加权处理以期望拟合主观感受,比如 POLQA、PESQ 等。
音频 3A 算法是指:
AGC: Automatic gain control(自动增益控制)
ANS: Adaptive noise suppression(噪声抑制)
AEC: Acoustic echo cancellation(回声消除)
这部分内容公众号中已有较多文章较详细介绍原理及实现,这里不再赘述。
往期文章
详解 WebRTC 高音质低延时的背后 — AGC(自动增益控制)
本系列文章将从音频质量、适配测试、Qos 质量、自动化方案四个维度去介绍阿里云视频云如何保障 RTC 语音质量,本文先介绍音频质量部分(正常网络下的听觉质量和音频 3A 算法质量)。
RTC 语音测试链路拆解
在正式测试前,我们先了解 RTC 语音传输的整个链路框架图,声音通过麦克风采集,而后上行音频算法进行前处理,编解码传输后通过扬声器播放出来。若想测试上行音频算法可在(1)处输入声音,而后在(2)处拉取输出音频进行分析。系统测试时,我们往往从端到端角度评估,即从(1)处输入声音而后在(4)拉取声音进行分析,本文后续测试方法均基于端到端。
音频质量测试方案
阿里云视频云采用业内常用的客观指标+主观评价相结合的方法来保障音频质量,具体指标请参考下图:
客观测试方法
有效频宽
Line in 输入扫频文件 +48K 采样率的人声音频(音频素材参考如下),Line out 录制输出音频,通过频率分析读取有效频宽;
端到端延迟
方法一:使用 VQT 测试,测试结果中输出延迟时间。
方法二:自研。Line in 测试素材,Line out 录制未经过传输及输出音频,计算音频延迟时间。
- 测试素材:一段连续的单音。
- 指标计算:录制文件中读取未经过传输的音频起始时间记为 t1,读取经过会议传输的音频起始时间记为 t2,则 Delay=t2-t1。
ANS
考察 ANS 算法在纯噪声和语噪混合场景下的表现,分析指标包含:降噪一致性、信噪比提升、收敛时间、消噪后人声音质。
测试拓扑
通过音量 Line in 或者外放输入背景素材及语音素材,在拉流端 Line out 录制输出音频进行指标分析。
测试素材
指标计算
信噪比提升:求取经过消噪后音频的信噪比为 A,则信噪比提升值 =A- 输入信噪比。
降噪一致性:计算各种噪声输入后噪声的残留值,并统计各种噪声下噪声残留是否一致。
收敛时间:记录噪声能量开始下降的时间为 t1,记录噪声已收敛至平稳的初始时间 t2,收敛时间 =t2-t1。
音质:改造 VQT POLQA 测试脚本,计算不同信噪比输入下输出音频 MOS 分。下表展示输入信噪比为 10dB 带噪人声,输出音频音质 MOS 分:
AGC
考察AGC算法在不同音量下表现,分析指标包括:声音平稳性、输出响度。
测试拓扑
参考 ANS 测试拓扑图,通过音量 Line in 或者外放输入语音素材,在拉流端 Line out 录制输出音频进行指标分析。
测试素材
指标计算
- 声音平稳性:计算输出音频各音量段的平均 RMS,而后求解这个输出音频的平均 RMS 的方差。如下是平均 RMS 的计算公式:
输出响度:Line out 方式计算输出音频的平均 RMS;外放方式使用标准声压计,以 A 计权方式记录响度值。
音质:改造 VQT POLQA 测试脚本,计算不同音量输入下输出音频 MOS 分。下表展示大中小音量输入下,输出音频音质 MOS 分:
AEC
考察 AEC 算法单讲和双讲场景下是否存在漏回声、人声抑制等问题。
测试拓扑
【单讲】
推流端播放单讲语音素材,拉流端默认配置放在空旷会议室中。Line out 录制推流端的输出,判断拉流端是否存在漏回声。
【双讲】
同时向推流端和拉流端播放双讲测试素材,Line out 录制推流端的输出,判断拉流端是否存在漏回声和人声抑制。
同时向推流端和拉流端播放双讲测试素材,Line out 录制推流端的输出,判断拉流端是否存在漏回声和人声抑制。
测试素材
指标计算
漏回声:读取录制音频文件的人声残留量,理论上该处值为 0- 没有漏回声。
人声抑制:双讲场景下评估此指标。利用 3gpp TS 26.132 标准评价剪切情况,最终评价以 D 类(连续剪切大于 150ms)为标准,值越接近于 0 质量越好。
收敛时间:测试开始时间记为 t1,AEC 收敛完成无漏回声出现时间记为 t2,收敛时间 =t2-t1。
人声音质:双讲场景下评估此指标。改造 VQT POLQA 测试脚本,计算双讲场景下人声的音质得分。
STOI
短时客观可懂度,当前学术上比较精确,可靠的客观评估方法来计算语音可懂度,客观测试结果可以一定程度上反映语音可懂性和自然性。存在局限性:需降采样到 16K 进行计算。
- 测试拓扑:参考 ANS 测试拓扑。
- 测试素材:ITU-P863 提供标准人声素材。
- 指标计算:如下框架图展示了 STOI 计算流程,当前业内已有 matlab 和 python 对该算法的工程实现。
POLQA
ITU-T P.863 提供测试方法,可得到 MOS 分和音频延迟。支持 8K、16K、48K 测试,局限性是设备贵。
- 测试拓扑:参考 ANS 测试拓扑。
- 测试素材:ITU-P863 提供标准人声素材 &VQT 内置语音测试素材。
- 指标计算:POLQA MOS 分。
PESQ
ITU-T P.862 提供测试方法,可得到 MOS 分,局限性是仅可支持 8K 和 16K。
- 测试拓扑:参考 ANS 测试拓扑。
- 测试方法:测试素材:ITU-P863 提供标准人声素材。
- 指标计算:PESQ MOS 分
主观测试方法
采用 “YD/T 2309 音频质量主观测试方法(ITU-R BS.1284)” 中提及的评分规则和维度,在不同场景下为专家和普通用户进行打分测试。
评分方法
评价维度
测试场景
测试素材采用“惠威试音碟”和“TUT-acoustic-scenes-2017-development”。
本文为 RTC 音频测试系列的第一篇,后续我们将从适配测试、Qos 质量、自动化方案的维度去介绍阿里云视频云如何保障 RTC 语音质量,欢迎关注公众号「视频云技术」。
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。公众号后台回复【技术】可加入阿里云视频云产品技术交流群,和业内大咖一起探讨音视频技术,获取更多行业最新信息。
浅谈语音质量保障:如何测试 RTC 中的音频质量?的更多相关文章
- [原创]浅谈移动互联网App兼容性测试
[原创]浅谈移动互联网App兼容性测试 今天要谈的话题,估计各位测试都有感受,移动互联网App兼容性测试,我们到底测试覆盖如何去挑选机型?具体移动App兼容性测试如何开展?是不是应引进像testin这 ...
- [原创] 浅谈ETL系统架构如何测试?
[原创] 浅谈ETL系统架构如何测试? 来新公司已入职3个月时间,由于公司所处于互联网基金行业,基金天然固有特点,基金业务复杂,基金数据信息众多,基金经理众多等,所以大家可想一下,基民要想赚钱真不容易 ...
- 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作
目录 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 NLP相关的文本预处理 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 之所以心血来潮想写这篇博客,是因为最近在关注N ...
- 浅谈Excel开发:九 Excel 开发中遇到的常见问题及解决方法
Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家有所帮助. 一 插件调试不了以及错误导致崩溃的问题 在开发机器上,有时可 ...
- <转载>浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...
- 浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联
看到网上很多关于svn环境配置和关联Android-Studio的很多博文,发现很零散,想集大家所长整理一下: 在AndroidStudio中开发版本控制中,除了Git就是SVN,和Eclipse不同 ...
- 浅谈如何使用python抓取网页中的动态数据
我们经常会发现网页中的许多数据并不是写死在HTML中的,而是通过js动态载入的.所以也就引出了什么是动态数据的概念, 动态数据在这里指的是网页中由Javascript动态生成的页面内容,是在页面加载到 ...
- 浅谈Excel开发:十 Excel 开发中与线程相关的若干问题
采用VSTO或者Shared Add-in等技术开发Excel插件,其实是在与Excel提供的API在打交道,Excel本身的组件大多数都是COM组件,也就是说通过Excel PIA来与COM进行交互 ...
- 浅谈Bootstrap自适应功能在Web开发中的应用
随着移动端市场的强势崛起,web的开发也变得愈发复杂,对于个体开发者来说,自己开发的网站,在电脑.手机.Pad等上面都要有正常的显示以及良好的用户体验.如果每次都要自己去调整网页去匹配各个不同的客户端 ...
随机推荐
- redis数据同步之redis-shake
redis-shake简介 redis-shake是阿里开源的用于redis数据同步的工具,基本功能有: 恢复restore:将RDB文件恢复到目的redis数据库. 备份dump:将源redis的全 ...
- COM笔记-包容与聚合
COM不支持实现继承的原因在于这种继承方式将使得一个对象的实现同另外一个对象的实现紧紧地关联起来.在这种情况下,当基类的实现被修改后,派生类将无法正常运行而必须被修改.这就是为什么一些用C++编写大型 ...
- 物联网协议Coap协议介绍
COAP协议简介 Coap(Constrained Application Protocol)是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252.COAP名字翻译来就是" ...
- 测试框架unit之assertion断言使用详解
NUnit是.Net平台的测试框架,广泛用于.Net平台的单元测试和回归测试中,下面我们用示例详细学习一下他的使用方法 任何xUnit工具都使用断言进行条件的判断,NUnit自然也不例外,与其它的xU ...
- long ? 的使用和理解
Dictionary<string, object> dic = new Dictionary<string, object>(); long lg = 12345; dic[ ...
- 【转】新说Mysql事务隔离级别
作者:孤独烟 转自:https://www.cnblogs.com/rjzheng/p/9955395.html 引言 大家在面试中一定碰到过 说说事务的隔离级别吧? 老实说,事务隔离级别这个问题,无 ...
- 网络视频m3u8解密及ts文件合并
网络视频m3u8解密及ts文件合并 参考了两篇博客: https://blog.csdn.net/weixin_41624645/article/details/95939510 https://bl ...
- JDBC中级篇(MYSQL)——处理大文本(CLOB)
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.FileNotFoundException; import ...
- springboot使用redis(从配置到实战)
概述 springboot通常整合redis,采用的是RedisTemplate的形式,除了这种形式以外,还有另外一种形式去整合,即采用spring支持的注解进行访问缓存. 准备工作 pom.xml ...
- 磁盘“Seagate”没有被推出,因为一个或多个程序可能正在使用它。
推出移动硬盘失败,解决方案: 执行 lsof /Volumes/Seagate/ 可以看到哪些进程在占用磁盘 $ lsof /Volumes/Seagate/ COMMAND PID USER FD ...