参数域的丢包隐藏方法及装置
技术领域
本发明涉及互联网技术领域,特别涉及一种参数域的丢包隐藏方法及装置。
背景技术
随着互联网的高速发展和长途通讯需求的不断增长,基于语音包交换的VOIP(Voice Over Internet Protocol,网络电话)技术以其低成本、易扩充及优良的通话质量越来越受到用户的青睐。在语音通信过程中,接收端接收到通过网络传输的语音包之后,通过语音解码器将语音包中的语音帧解码成对应的语音信号,进而实现网络通话。在目前现有的语音解码器中,帧间相关语音解码器由于可以在相同码率下提供更高质量的语音,从而被广泛采用,如Skype的SILK解码器。由于语音包在传输途中可能会发生丢包,导致语音通讯质量降低,因此,为了减少语音包丢包带来的负面影响,需要采用一定的丢包隐藏方法,来保证语音通讯质量。
相关技术中提供了一种丢包隐藏方法,在该方法中,接收端在接收到语音包并进行解码之后,若语音包在传输途中发生丢包,则对解出的语音信号进行处理生成丢失语音包中语音帧的语音信号,例如,通过对丢失帧的前后帧的语音信号进行处理,如基音同步重复、时间尺度修正等,来生成丢失帧相应的语音信号,从而实现丢包隐藏。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
由于语音包中的语音帧相互是有关联的,即之前解码的语音帧的解码结果会对当前语音帧的解码造成影响。若语音包在传输途中发生丢包,以致语音包中的语音帧丢失,当通过对丢失帧的前后帧的信号进行处理生成丢失帧相应的语音信号时,由于丢失帧的后续帧不能正确解出,因此,通过对丢失帧的前后帧的信号进行处理生成的丢失帧相应的语音信号效果不佳,从而导致语音通讯质量不高。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种参数域的丢包隐藏方法及装置。所述技术方案如下:
一方面,提供了一种参数域的丢包隐藏方法,所述方法包括:
确定待解码的当前语音帧是否丢失;
若所述当前语音帧丢失,获取所述当前语音帧的前一有效帧的参数;
根据所述前一有效帧的参数确定所述当前语音帧的参数;
根据所述当前语音帧的参数对所述当前语音帧进行解码。
另一方面,提供了一种参数域的丢包隐藏装置,所述装置包括:
确定模块,用于确定待解码的当前语音帧是否丢失;
前帧获取模块,用于当所述当前语音帧丢失时,获取所述当前语音帧的前一有效帧的参数;
当前帧确定模块,用于根据所述前一有效帧的参数确定所述当前语音帧的参数;
解码模块,用于根据所述当前语音帧的参数对所述当前语音帧进行解码。
本发明实施例提供的技术方案带来的有益效果是:
在确定待解码的当前语音帧丢失时,通过获取当前语音帧的前一有效帧的参数,按照具体情况来确定当前语音帧的参数,然后根据当前语音帧的参数对丢失语音帧进行正常解码,由于模拟了丢包情况下解码器的正常工作,因此保持了解码的连续性,从而当语音包在传输过程中出现丢包现象时,可以根据确定的丢失帧的参数进行解码,进而改善解码后的语音质量。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例一提供的一种参数域的丢包隐藏方法流程图;
图2是本发明实施例一提供的另一种参数域的丢包隐藏方法流程图;
图3是本发明实施例一提供的又一种参数域的丢包隐藏方法流程图;
图4是本发明实施例二提供的一种参数域的丢包隐藏方法流程图;
图5是本发明实施例二提供的一种解码器的结构示意图;
图6是本发明实施例三提供的一种参数域的丢包隐藏装置结构示意图;
图7是本发明实施例三提供的另一种参数域的丢包隐藏装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例一
由于帧间相关解码器语音包中的语音帧是相互关联的,因此前面语音帧的解码结果会对当前语音帧解码造成影响。当语音包在网络传输过程中出现丢包时,语音包中的语音帧也会丢失。此时,由于没有前面语音帧的解码结果作为参考,丢失语音帧后续的语音帧的解码过程会受到很大的负面影响,从而造成解码出来的语音信号产生的语音质量较差。
为了尽可能的减少丢包对帧间相关解码器进行解码时的负面影响,本发明提供了一种参数域的丢包隐藏方法,该方法用于可安装帧间相关解码器的设备,该设备包括但不限于终端、服务器等等,本实施例对此不作具体限定。为了对语音包中的语音帧进行解码,本发明实施例以前一有效帧或者前一有效帧和后一有效帧的参数作为确定丢失帧参数的依据,以执行主体为接收端为例,对本实施例提供的方法进行举例说明。参见图1,本实施例提供的方法流程包括:
101:确定待解码的当前语音帧是否丢失;
102:若当前语音帧丢失,获取当前语音帧的前一有效帧的参数;
103:根据前一有效帧的参数确定当前语音帧的参数;
104:根据当前语音帧的参数对当前语音帧进行解码。
在图1所示的方法基础上,本实施例提供的方法根据缓冲中是否有当前语音帧的后一有效帧的不同情况,具体可细分为如下两种情况:
参见图2,针对缓冲中有当前语音帧的后一有效帧的情况,本实施例提供的方法流程如下:
201:确定待解码的当前语音帧是否丢失;
202:若当前语音帧丢失,获取当前语音帧的前一有效帧的参数;
203:判断是否缓冲有当前语音帧的后一有效帧;
204:若缓冲有后一有效帧,获取后一有效帧的参数;
205:根据前一有效帧的参数及后一有效帧的参数确定当前语音帧的参数;
206:根据当前语音帧的参数对当前语音帧进行解码。
参见图3,针对缓冲中没有当前语音帧的后一有效帧的情况,本实施例提供的方法流程包括:
301:确定待解码的当前语音帧是否丢失;
302:若当前语音帧丢失,获取当前语音帧的前一有效帧的参数;
303:判断是否缓冲有当前语音帧的后一有效帧;
304:若缓冲没有后一有效帧,根据前一有效帧的参数外推确定当前语音帧的参数;
305:根据当前语音帧的参数对当前语音帧进行解码。
本实施例提供的方法,在确定待解码的当前语音帧丢失时,通过获取当前语音帧的前一有效帧的参数或者前一有效帧和后一有效帧的参数,按照具体情况来确定当前语音帧的参数,然后根据当前语音帧的参数对丢失语音帧进行正常解码,由于模拟了丢包情况下解码器的正常工作,因此保持了解码的连续性,从而当语音包在传输过程中出现丢包现象时,可以根据确定的丢失帧的参数进行解码,进而改善解码后的语音质量。
实施例二
本发明实施例提供了一种参数域的丢包隐藏方法,结合上述实施例一中的内容,针对当前语音帧已经丢失,抖动缓冲器有无后续语音包的情况,分别对本发明提供的丢包隐藏技术进行详细地举例说明。参见图4,本实施例提供的方法流程包括:
401:确定待解码的当前语音帧是否丢失;
本实施例不对确定待解码的当前语音帧是否丢失的确定方法作具体限定,包括但不限于:语音包发送端在发送语音包之前,为语音包内的每一个语音帧进行编号,将编号过后的语音帧发送至语音包接收端。参见图5所示的解码器,设置有一个抖动缓冲器,将接收到的语音帧预先存储在抖动缓冲器中。解码器根据当前语音帧的前一有效帧的编号跟抖动缓冲器中存储的后续有效帧的编号,即可确定当前语音帧是否丢失。
例如,第一个语音帧编号为1,解码器解码完第一个语音帧后,在抖动缓冲器中检索后续有效帧,若检索到后续有效帧的编号为4,则此时可以确定第二个语音帧和第三个语音帧丢失。若当前需要对第二个语音帧进行解码,则确定当前语音帧丢失。
当然,还可以采用其它方式确定当前语音帧是否丢失,本实施例对此不作具体限定。本实施例仅以当前语音帧丢失为例,对语音解码方法进行举例说明,对于确定当前语音帧未丢失的情况,可以按照预先设定的解码流程直接进行解码,关于当前语音帧未丢失的解码流程,此处不再赘述。
402:若当前语音帧丢失,判断是否缓冲有当前语音帧的后一有效帧,如果是,执行步骤403,否则,执行步骤407;
该步骤在判断是否缓冲有当前语音帧的后一有效帧时,可采用与确定当前语音帧是否丢失的相同方式。如上述步骤401所述,发送端在发送语音帧之前,为每一个语音帧进行编号,将编号过后的语音帧发送至接收端。接收端预先设置一个抖动缓冲器,并将接收到的语音帧预先存储在抖动缓冲器中。根据当前语音帧的前一有效帧的编号跟抖动缓冲器中存储的后续有效帧的编号,判断是否缓冲有当前语音帧的后一有效帧。
例如,当前语音帧编号为3,若在抖动缓冲器中检索到后续有编号为4的语音帧,则此时可以确定缓冲有当前语音帧的后一有效帧。又例如,当前语音帧编号为3,若在抖动缓冲器中检索到后续有编号为5的语音帧,则此时可以确定未缓冲有当前语音帧的后一有效帧。
当然,还可以采用其它方式判断是否缓冲有当前语音帧的后一有效帧,本实施例对此不作具体限定。
403:获取前一有效帧和后一有效帧的二元判定类参数,并根据前一有效帧和后一有效帧的二元判定类参数确定当前语音帧的信号类型,得到当前语音帧的二元判定类参数;
具体地,二元判定类参数用于对信号类型进行判定,由于人声有清音浊音之分,所以在常见的语音模型中对周期性信号和非周期性信号的建模和编码都有明显区别。其中,宽泛的说,周期性信号对应浊音帧,非周期性信号对应清音帧。因此,信号类型包括清音和浊音两种类型。获取前一有效帧和后一有效帧的二元判定类参数后,可以根据获取到的前一有效帧和后一有效帧的二元判定类参数确定前一有效帧和后一有效帧是否为周期性信号,从而根据前一有效帧和后一有效帧的二元判定类参数确定前一有效帧和后一有效帧的信号类型,得到当前语音帧的二元判定类参数。按照本实施例给出的方式,在确定当前语音帧的信号类型的过程中,包括但不限于如下三种情况:
情况一:前一有效帧和后一有效帧均为周期性信号,则可根据前一有效帧和后一有效帧的二元判定类参数确定前一有效帧和后一有效帧的信号类型均为浊音帧,此时将当前语音帧的信号类型确定为浊音帧。
情况二:前一有效帧为周期性信号,后一有效帧为非周期性信号,则可根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧为浊音帧,后一有效帧为清音帧。或者,前一有效帧为非周期性信号,后一有效帧为周期性信号,则可根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧为清音帧,后一有效帧为浊音帧。
在上述两种情形中,由于前一有效帧和后一有效帧中有一个为周期性信号,在这种情况下可以判定丢失帧中经历了周期性与非周期性信号之间的转换,因此可以合理地假设在丢失帧中多少也会有周期性信号的存在,因此,确定当前语音帧为浊音帧。
情况三:前一有效帧和后一有效帧均为非周期性信号,则可根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧和后一有效帧的信号类型均为清音帧,此时将当前语音帧的信号类型确定为清音帧。
无论采用上述哪种情况确定当前语音帧的信号类型,将确定的信号类型均可转换为对应的二元判定类参数。例如,具体实施时,可设置清音帧的二元判定类参数为0,浊音帧的二元判定类参数值为1,当确定当前语音帧的信号类型后,如果该当前语音帧为清音帧,则当前语音帧的二元判定类参数值为0,同理,如果该当前语音帧为浊音帧,则当前语音帧的二元判定类参数为1,当然,二元判定类参数的数值还可以采用其它设置方式,本实施例对此不作具体限定。
404:获取前一有效帧和后一有效帧的时序演进类参数,并根据前一有效帧及后一有效帧的二元判定类参数及时序演进类参数确定当前语音帧的时序演进类参数;
具体地,时序演进类参数可以包括但不限于基音周期、增益参数和LSP(LineSpectrum Pair,线谱对)系数等,本实施例对此不作具体限定,同样不对获取前一有效帧和后一有效帧的时序演进类参数的方式进行限定。具体实施时,首先以基音周期为例,在根据前一有效帧和后一有效帧的二元判定类参数确定信号类型后,可根据前一有效帧和后一有效帧的信号类型按照如下四种情况确定当前语音帧的基音周期参数。
情况一:前一有效帧和后一有效帧均为浊音帧;
获取到前一有效帧和后一有效帧的基音周期后,由于在实际场景中,人说话时有可能突然提高或者降低声调,所以在稳定的浊音阶段中,同样可能存在基音周期的突变。为了判断前一有效帧和后一有效帧的基音周期是否发生突变,可以采取如下方法:取前一有效帧的基音周期和后一有效帧的基音周期的差值的绝对值,将差值的绝对值预设的基音周期偏移阈值进行比较,根据比较结果进而确定前一有效帧和后一有效帧的基音周期是否发生突变。
例如,设next_pitch为后一有效帧的基音周期,last_pitch为前一有效帧的基音周期,用两者的差值取绝对值与预设的基音周期偏移阈值δ来判定是否存在基音周期突变。
其中,如果|next_pitch-last_pitch|<δ,即按照上述公式计算后,若两者的差值取绝对值小于基音周期偏移阈值δ,则可确定前一有效帧和后一有效帧的基音周期未发生突变。反之,则可确定前一有效帧和后一有效帧的基音周期发生突变。其中,基音周期偏移阈值δ可以根据历史经验来进行设定,本实施例对此不作具体限定。另外,实际操作中还可以采用其它方法确定前一有效帧和后一有效帧的基音周期是否发生突变,本实例对此也不作具体限定。
在确定当前语音帧的基音周期参数时,根据前一有效帧和后一有效帧的基音周期是否发生突变,可分为如下两种情形:
第一种情形:前一有效帧和后一有效帧的基音周期没有发生突变;
由于在前一有效帧和后一有效帧的基音周期没有发生突变的情形下,基音周期轮廓是平滑且按时序演进的,因此,可以选择用线性插值的方法确定当前语音帧的子帧的基音周期,之后在根据当前语音帧的子帧的基音周期确定当前语音帧的基音周期。当然,还可以选择其它插值算法确定当前语音帧的基音周期,本实施例对此不作具体限定。
具体实施时,在进行线性插值的过程中,可以根据实际具体情况,设置需要的参数,并设置不同的数值来进行线性插值,本实施例不对线性插值的算法作具体限定。仅以如下线性插值算法为例,该种算法的具体实现方式可通过如下公式表示:
pitch[k]=last_pitch+pIncr*(k+1ossCnt*subFrameCount+1) (2)
在公式(1)中,pIncr为演进增量,lostFrameCount为抖动缓冲器传入的总共丢帧数,subFrameCount为每帧中包含的子帧数。
公式(2)中,可以对抖动缓冲器中的后一有效帧之前的连续丢帧数进行统计来确定lostFrameCount的数值。例如,抖动缓冲器中一共可以存放5帧,其中每一帧均有编号。在某一时刻,第二帧丢失,而抖动缓冲器的下一有效帧时编号为5的第五帧,此时可确定二,三,四帧丢失,即lostFrameCount的数值为3。另外,subFrameCount为每帧中包含的子帧数,每帧的子帧数可以根据实际需要进行设定,本实施例对此也不作具体限定。
按照上述方式确定不同参数的数值后,可以确定演进增量pIncr的数值,将演进增量pIncr的数值代入到公式(2)中做进一步地运算。
在公式(2)中,lossCnt为丢帧开始到目前位置的总共丢帧数,k的含义为当前语音帧的第k子帧,pitch[k]表示当前语音帧的第k子帧的基音周期。
按照上述方式确定不同参数的数值后,可以确定lossCnt和k的数值,将两者数值代入到公式(2)中进行运算可以确定pitch[k]的数值,即当前语音帧的第k子帧的语音周期。
在获取到当前语音帧所有子帧的基音周期后,即可采用一定的方法确定当前语音帧的基音周期,如将子帧的基因周期按照权重进行叠加,本实施例对此不作具体限定。
第二种情形:前一有效帧和后一有效帧的基音周期发生突变。
为了便于后续的计算,本实施例以基音周期发生在丢包的中间时间点为例,例如,根据帧的编号确定丢失帧为第二帧、第三帧和第四帧,第一帧和第五帧确定正常到达,则此时基音突变发生丢包的中间时间点,即在第三帧的时候。当然,根据实际情况还可以采用其它方法来确定丢包的中间时间点,本实施例对此不作具体限定。例如,设前一帧的基音周期为last_pitch,下一帧的基音周期为next_pitch,当前语音帧的基音周期为pitch,当前语音帧的基音周期可按照如下公式进行确定:
pitch=last_pitch,iflossCnt<(LostFrameCount>>1) (3)
pitch=next_pitch,iflossCnt≥(LostFrameCount>>1) (4)
在上述公式(3)和公式(4)中,确定lostFrameCount的数值后,确定丢失帧开始到当前语音帧位置的总共丢帧数lossCnt,若lostFrameCount的数值除以2大于lossCnt的数值,则将前一有效帧的基音周期last_pitch确定为当前语音帧的基音周期。反之,则将后一有效帧的基音周期确定为当前语音帧的基音周期。
情况二:前一有效帧为浊音帧,后一有效帧均为清音帧;
此时可以预见,周期信号在丢包期间不断衰减。从人声发声的物理模型来看,这种信号的衰减可以表现基音周期的缓慢变长或者是基音频率的缓慢下降。基于上述原理,当前语音帧的基音周期可以通过前一有效帧的基音周期外推递增来获得。当前语音帧第k子帧的基音周期的估算方法如下:
pitch[k]=last_pitch+lossCnt*subFrameCount+k (5)
其中,公式(5)中参数的含义可参考上述步骤中的诠释,在获取到当前语音帧所有子帧的基音周期可确定当前语音帧的基音周期,具体过程可参考上述步骤,此处不再赘述。
情况三:前一有效帧为清音帧,后一有效帧均为浊音帧;
此时可以预见,周期信号在丢包期间逐渐形成。基于情况一中的原理,可以通过后一有效帧的基音周期外推递增来模拟周期信号的形成,以获得当前语音帧的基音周期。当前语音帧第k子帧的基音周期的估算方法如下:pitch[subFrameCount-k-1]=next_pitch-lossCnt*subFrameCount-k (6)
其中,公式(6)中参数的含义可参考上述步骤中的诠释,在获取到当前语音帧所有子帧的基音周期可确定当前语音帧的基音周期,具体过程可参考上述步骤,此处不再赘述。
情况四:前一有效帧和后一有效帧均为清音帧。
此时可确定当前语音帧为清音帧,由于清音帧并非周期性信号,因此当前语音帧没有基音周期。
本实施例继续以确定当前语音帧的增益参数为例,对根据前一有效帧或后一有效帧的时序演进类参数确定当前语音帧的时序演进类参数进行解释说明。
具体实施时,本实施例以线性插值的方式确定增益参数,当然,在实际的环境中可以根据不同算法的复杂度,延时和效果来选择插值方法,本实施例对此不作具体限定。如当连续丢包的情况不是很严重的情况下,可以选择多项式插值来获得丢失帧的增益,但这类方法要取得较好效果,需要预先多对一些抖动缓冲器里的后续帧进行解码,从而会增加解码延时。本实施例根据具体应用场景,提供了一种线性插值算法,具体公式如下:
gain[k]=last_gain+gIncr*(k+lossCnt*subFrameCount+1) (8)
在公式(7)中,next_gain为前一有效帧的增益参数,last_gain下一有效帧的增益参数,演进增量gIncr类似上述步骤中的基音周期的演进增量,将参数的具体数值代入公式(7)进行计算后,可确定演进增量gIncr的数值。
确定演进增量gIncr后,将参数的数值代入到公式(8)中计算,可确定当前语音帧的第k子帧的增益参数。
类似地,本实施例同样以线性插值的方式确定LSP系数,具体公式如下:
lsp[i]=(1-α)*last_lsp[i]+α*next_lsp[i],1={1,2,...,P} (10)
在公式(9)中,α为权重系数,本实施例通过抖动缓冲器传入的丢帧数lostFrameCount和到当前语音帧为止的总共丢帧数lossCnt来确定对前后帧进行线性插值的权重系数α,将参数的具体数值代入公式(9)进行计算后,可确定权重系数α的数值。
确定权重系数α后,将参数的数值代入到公式(10)中计算,可确定当前语音帧的第i阶的LSP系数,假设当前语音帧的LSP系数一共有P阶,按照上述方式进行计算,最终可确定当前语音帧所有阶的LSP系数。
405:获取前一有效帧和后一有效帧的非时序演进类参数,并根据前一有效帧和后一有效帧的二元判定类参数及非时序演进类参数确定当前语音帧的非时序演进类参数;
具体地,非时序演进类参数可以包括但不限于LTP(Long Term Prediction,长期预测)系数和激励信号等,本实施例对此不作具体限定。本实施例也不对确定当前语音帧的非时序演进类参数的确定方式作具体限定,包括但不限于:根据前一有效帧和后一有效帧的二元判定类参数确定信号类型后,按照如下四种情况根据前一有效帧或后一有效帧的非时序演进类参数确定当前语音帧的非时序演进类参数。
情况一:前一有效帧和后一有效帧均为浊音帧;
首先以LTP系数为例进行解释说明,若当前处于连续丢包中,或者当前语音帧的前一有效帧和后一有效帧的基音周期发生了突变,则可以推断当前语音帧的前一有效帧和后一有效帧的LTP系数可能出现了显著的变化。其中,在判断连续丢包时,若连续丢包的数量大于丢包阈值时,则此时说明当前语音帧的前一有效帧和后一有效帧的LTP系数可能出现了显著的变化。丢包阈值可以根据实际情况进行设定,本实施例对此不作具体限定。另一方面,判断当前语音帧的前一有效帧和后一有效帧的基音周期是否发生了突变的方式可参考上述步骤,此处不再赘述。基于上述原理,分为如下两种情形进行解释说明:
第一种情形:当前并非处于连续丢包中且当前语音帧的前一有效帧和后一有效帧的基音周期并未发生突变;
此时可以确定当前语音帧的前一有效帧和后一有效帧的能量值,如前一有效帧的能量值为Last_Energy,后一有效帧的能量值为Next_Energy,将前一有效帧的能量值除以后一有效帧的能量值可确定缩放因子β。若确定当前语音帧为前半部分的丢失帧,则将前一有效帧的LTP系数乘以缩放因子β即可得到当前语音帧的LTP系数。若确定当前语音帧为后半部分的丢失帧,则将后一有效帧的LTP系数乘以缩放因子β即可得到当前语音帧的LTP系数。当然,实际情况中还可以采用其它方式确定当前语音帧的LTP系数,本实施例对此不作具体限定。
第二种情形:当前处于连续丢包中或者当前语音帧的前一有效帧和后一有效帧的基音周期发生了突变。
由于此时当前语音帧的前一有效帧和后一有效帧的LTP系数可能出现了显著的变化,因此若确定当前语音帧为前半部分的丢失帧,则将前一有效帧的LTP系数作为当前语音帧的LTP系数。若确定当前语音帧为前半部分的丢失帧,则将前一有效帧的LTP系数作为当前语音帧的LTP系数。若确定当前语音帧为后半部分的丢失帧,则将后一有效帧的LTP系数作为当前语音帧的LTP系数。当然实际情况中还可以采用其它方式确定当前语音帧的LTP系数,本实施例对此不作具体限定。
情况二:前一有效帧为浊音帧,后一有效帧均为清音帧;
由于前一有效帧为浊音帧,后一有效帧为清音帧。此时可以预见,周期信号在丢包期间不断衰减。因此,当前丢失帧的LTP系数由前一有效帧LTP系数统一乘以衰减因子系数获得,其中衰减因子可以用前一有效帧和后一有效帧的能量比得到,当然还可以采用其它方式计算衰减因子,本实施例对此不作具体限定。
情况三:前一有效帧为清音帧,后一有效帧均为浊音帧;
由于前一有效帧为清音帧,后一有效帧为浊音帧。此时可以预见,周期信号在丢包期间不断增强。因此,当前丢失帧的LTP系数由后一有效帧LTP系数统一乘以衰减因子系数获得,本实施例不对衰减因子的确定方式作具体限定。
情况四:前一有效帧和后一有效帧均为清音帧。
由于前一有效帧和后一有效帧均为清音帧,因此当前语音帧也为清音帧,此时可判定丢包期间没有周期信号,不需要确定当前语音帧的LTP系数。
本实施例继续以激励信号为例,对非时序演进类参数的后处理进行解释说明。需要说明的是,由于激励信号通常是语音信号经过长短时预测和后处理(如噪声整形等)之后剩下的随机性很强的残差信号。但有时候其中还是会蕴含一些语音模型无法分解的非白信息。因此,仅用白噪声代替并不能取得很好的合成质量。同时这类参数也不具备时序演进性,所以不适合做插值。基于上述原理,本实施例提供了一种确定当前语音帧激励信号的方法,具体阐释如下:
若确定当前语音帧为前半部分的丢失帧,则将前一有效帧的激励信号作为当前语音帧的激励信号。若确定当前语音帧为后半部分的丢失帧,则将后一有效帧的激励信号作为当前语音帧的激励信号。
406:根据当前语音帧的二元判定类参数、时序演进类参数和非时序演进类参数对当前语音帧进行解码。
具体地,通过上述各个步骤获取到当前语音帧的二元判定类参数、时序演进类参数和非时序演进类参数后,如图5所示的解码器结构,将当前语音帧的二元判定类参数、时序演进类参数和非帧时序演进类参数输送到解码器后,由解码器进行解码。其中解码算法可以根据编码算法来确定,本实施例对此不作具体限定,解码器解码完毕后,即可得到当前语音帧的语音信号。
407:获取当前语音帧的前一有效帧的参数,根据前一有效帧的参数进行外推来获取当前语音帧的参数,并根据当前语音帧的参数对当前语音帧进行解码。
具体地,由于判断出当前语音帧没有后一有效帧,因此获取前一有效帧的参数后,获取当前语音帧的二元判定类参数时,可以包括但不限于两种情况:第一种情况为根据前一有效帧的二元判定类参数确定前一有效帧为清音帧,则此时可以外推判定当前语音帧的信号类型为清音帧。第二种情况为确定前一有效帧为浊音帧,则此时可以获取前一有效帧的基音周期和增益参数,让前一有效帧的语音信号按照某种速率慢慢衰减,使得基音周期慢慢变长,增益参数慢慢变小。当到达当前语音帧的时候,若当前语音帧的基音周期大于基音周期预设阈值或者增益参数小于增益参数预设阈值,则此时可确定当前语音帧的信号类型为清音帧。反之,则确定当前语音帧的信号类型为浊音帧。
其中,前一有效帧的语音信号的减缓速率可以根据历史经验进行设置,当然还可以采用其它确定方法,本实施例对此不作具体限定。基音周期和增益参数的预设阈值同样可以根据经验进行设置,本实施例也不对基音周期和增益参数的预设阈值的设置方法作具体限定。
进一步地,本实施例也不对确定当前语音帧的时序演进类参数的确定方式作具体限定,包括但不限于:根据前一有效帧的信号类型确定当前语音帧的时序演进类参数可分为如下两种情况,具体阐释如下:
情况一:前一有效帧为清音帧;
此时可确定当前语音帧为清音帧,由于清音帧并非周期性信号,因此,当前语音帧没有基音周期,本实施例以确定当前语音帧的增益参数为例,对根据前一有效帧的增益参数确定当前语音帧的增益参数进行解释说明。
将清音帧的语音信号按照一定速率进行衰减,增益参数对应缓慢减小,当到达当前语音帧的时候,可将此时的增益参数作为当前语音帧的增益参数。
其中,前一有效帧的语音信号的减缓速率可以根据历史经验进行设置,当然还可以采用其它确定方法,本实施例对此不作具体限定。
情况二:前一有效帧为浊音帧。
此时可将前一有效帧的语音信号按照一定速率进行衰减,基音周期缓慢增加,增益参数对应缓慢减小,频带拓展对应LSP系数的共振峰逐渐减弱,当到达当前语音帧的时候,按照上述步骤403中的判定方式,若当前语音帧依然为浊音帧,则可将此时的基音周期、增益参数和LSP系数等参数作为当前语音帧的时序演进类参数。
进一步地,根据前一有效帧的二元判定类参数与前一有效帧的非时序演进类参数确定当前语音帧的非时序演进类参数。
具体地,若根据当前语音帧的二元判定类参数确定当前语音帧为浊音帧,以非时序演进类参数为LTP系数为例:获取前一有效帧的LTP系数,将前一有效帧的LTP系数乘以缩放因子作为当前语音帧LTP系数。其中,缩放因子可以根据经验得到,并且逐帧减弱,本实施例对此不作具体限定。若当前语音帧为清音帧,以非时序演进类参数为激励信号为例,当前语音帧的激励信号可以选取前一有效帧中能量较小的部分,本实施例对此不作具体限定。
根据当前语音帧的二元判定类参数、时序演进类参数和非帧时序演进类参数对当前语音帧进行解码,获取当前语音帧的语音信号的过程可参考上述步骤406的相关内容,此处不再赘述。
本实施例提供的方法,在确定待解码的当前语音帧丢失时,通过获取当前语音帧的前一有效帧的参数或者前一有效帧和后一有效帧的参数,按照具体情况来确定当前语音帧的参数,然后根据当前语音帧的参数对丢失语音帧进行正常解码,由于模拟了丢包情况下解码器的正常工作,因此保持了解码的连续性,从而当语音包在传输过程中出现丢包现象时,可以根据确定的丢失帧的参数进行解码,进而改善解码后的语音质量。
实施例三
本发明实施例提供了一种参数域的丢包隐藏装置,该装置用于执行实施例一或实施例二提供的参数域的丢包隐藏方法。参见图6,该装置包括:
确定模块601,用于确定待解码的当前语音帧是否丢失;
前帧获取模块602,用于当前语音帧丢失时,获取当前语音帧的前一有效帧的参数;
当前帧确定模块603,用于根据前一有效帧的参数确定当前语音帧的参数;
解码模块604,用于根据当前语音帧的参数对当前语音帧进行解码。
作为一种优选实施例,参见图7,该语音解码装置,还包括:
判断模块605,用于判断是否缓冲有当前语音帧的后一有效帧;
后帧获取模块606,用于当缓冲有后一有效帧时,获取后一有效帧的参数;
当前帧确定模块603,用于根据前一有效帧的参数及后一有效帧的参数确定当前语音帧的参数。
作为一种优选实施例,前一有效帧的参数和后一有效帧的参数包括二元判定类参数;二元判定类参数用于对信号类型进行判定,信号类型包括清音和浊音两种类型;
当前帧确定模块603,用于当前一有效帧的二元判定类参数和后一有效帧的二元判定类参数中有一个二元判定类参数判定信号类型为浊音帧时,确定当前语音帧的信号类型为浊音帧;
作为一种优选实施例,当前帧确定模块603,用于当前一有效帧的二元判定类参数和后一有效帧的二元判定类参数中有一个二元判定类参数均判定信号类型为清音帧时,确定当前语音帧的信号类型为清音帧。
或者,当前一有效帧的二元判定类参数和后一有效帧的二元判定类参数中有一个二元判定类参数均判定信号类型为清音帧时,确定当前语音帧的信号类型为清音帧。
作为一种优选实施例,前一有效帧的参数和后一有效帧的参数还包括时序演进类参数,时序演进类参数至少包括基音周期;
当前帧确定模块603,还用于根据前一有效帧及后一有效帧的二元判定类参数及时序演进类参数确定当前语音帧的时序演进类参数。
作为一种优选实施例,当前帧确定模块603,用于当根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧及后一有效帧的信号类型均为浊音帧,且根据前一有效帧及后一有效帧的时序演进类参数确定前一有效帧及后一有效帧的基音周期未突变时,根据前一有效帧及后一有效帧的基音周期进行线性插值,得到当前语音帧的基音周期。
作为一种优选实施例,当前帧确定模块603,用于当根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧及后一有效帧的信号类型均为浊音帧,且根据前一有效帧及后一有效帧的时序演进类参数确定前一有效帧及后一有效帧的基音周期有突变时,如果当前语音帧位于所有丢失语音帧的前半部分,确定当前有效帧的基音周期与前一有效帧的基音周期一致,如果当前语音帧位于所有丢失语音帧的后半部分,确定当前有效帧的基音周期与后一有效帧的基音周期一致。
作为一种优选实施例,当前帧确定模块603,用于当根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧的信号类型为浊音帧,后一有效帧的信号类型为清音帧时,根据前一有效帧的基音周期外推获得当前语音帧的基音周期。
作为一种优选实施例,当前帧确定模块603,用于当根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧的信号类型为清音帧,后一有效帧的信号类型为浊音帧时,根据后一有效帧的基音周期外推获得当前语音帧的基音周期。
作为一种优选实施例,前一有效帧的参数和后一有效帧的参数还包括非时序演进类参数,非时序演进类参数至少包括长期预测LTP系数;
当前帧确定模块603,还用于根据前一有效帧及后一有效帧的二元判定类参数及非时序演进类参数确定当前语音帧的非时序演进类参数。
作为一种优选实施例,当前帧确定模块603,用于当根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧及后一有效帧的信号类型均为浊音帧,并根据前一有效帧及后一有效帧的时序演进类参数确定前一有效帧及后一有效帧的基音周期未突变,且丢包数量小于丢包阈值时,如果当前有效帧位于所有丢失语音帧的前半部分,根据前一有效帧的LTP系数乘以缩放因子获得当前语音帧的LTP系数,如果当前有效帧位于所有丢失语音帧的后半部分,根据后一有效帧的LTP系数乘以缩放因子获得当前语音帧的LTP系数。
作为一种优选实施例,当前帧确定模块603,用于当根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧及后一有效帧的信号类型均为浊音帧,并根据前一有效帧及后一有效帧的时序演进类参数确定前一有效帧及后一有效帧的基音周期发生突变或丢包数量大于丢包阈值时,如果当前有效帧位于所有丢失语音帧的前半部分,确定当前语音帧的LTP系数与前一有效帧的LTP系数一致,如果当前有效帧位于所有丢失语音帧的后半部分,确定当前语音帧的LTP系数与后一有效帧的LTP系数一致。
作为一种优选实施例,当前帧确定模块603,用于当根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧的信号类型为浊音帧,后一有效帧的信号类型为清音帧时,根据前一有效帧的LTP系数乘以衰减因子获得当前语音帧的LTP系数。
作为一种优选实施例,当前帧确定模块603,用于当根据前一有效帧及后一有效帧的二元判定类参数确定前一有效帧的信号类型为清音帧,后一有效帧的信号类型为浊音帧时,根据后一有效帧的LTP系数乘以衰减因子获得当前语音帧的LTP系数。
本实施例提供的装置,在确定待解码的当前语音帧丢失时,通过获取当前语音帧的前一有效帧的参数或者前一有效帧和后一有效帧的参数,按照具体情况来确定当前语音帧的参数,然后根据当前语音帧的参数对丢失语音帧进行正常解码,由于模拟了丢包情况下解码器的正常工作,因此保持了解码的连续性,从而当语音包在传输过程中出现丢包现象时,可以根据确定的丢失帧的参数进行解码,进而改善解码后的语音质量。
需要说明的是:上述实施例提供的参数域的丢包隐藏装置在进行丢包隐藏时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的参数域的丢包隐藏装置与参数域的丢包隐藏方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。