基于过零率计算的超低算力检测语音存在的方法和装置与流程
本发明涉及语音检测技术领域,特别是涉及一种基于过零率计算的超低算力检测语音存在的方法和装置。
背景技术:
在用语音进行人机交互的设备上,检测语音是否正在发生是后续处理的第一关,否则所有的信号处理都是无的放矢,导致不必要的算力浪费,电能浪费,同时会增加可能的误判。语音检测的主要性能指标一般包括判断的准确率和得到该结论的时间滞后。总的来说,这两个指标在实施上是互相矛盾的,准确率高的语音检测方法总是需要更多的音频信息,从而导致得出结论的延迟。相反,延迟低的方法利用了相对较少的信息,其得到的结论必然有较低的可靠性。
另一个需要考虑的重要因素是语音检测方法所消耗的算力(直接对应于功耗)。因为语音交互系统的语音检测经常保持在活跃状态,相对复杂的检测方法会直接导致系统的功耗增加,这对于移动设备或小型非交流供电的设备更为重要。
对算力要求不高的语音检测方法主要有两种,一个是基于音频信号的能量,另一个基于信号的过零率。前者能够区分信号的大小,一定程度上可以将音量过小的语音排除在外,这里假设了太小的语音不是针对与机器交互而发生的,但其缺点是完全没有能力区分信号的类型,不论是语音,还是某种噪声,如开关门、吸尘器或东西掉地上,只要其能量高于某个阈值,就会被判断为语音发生。过零率检测是目前所有检测方法中对算力要求最低的一种,特别是对于只能完成定点运算的设备,过零率检测中的计算不涉及乘法,在电路上极其容易实现;另外,过零率检测的方法在一定程度上还有区分语音、音乐、冲击性噪声的能力。其缺点是不区分信号的音量,另外对电路中的直流偏移和噪声中(声学噪声或电路噪声)的极低频率能量没有抵抗力,导致在很低的背景噪声下也能产生误判。
技术实现要素:
根据现有技术存在的问题,本发明提出一种基于过零率计算的超低算力检测语音存在的方法和装置,它保持了过零率检测方法固有的两个优点(超低算力要求和区分音频类型的能力),同时能克服它的两个不足(不区分音量和不能抵抗低频噪声的干扰)。
本发明的技术方案是:
1.一种基于过零率计算的超低算力检测语音存在的方法,其特征在于,包括以下步骤:
1)在原音频信号的基础上叠加高过零率的噪声信号;所述高过零率是指噪声信号的过零率相对于原音频信号的过零率明显更高;
2)对叠加后的混合信号进行过零率计算;
3)设定合理的过零率阈值,判断叠加信号每一帧的过零率是否低于所设定的过零率阈值,一旦过零率低于所设的阈值,则判断开始有语音存在。
2.所述步骤1)中,叠加的高过零率的噪声信号包括:
正态分布白噪声:v[n]=a*randn();
或:均匀分布白噪声:v[n]=a*rand();
或:锯齿波噪声:v[n]=a*[1-11-1....];
以上公式约定采用matlab的语法。
3.所述步骤2)中,对叠加后的混合信号进行过零率计算是指:取一帧数据,比较每相邻两点数据的符号,异号则发生了过零,则过零数加一;过零数除以帧长就是这一帧数据的过零率。
4.所述步骤3)中,还包括通过过零率下降的情况来判断音频信号的幅值,即音量大小。
5.所述步骤3)中,还包括选择合理的噪声信号的幅值,与过零率阈值组合,提高检测语音存在的判断准确率。
6.一种基于过零率计算的超低算力检测语音存在的装置,其特征在于,包括
高过零率噪声叠加模块,用于在原音频信号的基础上叠加某种高过零率的噪声信号;
叠加信号过零率计算模块,用于对叠加后的信号进行过零率计算;
语音存在判断模块,用于根据设定的过零率阈值,判断叠加信号的过零率是否低于所设的阈值,以检测是否有语音存在。
7.所述语音存在判断模块包括过零率阈值设定单元,用于设定合理的过零率阈值。
8.所述语音存在判断模块还包括音频信号的幅值判断单元,用于判断音频信号的幅值。
9.所述语音存在判断模块还包括噪声信号幅值选择单元,用于选择合理的噪声信号的幅值,与过零率阈值组合,提高检测语音存在的判断准确率。
本发明的技术效果:
本发明提出的一种基于过零率计算的超低算力检测语音存在的方法和装置,它保持了过零率检测方法固有的两个优点(超低算力要求和区分音频类型的能力),同时能克服它的两个不足(不区分音量和不能抵抗低频噪声的干扰),和现有的webrtc等端点检测方法相比,本发明的计算量大大降低,特别适合低计算量、低功耗的场景。
具体来说,本发明只是在传统过零率检测的基础上加了一个高过零率噪声,只做了加法,不改变原算法的复杂度,依旧保持了超低算力要求。同时,不同音频类型的能量集中在不同的频率上,在能量高(幅值高)的频率段就更容易通过过零率检测,这样就有了简单区分音频类型的能力。噪声的能量比较均匀,过零率基本不变;而语音一般有清音(能量低)和浊音(能量高)交替构成,过零率波动较大;音乐没有这种特征,过零率波动较平缓。
而如果音频的幅值(音量)不超过我们添加的高过零率噪声的幅值,则过零率不会明显下降,这样噪声的幅值就可看作一个阈值,低于该阈值的语音就不能通过过零率检测,这样就有了区分音量的能力。而对于低频噪声干扰,只要该干扰的幅值低于我们添加噪声的幅值,就不会对过零率产生大的影响,这样就有了抵抗低频噪声干扰的能力。
附图说明
图1是本发明的基于过零率计算的超低算力检测语音存在的方法流程图。
图2是叠加的锯齿波、均匀分布和正态分布三种噪声信号波形图。
图3a、图3b是信号幅度不影响过零率的示意图。
图4a、图4b是信号中的低频干扰影响过零率的示意图。
图5a、图5b是小幅度低频干扰不再影响过零率示意图。
图6a、图6b、图6c是过零率与信号幅值的关系图。
具体实施方式
以下结合附图对本发明的实施例作进一步详细说明。
图1是本发明的基于过零率计算的超低算力检测语音存在的方法流程图。
一种基于过零率计算的超低算力检测语音存在的方法,包括以下步骤:
1)在原音频信号的基础上叠加高过零率的噪声信号;所述高过零率是指噪声信号的过零率相对于原音频信号的过零率来说明显更高;
2)对叠加后的混合信号进行过零率计算;
3)设定合理的过零率阈值,判断叠加信号每一帧的过零率是否低于所设定的过零率阈值,一旦过零率低于所设的阈值,则判断开始有语音存在。
假设麦克风捕捉到一个音频信号是s[n],其过零率是zc。我们希望这个过零率是反映该信号的主频率(基频)的一个指标。如果确实是这样,那么一般的宽带环境噪声和冲击性噪声都不具备某个有突出能量的频率,该指标就有能力将语音和这类噪声区分开来。至于音乐,一般语音中的高频能量远低于音乐中的高频,这种区分能力在一定程度上还是可以得以维持的。
但如果我们将该信号放大或缩小,其过零率并不因此而改变。这就是过零率方法不区分信号音量的原因。另外,如果我们对该信号加上一个直流偏置,原本能量较低的噪声具有较高的过零率(高过零率大概率对应于没有语音),加上这个直流偏置(或低频噪声)后过零率会明显下降。这是其不能对抗低频干扰的症结所在。
本发明提出的改进方法是不对原音频信号直接计算过零率,而是预先将某种高过零率的噪声与原信号取和后再计算过零率进行判断,即判断每一帧信号中相邻两点过零(一般判断是否异号)的概率。唯一不同的是,传统过零率有语音时过零率升高,而本方法完全无语音时过零率最高,有语音时过零率降低。
本发明的高过零率是指噪声信号的过零率相对于音频信号的过零率来说明显更高,一般而言,噪声信号的过零率超过0.5(常用的锯齿波的过零率最大,接近1),而音频信号的过零率一般低于0.1,音频信号和噪声信号的过零率特征有明显区别。
步骤1)中,在原音频信号的基础上叠加某种高过零率的噪声信号的叠加信号x[n]表示为:x[n]=s[n]+v[n];其中,s[n]表示原音频信号,v[n]是人为加上去的高过零率噪声。其典型例子包括正态分布的白噪声、均匀分布的噪声、或者更简单的锯齿波,其波形图如图2所示,从上到下分别是锯齿波,均匀分布和正态分布噪声的波形图。
正态分布白噪声:v[n]=a*randn();
均匀分布白噪声:v[n]=a*rand();
锯齿波噪声:v[n]=a*[1-11-1....];
以上公式约定采用matlab的语法。
步骤2)中,对叠加后的混合信号进行过零率计算是指:一般取一帧数据,比较每相邻两点数据的符号,异号则发生了过零,过零数加一,这样过零数除以帧长就是这一帧数据的过零率。其公式如下:
其中,l为帧长,x(n)表示第n点数据,sgn[]为符号函数:
由过零率的计算过程可知,过零率只取决于相邻两点同号还是异号,与它们的大小无关,而音量大小,即幅值大小是给每个点做乘法,只改变大小,不改变符号,因此不影响过零率。图3a、图3b是信号幅度不影响过零率的示意图。图中表示的是一段语音,共1024个点,图3a是图3b幅值的2倍,波形完全相同,则过零点都是57个,过零率完全相同。
步骤3)中,过零率阈值的设定,根据所选噪声信号的不同,叠加信号的灵敏度也就不同,一般在0.1到0.3这个范围,灵敏度较高的(如叠加锯齿波)就把过零率阈值设置地低一些(条件更严格),而灵敏度较低的(如叠加正态分布信号)就把过零率阈值设置地高一些(条件更宽松)。具体设定为多少,需要实际试验,根据有语音和没有语音时候的过零率的波动曲线,设置一个合适的值。对于正态分布白噪声,过零率阈值一般设置在0.3左右;均匀分布白噪声,过零率阈值一般设置在0.2左右;锯齿波噪声,过零率阈值一般设置在0.1左右
图4a、图4b是信号中的低频干扰影响过零率的示意图。信号中的低频干扰叠加在了语音信号上,是给每个点做加法,即会改变点的幅值大小,也可能改变符号,因此会干扰过零率。其中,图4b是在图4a音频的基础上,加上了一个直流偏置,相当于过零的零点发生了偏移。图4a的过零点还是57个,图4b的过零点变为了0。
本方法叠加了一个高过零率噪声之后,音频信号的过零率很高。对于小幅度的低频干扰,只要该低频的幅值不超过我们添加的高过零率噪声的幅值,信号的过零率就不会有明显降低。图5a、图5b是小幅度低频干扰不再影响过零率示意图。图5a为在原始音频上叠加了一个幅值为0.01的锯齿波,则过零点有861个,过零率为0.842;图5b再添加一个幅值为0.005的直流偏置之后,过零点有791个,过零率为0.773,没有明显变化。并且添加的高过零率噪声幅值越大,抗低频干扰的能力就越强(同时对于语音音量的要求就越高)。如将上面的锯齿波的幅值调整为0.02,则图5a过零点变为1005个,过零率为0.982;图5b过零点983个,过零率为0.961,变化更小。
对于给定了高过零率噪声的幅值,只要语音信号的幅值(即音量大小)不超过设定的噪声幅值(也是一种阈值),过零率就不会明显下降;超过噪声的幅值之后,过零率下降,而不同的噪声类型有不同的下降速度。这样,我们就可以通过过零率下降的情况来判断音频信号的幅值(即音量大小)。具体来说,我们可以选择最灵敏的锯齿波噪声(v[n]=a*[1-11-1....]),其中a就是噪声的幅值。然后我们不断调整a的大小,找到一个幅值a0,使得a大于a0时,过零率不下降;而小于a0时,过零率快速下降。那么,a0即使音频信号的幅值大小。
图6a、图6b、图6c是过零率与信号幅值的关系图。图6a是叠加了幅值为0.02的锯齿波,从0.1倍振幅到10倍振幅,每次增加0.1倍的音频信号的过零率的变化情况。图6b是叠加了幅值为0.04的均匀分布噪声,从0.1倍振幅到10倍振幅,每次增加0.1倍的音频信号的过零率的变化情况。图6c是叠加了幅值为0.04的正态分布噪声,从0.1倍振幅到10倍振幅,每次增加0.1倍的音频信号的过零率的变化情况。
可以看出,上述三种不同噪声,过零率随信号强度下降的速度不同,信号幅值越大,过零率下降的越多,因此能够给出用过零率进一步判断信号强度(音量)的能力。叠加的高过零率噪声的幅值,也就成为了一种阈值。只有超过该幅值的语音,才可能被检测为有语音。这样,通过调节该阈值,就可以过滤掉环境噪声。该阈值越高,判断有语音需要的声音越大,发言者离麦克风的距离要求越近,相当于缩短了麦克风的拾音距离,防止了串音。但如果阈值设置过高,也可能过虑了发言者的语音,发生丢音。因此,该阈值的设置需要根据现场环境进行试验,寻找一个合适的值。
其中,锯齿波下降速度最快,均匀分布噪声次之,正态分布噪声最慢。按具体应用场景,采用不同的噪声会得到不同的过零率下降过程。过零率下降越快,判断有无语音越灵敏,时延越低,适合对时延要求很高的场景,但缺点是判断的准确率相对更低。相反,过零率下降地慢,虽然时延更长,但变化慢却判断有无语音更加准确。判断的准确率和速度不可同时满足,需要根据实际需求来选择噪声信号。举例来说,当应用场景需要快速判断是否有语音,时延较小(一般小于等于0.25秒),而对判断出现错误的容忍度较高时,可以选择锯齿波噪声;当应用场景对于判断准确率要求比较高,而可以容忍比较大的时延(如0.5秒以上)时,可以选择正态分布噪声;当应用场景对于时延和准确率要求介于之前场景之间时,可以选择均匀分布噪声。当选定某种噪声之后,依然遵循设置的时延越长,判断的准确率越高这一规律。
选定了叠加的噪声信号,还包括选择合理的噪声信号的幅值,将噪声信号幅值和过零率阈值组合,提高检测语音存在的判断准确率。根据现场的环境噪声,语音信号和经验等,先选定噪声信号幅值和过零率阈值的大致范围,再多次试验,不断微调,选择判断准确率最高的组合。举例来说,对于某应用场景,我们选择了锯齿波信号,则可以先根据经验,将过零率阈值设置为0.1,在现场进行录音,分别统计环境噪声和语音信号的幅值,在两者之间选择一个值作为噪声信号幅值。再对这两个值进行微调,统计不同噪声信号幅值和过零率阈值下的判断准确率,选择准确率最高的一个组合。噪声信号幅值和过零率阈值之间不是简单的线性关系,而是在一定范围内表现为正相关。具体来说,如果噪声信号的幅值增大,那么语音信号过零率会增大,必须增大过零率阈值,以免丢失语音信息;反过来如果过零率阈值增大,通过过零率检测更加容易,就必须增大噪声信号幅值,以免更多无语音信号通过检测。上述的正相关关系必须保证噪声信号幅值和过零率阈值都在正常范围之内,如果超出了正常范围,则上述关系失效。如噪声幅值设置过大,则无论怎样设置过零率阈值,过零率都不发生变化;过零率阈值设置过大,则很多不同的噪声幅值都可以轻易通过过零率检测。上述噪声信号幅值和过零率阈值的正常范围,来源于具体的应用场景和工程实践的经验。
我们在实时判断麦克风所录音频是否有语音时,采用了本方法。其中,添加的高过零率噪声为锯齿波,而阈值则根据麦克风增益的不同进行调整。我们取每256个样本为1帧,逐帧计算过零率,一旦过零率低于所设的过零率阈值,就判断开始有语音。同时,为防止丢失信息,将语音的起始点再向前回溯16帧(很多语音一开始的辅音能量不足以通过过零率检测,而到元音部分才判断为有语音,因此需要回溯)。当连续16帧都高于过零率阈值时,就判断语音结束。
相应的,一种基于过零率计算的超低算力检测语音存在的装置,包括高过零率噪声叠加模块,用于在原音频信号的基础上叠加某种高过零率的噪声信号;叠加信号过零率计算模块,用于对叠加后的信号进行过零率计算;语音存在判断模块,用于根据设定的噪声信号幅值阈值以及过零率阈值,判断叠加信号的过零率是否低于所设的阈值,以检测是否有语音存在。其中,语音存在判断模块包括过零率阈值设定单元,用于设定合理的过零率阈值。语音存在判断模块还包括音频信号的幅值判断单元,用于判断音频信号的幅值。所述语音存在判断模块还包括噪声信号幅值选择单元,用于选择合理的噪声信号的幅值,与过零率阈值组合,提高检测语音存在的判断准确率。
应当指出,以上所述具体实施方式可以使本领域的技术人员更全面地理解本发明创造,但不以任何方式限制本发明创造。一切不脱离本发明创造的精神和范围的技术方案及其改进,其均涵盖在本发明创造的保护范围当中。
起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。
此文章来源于网络,如有侵权,请联系删除