语音端点检测(1):双门限法(简单教学版)

为什么要有语音端点检测?或者换个角度说,静默检测、静音检测。

以下摘自百度。

语音活动检测(Voice Activity Detection,VAD)又称语音端点检测,语音边界检,是指在噪声环境中检测语音的存在与否,通常用于语音编码、语音增强等语音处理系统中,起到降低语音编码速率、节省通信带宽、减少移动设备能耗、提高识别率等作用。早先具有代表性的VAD方法有ITU-T的G.729 Annex B。

似乎很重要。

那怎么做?

最直接的,从能量的角度考虑。

如果大于某个阈值,就认为是语音段。当然,还要排除个别突发噪声的情况。

另外,声母的功率小,但也属于语音段啊。怎么办?考虑到它的ZCR比较大。

所以有个教学版的算法,简单,效果又挺好。

假定一段信号的前一段是纯净的噪声(噪声也不是没有用,还是有有用的时候)……

双门限的VAD算法,到处都有。百度一下就可以知道了。

以下贴出对应的matlab代码。

非常值得学习的是,3 sigma 原则。(sigma为标准差std)

测量环境噪声参数那一段时,用了个3 sigma的思想,对门限进行了选取。个人觉得挺巧妙的。


其中,计算短时能量、短时过零率的函数,已经在前文中讲了。

短时能量、短时过零率

本算法非常简单且有效。但不能检测出语音内的一段停顿。

检测结果如下图。


如果要改进,估计有点繁琐。

此外,本算法只能用于后处理(post processing)、离线处理(offline processing)。

要读完所有数据,才能检测语音的结尾。因为它的结尾首先是从右往左扫描的。

不过,简单嘛。可以接受。


你可能感兴趣的:(matlab,端点检测,静默检测)