一种尖锐声音检测方法和系统与流程

文档序号:12274082阅读:537来源:国知局
一种尖锐声音检测方法和系统与流程

本发明涉及声音信号处理领域,具体涉及一种尖锐声音检测方法和系统。

(二)

背景技术:

在日常生活中,有些突发事件会产生尖锐声音,对其进行检测分析可以推送报警信息给用户,可以有效预防异常事件。例如,ATM自助银行内客户被抢劫时、宾馆内客户遭遇人身伤害时发出的尖叫呼喊声,均可通过尖锐声检测手段进行实时检测报警,从而降低用户人身安全威胁和减少财产损失。常规尖锐声检测的方法是对声音信号进行特征提取,训练模型,模型匹配,但是此类方法复杂度较高,很难集成到小资源嵌入式设备中。尖锐声音区别于普通说话声主要为能量较大和频率较高,同时平稳状态相对普通说话声持续时间更长,本发明充分利用尖锐声特点,完全在时域进行处理,且复杂度较低。

生成声音分类器和检测异常声音的方法和设备及监视系统CN201210093171.4,其采用频域变换提取特征值和设计分类器为基础,其复杂度较高,在资源紧张的嵌入式设备中很难集成;且其训练模型需要大量数据,不同类型异常声音需要单独训练,设备集成工作量较大。

(三)

技术实现要素:

本发明针对现有技术的不足之处,提供一种尖锐声音检测方法和系统,该方法及系统通过对时域信号的处理来检测尖锐声音,例如碎玻璃,尖叫等声音均可触发尖锐声报警,简单方便。

本发明是通过如下技术方案实现的:

一种尖锐声音检测系统,包括通用模块,该通用模块包括:

分帧模块:对声音信号s(n)进行分帧,分帧后信号用frame(n)表示;

帧信号RMS能量模块:计算一帧信号RMS值,记为frame_energy,

其特殊之处在于:还包括:

背景噪声超时未更新检测模块:设置计时器,若超过一定时间timeout_th还未更新背景噪声,则强制把当前帧信号RMS能量更新为背景噪声能量;

背景噪声判定模块:通过计算背景噪声缓冲区均值估计背景噪声,通过当前帧信号RMS能量与估计的背景噪声做差,差值大于一定门限则认为当前帧为异常声音信号帧;否则为背景噪声帧;

更新背景噪声能量模块:当前帧为背景噪声帧,则将当前帧信号RMS能量更新到背景噪声缓冲区中;

削波偏移模块:把背景噪声缓冲区均值取指数,变换到采样点幅值数值,再加上一个固定偏移值zcr_shift_fix,得到削波偏移值zcr_shift;

削波过零率模块:对帧信号frame(n)以削波偏移量zcr_shift进行削波处理,得到削波信号frame_clip(n),然后求削波信号frame_clip(n)的过零率,得到削波过零率zcr_clip;

均值方差模块:把当前帧计算的削波过零率zcr_clip更新到削波过零率缓冲区zcr_clip_buf中,并计算其均值zcr_mean、方差zcr_var;

宽窄条件判别模块:根据当前帧信号RMS能量值大小区分为宽/窄条件进一步判别,若当前帧信号RMS能量大于门限zcr_energy_th,则进行宽条件判别,对应判别条件相对宽松;否则进行窄条件判别,对应判别条件相对严格;

宽条件判别模块:若zcr_mean> zcr_mean_th1,zcr_var<zcr_var_th1,signal_energy-bg_energy_avg>zcr_energy_diff_th1,以上三个条件同时满足则t_count1=t_count1+1,否则t_count1=0,其中,signal_energy为当前帧信号RMS能量,bg_energy_avg为背景噪声缓冲区均值,zcr_energy_diff_th为差值门限,t_count1为陡升连续帧计数器;

窄条件判别模块:若zcr_mean>zcr_mean_th2,zcr_var<zcr_var_th2,signal_energy - bg_energy_avg > zcr_energy_diff_th2,以上三个条件同时满足则t_count1=t_count1+1,否则t_count1=0;

尖锐声连续帧判别模块:若t_count1 > t_count_th1,则认为已经有连续t_count1帧的信号为尖锐声信号,可以判断有尖锐声情况;

输出尖锐声报警信号模块:输出尖锐声报警信号。

其中,背景噪声判定模块:判定当前帧是背景噪声还是异常声音信号时,若frame_energy-bg_energy_avg>bg_update_th,则bg_flag=0,表示当前帧信号不是背景噪声,否则bg_flag=1,表示当前帧信号为背景噪声。

一种尖锐声音检测方法,包括以下步骤:

S101:获取音频流数据s(n);

S102:对声音信号s(n)进行分帧, 分帧后信号为frame(n);

S103:帧信号RMS能量,计算一帧信号RMS值,通过计算帧信号frame(n)的RMS激励平均值,在量化位数上归一化,并且取对数,即可得到帧信号RMS能量,记为frame_energy;

S104:设置计时器,若超过一定时间timeout_th还未更新背景噪声,则强制把当前帧信号RMS能量更新为背景噪声能量;

S105:背景噪声判定,通过计算背景噪声缓冲区均值估计背景噪声,通过当前帧信号RMS能量与估计的背景噪声做差,差值大于一定门限则认为当前帧为异常声音信号帧,否则为背景噪声帧,当前帧信号不是背景噪声,执行S106;当前帧信号为背景噪声,执行S114;

S114:当前帧信号为背景噪声,则将当前帧信号RMS能量更新到背景噪声缓冲区中,下一步跳转至S115;

S106:削波偏移:把背景噪声缓冲区均值取指数,变换到采样点幅值数值,再加上一个固定偏移值zcr_shift_fix,即可得到削波偏移值zcr_shift,此步骤可以看作202 帧信号RMS能量的逆运算,

下一步执行S107;

S107:对帧信号frame(n)以削波偏移量zcr_shift进行削波处理,得到削波信号frame_clip(n),然后求削波信号frame_clip(n)的过零率,即可得到削波过零率zcr_clip,

下一步执行S108;

S108:均值方差:把当前帧计算的削波过零率zcr_clip更新到削波过零率缓冲区zcr_clip_buf中,并计算其均值zcr_mean、方差zcr_var,

下一步执行S109;

S109:宽窄条件判别,根据当前帧信号RMS能量值大小区分为宽/窄条件进一步判别,若当前帧信号RMS能量大于门限zcr_energy_th,则进行宽条件判别,跳转至S110;否则进行窄条件判别,跳转至S111;

S110:宽条件判别,若zcr_mean>zcr_mean_th1,zcr_var<zcr_var_th1,signal_energy-bg_energy_avg>zcr_energy_diff_th1,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115;

S111:窄条件判别,若zcr_mean>zcr_mean_th2,zcr_var<zcr_var_th2,signal_energy - bg_energy_avg > zcr_energy_diff_th2,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115;

S112:尖锐声连续帧判别:若t_count1 > t_count_th1,则认为已经有连续t_count1帧的信号为尖锐声信号,可以判断有尖锐声情况,下一步执行S113,否则执行S115;

S113:输出尖锐声报警信号,

下一步执行S115;

S115:结束,当前帧信号处理结束,转至下一帧处理。

其中,

步骤S102中,对声音信号s(n)进行分帧时,分帧采用10-30ms作为帧长,帧移为0,

步骤S103中,量化位数dig_bit=8-32,

步骤S104中,若超过timeout_th=1-1000还未更新背景噪声,则强制把当前帧信号RMS能量更新为背景噪声。

步骤S105中, bg_update_th=0.1-20(dbfs)。

步骤S114中,背景噪声缓冲区长度bg_buf_len=1-50。

步骤S106中,固定偏移值zcr_shift_fix=50-500。

步骤S109中,门限zcr_energy_th=60-95。

步骤S110中,zcr_mean_th1=0.2-0.4,zcr_var_th1=0.015-0.025,zcr_energy_diff_th1=6-12。

步骤S111中,zcr_mean_th2=0.35-0.42,zcr_var_th2=0.005-0.015,zcr_energy_diff_th2=13-20。

步骤S112中, t_count_th1=1-20。

本发明的有益效果:

本发明全部处理过程在时域,相比现有技术的频域处理,运算量小,复杂度低,可以有效集成到大多数嵌入式设备,应用范围广;

本发明将背景噪声和声音信号能量简单分离,只对非背景噪声信号进行尖锐声检测,大大降低了误报率,同时采用多级判别方法、宽窄条件判别方法提高检测准确性;

本发明提出的时域削波过零率尖锐声检测算法,结合其均值、方差、能量综合判决,算法简单实用,实时性高,可以有效检测玻璃破碎,尖叫,警报等尖锐声音。

(四)附图说明

附图1为本发明流程图;

附图2为本发明的结构框图,

图中, 201分帧模块,202帧信号RMS能量模块,203背景噪声超时未更新检测模块,204背景噪声判定模块,205更新背景噪声能量模块,206削波偏移模块,207削波过零率模块,208均值方差模块,209宽窄条件判别模块,210宽条件判别模块,211窄条件判别模块,212尖锐声连续帧判别模块,213输出尖锐声报警信号模块。

(五)具体实施方式

以下通过实施例对本发明进行更详细的描述,但本发明的保护范围并不限于这些实施例。

实施例1

本发明模块全部在时域处理,不涉及频域变换,相对复杂度低,运算速度快,主要有:

分帧模块201:声音信号s(n)包含语音信号,由于语音信号具有10ms-30ms的短时平稳性,所以分帧采用20ms作为帧长,帧移为0,分帧后信号用frame(n)表示,因为处理完全是时域处理,所以使用矩形窗分帧即可。

帧信号RMS能量模块202:计算一帧信号RMS值,通过计算帧信号frame(n)的RMS激励平均值,在量化位数上归一化,并且取对数,即可得到帧信号RMS能量,记为frame_energy。

背景噪声超时未更新检测模块203:若长时间未更新背景噪声,可能由于背景噪声误判为异常声音信号导致无法更新背景噪声,所以需要设置一个计时器,若超过一定时间timeout_th,则强制把当前帧信号RMS能量更新为背景噪声能量。

背景噪声判定模块204:此模块主要功能是判定当前帧是背景噪声还是异常声音信号,方法为通过计算背景噪声缓冲区均值估计背景噪声,通过当前帧信号RMS能量与估计的背景噪声做差,差值大于一定门限则认为当前帧为异常声音信号帧,否则为背景噪声帧。具体公式如下:

如果 frame_energy-bg_energy_avg>bg_update_th,则bg_flag=0,表示当前帧信号不是背景噪声,否则bg_flag=1,表示当前帧信号为背景噪声。其中bg_energy_avg表示背景噪声缓冲区均值,bg_update_th表示门限值。

更新背景噪声能量模块205:如果bg_flag=1,则将当前帧信号RMS能量更新到背景噪声缓冲区中。

削波偏移模块206:为了计算更准确的过零率,把背景噪声缓冲区均值取指数,变换到采样点幅值数值,再加上一个固定偏移值zcr_shift_fix,即可得到削波偏移值zcr_shift,此步骤可以看作帧信号RMS能量的逆运算。

削波过零率模块207:过零率表示一帧声音信号中波形穿过零电平的次数,过零率在一定程度上可以反应声音信号在频域的能量分布最大值;削波过零率为削波信号的过零率,并且在帧长N上进行归一化处理,具体的,对帧信号frame(n)以削波偏移量zcr_shift进行削波处理,得到削波信号frame_clip(n),然后求削波信号frame_clip(n)的过零率,即可得到削波过零率zcr_clip。

均值方差模块208:把当前帧计算的削波过零率zcr_clip更新到削波过零率缓冲区zcr_clip_buf中,并计算其均值zcr_mean、方差zcr_var。

宽窄条件判别模块209:根据当前帧信号RMS能量值大小区分为宽/窄条件进一步判别,若当前帧信号RMS能量大于门限zcr_energy_th,则进行宽条件判别,对应判别条件相对宽松;否则进行窄条件判别,对应判别条件相对严格。

宽条件判别模块210:宽条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th1,zcr_var<zcr_var_th1,signal_energy-bg_energy_avg>zcr_energy_diff_th1,以上三个条件同时满足则t_count1=t_count1+1,否则t_count1=0。

窄条件判别模块211:窄条件判别方法主要有三部分共同作用,只不过三个条件门限值zcr_mean_th2、zcr_var_th2、zcr_energy_diff_th2比zcr_mean_th1、zcr_var_th1、zcr_energy_diff_th1更加严格,具体的,若zcr_mean>zcr_mean_th2,zcr_var<zcr_var_th2,signal_energy - bg_energy_avg > zcr_energy_diff_th2,以上三个条件同时满足则t_count1=t_count1+1,否则t_count1=0。

尖锐声连续帧判别模块212:若t_count1 > t_count_th1,则认为已经有连续t_count1帧的信号为尖锐声信号,可以判断有尖锐声情况。

输出尖锐声报警信号模块213:输出尖锐声报警信号。

本发明具体实施例,采样率8kHz,16bit量化,声音信号帧长20ms,即160个采样点。

S101:通常在此步骤获取音频流数据s(n);下一步执行S102。

S102:分帧,采用20ms作为帧长,帧移为0,帧长N=160,使用矩形窗分帧,分帧后信号为frame(n)。

下一步执行S103。

S103:帧信号RMS能量,计算一帧信号RMS值,通过计算帧信号frame(n)的RMS激励平均值,量化位数16,进行归一化,并且取对数,即可得到帧信号RMS能量,记为frame_energy。

下一步执行S104。

S104:背景噪声超时未更新检测,若长时间未更新背景噪声,可能由于背景噪声误判为异常声音信号导致无法更新背景噪声,所以需要设置一个计时器,若超过帧数timeout_th=500(500帧为10秒)还未更新背景噪声,则跳转到S114,否则执行S105。

S105:背景噪声判定,此模块主要功能是判定当前帧是背景噪声还是异常声音信号,方法为通过计算背景噪声缓冲区均值估计背景噪声,通过当前帧信号RMS能量与估计的背景噪声做差,差值大于一定门限则认为当前帧为异常声音信号帧,否则为背景噪声帧。具体的:如果 frame_energy-bg_energy_avg>bg_update_th,则bg_flag=0,表示当前帧信号不是背景噪声,执行S106;否则bg_flag=1,表示当前帧信号为背景噪声,执行S114;,在本实施例中取bg_update_th=3(dbfs),bg_energy_avg表示背景噪声缓冲区均值,frame_energy为帧信号RMS能量。

S114:更新背景噪声能量:如果bg_flag=1,则将当前帧信号RMS能量更新到背景噪声缓冲区中,在本实施例中,背景噪声缓冲区长度bg_buf_len=5。

下一步跳转至S115。

S106:削波偏移:为了计算更准确的过零率,把背景噪声缓冲区均值取指数,变换到采样点幅值数值,再加上一个固定偏移值zcr_shift_fix,即可得到削波偏移值zcr_shift,此步骤可以看作202 帧信号RMS能量的逆运算。在本实施例中固定偏移值zcr_shift_fix=100。

下一步执行S107。

S107:削波过零率:过零率表示一帧声音信号中波形穿过零电平的次数,过零率在一定程度上可以反应声音信号在频域的能量分布最大值;削波过零率为削波信号的过零率,并且在帧长N=160上进行归一化处理,具体的,对帧信号frame(n)以削波偏移量zcr_shift进行削波处理,得到削波信号frame_clip(n),然后求削波信号frame_clip(n)的过零率,即可得到削波过零率zcr_clip。

下一步执行S108。

S108:均值方差:把当前帧计算的削波过零率zcr_clip更新到削波过零率缓冲区zcr_clip_buf中,并计算其均值zcr_mean、方差zcr_var。

下一步执行S109。

S109:宽窄条件判别,根据当前帧信号RMS能量值大小区分为宽/窄条件进一步判别,若当前帧信号RMS能量大于门限zcr_energy_th=93,则进行宽条件判别,跳转至S110,对应判别条件相对宽松;否则进行窄条件判别,跳转至S111,对应判别条件相对严格。

S110:宽条件判别,宽条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th1,zcr_var<zcr_var_th1,signal_energy-bg_energy_avg>zcr_energy_diff_th1,其中zcr_mean_th1=0.3,zcr_var_th1=0.02,zcr_energy_diff_th1=10,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S111:窄条件判别,窄条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th2,zcr_var<zcr_var_th2,signal_energy - bg_energy_avg > zcr_energy_diff_th2,其中zcr_mean_th2=0.38,zcr_var_th2=0.01,zcr_energy_diff_th2=15,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S112:尖锐声连续帧判别:若t_count1 > t_count_th1,则认为已经有连续t_count1帧的信号为尖锐声信号,可以判断有尖锐声情况,下一步执行S113,否则执行S115。其中t_count_th1=5。

S113:输出尖锐声报警信号,可以是高低电平信号,也可以是标志位。

下一步执行S115。

S115:结束,当前帧信号处理结束,可以转至下一帧处理。

实施例2

本发明具体实施例,采样率11.025 kHz,8bit量化,声音信号帧长10ms,即110个采样点。

S101:通常在此步骤获取音频流数据s(n);下一步执行S102。

S102:分帧,采用10ms作为帧长,帧移为0,帧长N=110,使用矩形窗分帧,分帧后信号为frame(n)。

下一步执行S103。

S103:帧信号RMS能量,计算一帧信号RMS值,通过计算帧信号frame(n)的RMS激励平均值,量化位数8,进行归一化,并且取对数,即可得到帧信号RMS能量,记为frame_energy。

下一步执行S104。

S104:背景噪声超时未更新检测,若长时间未更新背景噪声,可能由于背景噪声误判为异常声音信号导致无法更新背景噪声,所以需要设置一个计时器,若超过帧数timeout_th=450(450帧为4.5秒)还未更新背景噪声,则跳转到S114,否则执行S105。

S105:背景噪声判定,此模块主要功能是判定当前帧是背景噪声还是异常声音信号,方法为通过计算背景噪声缓冲区均值估计背景噪声,通过当前帧信号RMS能量与估计的背景噪声做差,差值大于一定门限则认为当前帧为异常声音信号帧,否则为背景噪声帧。具体的:如果 frame_energy-bg_energy_avg>bg_update_th,则bg_flag=0,表示当前帧信号不是背景噪声,执行S106;否则bg_flag=1,表示当前帧信号为背景噪声,执行S114;,在本实施例中取bg_update_th=2(dbfs),bg_energy_avg表示背景噪声缓冲区均值,frame_energy为帧信号RMS能量。

S114:更新背景噪声能量:如果bg_flag=1,则将当前帧信号RMS能量更新到背景噪声缓冲区中,在本实施例中,背景噪声缓冲区长度bg_buf_len=3。

下一步跳转至S115。

S106:削波偏移:为了计算更准确的过零率,把背景噪声缓冲区均值取指数,变换到采样点幅值数值,再加上一个固定偏移值zcr_shift_fix,即可得到削波偏移值zcr_shift,此步骤可以看作202 帧信号RMS能量的逆运算。在本实施例中固定偏移值zcr_shift_fix=90。

下一步执行S107。

S107:削波过零率:过零率表示一帧声音信号中波形穿过零电平的次数,过零率在一定程度上可以反应声音信号在频域的能量分布最大值;削波过零率为削波信号的过零率,并且在帧长N=110上进行归一化处理,具体的,对帧信号frame(n)以削波偏移量zcr_shift进行削波处理,得到削波信号frame_clip(n),然后求削波信号frame_clip(n)的过零率,即可得到削波过零率zcr_clip。

下一步执行S108。

S108:均值方差:把当前帧计算的削波过零率zcr_clip更新到削波过零率缓冲区zcr_clip_buf中,并计算其均值zcr_mean、方差zcr_var。

下一步执行S109。

S109:宽窄条件判别,根据当前帧信号RMS能量值大小区分为宽/窄条件进一步判别,若当前帧信号RMS能量大于门限zcr_energy_th=90,则进行宽条件判别,跳转至S110,对应判别条件相对宽松;否则进行窄条件判别,跳转至S111,对应判别条件相对严格。

S110:宽条件判别,宽条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th1,zcr_var<zcr_var_th1,signal_energy-bg_energy_avg>zcr_energy_diff_th1,其中zcr_mean_th1=0.2,zcr_var_th1=0.015,zcr_energy_diff_th1=8,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S111:窄条件判别,窄条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th2,zcr_var<zcr_var_th2,signal_energy - bg_energy_avg > zcr_energy_diff_th2,其中zcr_mean_th2=0.35,zcr_var_th2=0.005,zcr_energy_diff_th2=13,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S112:尖锐声连续帧判别:若t_count1 > t_count_th1,则认为已经有连续t_count1帧的信号为尖锐声信号,可以判断有尖锐声情况,下一步执行S113,否则执行S115。其中t_count_th1=3。

S113:输出尖锐声报警信号,可以是高低电平信号,也可以是标志位。

下一步执行S115。

S115:结束,当前帧信号处理结束,可以转至下一帧处理。

其他与实施例1相同。

实施例3

采样率8kHz,24bit量化,声音信号帧长30ms,即240个采样点。

S101:通常在此步骤获取音频流数据s(n);下一步执行S102。

S102:分帧,采用30ms作为帧长,帧移为0,帧长N=240,使用矩形窗分帧,分帧后信号为frame(n)。

下一步执行S103。

S103:帧信号RMS能量,计算一帧信号RMS值,通过计算帧信号frame(n)的RMS激励平均值,量化位数24,进行归一化,并且取对数,即可得到帧信号RMS能量,记为frame_energy。

下一步执行S104。

S104:背景噪声超时未更新检测,若长时间未更新背景噪声,可能由于背景噪声误判为异常声音信号导致无法更新背景噪声,所以需要设置一个计时器,若超过帧数timeout_th=400(400帧为12秒)还未更新背景噪声,则跳转到S114,否则执行S105。

S105:背景噪声判定,此模块主要功能是判定当前帧是背景噪声还是异常声音信号,方法为通过计算背景噪声缓冲区均值估计背景噪声,通过当前帧信号RMS能量与估计的背景噪声做差,差值大于一定门限则认为当前帧为异常声音信号帧,否则为背景噪声帧。具体的:如果 frame_energy-bg_energy_avg>bg_update_th,则bg_flag=0,表示当前帧信号不是背景噪声,执行S106;否则bg_flag=1,表示当前帧信号为背景噪声,执行S114;,在本实施例中取bg_update_th=5(dbfs),bg_energy_avg表示背景噪声缓冲区均值,frame_energy为帧信号RMS能量。

S114:更新背景噪声能量:如果bg_flag=1,则将当前帧信号RMS能量更新到背景噪声缓冲区中,在本实施例中,背景噪声缓冲区长度bg_buf_len=7。

下一步跳转至S115。

S106:削波偏移:为了计算更准确的过零率,把背景噪声缓冲区均值取指数,变换到采样点幅值数值,再加上一个固定偏移值zcr_shift_fix,即可得到削波偏移值zcr_shift,此步骤可以看作202 帧信号RMS能量的逆运算。在本实施例中固定偏移值zcr_shift_fix=110。

下一步执行S107。

S107:削波过零率:过零率表示一帧声音信号中波形穿过零电平的次数,过零率在一定程度上可以反应声音信号在频域的能量分布最大值;削波过零率为削波信号的过零率,并且在帧长N=240上进行归一化处理,具体的,对帧信号frame(n)以削波偏移量zcr_shift进行削波处理,得到削波信号frame_clip(n),然后求削波信号frame_clip(n)的过零率,即可得到削波过零率zcr_clip。

下一步执行S108。

S108:均值方差:把当前帧计算的削波过零率zcr_clip更新到削波过零率缓冲区zcr_clip_buf中,并计算其均值zcr_mean、方差zcr_var。

下一步执行S109。

S109:宽窄条件判别,根据当前帧信号RMS能量值大小区分为宽/窄条件进一步判别,若当前帧信号RMS能量大于门限zcr_energy_th=95,则进行宽条件判别,跳转至S110,对应判别条件相对宽松;否则进行窄条件判别,跳转至S111,对应判别条件相对严格。

S110:宽条件判别,宽条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th1,zcr_var<zcr_var_th1,signal_energy-bg_energy_avg>zcr_energy_diff_th1,其中zcr_mean_th1=0.4,zcr_var_th1=0.025,zcr_energy_diff_th1=12,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S111:窄条件判别,窄条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th2,zcr_var<zcr_var_th2,signal_energy - bg_energy_avg > zcr_energy_diff_th2,其中zcr_mean_th2=0.42,zcr_var_th2=0.015,zcr_energy_diff_th2=17,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S112:尖锐声连续帧判别:若t_count1 > t_count_th1,则认为已经有连续t_count1帧的信号为尖锐声信号,可以判断有尖锐声情况,下一步执行S113,否则执行S115。其中t_count_th1=7。

S113:输出尖锐声报警信号,可以是高低电平信号,也可以是标志位。

下一步执行S115。

S115:结束,当前帧信号处理结束,可以转至下一帧处理。

其他与实施例1相同。

实施例4

采样率8kHz,32bit量化,声音信号帧长30ms,即240个采样点。

S101:通常在此步骤获取音频流数据s(n);下一步执行S102。

S102:分帧,采用30ms作为帧长,帧移为0,帧长N=240,使用矩形窗分帧,分帧后信号为frame(n)。

下一步执行S103。

S103:帧信号RMS能量,计算一帧信号RMS值,通过计算帧信号frame(n)的RMS激励平均值,量化位数32,进行归一化,并且取对数,即可得到帧信号RMS能量,记为frame_energy。

下一步执行S104。

S104:背景噪声超时未更新检测,若长时间未更新背景噪声,可能由于背景噪声误判为异常声音信号导致无法更新背景噪声,所以需要设置一个计时器,若超过帧数timeout_th=1000(1000帧为30秒)还未更新背景噪声,则跳转到S114,否则执行S105。

S105:背景噪声判定,此模块主要功能是判定当前帧是背景噪声还是异常声音信号,方法为通过计算背景噪声缓冲区均值估计背景噪声,通过当前帧信号RMS能量与估计的背景噪声做差,差值大于一定门限则认为当前帧为异常声音信号帧,否则为背景噪声帧。具体的:如果 frame_energy-bg_energy_avg>bg_update_th,则bg_flag=0,表示当前帧信号不是背景噪声,执行S106;否则bg_flag=1,表示当前帧信号为背景噪声,执行S114;,在本实施例中取bg_update_th=20(dbfs),bg_energy_avg表示背景噪声缓冲区均值,frame_energy为帧信号RMS能量。

S114:更新背景噪声能量:如果bg_flag=1,则将当前帧信号RMS能量更新到背景噪声缓冲区中,在本实施例中,背景噪声缓冲区长度bg_buf_len=50。

下一步跳转至S115。

S106:削波偏移:为了计算更准确的过零率,把背景噪声缓冲区均值取指数,变换到采样点幅值数值,再加上一个固定偏移值zcr_shift_fix,即可得到削波偏移值zcr_shift,此步骤可以看作202 帧信号RMS能量的逆运算。在本实施例中固定偏移值zcr_shift_fix=500。

下一步执行S107。

S107:削波过零率:过零率表示一帧声音信号中波形穿过零电平的次数,过零率在一定程度上可以反应声音信号在频域的能量分布最大值;削波过零率为削波信号的过零率,并且在帧长N=240上进行归一化处理,具体的,对帧信号frame(n)以削波偏移量zcr_shift进行削波处理,得到削波信号frame_clip(n),然后求削波信号frame_clip(n)的过零率,即可得到削波过零率zcr_clip。

下一步执行S108。

S108:均值方差:把当前帧计算的削波过零率zcr_clip更新到削波过零率缓冲区zcr_clip_buf中,并计算其均值zcr_mean、方差zcr_var。

下一步执行S109。

S109:宽窄条件判别,根据当前帧信号RMS能量值大小区分为宽/窄条件进一步判别,若当前帧信号RMS能量大于门限zcr_energy_th=95,则进行宽条件判别,跳转至S110,对应判别条件相对宽松;否则进行窄条件判别,跳转至S111,对应判别条件相对严格。

S110:宽条件判别,宽条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th1,zcr_var<zcr_var_th1,signal_energy-bg_energy_avg>zcr_energy_diff_th1,其中zcr_mean_th1=0.4,zcr_var_th1=0.025,zcr_energy_diff_th1=12,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S111:窄条件判别,窄条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th2,zcr_var<zcr_var_th2,signal_energy - bg_energy_avg > zcr_energy_diff_th2,其中zcr_mean_th2=0.42,zcr_var_th2=0.015,zcr_energy_diff_th2=20,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S112:尖锐声连续帧判别:若t_count1 > t_count_th1,则认为已经有连续t_count1帧的信号为尖锐声信号,可以判断有尖锐声情况,下一步执行S113,否则执行S115。其中t_count_th1=20。

S113:输出尖锐声报警信号,可以是高低电平信号,也可以是标志位。

下一步执行S115。

S115:结束,当前帧信号处理结束,可以转至下一帧处理。

其他与实施例1相同。

实施例5

本发明具体实施例,采样率11.025 kHz,16bit量化,声音信号帧长20ms,即220个采样点。

S101:通常在此步骤获取音频流数据s(n);下一步执行S102。

S102:分帧,采用20ms作为帧长,帧移为0,帧长N=220,使用矩形窗分帧,分帧后信号为frame(n)。

下一步执行S103。

S103:帧信号RMS能量,计算一帧信号RMS值,通过计算帧信号frame(n)的RMS激励平均值,量化位数16,进行归一化,并且取对数,即可得到帧信号RMS能量,记为frame_energy。

下一步执行S104。

S104:背景噪声超时未更新检测,若长时间未更新背景噪声,可能由于背景噪声误判为异常声音信号导致无法更新背景噪声,所以需要设置一个计时器,若超过帧数timeout_th=1(1帧为0.02秒)还未更新背景噪声,则跳转到S114,否则执行S105。

S105:背景噪声判定,此模块主要功能是判定当前帧是背景噪声还是异常声音信号,方法为通过计算背景噪声缓冲区均值估计背景噪声,通过当前帧信号RMS能量与估计的背景噪声做差,差值大于一定门限则认为当前帧为异常声音信号帧,否则为背景噪声帧。具体的:如果 frame_energy-bg_energy_avg>bg_update_th,则bg_flag=0,表示当前帧信号不是背景噪声,执行S106;否则bg_flag=1,表示当前帧信号为背景噪声,执行S114;,在本实施例中取bg_update_th=0.1(dbfs),bg_energy_avg表示背景噪声缓冲区均值,frame_energy为帧信号RMS能量。

S114:更新背景噪声能量:如果bg_flag=1,则将当前帧信号RMS能量更新到背景噪声缓冲区中,在本实施例中,背景噪声缓冲区长度bg_buf_len=1。

下一步跳转至S115。

S106:削波偏移:为了计算更准确的过零率,把背景噪声缓冲区均值取指数,变换到采样点幅值数值,再加上一个固定偏移值zcr_shift_fix,即可得到削波偏移值zcr_shift,此步骤可以看作202 帧信号RMS能量的逆运算。在本实施例中固定偏移值zcr_shift_fix=50。

下一步执行S107。

S107:削波过零率:过零率表示一帧声音信号中波形穿过零电平的次数,过零率在一定程度上可以反应声音信号在频域的能量分布最大值;削波过零率为削波信号的过零率,并且在帧长N=220上进行归一化处理,具体的,对帧信号frame(n)以削波偏移量zcr_shift进行削波处理,得到削波信号frame_clip(n),然后求削波信号frame_clip(n)的过零率,即可得到削波过零率zcr_clip。

下一步执行S108。

S108:均值方差:把当前帧计算的削波过零率zcr_clip更新到削波过零率缓冲区zcr_clip_buf中,并计算其均值zcr_mean、方差zcr_var。

下一步执行S109。

S109:宽窄条件判别,根据当前帧信号RMS能量值大小区分为宽/窄条件进一步判别,若当前帧信号RMS能量大于门限zcr_energy_th=60,则进行宽条件判别,跳转至S110,对应判别条件相对宽松;否则进行窄条件判别,跳转至S111,对应判别条件相对严格。

S110:宽条件判别,宽条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th1,zcr_var<zcr_var_th1,signal_energy-bg_energy_avg>zcr_energy_diff_th1,其中zcr_mean_th1=0.2,zcr_var_th1=0.02,zcr_energy_diff_th1=6,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S111:窄条件判别,窄条件判别方法主要有三部分共同作用,具体的,若zcr_mean>zcr_mean_th2,zcr_var<zcr_var_th2,signal_energy - bg_energy_avg > zcr_energy_diff_th2,其中zcr_mean_th2=0.40,zcr_var_th2=0.01,zcr_energy_diff_th2=17,以上三个条件同时满足则t_count1=t_count1+1,执行S112;否则t_count1=0,跳转至S115。

S112:尖锐声连续帧判别:若t_count1 > t_count_th1,则认为已经有连续t_count1帧的信号为尖锐声信号,可以判断有尖锐声情况,下一步执行S113,否则执行S115。其中t_count_th1=1。

S113:输出尖锐声报警信号,可以是高低电平信号,也可以是标志位。

下一步执行S115。

S115:结束,当前帧信号处理结束,可以转至下一帧处理。

其他与实施例1相同。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1