一种基于频域处理的啸叫抑制方法及装置与流程

文档序号:29466466发布日期:2022-04-02 03:31阅读:239来源:国知局
一种基于频域处理的啸叫抑制方法及装置与流程

1.本发明涉及音频处理技术领域,特别是涉及一种基于频域处理的啸叫抑制方法及装置。


背景技术:

2.在常见的声学场景中,当拾音麦克风和扬声器之间形成了声反馈闭合回路时,某些频点的能量持续增加,很容易产生刺耳的啸叫声,影响人的听感,甚至可能造成整个声学系统的损坏。
3.常见的啸叫抑制方法如频移法、陷波器法、自适应滤波器法都有各自的问题。现有技术如授权公告号为cn 107919134b所述的啸叫检测方法及装置和啸叫抑制方法及装置,其提供一种啸叫检测和抑制的方法,包括如下步骤:获得待检测音频帧在频域空间内的候选频率点;其中,所述候选频率点为:从所述待检测音频帧由时域空间变换至频域空间后得到的各个频率点中,基于各个频率点的功率值选取出的频率点;按照预设的参考频率点确定规则,分别确定每个候选频率点各自对应的至少一个参考频率点;分别计算每个候选频率点与其对应的各个参考频率点之间的功率比值;基于相对应的功率比值,分别判断每个候选频率点是否为啸叫频率点;当判断结果表明存在啸叫频率点时,确定所述待检测音频产生啸叫。
4.然而,该方法由于啸叫检测所用特征较少容易出现误检和漏检,采用陷波器的方法进行抑制,抑制过程过于复杂。


技术实现要素:

5.为克服上述现有技术存在的不足,本发明之目的在于提供一种基于频域处理的啸叫抑制方法及装置,实现以较低的误检率、较高的鲁棒性解决啸叫问题的目的。
6.为达上述及其它目的,本发明提出一种基于频域处理的啸叫抑制方法,包括如下步骤:
7.步骤s1,采集时域信号,并将其进行离散傅里叶变换得到频域信号并进行频域信号预处理;
8.步骤s2,计算频域和时域的特征值,将其与门限进行比较,检测出啸叫频点;
9.步骤s3,计算抑制增益,与频点相乘进行啸叫的抑制,并进行离散傅里叶逆变换得到啸叫抑制后的时域信号。
10.优选地,步骤s1进一步包括:
11.步骤s100,采集待检测的麦克风信号,并将其进行离散傅里叶变换转换为频域信号,并获得频域信号的能量;
12.步骤s101,搜索频域信号的m个能量最大值及其对应频点位置,在计算能量均值的时候剔除该m个能量最大值。
13.优选地,步骤s2进一步包括:
14.步骤s200,将频域信号分为若干个频段;
15.步骤s201,分别计算该些频段的频域特征,包括峰值谐波比、峰值均值比和峰值阈值比;
16.步骤s202,依据不同频带的特性和长短时检测模块的不同,将计算得到的频域特征和多个门限相比较;
17.步骤s203,基于步骤s202的结果,更新长时检测模块和短时检测模块的计数器,并与长时间测模块和短时检测模块的门限比较;
18.步骤s204,结合长时检测模块和短时检测模块的输出,得到最终的啸叫检测频点。
19.优选地,于步骤s00中,将频域信号根据人说话语音的基音特性以及扬声器/麦克风器件特性分为若干个频段。
20.优选地,于步骤s201中,对于各个频段,计算频点和相应谐波的比值为所述峰值谐波比,计算频点和频带均值的比值为所述峰值均值比,计算频点和阈值的比值为所述峰值阈值比。
21.优选地,于步骤s202中,依据不同频带的特性和长短时检测模块的不同,将计算得到的频域特征和对应的门限相比较,若超过门限则比较结果为1,反之则为0,将各个频域特征比较结果互相与/或,若最终结果为1则认为该频点是疑似啸叫点,若最终结果为0则认为该频点不是疑似啸叫点。
22.优选地,步骤s3进一步包括:
23.步骤s300,根据步骤s2的结果判断频点是否属于啸叫点;
24.步骤s301,若当前频点是啸叫点,则根据频点的能量计算抑制增益;
25.步骤s302,如果当前频点不是啸叫点,则判断上一帧该频点的抑制增益是否小于对应门限,如果上一帧该频点的抑制增益小于门限,则根据频点能量计算抑制增益的恢复步长,如果大于或等于门限,则将抑制增益设为1;
26.步骤s303,将抑制增益和频点相乘,最后进行离散傅里叶逆变换得到啸叫抑制后的时域信号。
27.优选地,于步骤s301中,将抑制增益设成和信号能量成反比。
28.优选地,于步骤s302中,若上一帧的抑制增益小于增益门限,则根据抑制恢复的步长和能量成反比计算抑制恢复的步长,并根据抑制恢复的步长计算当前帧的抑制增益。
29.为达到上述目的,本发明还提供一种基于频域处理的啸叫抑制装置,包括:
30.频域信号转换及预处理单元,用于采集时域信号,并将其进行离散傅里叶变换得到频域信号并进行频域信号预处理;
31.频域和时域特征检测单元,用于计算频域和时域的特征值,将其与相应门限进行比较,确定最终的啸叫频点;
32.啸叫抑制单元,用于计算抑制增益,然后和频点相乘进行啸叫的抑制,并进行离散傅里叶逆变换得到啸叫抑制后的时域信号。
33.与现有技术相比,本发明一种基于频域处理的啸叫抑制方法及装置,根据在啸叫检测阶段对语音信号在不同频带和不同时间段内表现出的不同特征,针对性地进行不同的特征值计算以及不同阈值的设定,提高啸叫频点的检测准确性和鲁棒性,在啸叫抑制阶段,采用频域的抑制方式,根据频点的能量动态计算抑制深度和抑制恢复的步长,有效增强对
啸叫点的抑制以及加快对误检信号的恢复速度。
附图说明
34.图1为本发明一种基于频域处理的啸叫抑制方法的步骤流程图;
35.图2为本发明具体实施例中步骤s1的细部流程图;
36.图3为本发明具体实施例中步骤s2的细部流程图;
37.图4为本发明具体实施例中步骤s3的细部流程图;
38.图5为本发明一种基于频域处理的啸叫抑制装置的系统结构图;
39.图6为本发明具体实施例中频域信号转换及预处理单元50的细部结构图。
具体实施方式
40.以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。
41.图1为本发明一种基于频域处理的啸叫抑制方法的步骤流程图。如图1所示,本发明一种基于频域处理的啸叫抑制方法,包括如下步骤:
42.步骤s1,采集时域信号,并将其进行离散傅里叶变换得到频域信号并进行频域信号预处理。
43.具体地,如图2所示,步骤s1进一步包括:
44.步骤s100,采集待检测的麦克风信号,即时域信号,并将其进行离散傅里叶变换转换为频域信号,并获得频域信号的能量。
45.具体地,假设采集得到t时刻的帧长为n的时域信号x(n,t),n=1,2,

n,将其离散傅里叶变换得到频域信号x(ωk,t)和频点能量e(ωk,t),如下公式1所示:
[0046][0047]
其中表示频点序列号。
[0048]
步骤s101,搜索频域信号的m个能量最大值及其对应频点位置,在计算能量均值的时候剔除该m个能量最大值。
[0049]
具体地,将频点能量经过峰值搜索找到最大的m个峰值频率点,在计算能量均值的时候剔除这m个峰值点,避免啸叫点对计算正常信号能量均值带来误差,剔除掉m个峰值点的频点能量为即表示不含有m个峰值点的能量。
[0050]
步骤s2,计算频域和时域的特征值,将其与门限进行比较,检测出啸叫频点。在本发明中,时域特征即是指啸叫在时间上呈现一定的连续性,利用计数器统计得到该连续性。
[0051]
具体地,如图3所示,步骤s2进一步包括:
[0052]
步骤s200,将频域信号分为若干个频段。
[0053]
具体地,将频域信号根据人说话语音的基音特性以及扬声器/麦克风器件特性分
为若干个频段。
[0054]
首先根据人说话的基音分布特征、麦克风/扬声器器件特征,将频域信号分为若干个频段,本发明中以三个频段为例,频段一的范围为[0-fc1]、频段二的范围为[fc1-fc2]、频段三的范围为[fc2-fs/2],其中fc1、fc2为频段的分界频率,fs为采样频率。
[0055]
步骤s201,分别计算该些频段的频域特征,包括峰值谐波比、峰值均值比和峰值阈值比。
[0056]
具体地,各频段的频域特征包括:
[0057]
1、峰值谐波比(phpr),即频点和相应谐波的比值phpr(ωk,t,n,b):
[0058][0059]
其中m可以取2,3,4

和1/2,1/3,1/4


[0060]
2、峰值均值比(papr),即频点和频带均值的比值:
[0061][0062]
3、计算峰值阈值比(ptpr),即频点和阈值的比值:
[0063][0064]
其中n=0,1为时间连续性检测模块的序列号,n=0表示长时检测模块,n=1表示短时检测模块,b=0,1,2分别表示频段1、频段2和频段3
[0065]
步骤s202,依据不同频带的特性和长短时检测模块的不同,将计算得到的频域特征和对应的门限相比较,如果超过门限则比较结果为1,反之则为0,将各个频域特征比较结果互相与/或,如果最终结果为1则认为该频点是疑似啸叫点,结果为0则认为该频点不是疑似啸叫点。
[0066]
在本发明具体实施例中,峰值谐波比对应的门限为phpr_thr(ωk,n,b),峰值均值比对应的门限papr_thr(ωk,n,b),峰值阈值比对应的门限ptpr_thr(ωk,n,b)。
[0067]
其中n=0,1为后续时间连续性检测模块的序列号,n=0表示长时检测模块,n=1表示短时检测模块,b=0,1,2分别表示频段1、频段2和频段3。
[0068]
由于啸叫点能量在起始段是逐步增加的,因此一般性地将长时检测模块所用的频域门限低于短时检测模块对应的频域门限,增加长时检测的检出率,即:
[0069]
由于语音能量通常集中在低频段,啸叫能量通常集中在高频段,因此一般性地将低频段的频域门限设置高于高频段的频域门限,减少低频段的误检率,增加高频短的检出率,即:
[0070]
[0071]
步骤s203,基于步骤s202的比较结果,更新长时检测模块和短时检测模块的计数器,并与长时间测模块和短时检测模块的门限比较。
[0072]
具体地,设置有时间连续性检测模块:使用四个计数器实现一个频点的时间连续性检测,其中第一和第二计数器属于长时检测模块,第三和第四属于短时检测模块。利用第一和第三计数器来统计过去一定时间内频点被认为是疑似频点的个数,即根据步骤s202的结果,如果频点被检测到是疑似频点,则第一和第三计数器加一。当第一计数器的值(timecnt1)超过第一计数器门限(timethr1)或第三计数器的值(timecnt3)的值第三计数器门限(timethr3)就认为是啸叫频点。其中第一计数器门限的一般可以设置为1s到3s,第三计数器门限一般可以设置为10ms到40ms,具体可根据实际需要进行设置。即第一计数器负责检测长时间的疑似啸叫点,第三计数器负责检测短时间的疑似啸叫点。在啸叫的起始阶段,啸叫点的能量是逐步增加的,而第一计数器所对应的频域检测门限设置的相对比较低,此时主要是第一计数器在工作,降低漏检概率;在啸叫点的稳定阶段,啸叫点的能量相对较强,第三计数器开始工作,在短时间内检测出啸叫点,同时频域高门限有助于降低误检概率。第二和第四计数器负责误检频点的恢复,即根据步骤s202的结果,如果该频点没被检测到是疑似频点,则第二和第四计数器加一,否则直接置零。当第二计数器的值(timecnt2)超过第二计数器门限(timethr2)就说明被长时检测模块检测的该频点连续一段时间内没被检测到是疑似频点,第一计数器减一,当第四计数器(timecnt4)超过第四计数器门限(timethr4)就说明被短时检测模块检测该频点连续一段时间内没被检测到是疑似频点,第三计数器减一。由上所述,第一计数器门限和第三计数器门限对应着啸叫频点的检测快慢,而第二计算器门限和第四计数器门限对应着误检频点的恢复快慢。
[0073]
步骤s204,结合长时检测模块和短时检测模块的输出,得到最终的啸叫检测频点。
[0074]
步骤s3,计算抑制增益,然后和频点相乘进行啸叫的抑制,并进行离散傅里叶逆变换得到啸叫抑制后的时域信号
[0075]
具体地,如图4所示,步骤s3进一步包括:
[0076]
步骤s300,根据步骤s2的结果判断各频点是否属于啸叫点。该频点即步骤s1采集的麦克风信号转换为频域信号后的各频点。
[0077]
步骤s301,若当前频点为啸叫点,则根据频点的能量计算抑制增益;
[0078]
在本发明具体实施例,如果频点被判定为啸叫点,则根据信号的能量动态的计算抑制增益supgain(ωk,t),能量越大,抑制越强,本发明提供一个可供实现的参考公式,将抑制增益设成和信号能量成反比,如公式5所示:
[0079][0080]
其中l是设定的定值,该式含义是将啸叫频点抑制到10log10(l)db。
[0081]
步骤s302如果当前频点不是啸叫点,则判断上一帧该频点的抑制增益是否小于对应门限,如果上一帧该频点的抑制增益小于门限,则根据频点能量计算抑制增益的恢复步长,如果大于或等于门限,则直接将抑制增益设为1。
[0082]
对于未被判定为啸叫点的频点将情况分为两类:第一类是上一帧的抑制增益小于增益门限,则需要计算抑制恢复的步长,步长和能量成反比,本发明提供一个可供实现的参考公式,如下公式6所示:
[0083][0084]
其中s_thr1是最小的恢复步长,s_thr2是最大的恢复步长,s是一个定值。
[0085]
公式6表明对于过去被判定为啸叫点的频点而言,如果当前帧的频点能量越小,则抑制的恢复越快,频点的能量越大,抑制的越慢,由于啸叫点通常具有较大的能量,这样的处理有助于加快能量不大的误检频点的恢复同时减慢能量较大的漏检频点的恢复。
[0086]
第二类是上一帧的抑制增益大于等于增益门限,则直接将抑制增益supgain(ωk,t)置为1,即完全不对频点有抑制作用。
[0087]
步骤s303,将抑制增益和频点相乘,最后进行离散傅里叶逆变换得到啸叫抑制后的时域信号。
[0088]
最后,将抑制增益和对应的频点相乘并进行离散傅里叶逆变换,得到最终的时域输出,如下公式7所示:
[0089][0090]
图5为本发明一种基于频域处理的啸叫抑制装置的系统结构图。如图5所示,本发明一种基于频域处理的啸叫抑制装置,包括:
[0091]
频域信号转换及预处理单元50,用于采集时域信号,并将其进行离散傅里叶变换得到频域信号并进行频域信号预处理。
[0092]
具体地,频域信号转换及预处理单元50进一步包括:
[0093]
dft运算模块501,用于采集待检测的麦克风信号,并将其进行离散傅里叶变换转换为频域信号,并获得频点能量。
[0094]
具体地,假设采集得到t时刻的帧长为n的时域信号x(n,t),将其离散傅里叶变换得到频域信号x(ωk,t)和频点能量e(ωk,t),如下公式1所示:
[0095][0096]
其中表示频点序列号。
[0097]
峰值搜索运算模块502,用于搜索频域信号的m个能量最大值及其对应频点位置,在计算能量均值的时候剔除该m个能量最大值。
[0098]
具体地,将频点能量经过峰值搜索找到最大的m个峰值频率点,在计算能量均值的时候剔除这m个峰值点,避免啸叫点对计算正常信号能量均值带来误差,剔除掉m个峰值点的频点能量为即表示不含有m个峰值点的能量。
[0099]
频域和时域特征检测单元51,用于计算频域和时域的特征值,将其与相应门限进行比较,确定最终的啸叫频点。时域特征是指啸叫在时间上呈现一定的连续性,利用计数器统计得到该连续性。
[0100]
具体地,如图6所示,频域和时域特征检测单元51进一步包括:
[0101]
频带划分单元510,用于将频域信号分为若干个频段。
[0102]
具体地,将频域信号根据人说话语音的基音特性以及扬声器/麦克风器件特性分为若干个频段。
[0103]
首先根据人说话的基音分布特征、麦克风/扬声器器件特征,将频域信号分为若干个频段,本发明中以三个频段为例,频段一的范围为[0-fc1]、频段二的范围为[fc1-fc2]、频段三的范围为[fc2-fs/2],其中fc1、fc2为频段的分界频率,fs为采样频率。
[0104]
频域特征检测模块511,用于分别计算该些频段的频域特征,并依据不同频带的特性和长短时检测模块的不同,将计算得到的频域特征和多个门限相比较,根据比较结果更新长时检测模块和短时检测模块的计数器。
[0105]
在本发明中,频域特征检测模块511包括峰值谐波比计算单元、峰值均值比单元以及峰值阈值比计算单元,用于分别计算各频段的峰值谐波比、峰值均值比以及峰值阈值比,并将其与相应的门限比较,将比较结果输入给时间连续性检测模块进行最终的啸叫频点判定。
[0106]
具体地,各频段的频域特征包括:
[0107]
1、峰值谐波比(phpr),即频点和相应谐波的比值phpr(ωk,t,n,b):
[0108][0109]
其中m可以取2,3,4

和1/2,1/3,1/4


[0110]
2、峰值均值比(papr),即频点和频带均值的比值:
[0111][0112]
3、计算峰值阈值比(ptpr),即频点和阈值的比值:
[0113][0114]
在本发明具体实施例中,峰值谐波比的门限为phpr_thr(ωk,n,b),峰值均值比的门限papr_thr(ωk,n,b),峰值阈值比的门限ptpr_thr(ωk,n,b)。
[0115]
其中n=0,1为时间连续性检测模块的序列号,n=0表示长时检测模块,n=1表示短时检测模块,b=0,1,2分别表示频段1、频段2和频段3。
[0116]
由于啸叫点能量是逐步增加的,因此一般性地将长时检测模块所用的频域门限低于短时检测模块对应的频域门限,增加长时检测的检出率,即:
[0117][0118]
由于语音能量通常集中在低频段,啸叫能量通常集中在高频段,因此一般性地将低频段的频域门限设置高于高频段的频域门限,减少低频段的误检率,增加高频短的检出率,即:
[0119][0120]
将计算得到的频域特征和对应的门限相比较,如果超过门限则比较结果为1,反之则为0,根据实际需要,将各个比较结果互相与/或,如果最终结果为1则认为该频点是疑似
啸叫点,结果为0则认为该频点不是疑似啸叫点。
[0121]
时间连续性检测模块512,用于根据频域特征检测模块511的输出更新长时检测模块和短时检测模块的计数器,并与长时间测模块和短时检测模块的门限比较。
[0122]
具体地,设置有时间连续性检测模块:使用四个计数器实现一个频点的时间连续性检测,其中第一和第二计数器属于长时检测模块,第三和第四属于短时检测模块。利用第一和第三计数器来统计过去一定时间内频点被认为是疑似频点的个数,如果频点被检测到是疑似频点,则第一和第三计数器加一,当超过第一计数器门限或第三计数器门限就认为是啸叫频点,其中第一计数器门限的一般可以设置为1s到3s,第三计数器门限一般可以设置为10ms到40ms,具体可根据实际需要进行设置。即第一计数器负责检测长时间的疑似啸叫点,第三计数器负责检测短时间的疑似啸叫点。在啸叫的起始阶段,啸叫点的能量是逐步增加的,因此第一计数器所对应的频域检测门限设置的相对比较低,此时主要是第一计数器在工作,降低漏检概率;在啸叫点的稳定阶段,啸叫点的能量相对较强,第三计数器开始工作,在短时间内检测出啸叫点,同时频域高门限有助于降低误检概率。第二和第四计数器负责误检频点的恢复,如果该频点没被检测到是疑似频点,则第二和第四计数器加一,否则直接置零,当第二计数器超过第二计数器门限就说明被长时检测模块检测的该频点连续一段时间内没被检测到是疑似频点,第一计数器减一,当第四计数器超过第四计数器门限就说明被短时检测模块检测该频点连续一段时间内没被检测到是疑似频点,第三计数器减一。由上所述,第一计数器门限和第三计数器门限对应着啸叫频点的检测快慢,而第二计算器门限和第四计数器门限对应着误检频点的恢复快慢。
[0123]
检测结果输出模块513,用于结合长时检测模块和短时检测模块的输出,得到最终的啸叫检测频点。
[0124]
啸叫抑制单元53,用于计算抑制增益,然后和频点相乘进行啸叫的抑制,并进行离散傅里叶逆变换得到啸叫抑制后的时域信号
[0125]
具体地,啸叫抑制单元53进一步包括:
[0126]
啸叫点判定模块530,用于根据频域和时域特征检测单元51的结果判断频点是否属于啸叫点。
[0127]
抑制增益计算模块531,若当前频点是啸叫点,则根据频点的能量计算抑制增益;
[0128]
在本发明具体实施例,如果频点被判定为啸叫点,则根据信号的能量动态的计算抑制增益supgain(ωk,t),能量越大,抑制越强,本发明提供一个可供实现的参考公式,将抑制增益设成和信号能量成反比,如公式5所示:
[0129][0130]
其中l是设定的定值,该式含义是将啸叫频点抑制到10log10(l)db。
[0131]
如果当前频点不是啸叫点,则判断上一帧该频点的抑制增益是否小于对应门限,如果上一帧该频点的抑制增益小于门限,则根据频点能量计算抑制增益的恢复步长,如果大于或等于门限,则将抑制增益设为1。
[0132]
对于未被判定为啸叫点的频点将情况分为两类:第一类是上一帧的抑制增益小于增益门限,则需要计算抑制恢复的步长,步长和能量成反比,本发明提供一个可供实现的参考公式,如下公式6所示:
[0133][0134]
其中s_thr1是最小的恢复步长,s_thr2是最大的恢复步长,s是一个定值。
[0135]
公式6表明对于过去被判定为啸叫点的频点而言,如果当前帧的频点能量越小,则抑制的恢复越快,频点的能量越大,抑制的越慢,由于啸叫点通常具有较大的能量,这样的处理有助于加快能量不大的误检频点的恢复同时减慢能量较大的漏检频点的恢复。
[0136]
第二类是上一帧的抑制增益大于等于增益门限,则直接将抑制增益supgain(ωk,t)置为1,即完全不对频点有抑制作用。
[0137]
啸叫抑制计算模块532,将抑制增益和频点相乘,最后进行离散傅里叶逆变换得到啸叫抑制后的时域信号。
[0138]
最后,将抑制增益和对应的频点相乘并进行离散傅里叶逆变换,得到最终的时域输出,如下公式7所示:
[0139][0140]
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1