一种语音去噪方法和装置
技术领域
本申请属于语音处理技术领域,尤其涉及一种语音去噪方法和装置。
背景技术
在发送语音消息时,背景噪音是不可避免,有效去除噪声可以提升语音的质量。且随着智能终端的使用越来越普及,语音聊天等也变得越来越普遍,因此语音去噪也就变得越来越重要。
鉴于语音去噪在语音聊天中有着重要的作用,可以降低环境噪音,提升语音质量,语音去噪的方法也有很多,例如:谱减法、LMS(自适应滤波器)、维纳滤波法、最小均方误差法等等。
然而,上述这些去噪方法都存在计算量较大的问题,因为计算量比较大必然会导致实时去噪时cpu占用率比较高,智能终端的性能难以满足实时去噪的要求。
针对如何在保证去噪效果的同时,降低对CPU的占用,目前尚未提出有效的解决方案。
发明内容
本申请目的在于提供一种语音去噪方法和装置,可以实现在保证语音精度的同时,提高去噪速度和效率,以满足实时去噪的要求。
本申请提供一种语音去噪方法和装置是这样实现的:
一种语音去噪方法,所述方法包括:
对待去噪语音信号进行FFT,得到多个频段的幅值和相位;
根据所述多个频段中各个频段的带噪功率和噪声功率,计算得到各个频段的噪声抑制因子;
将各个频段的幅值乘以对应的噪声抑制因子,得到各个频段去噪后的幅值;
相位采用FFT得到的相位,幅值采用去噪后的幅值,进行IFFT得到去噪后的语音信号。
一种语音去噪装置,所述装置包括:
FFT模块,用于对待去噪语音信号进行FFT,得到多个频段的幅值和相位;
计算模块,用于根据所述多个频段中各个频段的带噪功率和噪声功率,计算得到各个频段的噪声抑制因子;
确定模块,用于将各个频段的幅值乘以对应的噪声抑制因子,得到各个频段去噪后的幅值;
IFFT模块,用于相位采用FFT得到的相位,幅值采用去噪后的幅值,进行IFFT得到去噪后的语音信号。
本申请提供的语音去噪方法和装置,将对待去噪语音信号通过FFT变换至频域,以获取多个频段的幅值和相位,然后基于各个频段的带噪功率和噪声功率,计算得到各个频段的噪声抑制因子,通过噪声抑制因子在频域进行语音去噪,然后再通过IFFT变换至时域,从而实现对语音信号的去噪处理。利用本申请实施方案,不仅可以保证语音去噪效果可以满足要求,且计算量比较小,计算速度较快,因此可以满足实时去噪的要求。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的语音去噪方法一种实施例的方法流程图;
图2是本申请提供的经验函数的曲线示意图;
图3是本申请提供的语音去噪方法另一种实施例的方法流程图;
图4是本申请提供的语音去噪装置一种实施例的模型结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
图1是本申请所述一种语音去噪方法一个实施例的方法流程图。虽然本申请提供了如下述实施例或附图所示的方法操作步骤或装置结构,但基于常规或者无需创造性的劳动在所述方法或装置中可以包括更多或者更少的操作步骤或模块单元。在逻辑性上不存在必要因果关系的步骤或结构中,这些步骤的执行顺序或装置的模块结构不限于本申请实施例描述及附图所示的执行顺序或模块结构。所述的方法或模块结构的在实际中的装置或终端产品应用时,可以按照实施例或者附图所示的方法或模块结构连接进行顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至分布式处理环境)。
具体的如图1所述,本申请一种实施例提供的一种语音去噪方法可以包括:
S1:对待去噪语音信号进行FFT(Fast Fourier Transform,快速傅立叶变换),得到多个频段的幅值和相位;
待去噪语音信号可以是实时通话时候的语音信号,例如:通过手机打电话时候双方的语音信号,或者是,聊天应用中传输的语音,或者是聊天应用中的对讲语音等等,这些都可以作为待去噪语音信号。因为,这些语音信号一般是人们在正常的生活环境中录制的语音,身边难免会存在噪声,这些噪声的存在都会影响语音的质量。
一般待去噪语音信号都是时域的数据,为此,可以对其进行FFT(Fast FourierTransform,快速傅立叶变换),以将时域的信号转换至频域,然后,在频域进行语音去噪,待去噪完成后,可以通过IFFT(Inverse Fast Fourier Transform,快速傅里叶逆变换)再变换为时域,从而得到去噪后的语音信号。
在本例中,主要是考虑到所谓的语音去噪主要是通过原始语音信号减去其中的噪声信号,从而获取去噪后的语音信号,如果到功率的层面考虑就是:
其中,
表示第i个频段去噪后的功率,P
i表示第i个频段带噪信号的功率,N
i表示第i个频段的噪声功率。
对该公式进行调整可以得到:
由此可见,去噪后的功率其实是带噪信号的功率乘以一个噪声抑制因子Ri后的结果,当Ri=0,表示输入信号全是噪声,去噪后功率为0,当Ri=1,表示输入信号不存在噪声,去噪后功率值不变。
进一步的,基于功率是幅度的平方,将上述公式对应到信号的幅度上进行去噪就可以表示为:
因此,如果需要在幅度层面进行语音去噪,就需要求取ri,然后根据幅值和相位还原出去噪后的信号。因此,需要对待去噪语音信号进行FFT,得到多个频段的幅值和相位。
S2:根据所述多个频段中各个频段的带噪功率和噪声功率,计算得到各个频段的噪声抑制因子;
噪声抑制因子主要是与带噪功率和噪声功率相关的,因此,可以根据各个频段的带噪功率和噪声功率,计算得到各个频段的噪声抑制因子,具体地,可以先设定一个初始抑制因子,然后,对这个初始抑制进行修正,从而得到较为准确的抑制因子,即,可以包括:
步骤1:根据当前频段的带噪功率和噪声功率,计算当前频段的初始抑制因子;
步骤2:对当前频段的初始抑制因子进行修正,得到当前频段修正后的抑制因子;
步骤3:将当前频段修正后的抑制因子作为当前频段的噪声抑制因子。
初始抑制因子就可以根据当前频段的带噪功率和噪声功率的确定,例如,可以按照以下公式计算初始抑制因子:
其中,ri 0表示第i个频段的初始抑制因子,其中,第i个频段为当前频段,Pi表示第i个频段的带噪功率,Ni表示第i个频段的噪声功率,Rbasen是根据当前频段的幅值从拟合经验曲线中查找出的量值。
具体地,Rbasen=f(x)可以是一个基础值,该值与信号的幅度有关,该函数可以是通过实际采集的信号进行分析总结后得到的一个经验函数,在实际执行中,f(x)可以是一个如图2所示的拟合得到的一个分段函数,分段函数中表明了各个幅度范围所应该对应的Rbasen的值,在得到当前频段的幅度值之后,就可以到该分段函数中进行查找,以便确定该幅度值对应哪个幅度区间,以及该幅度区间对应的Rbasen值,从而通过幅度确定出Rbasen,例如,在图2中,纵轴表示Rbasen,横轴表示信号幅度,横轴的刻度单位为3500,即,1标识的信号幅度大小为3500。基于图2所示的经验函数曲线,在知道幅度的情况下,就可以确定出Rbasen。
为了对初始抑制因子进行修正,得到修正后的抑制因子,可以通过以下方式之一进行:
1)通过相邻频段间的衰减因子做平滑;
2)与因子能力最强的因子做加权;
3)与上一帧的抑制因子做加权。
下面对上述三种修正方式进行具体说明,然而,值得注意的是,下面的说明中是以这三种方式逐一进行修正的方式进行的,然而,在实际执行的时候,并不需要按照这种顺序进行,可以根据实际需要选择一种、两种或者三种方式进行修正,具体的修正次序也可以根据实际需要和实际情况选择,本申请对此不作限定。
方式一:通过相邻频段间的衰减因子做平滑,可以包括:将当前频段的初始抑制因子与当前频段的相邻频段的初始抑制因子做平滑处理,然后将平滑处理后的初始抑制因子作为当前频段修正后的抑制因子。
具体地,可以将当前频段的初始抑制因子与当前频段的相邻频段的初始抑制因子做平滑处理:
其中,ri 1表示当前频段平滑处理后的初始抑制因子,ωj表示第j个频段的权重值,rj 0表示第j个频段的初始抑制因子。
即,选择当前频段的前一个频段和后一个频段以及当前频段自身的初始抑制因子做加权平均作为当前频段修正后的抑制因子。然而值得注意的是,在实际实现的时候,也可以不是仅选择前一频段和后一频段,也可以选择前两个频段和后两个频段,或者是相邻的更多个频段,具体选择相邻的几个频段,可以根据实际需要确定,本申请对此不作限定,当然选择的相邻频段越多得到的抑制因子越准确,但是所需要的计算处理资源也就越多,对终端的性能要求也就越高,因此,需要考虑计算资源与准确性之间的一个平衡。
之所以通过相邻频段间的抑制因子做平滑,主要是考虑到一般希望相邻频段间的噪声抑制能力是相当的,以避免原始语音走样。
方式二:与因子能力最强的因子做加权:可以获取多个频段中各个频段初始抑制因子的最大值和最小值,然后,根据最大值和最小值,对平滑处理后的初始抑制因子进行修正,得到当前频段修正后的抑制因子。
具体地,可以按照以下公式对平滑处理后的初始抑制因子进行修正,得到当前频段修正后的抑制因子:
ri 2=α·ri 1+(1-α)·rmin
其中,α表示第一加权系数,α=f(rmin,rmax),f为第一加权系数的计算公式,rmin表示所述最小值,rmax表示所述最大值。
例如:α=f(rmin,rmax)可以表示为:
其中,
然而值得注意的是,该α的计算公式仅是一种示意性描述,在实际执行时,也可以有其它的表达形式,取值也可以根据实际情况确定,本申请对此不作限定。
其中,rmin,rmax可以表示为:
由前面分析的去噪原理可知:ri越小,表示这个频段含有的噪声越多,需要更小的值与原始功率相乘,ri越大,表示这个频段含有的噪声越少,需要一个接近1的值与原始功率相乘。
与因子能力最强的因子做加权主要是因为经过平滑处理后的抑制因子会存在欠抑制或者是过抑制的问题,因此可以通过抑制因子的极值做修正。
方式三:与上一帧的抑制因子做加权,即,可以将当前频段修正后的抑制因子与待去噪语音信号的前一帧语音信号与当前频段相同频段的修正后的抑制因子做加权,得到加权后的抑制因子,然后将加权后的抑制因子作为当前频段的噪声抑制因子。即,假设计算的是去噪语音信号的第5个频段(20Hz到30Hz)的抑制因子,那么就用上一帧语音的20Hz到30Hz的抑制因子做加权,之所以与上一帧的抑制因子做加权,主要是为了保证相邻帧的平滑。
具体地,可以按照以下公式将当前频段修正后的抑制因子与前一帧的结果做加权,得到加权后的抑制因子:
其中,
表示所述待去噪语音信号的前一帧语音信号与所述当前频段相同频段的修正后的抑制因子,r
i表示所述加权后的抑制因子,r
i 2表示所述当前频段修正后的抑制因子,β表示第二加权系数。
S3:将各个频段的幅值乘以对应的噪声抑制因子,得到各个频段去噪后的幅值;
即,可以按照以下公式将各个频段的幅值乘以对应的噪声抑制因子,得到各个频段去噪后的幅值:
其中,
表示第i个频段去噪后的幅值,r表示第i个频段的噪声抑制因子,A
i表示第i个频段去噪前的幅值。
S4:相位采用FFT得到的相位,幅值采用去噪后的幅值,进行IFFT(Inverse FastFourier Transform,快速傅里叶逆变换)得到去噪后的语音信号;
即,在频域进行去噪后,对乘以抑制因子后的结果进行IFFT操作,返回时域得到去噪后的语音信号。
总的而言,整个去噪流程可以如图3所示,获取语音信号X,然后语音信号X进行FFT,计算FFT后每个频段的噪声抑制因子,然后根据得到的噪声抑制因子进行去噪,去噪后进行IFFT,得到去噪后的信号X。
本例所提供的语音去噪方法具有良好的去噪效果,去噪效果与维纳滤波或最小均方误差等方法类似,但是计算速度相对较快,通过维纳滤波或最小均方误差等方法进行实时去噪,android系统上CPU占用10%左右,ios系统上CPU占用>80%,而通过本申请中的语音去噪方法进行实时去噪,android系统上CPU占用降为2%,ios系统上CPU占用可以降至30%以下,可以有效满足移动终端的性能需求。
基于同一发明构思,本发明实施例中还提供了一种语音去噪装置,如下面的实施例所述。由于语音去噪装置解决问题的原理与语音去噪方法相似,因此语音去噪装置的实施可以参见语音去噪方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图4是本发明实施例的语音去噪装置的一种结构框图,如图4所示,可以包括:FFT模块401、计算模块402、确定模块403和IFFT模块404,下面对该结构进行说明。
FFT模块401,可以用于对待去噪语音信号进行FFT,得到多个频段的幅值和相位;
计算模块402,可以用于根据所述多个频段中各个频段的带噪功率和噪声功率,计算得到各个频段的噪声抑制因子;
确定模块403,可以用于将各个频段的幅值乘以对应的噪声抑制因子,得到各个频段去噪后的幅值;
IFFT模块404,可以用于相位采用FFT得到的相位,幅值采用去噪后的幅值,进行IFFT得到去噪后的语音信号。
在一个实施方式中,计算模块402可以包括:计算单元,用于根据当前频段的带噪功率和噪声功率,计算当前频段的初始抑制因子;修正单元,用于对所述当前频段的初始抑制因子进行修正,得到当前频段修正后的抑制因子;确定单元,用于将当前频段修正后的抑制因子作为当前频段的噪声抑制因子。
在一个实施方式中,计算单元具体可以用于根据当前频段的带噪功率和噪声功率,按照以下公式,计算当前频段的初始抑制因子:
其中,ri 0表示第i个频段的初始抑制因子,其中,第i个频段为当前频段,Rbasen是根据当前频段的幅值从拟合经验曲线中查找出的量值,Pi表示第i个频段的带噪功率,Ni表示第i个频段的噪声功率。
在一个实施方式中,修正单元可以包括:平滑子单元,用于将所述当前频段的初始抑制因子与所述当前频段的相邻频段的初始抑制因子做平滑处理;修正子单元,用于将平滑处理后的初始抑制因子作为当前频段修正后的抑制因子。
在一个实施方式中,平滑子单元具体可以用于按照以下公式,将所述当前频段的初始抑制因子与所述当前频段的相邻频段的初始抑制因子做平滑处理:
其中,ri 1表示当前频段平滑处理后的初始抑制因子,ωj表示第j个频段的权重值,rj 0表示第j个频段的初始抑制因子。
在一个实施方式中,修正子单元可以包括:获取子单元,用于获取所述多个频段中各个频段初始抑制因子的最大值和最小值;确定子单元,用于根据所述最大值和最小值,对平滑处理后的初始抑制因子进行修正,得到当前频段修正后的抑制因子。
在一个实施方式中,确定子单元具体可以用于根据所述最大值和最小值,按照以下公式对平滑处理后的初始抑制因子进行修正,得到当前频段修正后的抑制因子:
ri 2=α·ri 1+(1-α)·rmin
其中,α表示第一加权系数,α=f(rmin,rmax),f为第一加权系数的计算公式,rmin表示所述最小值,rmax表示所述最大值。
在一个实施方式中,修正子单元还可以包括:加权子单元,用于在对平滑处理后的初始抑制因子进行修正,得到当前频段修正后的抑制因子之后,将当前频段修正后的抑制因子与所述待去噪语音信号的前一帧语音信号与所述当前频段相同频段的修正后的抑制因子做加权,得到加权后的抑制因子;相应的,确定单元具体可以用于将加权后的抑制因子作为当前频段的噪声抑制因子。
在一个实施方式中,加权子单元具体可以用于按照以下公式将当前频段修正后的抑制因子与前一帧的结果做加权,得到加权后的抑制因子:
其中,
表示所述待去噪语音信号的前一帧语音信号与所述当前频段相同频段的修正后的抑制因,r
i表示所述加权后的抑制因子,r
i 2表示所述当前频段修正后的抑制因子,β表示第二加权系数。
本申请提供的语音去噪方法和装置,将对待去噪语音信号通过FFT变换至频域,以获取多个频段的幅值和相位,然后基于各个频段的带噪功率和噪声功率,计算得到各个频段的噪声抑制因子,通过噪声抑制因子在频域进行语音去噪,然后再通过IFFT变换至时域,从而实现对语音信号的去噪处理。利用本申请实施方案,不仅可以保证语音去噪效果可以满足要求,且计算量比较小,计算速度较快,因此可以满足实时去噪的要求。
本申请中各个实施例所涉及的上述描述仅是本申请中的一些实施例中的应用,在某些标准、模型、方法的基础上略加修改后的实施方式也可以实行上述本申请各实施例的方案。当然,在符合本申请上述各实施例的中所述的处理方法步骤的其他无创造性的变形,仍然可以实现相同的申请,在此不再赘述。
虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。当然,也可以将实现某功能的模块由多个子模块或子单元组合实现。
本申请中所述的方法、装置或模块可以以计算机可读程序代码方式实现控制器按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本申请所述装置中的部分模块可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、类等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的硬件的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,也可以通过数据迁移的实施过程中体现出来。该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,移动终端,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。本申请的全部或者部分可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、移动通信终端、多处理器系统、基于微处理器的系统、可编程的电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。