OLA重叠相加算法
OLA将语音时长规整分为分解和合成两个阶段。分解阶段,以长度为N的帧长、长度为的帧间距进行分帧,共分M帧;在合成阶段,以帧间距进行合成。
合成前信号的长度La如下式
合成后的语音长度Lb如下式
Sa与Ss的比值大小决定了规整因子a的大小,即,若a>1则语音拉伸;若a<1则语音压缩。
OLA算法中一般固定,根据的大小调整。
算法优点:计算量小,保证了非重叠区语音信号的基频不变(即变速不变调)。
算法缺点:没有考虑帧间的连续性,造成相位不连续,相邻帧重叠区域产生基频失真。
SOLA同步重叠相加算法
SOLA算法也是分为分解和合成两部分,SOLA为了减少OLA算法中的基频断裂的问题,加入了使叠加部分波形最相似的方法,即首先引入一个离散的时间参数km,再通过km来确定相邻帧在间隔Ss附近重叠区的最大相关位置,最后把这个最大相关位置作为合成的拼接点,可以用交叉相关系数来表述这个最大相关位置。
算法具体步骤分4步
①对输入信号分解,分解时帧长为N,帧间隔为Sa。
②确定合成间隔,合成间隔由规整因子a决定,合成间隔
③合成分解帧,合成第m帧时
m=1时,直接作为输出。
m>1时,在应该插入的位置处的左右附近范围内,重新找一个插入位置点,插入第m帧。
(这个插入点要满足插入的第m帧信号与已核查的信号在重叠区的互相关系数最大)
互相关系数的计算公式如下
上式中x(.)为分解后的信号,y(.)已经合成的信号,k为的附近范围内偏移量,L为当前偏移量下,分解帧和已合成帧的重叠长度。
④重复步骤3直到所有的分解帧被插入,获得规整信号。
SOLA算法的优点:规整信号平滑度高(因为相邻帧都是在重叠区波形相似的点叠加的)。
SOLA算法的缺点:1.偏移量的加入改变了规整因子的预期规整精度,导致规整误差大。2.仍有失真。
WSOLA波形相似性重叠相加算法
WSOLA算法与SOLA算法的不同在于步骤3找插入点的方式不同。
①确定合成间隔,合成间隔由规整因子决定,合成间隔
②合成分解帧,合成第m帧时
m=1时,直接作为输出。
m>1时,在应该插入的位置处的左右附近范围内,重新找一帧,把这一帧插入Ss处。(这一帧要满足该帧与第m-1帧合成帧的波形最相似)
帧移Ss保持不变,找的这一帧与第m-1帧合成帧的相关度由如下公式(归一化)
互相关系数的计算公式如下
其中,满足。
输出合成语音y(i)即为
其中,w(n)为窗函数,常用的为汉宁窗,50%重叠,长度
对于参数值的选择,Sa过小,语音生硬,有明显的金属感;Sa过大,会产生气泡音,啪啪声。
Sa的最佳取值区间为8~14ms。的取值不小于语音基音周期的一半,为了防止产生回响,。
更多音频算法文章,代码,文档,关注公众号《音频核》