语音处理检测技术端点检测、降噪和压缩详解
扫描二维码
随时随地手机看文章
作为一种人机交互的手段,语音的端点检测在解放人类双手方面意义重大。同时,工作环境存在着各种各样的背景噪声,这些噪声会严重降低语音的质量从而影响语音应用的效果,比如会降低识别率。未经压缩的语音数据,网络交互应用中的网络流量偏大,从而降低语音应用的成功率。因此,音频的端点检测、降噪和音频压缩始终是终端语音处理关注的重点,目前仍是活跃的研究主题。
为了能和您一起了解端点检测和降噪的基本原理,带您一起一窥音频压缩的奥秘,科大讯飞资深研发工程师李洪亮将为我们详解语音处理检测技术中的热点——端点检测、降噪和压缩 。
▎端点检测
首先来看端点检测(Voice AcTIvity DetecTIon, VAD)。音频端点检测就是从连续的语音流中检测出有效的语音段。它包括两个方面,检测出有效语音的起始点即前端点,检测出有效语音的结束点即后端点。
在语音应用中进行语音的端点检测是很必要的,首先很简单的一点,就是在存储或传输语音的场景下,从连续的语音流中分离出有效语音,可以降低存储或传输的数据量。其次是在有些应用场景中,使用端点检测可以简化人机交互,比如在录音的场景中,语音后端点检测可以省略结束录音的操作。
为了能更清楚说明端点检测的原理,先来分析一段音频。上图是一段只有两个字的简单音频,从图上可以很直观的看出,首尾的静音部分声波的振幅很小,而有效语音部分的振幅比较大,一个信号的振幅从直观上表示了信号能量的大小:静音部分能量值较小,有效语音部分的能量值较大。语音信号是一个以时间为自变量的一维连续函数,计算机处理的语音数据是语音信号按时间排序的采样值序列,这些采样值的大小同样表示了语音信号在采样点处的能量。
采样值中有正值和负值,计算能量值时不需要考虑正负号,从这个意义上看,使用采样值的绝对值来表示能量值是自然而然的想法,由于绝对值符号在数学处理上不方便,所以采样点的能量值通常使用采样值的平方,一段包含N个采样点的语音的能量值可以定义为其中各采样值的平方和。
这样,一段语音的能量值既与其中的采样值大小有关,又与其中包含的采样点数量有关。为了考察语音能量值的变化,需要先将语音信号按照固定时长比如20毫秒进行分割,每个分割单元称为帧,每帧中包含数量相同的采样点,然后计算每帧语音的能量值。
如果音频前面部分连续M0帧的能量值低于一个事先指定的能量值阈值E0,接下来的连续M0帧能量值大于E0,则在语音能量值增大的地方就是语音的前端点。同样的,如果连续的若干帧语音能量值较大,随后的帧能量值变小,并且持续一定的时长,可以认为在能量值减小的地方即是语音的后端点。
现在的问题是,能量值阈值E0怎么取?M0又是多少?理想的静音能量值为0,故上面算法中的E0理想状态下取0。不幸的是,采集音频的场景中往往有一定强度的背景音,这种单纯的背景音当然算静音,但其能量值显然不为0,因此,实际采集到的音频其背景音通常有一定的基础能量值。
我们总是假设采集到的音频在起始处有一小段静音,长度一般为几百毫秒,这一小段静音是我们估计阈值E0的基础。对,总是假设音频起始处的一小段语音是静音,这一点假设非常重要!!!!在随后的降噪介绍中也要用到这一假设。在估计E0时,选取一定数量的帧比如前100帧语音数据(这些是“静音”),计算其平均能量值,然后加上一个经验值或乘以一个大于1的系数,由此得到E0。这个E0就是我们判断一帧语音是否是静音的基准,大于这个值就是有效语音,小于这个值就是静音。
至于M0,比较容易理解,其大小决定了端点检测的灵敏度,M0越小,端点检测的灵敏度越高,反之越低。语音应用的场景不同,端点检测的灵敏度也应该被设置为不同的值。例如,在声控遥控器的应用中,由于语音指令一般都是简单的控制指令,中间出现逗号或句号等较长停顿的可能性很小,所以提高端点检测的灵敏度是合理的,M0设置为较小值,对应的音频时长一般为200-400毫秒左右。在大段的语音听写应用中,由于中间会出现逗号或句号等较长时间的停顿,宜将端点检测的灵敏度降低,此时M0值设置为较大值,对应的音频时长一般为1500-3000毫秒。所以M0的值,也就是端点检测的灵敏度,在实际中应该做成可调整的,它的取值要根据语音应用的场景来选择。
以上只是语音端点检测的很简单的一般原理,实际应用中的算法远比上面讲的要复杂。作为一个应用较广的语音处理技术,音频端点检测仍然是一个较为活跃的研究方向。科大讯飞已经使用循环神经网络(Recurrent Neural Networks, RNN)技术来进行语音的端点检测,实际的效果可以关注讯飞的产品。