李荣荣,胡昌奎,余 娟
(武汉理工大学理学院,湖北 武汉 430070)
随着信息技术的迅猛发展,对冲击噪声下稳健语音检测技术的研究已成为一个新的热点[1],同时,在有些安防监控系统中,也需要进行语音与非语音的准确判断[2]。当待测语音信号的背景环境存在冲击噪声时,由于其幅度或能量比较大,传统的语音端点检测算法[3]容易出现误检,为了避免这一问题,很多算法在判定语音段的起始点时,通常通过比较已经检测到的语音段的长度是否大于程序系统所设定的语音段的最小长度来防止冲击噪声的干扰[4-5],但在有些环境下冲击噪声段比较长,如一段汽车的鸣笛声等,这种方法就容易失效,加大了后续语音处理的复杂度。为此,笔者提出了一种新的检测参数,即短时平均幅度差的峰值数,以此来实现语音与冲击噪声的分离。首先对一段含有不同性质的汽车冲击噪声和语音的声音信号进行语谱分析,发现在传统的短时平均幅度差算法的基础上,通过计算各帧平均幅度差的峰值数这个新参数,并对其设置合适的阈值就可以实现语音与冲击噪声的分离。在这以前学者多数利用短时平均幅度差进行语音基音周期的检测[6-8],也有学者用短时平均幅度差进行语音端点的检测,但是均未注重语音与冲击噪声的分离[9]。
常用于语音检测的基于阈值的方法主要有短时平均能量法、短时平均幅度法、短时平均过零率法、相关性检测法、短时平均幅度差法、谱熵法和倒谱距离法。其中谱熵法和倒谱距离法分别是频域和倒谱域的检测算法,计算量和复杂度都大大高于时域的检测算法,其余的算法均为时域检测算法[10]。
基于短时平均能量和过零率的时域双门限判决法是最常用也是最传统的方法。短时平均能量主要是度量信号的能量,在高信噪比条件下,语音段能量与噪声段能量的差别相当显著,只需要计算输入信号的短时平均能量并设置合理的阈值就能够把语音与噪声区分开来。短时平均过零率表示一帧声音信号波形穿过横轴(零电平)的次数,由于语音信号是一种短时平稳信号,采用短时平均过零率可以在一定程度上反映其频谱特性,可用于语音信号清、浊音的判断。
在实际生产应用中,仅仅根据能量来进行语音判定是比较粗糙的,通常是利用过零率来检测清音,短时能量来检测浊音,两者配合能实现可靠的端点检测。但是如果声音段中包含冲击噪声段,如物体的碰撞、汽车的鸣笛等引起的噪声,幅值或能量比较大且持续时间比较长时,利用该方法往往就容易出现检测错误,且不能有效排除单频信号。很多学者为了避免冲击噪声的干扰,通常在算法中预先设定语音段的最小帧长,在起始帧判定时,如果检测到有信号帧超过阈值,则在进行帧数统计的同时与最小帧长进行比较,小于最小帧长被判定为噪声帧,反之为语音帧。但是这种方法随着环境的不同具有不确定性,尤其是在冲击噪声段比较长且幅值比较大的情况下。
笔者假设汽车噪声为冲击噪声,待测声音信号内含有一段汽车的鸣笛声、一段汽车的发动机声,以及两段不同人说话的语音。对这段声音信号进行短时平均能量和过零率的双门限检测,Matlab仿真结果如图1所示。
图1 待测声音信号双门限检测仿真结果
对图1(b)的检测结果进行双门限判决。先根据语音短时平均能量的轮廓选取一个门限,进行一次判决,被判定的一段即为根据短时平均能量所判定的语音段;再以短时平均过零率为标准,进行另一次判决;最后将两者判定的段落进行整合得出结果。从中可得,不论门限如何选择,最终的检测结果一定含有汽车噪声段,这时检测结果出现了错误,由于冲击噪声的时间比较长,因此用语音段的最小帧长作限定也不起作用。
语音信号由清音和浊音组成,其中主要能量和持续时间都集中于浊音。浊音是由周期性声门脉冲激励声道,并经口唇辐射产生的。对纯净浊音信号加窗,则加窗信号在基音的倍频上存在能量峰。由于基频的变化较缓慢,因此在语谱图上表现为以基音周期为间隔的均匀亮线。图2为待测声音信号的语谱图。
对声音信号进行语谱分析:两段语音由于其浊音特性,具有周期性,在图2上表现出条纹特征,它们之间的间距是由基音周期决定的,在正常情况下人的语音信号的基音频率为75~300 Hz。而在汽车噪声片段中,汽车的鸣笛声在一定范围也具有周期特性,但是与语音的基音周期有所不同,汽车发动机的声音则完全没有周期性,属于非平稳噪声。
图2 待测声音信号的语谱图
所提出的新的检测参数基础是短时平均幅度差检测算法,它是根据相距为整数倍周期的样点值的平均幅值差函数来进行语音分析的方法,不仅能够有效地区分语音、噪声和单频信号,而且运算量比较小,实时性高。
对于一个完全的周期信号(设周期为Np)来说,相距为周期整数倍的样点上的幅值差为0,则:
实际的语音信号由于浊音特性是一个准周期信号,dm虽不为0但值很小,这些极小值对应出现在整数倍周期的位置上,短时平均幅度差定义为:
显然,若xn(m)在窗口取值范围内具有周期性,则Fn(k)在k取信号的周期长度或者周期的整数倍时将出现极小值。实际上,经计算机模拟,短时平均幅度差确实在浊音的基音周期上出现极小值。
对于不同的k值,计算Fn(k)的差值是不同的,随着k值的增加,差值的个数将减少,为了克服该缺点,可以采用两个不等长的语音信号序列进行运算,这样就能保证进行运算的项数不变,即始终为短窗的长度,同时可以保证函数的运算有着良好的周期性[11]。
为了实现语音与冲击噪声的分离,在待检测的声音信号中各取不同性质的一帧信号的平均幅度差进行分析,如图3所示。经过观察发现:不同的信号所对应一帧的平均幅度差图形是不相同的。汽车发动机这种非平稳噪声对应的平均幅度的差峰值数最多,汽车的鸣笛声由于具有一定的周期性对应的峰值数次之,语音浊音对应的最少。
图3 不同信号所对应一帧的平均幅度差
从图3分析可得出改进算法的主要思路:在短时平均幅度差算法的基础上,计算每帧的平均幅度差峰值数并设定合理的阈值来实现语音与冲击噪声的分离。算法实现过程如下:
(1)对待测声音信号进行分帧加窗处理。为了保证语音信号的短时平稳性,应进行分帧处理,同时采用帧间重叠,帧移量为50%。为了避免分帧产生截段效应,需对每帧信号进行加窗处理,笔者采用汉明窗。
(2)采用两个不等长的声音信号序列进行运算,利用式(3)得出每一帧的短时平均幅度差。
式中:xp(m)、xq(m+k)分别为不同窗长的一帧信号,其中,p、q分别取200和600;N为较短的窗长,取值为200;考虑到语音的基音周期和窗长的限定,延时k最大值取300。
(3)计算新参数,即求每帧的平均幅度差峰值数Na。程序中所对应关键的Matlab实现函数为findpeaks()。
(4)确定语音检测参数的门限阈值。由上述分析可得,汽车噪声段对应的参数值要明显大于语音段,可以选取语音段的最大值作为阈值,将大于这个值的帧段确定为噪声段,小于这个值的帧段确定为语音段,从而将噪声段与语音段进行判别和区分。改进算法的流程如图4所示。
图4 改进算法流程图
所使用的语音信号是计算机声卡在安静环境下录制的采样频率为11.025 kHz,16 bit量化的不同人的.wav声音文件。噪声选取了汽车噪声,选择的信号片段包含了周期噪声和非平稳噪声。最后测试所用的声音信号分别是从不同的声音信号中截取再合成的。合成的待测声音信号的时域图如图1(a)所示。
对这段声音信号加汉明窗,选择两个不同的窗长,分别为200和600,帧移为100。对改进算法进行了Matlab仿真,其结果如图5所示。
图5 改进算法仿真结果
从图5中可以得出,所提出的新参数短时平均幅度差峰值数Na在冲击噪声段和语音段有明显的区分。与上述分析一致,噪声段的值明显高于语音段的值。汽车的鸣笛声由于有一定的周期性,因此相对应的峰值有时较小,但是总体来说,汽车冲击噪声的参数值大于语音信号的参数值。如果设定语音段的最大值即图5标注的一条虚线的纵坐标值(68.1)为阈值,完全能够将语音段与冲击噪声段区分开来。如果要更加明显地区分,可以尝试将Na取平方。同时,从图1与图5的比较可以得出,改进算法比传统的双门限检测算法检测效果更好,且不受冲击噪声时间长短的限制。
笔者主要结合语音浊音特性,在短时平均幅度差的基础上进行了改进,提出了一种新的检测参数用于区分语音与冲击噪声。如果一段声音信号中包含有语音和冲击噪声,且两者不重合,在相对安静的环境下,可以利用所提出的方法进行区分和判定。Matlab仿真结果显示,该参数实现了语音段与冲击噪声段的分离,提高了语音检测的准确率,减少了后续语音处理[12]的时间,增强了编码效率。如果考虑将算法进行时域和频域结合,则可以适用于更广泛的噪声环境。
[1]张雪英.数字语音处理及Matlab仿真[M].北京:电子工业出版社,2010:11-89.
[2]刘勇.语音识别技术在安防监控系统中的应用研究[D].长沙:中南大学图书馆,2009.
[3]赵力.语音信号处理[M].北京:机械工业出版社,2009:21-50.
[4]刘静,王建国,孙文杰,等.机载环境下的语音端点检测[J].电视技术,2008(10):59-62.
[5]尹岩岩,殷业,罗汉文,等.基于短时能零熵的端点检测方法[J].计算机仿真,2012,29(11):408 -411.
[6]ROSS M,SHAFFER H,COHEN A.Average magnitude difference function pitch extractor[J]. Acoustics,Speech,and Signal Processing,1974,22(5):353 -362.
[7]DU J,CHEN Y P,LUO H L.An adaptive pitch estimation algorithm based on AMDF[J].Advances in Information Technology and Industry Applications,2012(1):187-194.
[8]MUHAMMAD G.Noise robust pitch detection based on extended AMDF[C]∥ Proceedings of the 8th IEEE International Symposium on Signal Processing and Information Technology.[S.l.]:[s.n.],2008:133 -138.
[9]熊琦,杜旭,朱晓亮.一种基于短时平均幅度差的语音检测算法[J].电声技术,2006(9):50-53.
[10]张雄伟,陈亮,杨吉斌.现代语音处理技术及应用[M].北京:机械工业出版社,2003:19-45.
[11]马英,于向飞.一种改进的短时平均幅度差函数算法[J].应用声学,2010,29(5):387-390.
[12]范立,侯强,吴题.变噪声环境下语音增强算法性能比较[J].武汉理工大学学报:信息与管理工程版,2009,31(2):200 -203.