一种基于滑动增益的语音自动增益和动态范围控制方法
【技术领域】
本发明涉及语音增强技术领域,特别是涉及一种基于滑动增益的语音自动增益和动态范围控制方法。
【背景技术】
在通信过程中,网络下发的语音数据的幅度有大有小,特别是不同的声讯服务的音量差别很大。假如不在终端的下行链路中增加自动增益控制和动态范围控制模块,那么当下行音量很小的时候用户听不清声音,当下行的音量很大的时候又可能导致破音,严重影响用户的听觉感受。当采用数字音频信号作为处理对象时,输入输出信号都是线性PCM数据。终端处理线性PCM数据的时候一般以帧为单位来进行处理或传输,帧是指一段持续时间内的PCM数据的集合。
目前在终端音频链路中自动增益和动态范围控制一般分开实现,数据首先通过自动增益控制模块,对小信号进行放大处理,对大信号进行缩小处理;然后再经过动态范围控制模块,把信号限制在某一个范围之内。
当自动增益控制模块接收到一帧语音数据:speech(n),n=0,2,3,...,N-2,N—1,其中N表示帧长度。首先搜索最近S秒(S为一可调节的参数)内语音数据的最大幅度值AMP,然后根据此幅度值和预先设定的期望值X计算当前帧的期望增益gama,一般采用下面的方法计算:
由于采用以帧为单位对信号进行处理,因此必须对帧与帧之间不同的增益进行平滑,得到当前帧的期望增益以后,就可以计算当前帧的每个采样点的增益:
β(n)=α*β(n-1)+(1-α)*gama,n=0,1,2,...,N-1 (2)
其中α是一遗忘因子,β(-1)表示上一帧最后一个采样点的增益值。计算了β(n)以后,就可以得到自动增益控制的输出如下:
speech(n)=speech(n)*β(n),n=0,1,2,...,N-1 (3)
动态范围控制模块是为了保证语音信号的最大幅度在某一个预先设定的范围之内。类似于自动增益控制算法,当收到一帧语音数据:speech(n),n=0,2,3,...,N-2,N—1,其中N表示帧长度。首先搜索最近T秒(一可调节的参数,且可能与S不同)内语音数据的最大幅度值MAX,然后根据此幅度值和预先设定的期望值Y计算当前帧的期望增益gama,一般采用下面的方法计算:
gama=Y/MAX (4)
动态范围控制不对信号进行放大,因此gama必须限定在(0,1]的范围之内。然后用(2)式计算每个采样点的增益值,最后再使用(3)式计算得到输出结果。
然而,现有技术存在着如下的缺点:首先,在现有技术中,自动增益控制和动态范围控制需要分开实现;其二,运算中需要运用除法和开平方根的运算,这些运算在DSP芯片上比较难以实现;第三,现有技术需要进行平滑运算,式子(2)需要每个采样点都计算一次,而且由于β(n)的计算要依赖于β(n—1),难以使用一般DSP的并行运算指令,因此导致整个算法的运算量大。
【发明内容】
为解决上述问题,本发明公开了一种基于滑动增益的语音自动增益和动态范围控制方法,本方法既能够对小信号进行放大并对大信号进行衰减,又能够保证输出信号的幅度都在一个预先设定的范围之内,且利用滑动增益来实现不同帧之间不同增益的平稳过渡,也不需要除法和开平方运算,计算量大大减少。一种基于滑动增益的语音自动增益和动态范围控制方法,包含如下步骤:
a.设定一期望语音的幅度范围,该幅度范围包含一个期望下限和一个期望上限;
b.设定一增益数组,该增益数组包含有效增益区和无效增益区,所述有效增益区和无效增益区皆包含若干按照大小顺序排列的增益数值和若干按照大小顺序排列的索引,每个索引对应指向一个增益数值;
c.接收当前帧语音数据;
d.搜索包含所述当前帧语音数据在内的最近S秒的时长内语音数据中信号幅度的最大值;
e.计算临时索引,比较所述增益数组中最小的索引和最大的索引,如果最小的索引等于最大的索引,则将该最小的索引作为临时索引,如果最小的索引不等于最大的索引,则将最小的索引加最大的索引加1三者之和除以2作为临时索引;
f.搜索最佳增益索引,将步骤e中计算得到的临时索引所指向的增益数值乘以所述信号幅度的最大值,
若所得值不大于所述期望上限也不小于所述期望下限,则以步骤e中计算所得临时索引为最佳增益索引;
若所得值大于所述期望上限,则以该临时索引作为新的最大的索引,重复步骤e,在最小的索引和新的最大的索引之间计算临时索引,直到临时索引指向的增益数值乘以所述信号幅度的最大值的所得值在期望下限与期望上限之间或者临时索引已经到达增益数组中最大的索引,则该临时索引为最佳增益索引;
若所得值小于所述期望下限,则以该临时索引作为新的最小的索引,重复步骤e,在新的最小的索引和最大的索引之间计算临时索引,直到临时索引指向的增益数值乘以所述信号幅度的最大值的所得值在期望下限与期望上限之间或者临时索引已经到达增益数组中最小的索引,则该临时索引为最佳增益索引。
g.获取可用的最佳增益;
h.处理当前帧语音数据,所述当前帧语音数据的第一个采样点的增益数值使用其上一帧语音数据的最佳增益索引所指向的增益数值,随后每处理一个采样点的语音数据,增益索引就朝着当前帧最佳增益索引的位置移动一次,直到到达当前帧最佳增益索引的位置;
i.用当前帧最佳增益索引指向的增益数值处理其余的当前帧语音信号数据。
其中,无效增益区中设置有几个增益比较大的无效增益数值,无效增益数值的最小值大于有效增益数值的最大值。无效增益区的设置是为了提高算法在噪声环境下的鲁棒性,即保证噪声环境下系统能够稳定地工作,而不易受到噪声的干扰。作为优选的技术方案,所述增益数值按照大小顺序排列的方式是从小到大排列,无效增益区设置在有效增益区的最大增益数值后面。所述有效增益区的增益数值范围为-6dB~10dB;所述有效增益区的索引范围为0~100,有效增益区的任意两个相邻增益数值之差为0.16dB;所述预设增益索引所指向的增益数值为增益数组中接近0dB的增益数值,例如,所述预设增益索引为38,其指向的增益数值为0.08dB;所述期望上限为25000,期望下限为6000;所述S秒的时长是可调节的。
本发明的有益效果在于,本发明通过滑动增益的方法实现了语音信号的自动增益控制和动态范围控制,利用增益在相邻两帧之间的滑动实现了增益的平滑过渡,其计算量相对于现有技术使用遗忘因子的方法下降了5倍。算法简单,不需要除法或开平方运算,计算量小,减轻了终端的计算负担,易于在DSP芯片上实现。
【附图说明】
图1为本发明的具体实施方式的流程图;
图2为本发明的具体实施方式中增益数组的简图;
图3(a)为语音数据经本发明处理前的信号时域图;
图3(b)为语音数据经本发明处理后的信号时域图。
【具体实施方式】
下面结合实施例并参照附图对本发明作进一步描述。
参见图1所示,为本发明基于滑动增益的语音自动增益和动态范围控制方法之具体实施方式的流程图,包含如下步骤:
步骤S101,程序初始化。
在程序初始化时,设定一期望语音的最大幅度范围,该范围包含一个期望下限6000和一个期望上限25000;输入语音采用8khz的采样率,16位有效数据。设定一增益数组,该增益数组分为有效增益区和无效增益区,所述有效增益区和无效增益区皆包含若干按照大小顺序排列的增益数值和若干按照大小顺序排列的索引,每个索引对应指向一个增益数值。
无效增益区的设置是为了提高语音控制系统在噪声环境下的鲁棒性,即确保系统在噪声环境下仍具备稳定的性能。本具体实施方式中在增益数组的结尾部分即有效增益区的最大增益数值后面设置了几个增益比较大的无效增益数值及其索引,无效增益数值的最小值大于有效增益数值的最大值。这些无效增益数值及无效增益数值索引组成无效增益区。
如图2所示,为本发明具体实施方式中增益数组的简图,所述增益数值从小到大排列;所述有效增益区的增益数值范围为-6dB~10dB;所述有效增益区的索引范围为0~100,有效增益区的任意两个相邻增益数值之差为0.16dB;所述预设增益索引为38,其指向的增益数值为0.08dB。其中,A为上一帧有效增益索引,B为当前帧有效增益索引。无效增益区的索引范围为101~104,该些索引所对应的数值即为无效增益数值。
步骤S102,接收当前帧语音数据。
步骤S103,搜索包含所述当前帧语音数据在内的最近S秒的时长内语音数据中信号幅度的最大值。其中,S秒的时长是可调节的。
步骤S104,计算临时索引,比较所述增益数组中最小的索引和最大的索引,如果最小的索引等于最大的索引,则将该最小的索引作为临时索引,如果最小的索引不等于最大的索引,则将最小的索引加最大的索引加1三者之和除以2作为临时索引;
步骤S105,搜索最佳增益索引,将步骤S104中计算得到的临时索引所指向的增益数值乘以所述信号幅度的最大值,
若所得值不大于所述期望上限25000也不小于所述期望下限6000,则以步骤S104中计算所得临时索引为最佳增益索引;
若所得值大于所述期望上限25000,则以该临时索引作为新的最大的索引,重复步骤S104,在最小的索引和新的最大的索引之间计算临时索引,直到临时索引指向的增益数值乘以所述信号幅度的最大值的所得值在期望下限6000与期望上限25000之间或者临时索引已经到达增益数组中最大的索引104,则该临时索引为最佳增益索引;
若所得值小于所述期望下限6000,则以该临时索引作为新的最小的索引,重复步骤S104,在新的最小的索引和最大的索引之间计算临时索引,直到临时索引指向的增益数值乘以所述信号幅度的最大值的所得值在期望下限6000与期望上限25000之间或者临时索引已经到达增益数组中最小的索引0,则该临时索引为最佳增益索引。
如上所述,由于临时索引指向的增益数值乘以所述信号幅度的最大值的所得值有可能一直不在期望下限6000与期望上限25000之间,而临时索引最终会到达增益数组中最大的索引104或最小的索引0。因此,若临时索引已到达增益数组中最大的索引104或最小的索引0,而临时索引指向的增益数值乘以所述信号幅度的最大值的所得值仍未达到期望下限6000与期望上限25000之间,则到达增益数组中最大的索引104或最小的索引0的临时索引即为最佳增益索引。
步骤S106,判断最佳增益索引是否可用,如果搜索到的最佳增益索引处在所述有效增益区,则该最佳增益索为当前帧最佳增益索引,其所指向的增益值为当前帧最佳增益值,如果搜索到的最佳增益索引处在所述无效增益区,则进入步骤S110,修改该最佳增益索引为所述有效增益区中的一个预设增益索引,将该预设增益索引指向的增益数值作为当前帧最佳增益值。在本具体实施方式中,预设增益索引为38,其指向的增益数值为0.08dB。
步骤S107,处理当前帧语音数据,根据上一帧的最佳增益索引A和当前帧的最佳增益索引B对语音信号进行滑动增益处理,所述当前帧语音数据的第一个采样点的增益数值使用其上一帧最佳增益索引A所指向的增益数值,随后每处理一个采样点的语音数据,增益索引就朝着当前帧最佳增益索引B的位置移动一次,直到到达当前帧最佳增益索引B的位置;然后,用当前帧最佳增益索B引指向的增益数值处理其余的当前帧语音信号数据。
步骤S108,输出经处理过的语音数据。
步骤S109,判断语音数据是否结束,是则结束,否则返回步骤S102,继续接收当前帧语音数据。
步骤S110,修改该最佳增益索引为所述有效增益区中的一个预设增益索引。在本具体实施方式中,预设增益索引为38,其指向的增益数值为0.08dB。
参见图3(a)为语音数据经本发明处理前的信号时域图;图3(b)为语音数据经本发明处理后的信号时域图。其中,输入语音采用8khz的采样率,16位有效数据;期望下限6000,期望上限25000;有效增益区的增益数值范围为-6dB~10dB。
本发明的有益效果在于,本发明通过滑动增益的方法实现了语音信号的自动增益控制和动态范围控制,利用增益在相邻两帧之间的滑动实现了增益的平滑过渡,其计算量相对于现有技术使用遗忘因子的方法下降了5倍。算法简单,不需要除法或开平方运算,计算量小,减轻了终端的计算负担,易于在DSP芯片上实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本实用新型构思的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围内。