语音端点检测(2):单参数双门限法

引言


接着上一篇双参数双门限法的语音端点检测的文章写。

上一篇用了两个参数,短时能量和短时过零率。

这一篇只用一个参数,短时能量。当然,还可以用其他特征。总之,特征个数(种类)仅限一个。


基本思想


设置2个参数。从静音到大于大门限T2时,认为第一次大于T2时是语音起点。再看什么时候低于小门限T1,决定终点。大概是这样。

注意事项


这种度量,可以是越大越相似,可以是越小越相似。这要看实际采用什么作为“距离”度量了。

为了检测出语音之间的停顿,在检测的过程中,需要设定当前的状态(语音、过渡、静音等状态)。

一边检测,一边更新当前的状态。有时候,检测出当前好像是静音状态,但其实可能仅是语音之间的停顿而已。

因此,需要“延音”,即再往前走几帧。看是否真的是停顿。比如,设置一个停顿的计数器silence_counter。

停顿一帧,silence_counter++。判断是否大于预设的,最大允许停顿的帧数。

如果是,则看是否是突发噪声等。如果还没有,那如果本来是语音段来的话,就继续保持语音段,往前再延几帧。

总之,很是麻烦。很繁琐。容易重复,也容易漏。

为了避免这种情况的发生,最好,列出状态转移表,把当前每一种状态的判别情况写清楚。

最后,画出流程图。直接写代码很头疼。

主函数

单参数双门限检测函数


工具函数


生成AWGN,加入信号。


因为有噪声,短时特征可以先平滑处理。采用多次中值滤波。


结果示意


第一张子图里的干净信号加了AWGN后,成为了第三张子图里带有噪声的信号。
检测是在含噪声的信号中检测的。

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