语音信号处理的方法及装置
技术领域
本发明涉及信号处理技术领域,特别是涉及一种语音信号处理的方法及装置。
背景技术
一般语音信号由基波和多个谐波组成。在环境噪音强烈或者麦克风音腔设计不当时,会导致语音信号的谐波被噪声淹没或减弱。此时会造成语音音质不同程度的下降,影响输出语音信号的质量。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高语音信号输出质量的语音信号处理的方法及装置。
一种语音信号处理的方法,所述方法包括以下步骤:
将当前输入信号帧与相邻前一输入信号帧组合构成当前数据块;
计算所述当前数据块的原始频谱和谐波峰值序列;
根据所述谐波峰值序列应用梳状滤波器对所述原始频谱进行处理,得到所述当前数据块的当前数据块频谱;
对所述当前数据块频谱进行时域反变换,得到所述当前数据块的当前时域处理信号;
将所述当前时域处理信号的前一半长度数据,与相邻前一数据块的前一时域处理信号的后一半长度数据求和,得到输出语音信号。
作为一种语音信号处理的方法的可实施方式,还包括以下步骤:
以预设频率的谐波为基准,使用带有滚降系数的高通滤波器对所述输出语音信号进行处理,平衡所述输出语音信号的高次谐波与低次谐波的能量水平。
作为一种语音信号处理的方法的可实施方式,在将当前输入信号帧与相邻前一输入信号帧组合构成当前数据块步骤之前,还包括以下步骤:
计算所述当前输入信号帧的最大峰值能量;
判断所述最大峰值能量是否大于能量预设值,若是,则继续执行所述将当前输入信号帧与相邻前一输入信号帧组合构成当前数据块的步骤;若否,则判定所述当前输入信号帧为非语音信号。
作为一种语音信号处理的方法的可实施方式,还包括以下步骤:
求取所述当前数据块的线性预测残差;
计算所述线性预测残差归一化自相关序列,得到归一化残差序列,并查找所述归一化残差序列中的最大幅值;
判断所述最大幅值是否大于幅值预设值,若是,则判定所述当前数据块为语音信号,并继续执行所述计算所述当前数据块的原始频谱和谐波峰值序列的步骤;若否,则判定所述当前数据块为非语音信号;
作为一种语音信号处理的方法的可实施方式,所述计算所述当前数据块的谐波峰值序列包括以下步骤:
计算所述当前数据块的功率谱;
选取所述最大幅值对应的最大值频率点,以及所述最大值频率点前后频率点;
根据所述最大值频率点对应的功率幅值,以及所述最大值频率点前后频率点对应的功率幅值,采用二次插值算法计算所述当前数据块的基频;
根据所述基频在所述功率谱上进行查找,得到所述当前数据块的所述谐波峰值序列。
作为一种语音信号处理的方法的可实施方式,所述能量预设值为52。
作为一种语音信号处理的方法的可实施方式,所述幅值预设值为0.4。
作为一种语音信号处理的方法的可实施方式,所述以预设频率的谐波为基准,使用带有滚降系数的高通滤波器对所述输出语音信号进行处理,平衡所述输出语音信号的高次谐波与低次谐波的能量水平;包括:
根据所述当前数据块的1KHz以下谐波的平均功率水平与1KHz~3KHz的谐波平均水平功率之比,应用在1KHz增益为0dB,特定滚降Kdb/oct的高通滤波器,平衡低次谐波与高次谐波的能量水平。
作为一种语音信号处理的方法的可实施方式,所述计算所述当前数据块的功率谱时,采用汉宁窗对所述当前数据块进行截取,再使用截取后的信号求取所述当前数据块的功率谱。
作为一种语音信号处理的方法的可实施方式,判定所述当前数据块为非语音信号后,还包括以下步骤:
判断当前数据块的前一数据块以及后一数据块是否均为语音信号;
若是,则进行进一步计算所述当前数据块的基频,若否,则不对所述当前数据块进行处理;
判断所述基频与所述当前数据块的前一数据块的基频之间的第一误差,以及与所述当前数据块的后一数据块的基频之间的第二误差是否均在预设范围内,若是,则将所述当前数据块进行与语音信号相同的处理;若否,则不对所述当前数据块进行处理。
作为一种语音信号处理的方法的可实施方式,所述当前输入信号帧长度为64时,所述第一误差与所述第二误差的预设范围相同,均为20Hz。
作为一种语音信号处理的方法的可实施方式,所述归一化残差序列中最大幅值的位置序号在(100~800)/Fs范围内,其中Fs为所述语音信号的采样率。
基于相同的发明构思的一种语音信号处理的装置,包括数据块构成模块,用于将当前输入信号帧与相邻前一输入信号帧组合构成当前数据块;
谐波计算模块,用于计算所述当前数据块的原始频谱和谐波峰值序列;
谐波处理模块,用于根据所述谐波峰值序列应用梳状滤波器对所述原始频谱进行处理,得到所述当前数据块的当前数据块频谱;
时域变换模块,用于对所述当前数据块频谱进行时域反变换,得到所述当前数据块的当前时域处理信号;
信号整合模块,用于将所述当前时域处理信号的前一半长度数据,与相邻前一数据块的前一时域处理信号的后一半长度数据求和,得到输出语音信号。
作为一种语音信号处理的装置的可实施方式,还包括能量平衡模块,用于以预设频率的谐波为基准,使用带有滚降系数的高通滤波器对所述输出语音信号进行处理,平衡所述输出语音信号的高次谐波与低次谐波的能量水平。
本发明的有益效果包括:本发明提供的一种语音信号处理的方法,使用梳状滤波器对输入的语音信号进行谐波增强处理,避免谐波被噪声淹没或减弱,提升输出语音质量。同时提供的语音信号处理的装置也具有前述优点。
附图说明
图1为语音信号处理的方法一个实施例的流程图;
图2为语音信号处理的方法另一个实施例的流程图;
图3为语音信号处理的方法再一个实施例的流程图;
图4为语音信号处理的方法又一个实施例的流程图;
图5为语音信号处理的方法一个实施例中步骤S200执行的流程图;
图6为语音信号处理的方法一个实施例中非语音信号处理的流程图;
图7为语音信号处理的方法一个具体实例的流程图;
图8为语音信号处理的装置一个实施例的结构示意图;
图9为语音信号处理的装置另一实施例的结构构成示意图;
图10为语音信号处理的装置又一实施例的结构构成示意图;
图11为语音信号处理的装置再一实施例的结构构成示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图对本发明的语音信号处理的方法及装置的具体实施方式进行说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明语音信号处理的方法的一实施例中,如图1所示,包括以下步骤:
S100,将当前输入信号帧与相邻前一输入信号帧组合构成当前数据块。
假设当前输入信号帧为第n帧语音信号,记为Xn,则其前一帧的语音信号为第n-1帧语音信号,记为Xn-1。将第n帧语音信号和第n-1帧语音信号按照时间顺序组合,即输入时间靠前的语音信号放在前面,时间靠后的语音信号放在后面,组成一个更长的语音信号。且一般每个输入的语音信号帧长度是一定的。假设本实施例中输入的语音信号帧长度为M,则将两帧语音信号组合构成的当前数据块长度为2M。其中,帧长度M可根据实际设备对语音信号处理的速度确定。如M可选择64,80等。
S200,计算当前数据块的原始频谱和谐波峰值序列。
S300,根据谐波峰值序列应用梳状滤波器对原始频谱进行处理,得到当前数据块的当前数据块频谱。
本步骤中,根据当前数据块的谐波峰值序列构建梳状滤波器,并使用梳状滤波器对当前数据块的频谱(当前数据块的频率表现形式)进行滤波处理。加深谐波波谷部分,突出谐波结构。如此,则通过梳状滤波器对当前数据块的谐波峰值部分进行加强,而压制当前数据块的非谐波部分,降低外界环境等因素造成的噪声的影响。
S400,对当前数据块频谱进行时域反变换,得到当前数据块的当前时域处理信号。
对频域的当前数据块进行谐波峰值增强后,再进行反变换,得到处理(或谐波增强)后的当前数据块的时域信号,即所述的当前时域处理信号。
当然,在本实施例中,输入的当前数据块的时域长度为2M,经过两次时域和频域之间的变换后,最终得到的当前时域处理信号长度依然为2M。
S500,将当前时域处理信号的前一半长度数据,与相邻前一数据块的前一时域处理信号的后一半长度数据求和,得到输出语音信号。
根据本步骤可知,本发明实施例的语音信号处理的方法中,最终输出的前一帧输入信号帧对应的语音信号。而且,进一步的,为了后续输入信号帧语音信号的处理,对当前数据块进行分析处理得到当前时域处理信号后,需要对所述当前时域处理信号进行存储,以便在对下一当前数据块进行语音信号处理时,对两个数据块的时域处理信号进行交错相加,得到一帧输入信号帧对应的语音输出信号。
本发明实施例的语音信号处理的方法,其在频域根据语音信号谐波峰值,使用梳状滤波器对语音信号进行处理,从而增强语音信号谐波结构,突出谐波分量,压制非谐波部分分量。避免语音信号受噪声影响而导致谐波被淹没或者谐波减弱的情况。提高语音输出的质量。
如图2所示,在本发明另一语音信号处理的实施例中,除包括上述实施例中的5个步骤之外,还包括下面的步骤S600。
S600,以预设频率的谐波为基础,使用预设系数的滚降系数的滤波器对输出语音信号进行处理,平衡输出语音信号的高次谐波与低次谐波的能量水平。
其中,所述预设频率与语音信号本身的频率范围,以及某些特殊使用环境有关(如真实语音信号与机器语音会有一定差别)。可根据具体使用环境确定所述预设频率。
具体地,在一个具体实例中,根据1KHz以下谐波的平均功率水平与1KHz~3KHz的谐波平均水平功率之比,应用在1KHz增益为0dB,特定滚降Kdb/oct的高通滤波器到所述长度为M的语音信号上。以平衡低次谐波与高次谐波的能量水平,提升听感。
在另一实施例的语音信号处理的方法中,如图3所示,在将当前输入信号帧与相邻前一输入信号帧组合构成当前数据块步骤之前,还包括以下步骤:
S011,计算当前输入信号帧的最大峰值能量。
S012,判断最大峰值能量是否大于能量预设值,若是,则继续执行S100,将当前输入信号帧与相邻前一输入信号帧组合构成当前数据块;若否,则判断当前输入信号帧为非语音信号,并返回对下一输入信号帧进行最大峰值能量技进行判断。
本实施例中,首先对输入信号的能量进行判断,对于能量较小的信号则直接判定为非语音信号,不再进行任何处理,避免占用系统的内存,也避免处理时间的浪费。在另一角度上能够提高本发明的语音信号处理的方法的处理速度。
当然,具体的能量值大小的判断可根据具体处理环境确定。如对于一般音量较高的环境,所述能量预设值会设置较高的数值;而对于大部分语音信号都较小的使用环境,所述能量预设值要设置的较低一些。
较佳地,在其中一个实施例中,选择能量预设值为52,作为一般麦克风输出信号是否为语音信号的判断。
具体的,最大峰值能量Engn=20*log10(Max(abs(Xn)))。其中,abs(Xn)为当前输入信号帧幅值序列,且所述最大峰值能量为最大绝对值峰值能量。
在另一实施例中,如图4所示,还包括另一是否语音信号的判断步骤。该步骤分几步进行,均执行在步骤S200之前具体如下:
S021,求取所述当前数据块的线性预测残差。
在步骤S100将两帧输入信号组成当前数据块Sn后,本步骤进一步的进行线性预测,得到所述当前数据块Sn的线性预测LPC(linear predictive coding,线性预测编码)残差ESn。
更佳的,可以对输入信号先做降采样,降低运算负载。且也可要限制线性预测LPC的阶次,如LPC阶数在8KHz采样率下选为6阶。此时对残差计算精确度较高,而且计算量小。
S022,计算线性预测残差归一化自相关序列,得到归一化残差序列,并查找归一化残差序列中的最大幅值。
步骤S021得到当前数据块的残差ESn后,本步骤对残差进行归一化处理,寻找ESn的归一化自相关序列最大点的幅度MAX_AESAn,序号记为MAX_AESn。
其中,本步骤中对线性预测残差进行归一化处理,使本发明的语音信号处理的方法具有通用性,对每一帧输入信号都能采用相同的步骤进行处理。且归一化后的序列在数值大小方面较为统一(在0~1之间),便于后续根据数值大小直接进行判断操作。
S023,判断最大幅值MAX_AESAn是否大于幅值预设值,若是,则判定当前数据块为语音信号,并继续执行步骤S200,计算当前数据块的原始频谱和谐波峰值序列;若否,则判定当前数据块为非语音信号。
其中,因为对线性预测残差进行了归一化处理,归一化之后,取值会在0~1之间,所以,较为容易确定所述幅值预设值。较佳地,根据语音信号的特点,在其中一个实施例中设定所述幅值预设值为0.4。此幅值预设值能够较好的对语音信号进行粗过滤。
本实施例中,再次对是否为语音信号进行判断,进一步排除非语音信号,避免非语音信号的处理造成处理时间及器件占用造成的浪费。且对于一些非语音信号可直接做不输出处理,也能避免非语音信号输出的造成输出信号噪声影响。
具体的,如图5所示,作为一种谐波峰值序列求取的方法,步骤S200中计算当前数据块的谐波峰值序列包括以下步骤:
S201,计算当前数据块的功率谱。
S202,选取最大幅值对应的最大值频率点,以及最大值频率点前后频率点。
S203,根据最大值频率点对应的功率幅值,以及最大值频率点前后频率点对应的功率幅值,采用二次插值算法计算当前数据块的基频。
本实施例中,对当前数据块加窗,较佳地选用汉宁窗,然后当前数据块的功率谱Pn,并根据MAX_AESn对应的频率fn点。选取Pn中对应的频率点以及前后的频率点的幅度,利用二次插值计算准确基频Fpitchn。
根据已经计算出的归一化残差序列中的最大幅值的位置,在当前数据块的功率谱上确定当前数据块的基频。其中,进一步利用所述最大值频率点两侧的频率点利用二次插值进行基频的求取,使当前数据块基频确定更加准确。
此处需要说明的是,步骤S200计算所述当前数据块的原始频谱时,也可采用汉宁窗对当前数据块进行加窗处理后,再求取频谱Fn。当然,在其他实施例中,也可采用其他类型的窗对当前数数据块进行加窗处理。
S204,根据基频在功率谱上进行查找,得到当前数据块的谐波峰值序列。
需要说明的是,本实施例说明了一种特定的当前数据块基频和谐波峰值序列的求取方式。尤其是还采用了二次插值计算了准确的基频。在其他实施例中,本领域技术人员也可采用其他算法或者方案求取当前数据块的基频以及谐波峰值序列。且采用其他算法进行基频及谐波峰值序列的求取不影响本发明的语音信号处理的方法的实施。
在其中一个实施例中,当通过归一化残差序列最大幅值判定当前数据块为非语音信号后,如图6所示,对所述非语音信号还要进行以下判断处理:
S001,判断当前数据块的前两数据块以及后两数据块是否均为语音信号;
S002,若是,则进行进一步计算当前数据块的基频;S103,若否,则不对当前数据块进行处理,即放弃当前数据块,也不对当前数据块的处理结果进行保存。
S003,判断当前数据块的基频与当前数据块的前一数据块的基频之间的第一误差,以及与当前数据块的后一数据块的基频之间的第二误差是否均在预设范围内,若是,则将当前数据块进行与语音信号相同的处理;若否,则不对当前数据块进行处理。
本发明实施例中,当语音帧与语音帧之间出现无语音帧时,根据上两帧和下两帧的基频检测结果,判断是否补充上本帧或者当前数据块的基频或者跳过当前数据块的处理。而当连续出现多帧输入信号通过归一化残差序列最大幅值判定当前数据块为非语音信号时,则可以断定当前输入信号帧无需再进行保存(其之前的两个数据块均为非语音信号)。从而语音帧和语音帧之间无语音帧信号保存的长度被限制在一定范围内。
在另一实施中,还对同一基频检测结果的语音帧长度进行限制。将其限制在一定范围内。具体的,当检测到连续多帧输入信号帧的基频均相同时,则判定之后输入的输入信号帧为非语音信号,不再对其进行谐波增强的处理。语音信号的处理速度更快。
具体的,在其中一个实施例中,当前输入信号帧长度为64时,第一误差与第二误差的预设范围相同,均为20Hz。
更佳地,归一化残差序列中最大幅值的位置序号MAX_AESn(最大值频率点)在(100~800)/Fs范围内,其中Fs为语音信号的采样率。
如图7所示,为本发明的语音信号处理的方法一个具体实例流程图。对输入信号的处理按照以下步骤进行:
S1001,在时刻n时输入M点信号帧Xn。
S1002,计算Xn的绝对值最大峰值能量Engn=20*log10(Max(abs(Xn)))。
S1003,判断Engn是否大于设定阈值Thr_Eng,若是,则执行步骤S1004,如否则返回步骤S1001,输入下一帧数据。
S1004,计算Xn与Xn-1组成的数据块Sn的线性预测LPC残差ESn。,
S1005,计算ESn的归一化自相关序列,寻找归一化自相关序列的最大幅度位置MAX_AESn与其最大幅度MAX_AESAn,并确定对应基频频率Fpitchn。
S1006,判断最大幅度位置MAX_AESn是否在设定范围100/Fs~800/Fs内,以及ESn的归一化自相关序列的最大值MAX_AESAn是否大于Thr_AESA,以及基频Fpitchn=Fs/MAX_AESn与上一帧基频Fpitchn-1之差小于第一误差Thr_pitchdiff,若满足所有条件,则执行步骤S1007;若否,则当前数据块待定(步骤S1013)
S1007,计算Sn的加窗功率谱Pn和频谱Fn。
S1008,根据Fpitchn在Pn对应位置的附近数据进行插值修正,得到准确Fpitchn。
S1009,根据Fpitchn在功率谱Pn中根据一定规则寻找谐波峰值位置,得到谐波峰值位置序列Harmonicn。
S1010,根据谐波峰值位置序列Harmonicn对Fn应用相应梳状滤波器。
S1011,把经梳状滤波器处理后的Fn反变换到时域,得到2M点数据块,并取前一半长度数据与上一次结果的后一半长度数据相加得到M点输出on。
S1012,计算1KHz以上谐波的平均功率水平与1KHz~3KHz的谐波平均水平功率之比,应用在1KHz增益为0dB,特定滚降Kdb/oct的滤波器到M点输出On上。
S1013,根据前两帧以及后两帧的语音帧判断结果决定是否对本帧进行谐波增强处理。
该实施例通过平衡低次谐波与高次谐波的能量水平,提升听感。
基于同一发明构思,本发明实施例提供一种语音信号处理的装置,由于此装置解决问题的原理与前述一种语音信号处理的方法相似,因此,该系统的实施可以按照前述方法的具体步骤实现,重复之处不再赘述。
如图8所示,其中一个实施例的语音信号处理的装置包括数据块构成模块100、谐波计算模块200、谐波处理模块300、时域变换模块400以及信号整合模块500。
其中,数据块构成模块100,用于将当前输入信号帧与相邻前一输入信号帧组合构成当前数据块;谐波计算模块200,用于计算所述当前数据块的原始频谱和谐波峰值序列;谐波处理模块300,用于根据所述谐波峰值序列应用梳状滤波器对所述原始频谱进行处理,得到所述当前数据块的当前数据块频谱;时域变换模块400,用于对所述当前数据块频谱进行时域反变换,得到所述当前数据块的当前时域处理信号;信号整合模块500,用于将所述当前时域处理信号的前一半长度数据,与相邻前一数据块的前一时域处理信号的后一半长度数据求和,得到输出语音信号。
该实施例的语音信号处理的装置,通过使用梳状滤波器对语音信号的谐波进行处理,增强语音信号的谐波分量压制信号中的非谐波分量(噪声),提升语音信号的辨识度。
在另一实施例中,如图9所示,语音信号处理的装置还包括能量平衡模块600,用于以预设频率的谐波为基准,使用带有滚降系数的高通滤波器对所述输出语音信号进行处理,平衡输出语音信号的高次谐波与低次谐波的能量水平。
具体的,根据语音信号的特点,可以以1KHz作为基础频率点(高次谐波和低次谐波分界点),采用当前数据块的1KHz以下谐波的平均功率水平与1KHz~3KHz的谐波平均水平功率之比,应用在1KHz处增益为0dB,带有滚降系数的特定滚降Kdb/oct的高通滤波器对输出的语音信号进行再次处理,平衡低次谐波与高次谐波的能量水平。
如图10所示,语音信号处理的装置中还可以包括能量值计算模块010,以及第一信号判断模块011。
其中,能量值计算模块010,用于计算当前输入信号帧的最大峰值能量;第一信号判断模块011,用于判断最大峰值能量是否大于能量预设值,若是,则继续执行数据块构成模块100;若否,则判定当前输入信号帧为非语音信号。
本领域技术人员可以理解,该实施例中,能量值计算模块010和第一信号判断模块011均执行在前述的数据块构成模块100之前,先对输入的当前信号帧进行一次判断,这样可以避免对明显非语音信号的复杂处理,提高语音信号处理的整体速度。
如图11所示,一实施例的语音信号处理的装置中还包括残差求取模块020、最大幅值查找模块021以及第二判断模块022。
其中,残差求取模块020,用于求取当前数据块的线性预测残差;最大幅值查找模块021,用于计算线性预测残差归一化自相关序列,得到归一化残差序列,并查找归一化残差序列中的最大幅值;第二判断模块022,用于判断最大幅值是否大于幅值预设值,若是,则判定当前数据块为语音信号,并继续执行谐波计算模块200,计算当前数据块的原始频谱和谐波峰值序列;若否,则判定当前数据块为非语音信号。
该实施例中,再次对输入的信号进行是否语音信号的判断,也能缩短非语音信号对处理程序的占用。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述程序可存储于一计算机可读取存储介质中,如本发明实施例中,该程序可存储于计算机系统的存储介质中,并被该计算机系统中的至少一个处理器执行,以实现包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。