背景技术
最初,IP网络是为传输包含较大的包且不需要实时可靠传送的数据流而设计的。而现在IP网络中也传输语音数据。语音的传输需要实时可靠地传送较小的语音包,当一个语音包在传输过程中被丢弃时,通常没有时间重新传送该被丢弃的包。另外,当一个语音包经过了一段较长的路由而在需要播放时不能及时到达时,这个包已经失去了存在的意义。因此在基于IP网络协议的语音(VoIP,Voice over Internet Protocol)系统中,语音包不能及时到达或不能到达时,都被认为该语音包丢失了。
网络传输过程中的丢包是在网络传输语音数据时服务质量下降的主要原因。而丢包隐藏技术是指通过合成的数据包补偿丢失的包,来减小传输过程中的丢包对语音质量的影响。如果没有有效的语音丢包隐藏技术,即使是设计和管理得最好的IP网络也不能提供长话级品质的通信。而设计良好的解决丢包问题的技术,能很大程度上提高语音传输的质量。因此在现有技术中,不同的机制被用来隐藏由于丢包引起的影响。例如G.711协议的附录1中记录了以基音波形替代为基础的丢包隐藏方法。
基音波形替代是一种基于收端的处理技术,它根据语音的特点对丢失的数据帧进行补偿。下面介绍基音波形替代技术的原理、实现过程以及存在的缺点。
在语音信号中,一般清音从波形上看是杂乱无章的,而浊音在波形上则表 现出周期性。基音波形替代的主要原理是:首先,利用丢失帧前一帧的信息,即波形缺口位置的前一帧的信息来估计出基音周期P,然后,用缺口位置之前的,长度为P的一段波形来补偿波形的缺口。图1是现有技术中利用基音波形补偿丢失帧的示意图。如图1所示,帧2为丢失的音频帧,帧长为L,帧1是帧2之前的音频帧,帧3是帧2之后的音频帧,且帧1和帧2都是完好的数据帧。假定已经检测出丢失帧前一帧,即帧2对应的基音周期为P,在图1中用区间1表示,那么根据浊音的周期性特点,就可以把丢失帧的前一帧的最后一个基音周期的数据,也就是区间1对应的数据复制到丢失帧,以重建丢失帧2的信号。如果一个基音周期的数据不足以把丢失帧的空缺填满,即基音周期P<丢失帧的帧长L,则重复复制区间1的数据到丢失帧的空缺进行填充。例如在图1中,L=2P,因此在复制区间1中的数据到区间2之后,还要再次复制区间1中的数据到区间3,即需要两个基音周期才能填满丢失帧。
在现有技术中一般使用自相关分析的方法来获得基音波形替代方法中所使用的基音周期P。自相关分析是一种常用的语音时域波形分析方法,由相关函数来定义。相关函数可用来测定信号间的时域相似性,当进行相关的两个信号完全不同时,相关函数的值接近于零;当进行相关的两个信号的波形相同时,则会在超前或滞后处出现峰值。因此,自相关函数可用于研究信号本身,如波形的同步性、周期性等等。
图2是现有技术中利用自相关分析来计算基音周期的方法的示意图。在图2中,长度为35ms的语音数据是历史缓冲区(HB)中的一段数据,即丢失帧之前的一段数据。TW是模版窗,该窗的尾部与HB中数据的尾部对齐,R对应TW在HB中的起始位置。由于最大可能基音周期为15ms,因此通常取TW的长度W为20ms。SW是滑动窗,其窗长与模版窗TW的长度相同,也为20ms,TW的位置保持不变,而SW的起始位置L从HB的起始位置1点开始滑动到Q点,从HB的1点到Q点的长度等于最大可能基音周期减去最小可能基音周期。在SW的滑动过程中计算SW中的采样点和TW中的采样点的自相关值,以搜索最佳匹配点,在最佳匹配点处SW中的采样点信号与TW中的采样点信 号的自相关值最大。则最佳匹配点和TW的起始位置R之间的距离P即为所估计的基音周期。
在上述过程中,用x(i)表示HB中的第i个采样点,且HB中采样点个数,即35ms数据中的采样点个数为LEN,SW和TW中采样点个数,即20ms数据中的采样点个数为W,则SW中的采样点信号与TW中的采样点信号的相关函数CR如公式(1)所示:
其中,SW和TW分别表示滑动窗和模板窗中的采样点序列,k为与滑动窗SW的起始位置L对应的HB中的采样点的序号,也就是SW向右滑动的距离。在现有技术标准中用k点对应的SW与TW的自相关值与滑动窗SW的能量比值作为匹配值corr(k),如公式(2)所示:
最佳匹配点BK是在搜索过程中于匹配值的最大值BC(Best Corr)对应的k点的位置,BC如公式(3)所示:
BC=max{corr(k)|1≤k≤MaxPitch-MinPitch} (3)
其中,MaxPitch是最大可能基音周期长度数据中的采样点个数,MinPitch是最小可能基音周期长度数据中的采样点个数。
计算出最佳匹配点BK后,即可估计出基音周期P,如公式(4)所示:
P=MaxPitch-BK+1 (4)
为了减少计算量,在现有技术中给出了先隔点抽样计算匹配值,找出一个粗糙的匹配点,然后在匹配点附近逐点计算匹配值,以进一步精确最佳匹配点的位置的方法。
得到HB中数据的基音周期P后,如果直接用HB中最后基音周期长度的数据对丢失帧缺口进行重复填充,则会在两个基音周期数据的拼接处产生波形的突变。为了保证拼接处的平滑,在用HB中的最后一个基音周期的数据对丢失帧进行填充之前,要对HB中最后1/4基音周期的数据进行平滑处理。图3是现有技术中对历史缓冲区中最后1/4基音周期的数据进行平滑处理的示意图。如图3所示,将HB中最后一个基音周期之前的四分之一基音周期数据乘以上升窗,将HB最后四分之一基音周期数据乘以下降窗,并将上述两个1/4基音周期的数据做叠加,然后用叠加得到的1/4基音周期数据替换掉HB中最后1/4基音周期中的内容,以保证HB中的前帧原始信号和填充的丢失帧信号之间的平滑过渡。
对HB中的最后一个基音周期的数据进行图3所示的平滑处理后,对丢失帧进行补偿。图4是现有技术中用平滑后的基音周期数据补偿丢失帧的示意图。如图4所示,信号“Input”是丢失了两个帧的音频信号,且丢失帧之前的1/4基音周期数据,即历史缓冲区HB中的最后1/4基音周期数据已经用图3所示的方法进行了平滑。用HB中最后一个基音周期的数据填满第一个丢失帧后,需要在第一个丢失帧的尾部延伸1/4基音周期的长度的数据,如信号“After10ms”所示。
在用HB中的最后一个基音周期数据填充第一个丢失帧时还需要保存一个和基音周期相关的数据的偏移量OFFSET,它将用在有连续丢包的情况下。假定基音周期的长度为P,完整一帧对应的长度为L,则填满一帧后,OFFSET的值为:OFFSET=L%P。
在图4中,将第一个丢失帧填满后,将历史缓冲区HB尾部的两个基音周期的数据放入到一个缓冲区PB中,然后在HB尾部向后二又四分之一基音周期处开始取四分之一基音周期的数据和缓冲区PB最后四分之一基音周期的数据做叠加,然后用这两个基音周期长度的数据更新缓冲区PB中的数据。然后再在缓冲区PB的OFFSET处开始,取四分之一基音周期长度的 数据并乘上一个上升窗,将填充第一个数据包时延伸的四分之一基音周期的数据乘上一个下降窗,两者做叠加处理,并将叠加处理后的数据填充到第二帧开始的四分之一基音周期。最后,从缓冲区PB的OFFSET+四分之一基音周期处继续取数据填充丢失的第二帧剩余的空间,并更新OFFSET的值:
OFFSET=(OFFSET+L)%P
最后,还需要保证第2个丢失帧和其下一帧的波形的平滑过渡,从缓冲区PB的OFFSET处开始取四分之一基音周期加上其随后的4ms数据并乘上一个下降窗,和下一帧开始的四分之一基音周期加上4ms的数据乘上一个上升窗进行叠加,并替换下一帧开始的四分之一基音周期加上4ms的数据,就得到了经过补偿后的音频信号,如图4中的信号“Concealed”所示,信号“Original”是原始信号。
图4给出了现有技术中填充两个丢失帧的过程,如果连续丢失了3个数据帧,仍然按照填充第二个丢失帧的方法填充第三个丢失帧。并且在现有技术中,在连续丢帧的情况下,需要从第二个丢失帧开始进行线性的能量衰减,其中每10ms衰减20%。当丢失帧的数据达到60ms后,就将丢失帧的数据全部置为0。
但是在上述利用基音波形补偿丢失帧的方法中存在如下的缺点:
1)采用自相关分析的方法估计出的浊音基音周期P不够准确。利用图2所示的方法查找最佳匹配点时,只查找一个最佳的匹配点,没有考虑到倍频的问题,因此可能会估计出一个错误的基音周期,则用错误的基音周期数据对丢失帧的数据进行补偿时,会影响到丢失帧合成的质量。另外,估计基音周期的初衷本是要获得最接近丢失帧处的数据的基音周期,但在使用图2所示的自相关方法计算基音周期的时,却需要使用丢失帧之前至少22.5ms的采样数据,因此,在计算距离丢失帧起始处最近一段数据的基音周期时,会产生一定的误差,使用有误差的基音数据填充丢失帧的数据时,就使得拼接处的相位发生突变。
2)在现有技术中只使用丢失帧之前的数据,即历史数据进行填充。由 于音频信号中的基音周期也是逐渐变化的,因此距离丢失帧越远的数据与丢失帧的相关性越弱,只用丢失帧之前的数据对丢失帧进行补偿,有可能在丢失帧和其之后的帧相连的地方发生相位不连续的现象。
3)当丢失帧发生在有语音渐变的地方时,只用丢失帧的前一基音周期数据对丢失帧数据进行恢复,则会发生幅度不连续的现象。
发明内容
有鉴于此,本发明实施例提供了一种估计基音周期的方法,该方法能够消除估计基音周期时存在的倍频问题。
本发明实施例提供了一种估计基音周期的装置,该装置能够消除估计基音周期时存在的倍频问题。
本发明实施例还提供了一种对基音周期进行微调的方法,该方法能够减小估计基音周期的误差。
本发明实施例还提供了一种对基音周期进行微调的装置,该装置能够减小估计基音周期的误差。
本发明实施例提供了一种实现丢包隐藏的方法,该方法增强了恢复的丢失帧数据与丢失帧之后的数据之间的相关性。
本发明实施例提供了一种实现丢包隐藏的装置,该装置增强了恢复的丢失帧数据与丢失帧之后的数据之间的相关性。
为达到上述目的,本发明的技术方案具体是这样实现的:
本发明实施例公开了一种估计基音周期的方法,该方法包括以下步骤:
获取已知语音数据的初始基音周期;
从初始基音周期所对应频率的一个以上的大于1的整数倍频率所分别对应的基音周期中,选择所对应频率小于或等于最小可能基音周期所对应频率的基音周期作为候选基因周期,并从初始基因周期和候选基音周期中选择一个基因周期作为所述已知语音数据的最终估计基音周期。
本发明实施例公开了一种估计基音周期的装置,该装置包括:初始基音 周期获取模块和选择模块,其中,
初始基音周期获取模块,用于获取已知语音数据的初始基音周期,并发送给选择模块;
选择模块,从初始基音周期所对应频率的一个以上的大于1的整数倍频率所分别对应的基音周期中,选择所对应频率小于或等于最小可能基音周期所对应频率的基音周期作为候选基因周期,并从初始基因周期和候选基音周期中选择一个基因周期作为所述已知语音数据的最终估计基音周期。
本发明实施例公开了一种对基音周期进行微调的方法,该方法还包括:
获取丢失数据之前或丢失数据之后的已知数据的初始基音周期;
在所述已知数据靠近丢失数据的一端,设置长度为预设值的模板窗;
设置长度与模板窗长度相同的滑动窗,并使滑动窗靠近丢失数据的端点在预设点周围的预设范围内滑动,所述预设点是已知数据中与模板窗靠近丢失数据的端点距离初始基音周期长度的点;
在所述滑动窗所能滑动的预设点周围的预设范围内,计算模板窗中的数据与滑动窗中数据的匹配值,并从中查找出最佳的匹配值,并将具有最佳匹配值时的模板窗与滑动窗的对应端点之间的距离作为微调后的基音周期。
本发明实施例公开了一种对基音周期进行微调的装置,该装置包括:初始基音周期获取模块,设置模块和计算模块,其中,
初始基音周期获取模块,用于获取丢失数据之前或丢失数据之后的已知数据获取初始基音周期,并发送给设置模块;
设置模块,用于接收初始基音周期获取模块发送的初始基音周期,并在所述已知数据靠近丢失数据的一端,设置长度为预设值的模板窗,设置长度与模板窗长度相同的滑动窗,并使滑动窗靠近丢失数据的端点在预设点周围的预设范围内滑动;所述预设点是已知数据中与模板窗靠近丢失数据的端点距离初始基音周期长度的点;
计算模块,用于在所述滑动窗所能滑动的预设点周围的预设范围内,计算模板窗中的数据与滑动窗中数据的匹配值,并从中查找出最佳匹配值,并将具有最佳匹配值时的模板窗与滑动窗的对应端点之间的距离作为微调后的基音周期。
本发明实施例公开了一种实现丢包隐藏的方法,该方法包括:
设置长度与丢失数据长度相等的丢失帧主缓冲区和丢失帧临时缓冲区;
利用丢失数据之前的已知数据中的最后一个基音周期数据,填充丢失帧主缓冲区;
在所述丢失数据之后的已知数据的长度大于或等于预设值时,利用丢失数据之后的已知数据中的第一个基音周期数据,填充丢失帧临时缓冲区;否则,利用丢失数据之前的已知数据中的最后一个基音周期数据,填充丢失帧临时缓冲区;
对丢失帧主缓冲区和丢失帧临时缓冲区中的数据进行叠加处理,并用所述叠加处理后的数据补偿丢失帧。
本发明实施例公开了一种实现丢包隐藏的装置,该装置包括:主处理模块、丢失帧主缓冲区和丢失帧临时缓冲区,其中,
主处理模块,用于利用丢失数据之前的已知数据中的最后一个基音周期数据,填充丢失帧主缓冲区;还用于判断所述丢失数据之后的已知数据的长度是否大于或等于预设值,是则,所述主处理模块还用于并利用丢失数据之后的已知数据中的第一个基音周期数据,填充丢失帧临时缓冲区;否则,利用丢失数据之前的已知数据中的一个基音周期数据,填充丢失帧临时缓冲区;并将丢失帧主缓冲区和丢失帧临时缓冲区中的数据进行叠加处理后,用所述叠加处理后的数据补偿丢失帧;
丢失帧主缓冲区,用于存储主处理模块所填充的数据,其长度与丢失数据长度相等;
丢失帧临时缓冲区,用于存储主处理模块所填充的数据,其长度与丢失数据长度相等。
由上述技术方案可见,本发明实施例中,通过从初始基音周期所对应频率的一个以上的大于1的整数倍频率所分别对应的基音周期中,选择所对应 频率小于或等于最小可能基音周期所对应频率的基音周期作为候选基因周期,并从初始基因周期和候选基音周期中选择一个基因周期作为所述已知语音数据的最终估计基音周期的技术方案,能够消除估计基音周期时存在的倍频问题。本发明实施例中,通过在与初始基音周期对应的匹配点附近查找最佳匹配点,并根据最佳匹配点的位置对估计的初始基音周期进行微调的技术方案,减小了估计基音周期的误差。本发明实施例中,利用历史数据中的最后一个基音周期数据,填充丢失帧主缓冲区,在所述丢失数据之后的已知数据的长度大于或等于预设值时,利用当前数据中的第一个基音周期数据,否则,利用历史数据中的最后一个基音周期数据,填充丢失帧临时缓冲区,对丢失帧主缓冲区和丢失帧临时缓冲区中的数据进行叠加处理,并用所述叠加处理后的数据补偿丢失帧的技术方案增强了恢复的丢失帧数据与丢失帧之后的数据之间的相关性,进而改善了恢复的丢失帧数据与丢失帧之后的数据之间相位的连续性。
具体实施方式
本发明实施例主要通过对现有的丢包隐藏技术进行改进,以减小现有技术对丢失帧进行补偿时存在的基音周期估计误差,相位不连续,幅度不连续等问题。
首先描述本发明对现有的基音周期估计方法进行改进的实施例。
前面提到过浊音是具有周期性的,且周期为P,即基音周期为P,因此在图2中,HB中的采样点数据x的周期性可用公式(5)表示:
x(m)≈x(m+P) (5)
并且由于周期函数的自相关函数与该周期函数具有相同的周期特性,因此公式(1)所示的相关函数的周期性可用公式(6)表示:
CR(k)=CR(k+P) (6)
因此,通过图2所示的方法查找到最佳匹配点有可能是干扰倍频点。图5是本发明实施例中倍频点的示意图。如图5所示,通过图2所示的自相关分析方法得到最佳匹配点为k3,但图5中的这段波形的真实基音周期的最佳匹配点为k1,即所查找到的最佳匹配点k3对应的频率有是k1处所对应频率的1/N, 其中N是大于1的整数。因此,此时所估计的k3处所对应的基音周期为k1处所对应的基音周期的N倍,即为真实基音周期的整数倍。针对该问题本发明实施例给出了如下的解决方案。
图6是本发明实施例一种估计基音周期的方法的流程图。如图6所示,包括以下步骤:
步骤601,获取已知语音数据的初始基音周期。
在本步骤中,可以利用图2所示的自相关分析方法估计出一个基音周期值,并将该基音周期值设置为初始基音周期。
步骤602,从初始基音周期所对应频率的一个以上的大于1的整数倍频率所分别对应的基音周期中,选择所对应频率小于或等于最小可能基音周期所对应频率的基音周期作为候选基因周期,并从初始基因周期和候选基音周期中选择一个基因周期作为所述已知语音数据的最终估计基音周期。
在本步骤中,将初始基音周期对应频率的一个以上的整数倍频率所分别对应的基音周期作为候选基因周期的实现过程可以是:查找出所有大于最小可能基音周期的初始基音周期的因数,作为候选基音周期。
例如,当初始基音周期为12ms,而最小可能基音周期为2.5ms时,所有大于2.5ms的12ms的因数为6ms、4ms和3ms。
本步骤中,可以根据与初始基音周期以及各个候选基音周期对应的匹配值来进行选择。
通过图6所示的方案可以消除现有技术估计基音周期时存在的倍频问题。
图7是本发明实现图6所示方法的一个具体实施例的流程图。如图7所示,包括以下步骤:
步骤701,利用图2所示的自相关分析方法,查找出最佳匹配点,获得与最佳匹配点对应的基音周期P0,初始化最佳基音周期BP,令BP=P0,并记录相应的匹配值BC。
本步骤中,匹配值BC如公式(3)所示。
步骤702,初始化N,令N=1。
本步骤中,N表示最佳基音周期发生在P0点对应频率的N倍处,当N=1,则表示最佳基音周期BP=P0。
步骤703,令N=N+1,P=P0/N,即设真实的基音周期P对应的频率为P0对应的频率的N倍。
步骤704,判断步骤703中所得到的P是否大于或等于最小可能基音周期,是则执行步骤705,否则结束本流程。
本步骤中,检测P是否大于等于最小可能基音周期。通常最小可能基音周期取2.5ms,在8kHz的采样速率下,对应20个采样点。如果P小于最小可能基音周期,则当前的BP值即为所要估计的最佳基音周期,结束本流程。
步骤705,获取与P对应的匹配值BC’。
步骤706,判断BC’是否满足预设的条件,是则执行步骤707,否则回到步骤703。
在本步骤中,预设条件可以为BC’≥a×BC,其中a是一个常数,其经验值可取0.85。
步骤707,更新最佳基音周期BP,令BP=P,并执行步骤703。
通过上述流程,就可以查找出所有大于最小可能基音周期的初始基音周期的因数,并逐个进行比较选择出一个最佳的基音周期BP。但在上述过程中,可能有两个以上的因数的匹配值都满足大于或等于0.85BC的条件,在图7所示的流程中最终选择出来的是倍频最大的因数,即值最小的因数。当然也可以将图7所示的流程设置为:当有一个因数的匹配值满足条件时,便认为该因数是最佳基音周期,结束流程。
在步骤707中,较佳地,也可以用当前的BC’更新BC,即令BC=BC’,这样每次进行比较的时候,不是一直与初始基音周期P0相比较,而是与上一次的比较过程中选择出来的较佳值进行比较。
更进一步的,考虑到自相关方法本身存在的误差,在步骤703或步骤705中,可以先在P值附近的一定范围内选择一个匹配值最大的点P’,用P’代替P,对P进行修正,以减少误差带来的影响。其具体过程可以是:参照图 2,在与P对应的k点的附近进行搜索,找出匹配值BC最大的点k’,与k’对应的基音周期即为P’,8KHZ采样速率下,对k点附近的3个点进行搜索可以获得较好的效果。
图8是本发明实施例一种估计基音周期的装置的结构框图。如图8所示,该装置包括:初始基音周期获取模块801和选择模块802。
初始基音周期获取模块801,用于获取已知语音数据的初始基音周期,并发送给选择模块802。
选择模块802,从初始基音周期所对应频率的一个以上的大于1的整数倍频率所分别对应的基音周期中,选择所对应频率小于或等于最小可能基音周期所对应频率的基音周期作为候选基因周期,并从初始基因周期和候选基音周期中选择一个基因周期作为所述已知语音数据的最终估计基音周期。
在图8中选择模块802包括:计算模块803和比较804,其中,
计算模块803,用于分别计算出与初始基音周期和各个候选基音周期对应的匹配值,并发送给比较模块804;
比较模块804,用于对所接收到的与初始基音周期和各个候选基音周期对应的匹配值进行比较,从中选择出一个最佳匹配值,并将该最佳匹配值所对应的基音周期作为所述已知语音数据的最终估计基音周期。
图8中的选择模块802还可以进一步用于,对于每一个候选基音周期,在该候选基音周期所对应的匹配点周围的预设范围内进行搜索,查找出一个匹配值为最佳匹配值的匹配点,并用该匹配点对应的基音周期替换该候选基音周期;并从初始基音周期以及所述替换后的候选基音周期中选择一个基音周期作为所述已知语音数据的最终估计基音周期。
前面提到过估计基音周期的初衷本是要获得最接近丢失帧处的数据的基音周期,但在使用图2所示的自相关方法计算基音周期的时,却需要使用丢失帧之前至少22.5ms的采样数据,因此,在计算距离丢失帧起始处最近一段数据的基音周期时,会产生一定的误差。因此,接下结合图9和图10来描述本发明通过对已获得的基音周期进行微调来减小估计误差的技术方案。
图9是本发明实施例对丢失帧之前的数据的基音周期进行微调的示意图。在图9中,所示信号是历史缓冲区HB中音频信号。图10是本发明实施例一种对基音周期进行微调的方法的流程图。如图10所示,包括以下步骤:
步骤1001,获取丢失数据之前或丢失数据之后的已知数据的初始基音周期。
在本步骤中,获取HB中数据的初始基音周期P0。P0可以利用图2所示的自相关分析方法获取的基音周期,也可以是经过图6所示的方法进行消除倍频处理的基音周期,还可以是用其他方法获得的基音周期。
步骤1002,在所述已知数据靠近丢失数据的一端,设置长度为预设值的模板窗。
与本步骤对应,在图9中,从历史缓冲区HB的最后一个采样点开始向前取L个采样点数的一段数据作为模版窗TW。HB的长度为LEN,TW的起始点为ST,末尾点为ET,则有:ST=LEN-L+1
ET=LEN
在本步骤中,L的长度较佳地,取0.55×P0左右的值,但不少于0.25×P0。
步骤1003,设置长度与模板窗长度相同的滑动窗,并使滑动窗靠近丢失数据的端点在预设点周围的预设范围内滑动,所述预设点是已知数据中与模板窗靠近丢失数据的端点距离初始基音周期长度的点。
与本步骤对应,在图9中:在历史缓冲区HB中设置一个长度也为L的滑动窗SW,并使SW的末尾点在Z点附近的预设范围内滑动,Z点是距离TW的ET端点一个初始基音周期P0长度的点。SW的起始点为SS,末尾点为ES,Z点与HB的末尾点,也就是与TW的末尾点ET之间的距离为P0,即SS=ST-P0,ES在[Z-R,Z+R]的范围内滑动。
步骤1004,在滑动窗的滑动过程中,计算模板窗中的数据与滑动窗中数据的匹配值,并从中查找出最佳的匹配值,并将具有最佳匹配值时的模板窗与 滑动窗的对应端点之间的距离作为微调后的基音周期。。
在本步骤中,在SW的滑动过程中,计算SW与TW的匹配值,查找出其中的最佳匹配值,即查找出一个与TW最为相似的SW的位置,并将此时的TW与SW的对应端点之间的距离P1作为最终估计的基音周期。
计算TW与SW的匹配值时,可以采用自相关分析的方法,如采用公式(2)计算SW与TW的匹配值。为了减小计算的复杂度,也可以计算SW中采样点与TW中对应的采样点的幅度差值的绝对值的总和BMV,如公式(7)所示:
其中x(i)表示HB中的第i个数据。
用公式(7)进行计算时,匹配值与BMV成反比,因此查找最小的BMV,即BestBMV=min(BMV(i)),-R≤i≤R。
另外,在步骤1104中,作为一种优选的方案,建议先从中间位置i=0处开始,然后再向两侧进行搜索来查找最佳的匹配值。即首先计算i=0处BMV的值,并作为最初的BestBMV,然后再计算i=±1,i=±2,...,i=±R处对应的BMV值,并与BestBMV依次进行比较,如果小于BestBMV,则将BestBMV值更新为BMV值。
通过上述步骤可以估计出一个较为接近真实值的基音周期P1。
在估计丢失帧之后的数据的基音周期时,可以用上述方法对初始的有误差的基音周期进行微调,以达到减小误差的目的。
图11是本发明实施例对丢失帧之后的数据的基音周期进行微调的示意图。在图11中,首先利用丢失数据之后的一段已知数据获取初始基音周期P0。P0可以利用图2所示的自相关分析方法获取的基音周期,也可以是经过图6所示的方法进行消除倍频处理的基音周期,还可以是用其他方法获得的基音周期。在丢失数据之后的一段已知数据的长度不足以利用自相关分析等方法计算出其基音周期时,可用丢失数据之前的已知数据的基音周期代替 P0。然后在所述丢失数据之后的数据的起始位置开始向后取L个采样点数的一段数据作为模版窗TW。L的长度较佳地,取0.55×P0左右的值,但在所述丢失数据之后的已知数据的长度不够0.55×P0时,可以适当的减小L的长度,但较佳地,L不少于0.25×P0。设置长度与模板窗相同的滑动窗SW,并使滑动窗SW的起始端点在在Z点的预设范围[Z-R,Z+R]内滑动,Z点是距离TW的ST端点一个初始基音周期P0长度的点,SW的起始点为SS,末尾点为ES。在滑动窗SW的滑动过程中,计算模板窗TW中的数据与滑动窗SW中数据的匹配值,查找出其中的最佳匹配值,即查找出一个与TW最为相似的SW的位置,并将此时的TW与SW的对应端点之间的距离P1作为最终估计的基音周期。计算TW与SW的匹配值时,可以采用自相关分析的方法,如采用公式(2)计算SW与TW的匹配值。为了减小计算的复杂度,也可以计算SW中采样点与TW中对应的采样点的幅度差值的绝对值的总和BMV,如公式(7)所示,此时的最佳匹配值对应BMV的最小值。
在图11所示的实施例中,对丢失帧之后的数据的基音周期进行微调时,较佳地,窗的长度L取大于0.25×P0,因此从图11可以看出,较佳地,在所获得的丢失帧之后的数据的长度大于或等于1.25×P0时才进行基音周期的微调。
图12是本发明实施例对基音周期进行微调的装置的结构框图。如图12所示,该装置包括:初始基音周期获取模块1201,设置模块1202和计算模块1203,其中,
初始基音周期获取模块1201,用于获取丢失数据之前或丢失数据之后的已知数据获取初始基音周期,并发送给设置模块1202;
设置模块1202,用于接收初始基音周期获取模块1201发送的初始基音周期,并在所述已知数据靠近丢失数据的一端,设置长度为预设值的模板窗,设置长度与模板窗长度相同的滑动窗,并使滑动窗靠近丢失数据的端点在预设点周围的预设范围内滑动;所述预设点是已知数据中与模板窗靠近丢失数据的端 点距离初始基音周期长度的点;
计算模块1203,用于用于在所述滑动窗所能滑动的预设点周围的预设范围内,计算模板窗中的数据与滑动窗中数据的匹配值,并从中查找出最佳匹配值,并将具有最佳匹配值时的模板窗与滑动窗的对应端点之间的距离作为微调后的基音周期。
在本步骤中,计算模板窗中的数据与滑动窗中数据的匹配值可以是:计算模板窗中的数据与滑动窗中数据的相关值,并取匹配值为与相关值成正比的数值;或计算模板窗中的数据与滑动窗中对应数据的幅度差值的绝对值的总和,并取匹配值为与所述幅度差值的绝对值的总和成反比的数值。
到此为止给出了本发明估计基音周期的具体实施例,接下来描述本发明如何补偿丢失帧,即如何进行丢包隐藏处理的过程。
在现有技术中只使用丢失帧之前的数据,即历史数据进行填充。由于音频信号中的基音周期也是逐渐变化的,因此距离丢失帧越远的数据与丢失帧的相关性越弱,现有技术中只用丢失帧之前的数据对丢失帧进行补偿,有可能在丢失帧和其之后的帧相连的地方发生相位不连续的现象。
但是具体的情况是:当有数据帧丢失时,在系统延时允许的情况下可以等到接收到下一个完好的数据帧时,结合历史数据和在丢失帧后所接收到的当前数据进行丢包隐藏处理。因此在本发明实施例中给出一种结合历史数据和当前数据进行丢包隐藏处理的方案,其中历史数据指丢失帧之前的数据,当前数据指丢失帧之后的数据。
图13是本发明实施例一种结合历史数据和当前数据实现丢包隐藏的方法的流程图。如图13所示,包括以下步骤:
步骤1301,估计历史数据的基音周期PP。
在本步骤中,可以直接用图2所示的方法估计出PP,也可以先用图2所示的方法估计出一个初始基音周期,然后用图6和图10所示的本发明实施例的方法对初始基音周期进行倍频消除和微调修正后再作为本实施例中的PP。
步骤1302,对历史数据进行平滑处理。
在本步骤中,可以用图3所示的方法对历史数据的最后PP/4数据进行平滑处理。
步骤1303,将平滑后的历史数据中的最后一个PP长度的数据放到一个专用的基音缓冲区PB中。
基音缓冲区PB的长度与基音周期PP相等。
步骤1304,用基音缓冲区PB中的数据填充与丢失帧长度相等的丢失帧主缓冲区LMB。
在本步骤中,用PB中的数据填充LMB时,需要一个偏移指针P_OFFSET协助。P_OFFSET,用于指示下一次从基音缓冲区PB中取数据时,应该从什么位置开始取数据,以保证和已填充数据拼接处的平滑。在使用PB中的数据来恢复丢失的数据帧时,每取出一段数据,就需要将指针P_OFFSET向右移动相应的长度,如果发现从偏移指针P_OFFSET到基音缓冲区结尾的数据不够所需要的数据时,则P_OFFSET重新置0,并从PB的开始位置接着取数据;如果仍然不够所需的数据,则重复这个步骤,直至取到所需的所有数据。
步骤1305,当前数据是否满足预设的条件,是则执行步骤1305;否则执行步骤1310。
在本步骤中,所指的预设条件是:当前数据的长度,即丢失帧之后的第一个完好帧的起始位置起到当前收到的数据长度,是否满足对当前帧进行平滑处理的要求。图14是本发明实施例对当前帧进行平滑处理的示意图。参照图14,对当前数据进行平滑处理的过程是:将当前数据第一个基音周期P之后的1/4基音周期数据乘以下降窗,将当前数据开始的第一个1/4基音周期数据乘以上升窗,然后将上述两个P/4长度的数据进行叠加,并用叠加后的P/4长度数据替换当前数据开始的第一个1/4基音周期的数据。这样处理的目的与步骤1302中对历史数据进行平滑处理的目的相同,是为了在使用当前数据反向填充丢失帧时,保证当前数据的原始信号和丢失帧信号之间的平滑过渡。
在本步骤中由于还不知道当前数据的基音周期,因此可以使用历史数据的基音周期PP来进行判断,比如将判断条件设置为当前数据的长度Date-SZ满足:
Date-SZ≥PP+PP/4
步骤1306,估计当前数据的基音周期NP;
在本步骤中,可以直接用图2所示的方法估计出NP,也可以先用图2所示的方法估计出一个初始基音周期,然后用图6和图10所示的本发明实施例的方法对初始基音周期进行倍频消除或微调修正后再作为本实施例中的NP。
步骤1307,对当前数据进行平滑处理。
在本步骤中,用图14所示的方法对当前数据进行平滑处理。
步骤1308,将平滑后的当前数据中的开始的一个NP长度的数据放到一个专用的基音缓冲区PB1中。
步骤1309,用基音缓冲区PB1中的数据反向填充与丢失帧长度相等的丢失帧临时缓冲区LTB。执行步骤1313。
在本步骤中,用PB 1中的数据反向填充LTB的过程与步骤1304中用PB中的数据填充LMB的过程类似,只是填充的方向相反,因此称为“反向填充”。图15是本发明实施例用当前数据反向填充丢失数据的示意图。在图15中,比较了用历史数据最后的PP长度的数据填充丢失数据段和用当前数据开始的NP长度数据填充丢失数据段的过程,可以看出用历史数据填充的方向是从左到右,而用当前数据填充的方向是从右到左。
步骤1310,从当前数据的起始位置开始取长度为L的一段数据DateA,并在基音缓冲区PB中查找与DateA最匹配的一段L长度的数据DateB,将DateB的起始点记为St。
图16是本发明实施例在基音缓冲区中查找与给定波形最匹配的波形的示意图。如图16所示,在基音缓冲区PB中设置一个长度为L的滑动窗SW,SW的起始端点SS从PB的起始端点开始逐渐向右滑动一直到PB的末尾端点,并SW的滑动过程中计算SW中的数据和给定数据DateA的匹配值。当SW的起始端SS点向右滑动一定距离后,其末尾端点ES会超出PB的区域范围,即SW起始端点到PB末尾端点的长度M小于L,此时,复制基音缓冲区PB起始位 置起的L-M长度的数据拼接到基音缓冲区PB的末尾,以满足匹配的要求。然后用SW中拼接起来的L长度的数据与给定数据DateA进行匹配计算。
在本步骤中,其中,L可以取0.55×PP的值。
步骤1311,将基音缓冲区PB中St点之后的PP/4长度数据DateB乘上一个下降窗,将当前数据起始位置开始的PP/4长度数据DateA乘上一个上升窗之后,将上述两个乘窗之后的PP/4长度数据进行叠加,并用叠加后的数据替换当前数据起始位置的PP/4长度数据。
本步骤中的操作可以保证当前数据和丢失数据之间的平滑连接。
步骤1312,从基音缓冲区PB的St点之前,取长度与丢失数据长度相同的数据,放入丢失帧临时缓冲区LTB中。
在本步骤中,当PB中St点到PB的起始端点的长度小于所需数据的长度,即小于丢失数据长度时,从PB的末尾点开始继续向左取数据,直至能够取到所需长度的数据。
步骤1313,将丢失帧主缓冲区LMB中的数据乘上一个下降窗,同时将丢失帧临时缓冲区LTB中数据乘上一个上升窗,并将上述两个乘窗的数据进行叠加,将叠加后的数据作为恢复的丢失帧填充到丢失帧处。
到此为止,便完成了结合历史数据和当前数据进行丢包隐藏处理的过程。
当然,在图13所示的流程中,可以不需要步骤1305的判断步骤,在步骤1304之后直接执行步骤1306、1307、1308、1309和1313,或在步骤1304之后直接执行步骤1310、1311、1312和1313。
在上述流程的步骤1310中,在PB中查找与DateA最匹配的DateB时,可以利用在步骤1304中得到的基音缓冲区PB的偏移指针P_OFFSET的位置,即将初始的匹配点设置为P_OFFSET,然后在P_OFFSET的位置附近查找最佳匹配的点St,这样可以减少匹配的次数,从而减少计算量。
如果丢失帧正好位于浊音和清音的过渡段时,用图13所示的方法恢复丢失帧,可能还会出现能量异常变化的情况,因此在本发明实施例中进一步需要根据丢失帧的前后帧能量的变化来对丢失帧的幅度进行平滑处理,以实现波形的 渐变。
首先取当前数据开始处的L个样点,并计算这L个样点的能量值EN。然后在基音缓冲区PB中查找和这L个样点最匹配的L个样点,并计算基音缓冲区中的这L个样点的能量EP。最后,根据丢失帧的前后帧能量的变化情况,对图13所示的方法最终恢复的丢失帧数据幅度进行平滑,以达到能量平稳过渡的目的。
计算L个样点的能量时,可以取L个样点的幅度的平方求和的方法。
设丢失帧的前后帧能量的比值为ER(Energy Ratio),则ER=EN/EP,用x表示所恢复丢失帧数据的序列,x(i)表示序列x中的第i个数据,帧长为FRAME_SZ,则可以公式(8)对所恢复的丢失帧数据逐点进行能量修正:
其中,函数sqrt表示求平方根。
图17是本发明实施例对恢复的丢失帧数据进行幅度平滑处理后的示意图。从图17可以看出,在进行幅度平滑处理之前,所恢复的丢失帧与当前帧的连接处能量变化较大,但在进行幅度平滑处理之后,恢复的丢失帧与当前帧的连接处能量变化变得比较平稳。
除了上述根据丢失帧的前帧和后帧的能量比值来对丢失帧的幅度进行平滑处理之外,还可以根据丢失帧的前帧和后帧中匹配波形的最大幅度差的比值来进行幅度的平滑处理,比如也可以利用公式(8)对恢复丢失帧的幅度进行平滑处理,只是,此时ER的位置处应该是丢失帧的前帧和后帧中匹配波形的最大幅度差的比值。
在上述对幅度进行平滑处理的过程中,较佳地,在EP>EN时,才进行幅度的平滑处理。
图18是本发明实施例一种实现丢包隐藏的装置的结构框图。如图18所示,该装置主要包括:处理模块1801、丢失帧主缓冲区1802、丢失帧临时缓冲区1803和。
主处理模块1801,用于利用历史数据中的最后一个基音周期数据,填充丢失帧主缓冲区1802,并利用当前数据中的第一个基音周期数据,或利用历史数据中的最后一个基音周期数据,填充丢失帧临时缓冲区1803;并将丢失帧主缓冲区1802和丢失帧临时缓冲区1803中的数据进行叠加处理后,用所述叠加处理后的数据补偿丢失帧。
丢失帧主缓冲区1802,用于存储主处理模块1801所填充的数据。
丢失帧临时缓冲区1803,用于存储主处理模块1801所填充的数据。
丢失帧主缓冲区1802和丢失帧临时缓冲区1803的长度等于丢失帧的长度。
此外,图18所示的装置还包括:历史数据处理模块1805当前数据处理模块1806,所述主处理模块包括:基音缓冲区1807、平滑处理模块1808和幅度平滑模块1804。
历史数据处理模块1805,用于获取历史数据的基音周期,并将历史数据中的最后一个基音周期数据进行平滑处理后,发送给主处理模块1801。
当前数据处理模块1806,用于获取当前数据的基音周期,并将当前数据中的第一个基音周期数据进行平滑处理后,发送给主处理模块1801。
主处理模块1801利用历史数据中的最后一个基音周期数据,填充丢失帧临时缓冲区1803的实现过程可以是:主处理模块1801将历史数据中的最后一个基音周期数据存入基音缓冲区1807,并从当前数据中的第一个基音周期数据的起始位置开始取长度为预设值的第一数据;在基音缓冲区1807中查找与第一数据最为匹配的第二数据;获取基音缓冲区1807中的第二数据的起始点之前的长度与丢失帧临时缓冲区长度相等的第三数据;用所述第三数据填充丢失帧临时缓冲区1803。
平滑处理模块1808,用于将基音缓冲区1807中的第二数据的起始点之后的长度为预设值的数据乘上一个下降窗,将所述当前数据起始位置开始的长度为预设值的数据乘上一个上升窗,然后将上述两个乘窗之后的数据进行叠加处理,并用叠加后的数据替换当前数据起始位置开始的长度为预设值的数据。
幅度平滑模块1804,用于获取丢失数据之前的已知数据和丢失数据之后的 已知数据中相互匹配的两组数据之间的比例系数,并根据所述比例系数对所述叠加处理后的数据的幅度进行平滑处理;主处理模块1801利用所述经过幅度平滑处理后数据补偿丢失帧。
在图18所示的实施例中,主处理模块1801还可以进一步用于判断当前数据的长度是否大于或等于预设值,是则,所述主处理模块1801利用丢失数据之后的已知数据中的第一个基音周期数据,填充丢失帧临时缓冲区;否则,所述主处理模块1801利用丢失数据之前的已知数据中的最后一个基音周期数据,填充丢失帧临时缓冲区。
图13和图18所示的实施例中,通过结合当前数据和历史数据恢复丢失帧数据,进而完成丢包隐藏处理。由于在丢包隐藏处理过程中利用丢失帧之后的数据帧,即当前数据对丢失帧进行恢复,因此增强了所恢复的丢失帧数据与丢失帧之后的数据之间的相关性,进而提高了所恢复的语音数据的质量。另外,对恢复的丢失帧数据进一步进行幅度平滑处理的过程也更进一步的提高了所恢复的语音数据的质量。
接下来进一步说明图13所示的丢包隐藏方法和图18所示的实现丢包隐藏的装置在具体系统中是如何应用和工作的。
图19是本发明实施例实现丢包隐藏的装置在接收端系统中的外部连接示意图。如图19所示,该接收端系统中包括:丢失帧检测器1901、解码器1902、历史缓冲区1903、延迟模块1904和实现丢包隐藏的装置1905。
在图19中,丢失帧检测器1901接收到从网络上传输过来的比特流后,判断是否有数据帧丢失,如果没有数据帧丢失,则丢失帧检测器201将完好的语音帧传送给解码器1902进行解码,然后解码器1902将解码后的数据送入到历史缓冲区1903,延迟模块1904对历史缓冲区1903中的数据延迟一定时间后输出。如果丢失帧检测器1901检测到有数据帧丢失,就发送“丢失语音帧”的信号给实现丢包隐藏的装置1905,然后实现丢包隐藏的装置1905使用本发明实施例所述的丢包隐藏方法,获取恢复的丢失帧数据,并将恢复的丢失帧数据放置在历史缓冲区1903中与丢失帧相对应的位置上。 在图19所示的系统中,在满足延迟要求的条件下,实现丢包隐藏的装置1901需要根据丢失帧之前的历史数据和丢失帧之后的一帧或者多帧数据进行丢包隐藏处理,但在复杂的网络条件下,丢失帧之前的帧和丢失帧之后的数据帧是否丢失并不是已知或固定的,因此实现丢包隐藏的装置1905可通过丢失帧检测器1901获得在进行丢包隐藏处理时所需的帧的状态信息。然后实现丢包隐藏的装置1905利用历史缓冲区1903中的数据,并结合与丢失帧相关的前后帧的状态,合成丢失的音频帧。
图20是本发明实施例在实际系统中应用实现丢包隐藏的方法的流程图。如图20所示,包括以下步骤;
步骤2001,接收端系统收到新的语音数据帧。
步骤2002,接收端系统判断当前接收到的新的语音数据帧是否为坏帧,是则执行步骤2006,否则执行步骤2003。
步骤2003,接收端系统对接收到当前帧进行解码处理。
步骤2004,接收端系统判断当前帧的前一帧是否丢失,是则执行步骤2006,否则执行步骤2005。
步骤2005,用当前帧更新历史缓冲区,执行步骤2008。
步骤2006,用丢包隐藏处理方法恢复丢失帧。
步骤2007,用恢复的丢失帧和/或当前帧更新历史缓冲区。
步骤2008,将历史缓冲区中数据延迟一段之间。
在本步骤中,延迟的时间可以根据应用场景进行设定。例如,系统要求的延迟时间为1帧或更多帧对应的时间时,考虑到进行前帧平滑时最大的可能叠加长度为最大可能基音周期(最大可能基音周期一般为15ms)的0.25倍,即3.75ms,因此可以在满足系统延迟要求的情况下,适当增加延迟时间。比如当1ms数据对应的采样点的个数为SP时,则可以使用的延迟时间为一帧对应的时间和CEIL(3.75×SP/FRAME_SZ)×FRAME_SZ个采样点对应的时间中的大者,其中CEIL的意义为取大于给定浮点数的最小整数,FRAME_SZ为一帧数据中的采样点个数。
例如,当系统的帧长为5ms时,可以设定延迟时间为5ms,即对应一帧的延迟时间;如果当前系统的帧长为2ms,则可以设定延迟时间为MAX(2,CEIL(3.75/2)×2)=4ms,即对应两帧的延迟时间。
步骤2009,输出历史缓冲区中的数据。
步骤2010,判断是否还有其它的数据帧需要接收,是则转到步骤2001继续执行,否则结束本流程。
在实际应用当中,需要根据系统的延时允许时间来决定是否应用本发明实施例中给出的结合历史数据和当前数据恢复丢失帧的方法来进行丢包隐藏处理。例如当有一个数据帧丢失时,如果系统的延时时间允许,则等待下一帧,如果下一帧是完好的帧,则可以利用本发明实施例给出的结合历史数据和当前数据恢复丢失帧的方法对丢失帧进行隐藏处理,如果下一帧数据仍然丢失了,则在系统的延时时间允许的情况下,继续等待下一帧的数据。在连续丢帧的情况下,且系统时延条件不允许继续等待时,利用历史数据进行丢包隐藏处理。
综上所述,本发明实施例中,通过从初始基音周与所有大于最小可能基音周期的初始基音周期的因数中选择一个数值作为估计的最佳基音周期的技术方案,能够消除估计基音周期时存在的倍频问题。本发明实施例中,通过在初始基音周期的附近查找最佳匹配点,并根据最佳匹配点的位置对估计的初始基音周期进行微调的技术方案,减小了估计基音周期的误差。本发明实施例中,利用历史数据中的最后一个基音周期数据,填充丢失帧主缓冲区,利用当前数据中的第一个基音周期数据,或利用历史数据中的最后一个基音周期数据,填充丢失帧临时缓冲区,对丢失帧主缓冲区和丢失帧临时缓冲区中的数据进行叠加处理,并用所述叠加处理后的数据补偿丢失帧的技术方案增强了恢复的丢失帧数据与丢失帧之后的数据之间的相关性,进而改善了恢复的丢失帧数据与丢失帧之后的数据之间相位的连续性。并且,在本发明实施例中还通过对所恢复的丢失帧的幅度进行平滑处理的技术方案,使得所恢复的丢失帧与当前帧的连接处的能量变化变得平稳。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。