音频测试

测试原理

将测试机置于弱网环境中(比如设置了随机丢包率,限宽等参数的网络,网络在测试机到AP之间进行衰减),两个测试机通过产品产生声音,声音从测试机A的耳机出到电脑的麦克风进入电脑进行测试,测试后的声音通过电脑的耳机出来经过测试机B的麦克风回到产品。声音进到电脑后,电脑截取受损声音的wav文件保存作为待测试文件。采用客观MOS(mean opinion score)的方法PESQ(Perceptual Evalution of Speech Quality)进行评价。电脑端采用取样的方式将模拟信号转换为数字信号,宽带采样率为16000,窄带为8000,采用数字信号处理方式将标准的wav参考文件与受损的wav文件通过pesq软件进行比对(比对方法是将参考文件和受损文件调至同一音量,并分成较短的交迭样本块,计算每一块的傅里叶系数,并比较),得出mos分。mos分数关注的是声音的还原度,即在语音通话过程中声音的清晰度。

测试流程

  1. 将一端手机(取决于测上行还是下行数据)置于受损网络(网路在进入ap前被衰减)
  2. 手机产生的声音经过手机的耳机孔和电脑的麦克风孔进入电脑
  3. 进入电脑的声音生成受损wav文件,电脑调用pesq软件对受损wav文件和参考wav文件进行比对,得出mos分

存在的问题1

1次pesq软件的运行只产生一个对比数据(mos分数)且需要手动截取音频流获取wav文件,而一个损伤环境(比如丢包5%)下mos分的获取需要测试多次,计算平均值,如果使用人力将是一个非常耗时且效率低下的过程,因此需要撰写自动化测试脚本,实现自动化。

解决方法

撰写脚本实现pesq软件的调用,测试中需要对窄带和宽带的mos分都进行统计。pesq根据输入参数的不同,输出不同的计算结果。采用多线程方式,线程一不停的遍历保存wav文件的文件夹,当有新的wav文件过来时触发线程二进行窄带mos分和宽带mos分以及其他参数的计算,实现所需6个参数的一并收集,将计算产生的日志放入文件夹,线程三对日志进行整理将窄带mos和宽带mos以及其他参数放入文件中的同一行,形成当前环境下的一个质量参数。

存在的问题2

需要对受损的wav文件进行尾部静音截取

解决方法

撰写脚本实现wav文件的二进制读取,并使用struct的unpack方法读取文件头部对应的音频文件信息(如:采样率,位数,信道数,文件总长,文件数据区长度等),去掉44字节的头部信息,对数据区以20个采样点为一组计算其平均方差和变化幅度(如果是静音,声音的起伏不大,方差较小,如果不是静音,采样点形成正弦函数,平均方差较大,最大值和最小值的幅度差也较大),从而判断是否静音,获取到最后一段静音对应的文件起始位置,进行截取,实现尾部静音的截断。截断之后需要重新封装文件头部,改变文件头部对应的文件总长度,数据区长度等字段值,使用struct的pack方法进行封装。

存在的问题3

获取到的数据以文本形式存放在指定文件夹,需要从文件夹搜索到指定文件,并从文件中筛选出数据进行计算

解决方法

获取到的数据均为excel或txt文件,需要从文件的杂乱内容中筛选出需要的数据,进行处理。首先遍历文件夹,利用re模块的findall()函数获取文件夹中需要处理的文件,对txt文件利用findall()匹配正则表达式,获得想要的数据,对于excel文件,利用xlrd模块进行表格和指定行列的读取。

音频知识

窄带和宽带

音频的窄带和宽带区分相对于取样率而言,窄带采样率(每秒采样次数)为8kHz,宽带采样率为16kHz,因此宽带比窄带能够传递更多的信息,声音还原度更高。

采样分辨率

指每个采样点用多少位进行表示,位数越高采样点分辨率越高。

测试参数

随机丢包

音频包每20ms发送一次,2s内共发送50个数据包,随机丢包指按照设置的百分率,在2秒时间内,随机丢弃一定数量的音频包,测试出该环境下的mos分。

抖动

抖动是指在2秒时间内随机选取25%的数据包,根据设置的抖动数值x,延迟xms后发送。

限宽

限宽指每秒发送的字节数,假定有一个无限长的队列,左端出包,右端入包,当左端数值达到指定限宽时将不再进行出包,而右端持续入包,会引起时延变化。

连续丢包

以2s为一个周期,连续丢包如15%是指2s中有连续的300ms网络处于阻塞状态不进行收包,如果2ms发送一个数据包,那么此时300ms会丢弃150个数据包,剩余的1700ms处于放行状态。

你可能感兴趣的:(笔记)