一种丢帧隐藏方法和装置
技术领域
本发明涉及语音传输技术领域,具体涉及一种丢帧隐藏方法和装置。
背景技术
IP电话是一种数字电话,它通过语音压缩编码、打包分组、分配路由、存储交换、解包解压等交换处理在IP网或互联网上实现语音通信,促进了网络资源利用,降低了语音业务成本。但是IP帧在网络传输过程中可能被破坏,或由于网络拥塞或网络故障而丢失,或仅仅由于到达接收端太晚而无法包括在重放语音中而被丢弃。丢帧是导致网络传输中语音质量下降的最主要原因。当丢帧发生时,对于丢失的帧,在解码端必然不能重现。
目前G.711已提出了许多丢帧隐藏策略和方法,主要可划分为基于发送端和基于接收端两大类。基于发送端的丢帧隐藏技术,由收发端共同完成,主要有重发(ARQ)技术、前向纠错(FEC)技术、交织(Interleaving)技术、分类处理技术和信源信道联合编码技术。基于接收端的丢帧隐藏技术,不需发送端参与,通过在接收端对丢帧附件的相关数据经过一定的优化算法处理来估算丢失的数据帧,主要根据人的生理特点对丢帧进行修复,主要有内插法和插值技术。一般地,基于发送端的丢帧隐藏技术的效果比基于接收端的好,但是其实现复杂,且所需网络带宽和时延较大,因此难以在实际应用中推广;而基于接收端的丢帧隐藏技术实现简单且不增加带宽,且更符合人的生理特点,给人的感觉更好。
在国际电信联盟电信标准部分(ITU_T)G.711建议附录I中,规定了一种基于接收端的高质量低复杂度的丢帧隐藏方案,该方案基于基音周期复制法,如图1所示,其具体步骤如下:
步骤101:接收到好帧,将该好帧保存在历史缓冲区中。
好帧即:没有发生丢帧现象的数据帧,可为语音和/或静音。
步骤102:判断当前是否产生丢帧现象,若是,执行步骤103;否则执行步骤114。
步骤103:判断当前丢帧是当前连续丢帧中的第1帧,还是第2或3帧,还是第4或5帧,还是第6帧或第6帧以后的帧,若是第1帧,执行步骤104;若是第2或3帧,执行步骤109;若是第4或5帧,执行步骤112;若是第6帧或第6帧以后的帧,执行步骤113。
步骤104:将历史缓冲区中保存的最近35ms的数据复制到基音周期搜索缓冲区中。
步骤105:在基音周期搜索缓冲区保存的数据中以最近5ms~15ms范围内的数据点为搜索起始点,搜索最近20ms数据的最大互相关点,并根据该最大互相关点确定当前基音周期。
步骤106:将历史缓冲区中保存的最近1个基音周期的数据复制到基音周期缓冲区中,然后将历史缓冲区中最近5/4~1基音周期的数据和最近1/4基音周期的数据进行叠加。
叠加可采用三角窗或汉宁窗。
步骤107:用叠加得到的1/4基音周期的数据替换历史缓冲区和基音周期缓冲区中的最后1/4基音周期的数据。
步骤108:将基音周期缓冲区中保存的1个基音周期的数据轮流复制到历史缓冲区的最近10ms空间中,作为当前丢帧的补偿帧,本流程结束。
在G.711中,一个正常数据帧的长度为10ms。
步骤109:更新当前基音周期。
具体地,当前基音周期t等于连续丢帧的第1帧的基音周期T0加上(n-1)个采样点时长,其中,n为当前丢帧在当前连续丢帧中的帧序号。
在G.711中,1个正常数据帧包含80个采样点,采样时长为10ms,则1个采样点时长为0.125ms。
步骤110:将历史缓冲区中最近1个基音周期的数据复制到基音周期缓冲区中,将历史缓冲区中最近(n+1/4)~n基音周期的数据和最近1/4基音周期的数据进行叠加。
步骤111:将叠加得到的1/4基音周期的数据替换历史缓冲区和基音周期缓冲区中的最 1/4基音周期的数据。
步骤112:将基音周期缓冲区中保存的1个基音周期的数据进行能量衰减后轮流复制到历史缓冲区的当前10ms空间中,作为当前丢帧的补偿帧,本流程结束。
能量衰减公式为:
gn=(a)n-1g0
其中,n为当前丢帧在当前连续丢帧中的帧序号,gn为当前丢帧的能量,g0为丢帧前最近一个好帧的能量,a为能量衰减系数,通常a=0.8。
步骤113:将静音数据复制到历史缓冲区的当前10ms空间中,作为当前丢帧的补偿帧,本流程结束。
步骤114:当前帧是否为丢帧后的第一个好帧,若是,执行步骤115;否则,执行步骤118。
步骤115:将历史缓冲区中保存的最近1/4基音周期的数据和当前好帧的起始点之后1/4基音周期的数据进行叠加。
本步骤中提到的基音周期等于最近一个丢帧的基音周期。
步骤116:将叠加得到的1/4基音周期的数据替换当前好帧的起始点之后1/4基音周期的数据。
步骤117:将替换后的当前好帧复制到历史缓冲区的当前10ms空间中,本流程结束。
步骤118:直接将当前好帧复制到历史缓冲区的当前10ms空间中。
可以看出,上述方法在丢帧后第一个好帧到来时,只简单地将好帧的前1/4基音周期数据和最近一个丢帧的补偿帧的最后1/4基音周期的数据进行叠加,在很多情况下,该叠加的平滑效果并不理想,尤其在丢帧率较高的环境中下,依然存在一定的相位噪声,降低了语音质量,给人带来不舒适感。
发明内容
本发明提供一种丢帧隐藏方法和装置,以在较高丢帧率时,提高语音质量。
本发明的技术方案是这样实现的:
一种丢帧隐藏方法,该方法包括:
A、检测到当前帧为丢帧后第一好帧,判断当前历史缓冲区的数据长度变化值是否大于0,若是,执行步骤B1;否则,执行步骤B2;
B1、从历史记录数据中获取最近第一预定长度的数据,然后从基音周期记录数据中获取第一预定长度的数据,组成长度为第一预定长度2倍的获取数据,在该获取数据中搜索丢帧后第一好帧的最大互相关点,根据该最大互相关点,对丢帧后第一好帧进行平滑处理并更新当前历史缓冲区的数据长度变化值,本流程结束;
B2、从基音周期记录数据中获取长度等于所述第一预定长度的2倍的数据;在获取数据中搜索丢帧后第一好帧的最大互相关点,根据该最大互相关点,对丢帧后第一好帧进行平滑处理并更新当前历史缓冲区的数据长度变化值。
步骤B1所述根据该最大互相关点对丢帧后第一好帧进行平滑处理包括:
将获取数据中位于最大互相关点之后第二预定长度的数据与丢帧后第一好帧的起始点之后第二预定长度的数据进行叠加,以叠加结果替换丢帧后第一好帧的起始点之后第二预定长度的数据;将替换后的丢帧后第一好帧数据替换历史记录数据中位于最大互相关点之后的数据;
所述根据该最大互相关点更新当前历史缓冲区的数据长度变化值包括:
计算获取数据中位于最大互相关点之前的数据长度与正常帧数据长度的差值,将该差值加上步骤A所述历史缓冲区的数据长度变化值得到当前历史缓冲区的数据长度变化值。
步骤B1所述将替换后的丢帧后第一好帧数据替换历史记录数据中位于最大互相关点之后的数据之后,进一步包括:经1/4基音周期延时后,将所述丢帧后第一好帧的最近一定长度的数据播放出去,
所述一定长度等于获取数据中位于最大互相关点之前的数据长度。
步骤B2所述根据该最大互相关点对丢帧后第一好帧进行平滑处理包括:
将获取数据中位于最大互相关点之后第二预定长度的数据与丢帧后第一好帧的起始点之后第二预定长度的数据进行叠加,以叠加结果替换丢帧后第一好帧的起始点之后第二预定长度的数据,将获取数据中位于最大互相关点之前的数据和替换后的丢帧后第一好帧数据添加到历史记录数据中;
所述根据该最大互相关点更新当前历史缓冲区的数据长度变化值包括:
计算获取数据中位于最大互相关点之前的数据长度与步骤A所述历史缓冲区的数据长度变化值的和,将该和值作为当前历史缓冲区的数据长度变化值。
步骤B2所述将获取数据中位于最大互相关点之前的数据和替换后的丢帧后第一好帧数据添加到历史记录数据中之后,进一步包括:经1/4基音周期延时后,将所述获取数据中位于最大互相关点之前的数据和替换后的丢帧后第一好帧数据播放出去。
所述第一预定长度为10ms;所述第二预定长度为5ms。
所述方法进一步包括:
a、检测到当前产生丢帧现象,判断当前丢帧是当前连续丢帧中的第1帧,还是第2或3帧,还是第4或5帧,还是第6帧或第6帧以后的帧,若是第1帧,执行步骤b;若是第2或3帧,执行步骤c;若是第4或5帧,执行步骤d;若是第6帧或第6帧以后的帧,执行步骤e;
b、根据最近一定长度的历史记录数据确定当前基音周期;将最近1个基音周期的历史记录数据作为基音周期记录数据,然后将最近5/4~1基音周期的历史记录数据和最近1/4基音周期的历史记录数据进行叠加;用叠加得到的1/4基音周期的数据替换最近1/4基音周期的历史记录数据和基音周期记录数据;将基音周期记录数据轮流复制作为当前丢帧的补偿数据,本流程结束;
c、更新当前基音周期;将最近1个基音周期的历史记录数据作为基音周期记录数据,将最近(n+1/4)~n基音周期的历史记录数据和最近1/4基音周期的历史记录数据进行叠加;将叠加得到的1/4基音周期的数据替换最近1/4基音周期的历史记录数据和基音周期记录数据;其中,n为当前丢帧在当前连续丢帧中的帧序号;
d、将基音周期记录数据进行能量衰减后轮流复制作为当前丢帧的补偿数据,本流程结束;
e、将静音数据作为当前丢帧的补偿数据,本流程结束。
步骤b所述根据最近一定长度的历史记录数据确定当前基音周期包括:
在最近22.5ms的历史记录数据中以最近5ms~15ms范围内的数据点为搜索起始点,搜索最近7.5ms的数据的最大相关点,并根据该最大相关点确定当前基音周期。
一种丢帧隐藏装置,该装置包括:丢帧判断模块、历史缓冲区模块、基音周期缓冲区模块、叠加模块和最大互相关点搜索模块,其中:
丢帧判断模块,在检测到当前帧为丢帧后第一好帧时,将该丢帧后第一好帧发送到叠加模块和最大互相关点搜索模块;
历史缓冲区模块,将丢帧后第一好帧的起始点之后一定长度的数据发送到最大互相关点搜索模块;根据请求将自身保存的数据发送到最大互相关点搜索模块;根据是否收到最大互相关点搜索模块发来的最大互相关点位置信息,将叠加模块发来的或叠加模块和最大互相关点搜索模块发来的数据保存在对应空间中;
基音周期缓冲区模块,根据请求将自身保存的数据轮流发送到最大互相关点搜索模块;
叠加模块,将最大互相关点搜索模块发来的数据和丢帧判断模块发来的数据进行叠加,将叠加结果输出到历史缓冲区模块;
最大互相关点搜索模块:在收到第一好帧指示信号和丢帧后第一好帧后,根据自身保存的当前历史缓冲区数据长度变化值,向历史缓冲区模块和基音周期缓冲区模块,或向基音周期缓冲区模块获取数据,在获取的数据中搜索丢帧后第一好帧的最大互相关点,将获取数据中位于该最大互相关点之后一定长度的数据输出到叠加模块,根据最大互相关点更新当前历史缓冲区数据长度变化值。
所述最大互相关点搜索模块包括搜索数据获取模块和搜索模块,其中:
搜索数据获取模块,用于在收到丢帧判断模块发来的第一好帧指示信号后,若检测到自身保存的历史缓冲区当前数据长度变化值大于0,则向历史缓冲区模块和基音周期缓冲区模块先后获取第一预定长度的数据,将获取的长度为第一预定长度的2倍的数据和信号0输出到搜索模块,之后计算搜索模块发来的数据长度与正常帧数据长度的差值,将该差值与当前历史缓冲区数据长度变化值的和值用于更新当前历史缓冲区数据长度变化值;若检测到自身保存的当前历史缓冲区数据长度变化值小于0,则向基音周期缓冲区模块获取长度为第一预定长度的2倍的数据,将获取的数据和信号1输出到搜索模块,之后将搜索模块发来的数据长度与当前历史缓冲区数据长度变化值的和值用于更新当前历史缓冲区数据长度变化值;
搜索模块,用于接收丢帧判断模块发来的丢帧后的第一好帧,并在搜索数据获取模块发来的数据中,搜索丢帧后第一好帧的最大互相关点,将搜索数据获取模块发来的数据中位于该最大互相关点之后一定长度的数据输出到叠加模块,同时将所述搜索数据获取模块发来的数据中位于最大互相关点之前的数据长度发送到搜索数据获取模块;且若收到信号0,将最大互相关点位置信息输出到历史缓冲区模块;若收到信号1,将所述搜索数据获取模块发来的数据中位于该最大互相关点之前的数据输出到历史缓冲区模块。
与现有技术相比,本发明所提供的方法和装置在检测到当前帧为丢帧后第一好帧后,根据当前历史缓冲区的数据长度变化值,从历史记录数据和基音周期记录数据,或从基音周期记录数据获取一定长度的丢帧的补偿数据,然后在获取数据中搜索所述丢帧后第一好帧的最大互相关点,根据该最大互相关点对当前好帧进行平滑处理,并更新当前历史缓冲区的数据长度变化值。本发明通过在丢帧的补偿数据中搜索丢帧后第一好帧的最大互相关点,对丢帧后第一好帧进行了平滑,减少了相位噪声,提高了语音质量,使人听起来更加舒适。进一步地,本发明通过减少基音周期搜索数据的长度,使得得到的基音周期更加准确,进一步提高了语音质量。
附图说明
图1为现有的丢帧隐藏方法的流程图;
图2为本发明提供的丢帧隐藏的流程图;
图3-1和3-2为本发明具体实施例提供的丢帧隐藏的流程图;
图4为本发明提供的丢帧隐藏的装置框图;
图5为本发明提供的丢帧隐藏装置的最大互相关点搜索模块的组成框图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
本发明中提到的历史缓冲区和基音周期缓冲区中保存的数据与现有技术相同,历史缓冲区中保存的是按照时间顺序排列的好帧数据、丢帧的补偿数据、丢帧后第一好帧的平滑数据等历史记录数据;基音周期缓冲区中保存的是1个基音周期的记录数据。
图2为本发明提供的丢帧隐藏的流程图,如图2所示,其具体步骤如下:
步骤201:接收好帧。
步骤202:判断当前好帧是否为丢帧后的第一个好帧,若是,执行步骤203;否则,执行步骤214。
步骤203:判断历史缓冲区的当前数据长度变化值是否大于0ms,若是,执行步骤204;否则,执行步骤209。
历史缓冲区的数据长度变化值的初始值可设为0,之后每收到一个丢帧后的第一好帧更新一次。
步骤204:将历史缓冲区中保存的最近一个丢帧的10ms补偿数据复制到长度为20ms的互相关搜索缓冲区的前10ms空间中,然后将基音周期缓冲区中的1个基音周期的数据轮流复制到长度为20ms的互相关搜索缓冲区中的后10ms空间中。
这里,将基音周期缓冲区中的1个基音周期的数据轮流复制到长度为20ms的互相关搜索缓冲区中的后10ms空间中具体为:将基音周期缓冲区中保存的1个基音周期的数据依次复制到长度为20ms的互相关搜索缓冲区中的后10ms空间中,然后再重复执行该复制动作,直至将互相关搜索缓冲区的后10ms空间完全覆盖。
本发明中,设定一个正常数据帧的长度为10ms。
步骤205:在互相关搜索缓冲区中搜索当前好帧的前5ms数据的最大互相关点。
步骤206:将互相关搜索缓冲区中位于最大互相关点之后5ms内的数据与当前好帧的前5ms数据进行叠加。
步骤207:将叠加得到的5ms数据替换当前好帧的前5ms数据。
步骤208:将替换后的当前好帧的10ms平滑数据复制到历史缓冲区中位于最大互相关点之后的空间中,同时计算互相关搜索缓冲区中位于最大互相关点之前的数据长度与10ms的差值,将该差值加上步骤203所述历史缓冲区的数据长度变化值,得到当前历史缓冲区的数据长度变化值,保存该当前历史缓冲区的数据长度变化值,本流程结束。
在步骤205中得到的最大互相关点位于互相关搜索缓冲区中的前10ms数据中,即:位于历史缓冲区的最近丢帧的10ms补偿数据中,因此,将10ms当前好帧复制到历史缓冲区中位于最大互相关点之后的空间中后,会将历史缓冲区中最近10ms补偿数据中位于最大互相关点之后的数据覆盖。
经1/4基音周期延时后,历史缓冲区将替换后的丢帧后第一好帧中的最近一定长度的数据输出到播放缓冲区,其中,所述一定长度等于互相关搜索缓冲区中位于最大互相关点之前的数据长度。
步骤209:将基音周期缓冲区中保存的1个基音周期的数据轮流复制到长度为20ms的互相关搜索缓冲区中。
步骤210:在互相关搜索缓冲区中搜索当前好帧的前5ms数据的最大互相关点。
步骤211:将互相关搜索缓冲区中位于最大互相关点之后5ms内的数据与当前好帧的前5ms数据进行叠加。
步骤212:将叠加得到的5ms数据替换当前好帧的前5ms数据。
步骤213:将互相关搜索缓冲区中位于最大互相关点之前的数据和替换后的当前好帧的10ms平滑数据复制到历史缓冲区中,同时计算互相关搜索缓冲区中位于最大互相关点之前的数据长度与步骤203所述历史缓冲区的数据长度变化值,得到当前历史缓冲区的数据长度变化值,保存该当前历史缓冲区的数据长度变化值,本流程结束。
可以看出:本步骤中,复制到历史缓冲区中的数据长度大于10ms。
经1/4基音周期延时后,历史缓冲区将收到的互相关搜索缓冲区中位于最大互相关点之前的数据和替换后的丢帧后第一好帧的平滑数据输出到播放缓冲区。
步骤214:直接将当前好帧放入历史缓冲区的当前10ms空间中。
可以看出:与现有技术相比,图2是通过对丢帧后的第一好帧的处理进行改进,即:通过在从历史缓冲区和基音周期缓冲区获取的,或单独从基音周期缓冲区获取的丢帧的补偿数据中搜索丢帧后第一好帧的最大互相关点,来对丢帧后第一好帧进行平滑处理,从而减少相位噪声,提高语音质量的。进一步地,综合考虑到计算复杂度和语音质量,本发明可对丢帧中的第1帧的处理进行改进。
图3-1和3-2为本发明具体实施例提供的丢帧隐藏的流程图,如图3-1和3-2所示,其具体步骤如下:
步骤301:接收到好帧,将该好帧保存在历史缓冲区中。
好帧即:没有发生丢帧现象的数据帧,可为语音和/或静音数据。
步骤302:判断当前是否产生丢帧现象,若是,执行步骤303;否则,执行步骤314。
步骤303:判断当前丢帧是当前连续丢帧中的第1帧,还是第2或3帧,还是第4或5帧,还是第6帧或第6帧以后的帧,若是第1帧,执行步骤304;若是第2或3帧,执行步骤309;若是第4或5帧,执行步骤312;若是第6帧或第6帧以后的帧,执行步骤313。
步骤304:将历史缓冲中最近22.5ms的数据复制到基音周期搜索缓冲区中。
步骤305:在基音周期搜索缓冲区中以最近5ms~15ms范围内的数据点为搜索起始点,搜索最近7.5ms的数据的最大互相关点,并根据该最大互相关点确定当前基音周期。
为减少搜索时长,可先进行2∶1的抽样搜索即:在最近5ms~15ms范围内的数据中,每隔一个数据点作为搜索起始点,在找出最大相关点后,再将该最大相关点之前和之后一定长度内的数据点作为搜索起始点,确定最终的最大互相关点。
步骤306:将历史缓冲区中保存的最近1个基音周期的数据复制到基音周期缓冲区中,然后将历史缓冲区中最近5/4~1基音周期的数据和最近1/4基音周期的数据进行叠加。
叠加可采用三角窗或汉宁窗。
步骤307:用叠加得到的1/4基音周期的数据替换历史缓冲区和基音周期缓冲区中的最后1/4基音周期的数据。
步骤308:将基音周期缓冲区中保存的1个基音周期的数据轮流复制到历史缓冲区的当前10ms空间中,作为当前丢帧的补偿帧,本流程结束。
步骤309:更新当前基音周期。
具体地,当前基音周期t等于当前连续丢帧的第一帧的基音周期T0加上(n-1)个采样点时长,其中,n为当前丢帧在当前连续丢帧中的帧序号。
步骤310:将历史缓冲区中最近1个基音周期的数据复制到基音周期缓冲区中,将历史缓冲区中最近(n+1/4)~n基音周期的数据和最近1/4基音周期的数据进行叠加。
步骤311:将叠加得到的1/4基音周期的数据替换历史缓冲区和基音周期缓冲区中的最后1/4基音周期的数据。
步骤312:将基音周期缓冲区中保存的1个基音周期的数据进行能量衰减后轮流复制到历史缓冲区的当前10ms空间中,作为当前丢帧的补偿帧,本流程结束。
能量衰减公式为:
gn=(a)n-1g0
其中,n为当前丢帧在当前连续丢帧中的帧序号,gn为当前丢帧的能量,g0为丢帧前最近一个好帧的能量,a为能量衰减系数,且a=0.8。
步骤313:将静音数据复制到历史缓冲区的当前10ms空间中,作为当前丢帧的补偿帧,本流程结束。
步骤314:判断当前好帧是否为丢帧后的第一个好帧,若是,执行步骤315;否则,执行步骤326。
步骤315:判断当前历史缓冲区的数据长度变化值是否大于0ms,若是,执行步骤316;否则,执行步骤321。
步骤316~320与步骤204~208相同。
步骤321~325与步骤209~213相同。
步骤326与步骤214相同。
在本发明中,历史缓冲区在收到好帧或丢帧的补偿帧或好帧的平滑数据后,再经1/4基音周期的延迟,将该好帧或丢帧的补偿帧或好帧的平滑数据输出到播放缓冲区中进行播放。
在第1帧丢帧到来时,现有技术是通过在最近35ms的历史数据中搜索最近20ms数据的最大互相关点,来确定当前基音周期的;而图3所示的实施例是通过在最近22.5ms的历史数据中搜索最近7.5ms数据的最大互相关点,来确定当前基音周期的,这样在保证语音质量的同时,降低了计算复杂度。
图4是本发明提供的丢帧隐藏的装置框图一,如图4所示,其主要包括:丢帧判断模块41、历史缓冲区模块42、基音周期确定模块43、基音周期缓冲区模块44、叠加模块45和最大互相关点搜索模块46,其中,
丢帧判断模块41:用于在检测到当前产生丢帧时,将当前丢帧的帧序号发送到历史缓冲区模块42、基音周期确定模块43和叠加模块45;在检测到当前帧为丢帧后第一好帧时,将第一好帧指示信号发送到历史缓冲区模块42和叠加模块45,同时将丢帧后第一好帧发送到叠加模块45和最大互相关点搜索模块46;
历史缓冲区模块42:用于接收并保存来自外部的好帧数据,根据要求将自身保存的数据发送到基音周期缓冲区模块44和叠加模块45;将基音周期缓冲区模块44发来的数据放入自身当前丢帧的补偿帧空间中;收到丢帧判断模块41发来的丢帧帧序号后,以叠加模块45发来的1/4基音周期的数据替换自身最近1/4基音周期的数据;根据最大互相关点搜索模块46发来的获取请求,将自身保存的最近10ms的数据发送给最大互相关点搜索模块46;在收到丢帧判断模块41发来的第一好帧指示信号后,若收到最大互相关点搜索模块46发来的最大互相关点位置信息,则将叠加模块发来的10ms数据放入自身位于最大互相关点之后的空间;在收到丢帧判断模块41发来的第一好帧指示信号后若未收到最大互相关点搜索模块46发来的最大互相关点位置信息,则将最大互相关点搜索模块46发来的数据和叠加模块45发来的10ms数据保存在自身。
基音周期确定模块43:根据丢帧判断模块41发来的丢帧帧序号,以及从历史缓冲区模块42获取的数据,确定当前丢帧的基音周期,将该基音周期发送到基音周期缓冲区模块44和叠加模块45,根据最大互相关点搜索模块46发来的获取请求,将自身保存的1个基音周期的数据轮流发送到最大互相关点搜索模块46。
基音周期缓冲区模块44:根据基音周期确定模块43发来的基音周期,向历史缓冲区模块42获取最近1个基音周期的数据;以叠加模块45发来的1/4基音周期的数据更新自身保存的最近1/4基音周期的数据;然后将自身保存的1个基音周期的数据轮流复制到历史缓冲区模块42;
叠加模块45:根据丢帧判断模块41发来的丢帧的帧序号和基音周期确定模块43发来的基音周期,对从历史缓冲区模块42获取的数据进行叠加,将叠加结果输出到基音周期缓冲区模块44;在收到丢帧判断模块41发来的第一好帧指示信号和丢帧后第一好帧后,将最大互相关点搜索模块46发来的5ms数据和丢帧后第一好帧的前5ms数据叠加,将相加结果输出到历史缓冲区模块42。
最大互相关点搜索模块46:在收到丢帧判断模块41发来的第一好帧指示信号和丢帧后第一好帧后,若检测到自身保存的当前历史缓冲区数据长度变化值大于0ms,则向历史缓冲区模块42和基音周期缓冲区模块44先后请求获取10ms数据,然后在获取的20ms数据中,搜索丢帧后第一好帧的最大互相关点,将获取的20ms数据中位于该最大互相关点之后5ms的数据输出到叠加模块45,同时将最大互相关点位置信息输出到历史缓冲区模块42,计算获取的20ms数据中位于最大互相关点之前的数据长度与10ms的差值,以该差值与当前历史缓冲区数据长度变化值的和值更新当前历史缓冲区数据长度变化值;若检测到自身保存的当前历史缓冲区数据长度变化值小于0ms,则向基音周期缓冲区模块44请求获取20ms数据,然后在获取的20ms数据中,搜索丢帧后第一好帧的最大互相关点,将获取的20ms数据中位于该最大互相关点之前的数据输出到历史缓冲区模块42,同时将获取的20ms数据中位于该最大互相关点之后5ms的数据输出到叠加模块45,然后以获取的20ms数据中位于最大互相关点之前的数据长度与当前历史缓冲区数据长度变化值的和值更新当前当前历史缓冲区数据长度变化值。
进一步地,如图5所示,最大互相关点搜索模块46包括:
搜索数据获取模块461:用于在收到丢帧判断模块41发来的第一好帧指示信号后,若检测到自身保存的当前历史缓冲区数据长度变化值大于0ms,则向历史缓冲区模块42和基音周期缓冲区模块44先后获取10ms数据,将获取的20ms数据和信号0输出到搜索模块462,之后计算搜索模块462发来的数据长度与10ms的差值,以该差值与当前当前历史缓冲区数据长度变化值的和值更新当前历史缓冲区数据长度变化值;若检测到自身保存的当前历史缓冲区数据长度变化值小于0ms,则向基音周期缓冲区模块44获取20ms数据,将获取的20ms数据和信号1输出到搜索模块462,之后以搜索模块462发来的数据长度与当前历史缓冲区数据长度变化值的和值更新当前当前历史缓冲区数据长度变化值。
搜索模块462:用于接收丢帧判断模块41发来的丢帧后的第一好帧,并在搜索数据获取模块461发来的20ms数据中,搜索丢帧后第一好帧的最大互相关点,将20ms数据中位于该最大互相关点之后5ms的数据输出到叠加模块45,同时将获取的20ms数据中位于最大互相关点之前的数据长度发送到搜索数据获取模块461;且若收到信号0,将最大互相关点位置信息输出到历史缓冲区模块42;若收到信号1,将获取的20ms数据中位于该最大互相关点之前的数据输出到历史缓冲区模块42。
以上所述仅为本发明的过程及方法实施例,并不用以限制本发明,凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。