同步波形叠加法(SOLA)
同步波形叠加法主要运用的是计算两段语音信号相关系数的方法。该算法是将输入的语音信号分成若干相同长度并且有部分重叠的块。第二步根据变速因子α对重叠块进行位移。然后通过计算重叠部分的互相关(cross-correlation)系数找出最大的值作为离散时间偏移量k(m)。根据这个离散偏移量对重叠块的重叠部分进行淡入和淡出以及叠加。
算法分布详解:
1)将语音信号分成长度大小为N,时间位移量为Sa的重叠块。
2)根据变速因子α将块进行位移,新的位置为Ss=α⋅Sa,也就是帧移。
3)在离散时间下,计算互相关系数(cross-correlation)
rxL1xL2(m)=L1n=0∑L−m−1xL1(n)⋅xL2(n+m),0≤m≤L
其中xL1(n)和xL2(n)是两段音频信号x1(n)和x2(n)长度为L的重叠区间。
4)在某一个特定时间点km,会使得xL1和xL2的互相关系数rxL1xL2最大化,我们将这一特定的时间点叫做离散时间位移量(discrete-time lag)。
rxL1xL2(km)=rmax
经过计算之后,x2(n)与x1(n)之间的帧移距离为Ss+km1而不再是Ss。
5)根据离散时间位移量km,对x1(n)进行淡出,对x2(n)进行淡入。
6)将x1(n)和x2(n)进行叠加形成输出信号。
7)重复步骤1-6对每一对信号进行处理。
由于离散时间位移量km的存在,使得重叠帧的互相关系数最大,从而保证了叠加部分的波形相似,减少基音的断裂。但是,同样由于km的存在,导致SOLA算法不能精准地改变语音的长度。