同步波形叠加法(SOLA)

同步波形叠加法主要运用的是计算两段语音信号相关系数的方法。该算法是将输入的语音信号分成若干相同长度并且有部分重叠的块。第二步根据变速因子α\alpha对重叠块进行位移。然后通过计算重叠部分的互相关(cross-correlation)系数找出最大的值作为离散时间偏移量k(m)k(m)。根据这个离散偏移量对重叠块的重叠部分进行淡入和淡出以及叠加。

算法分布详解:

1)将语音信号分成长度大小为NN,时间位移量为SaS_{a}的重叠块。


2)根据变速因子α\alpha将块进行位移,新的位置为Ss=αSaS_s = \alpha \cdot S_a,也就是帧移。


3)在离散时间下,计算互相关系数(cross-correlation)

rxL1xL2(m)=1Ln=0Lm1xL1(n)xL2(n+m),0mL r_{x_{L1}x_{L2}}(m) = {1\over L} \sum_{n=0}^{L-m-1}x_{L1}(n)\cdot x_{L2}(n+m), 0 \leq m \leq L

其中xL1(n)x_{L1}(n)xL2(n)x_{L2}(n)是两段音频信号x1(n)x_{1}(n)x2(n)x_{2}(n)长度为LL的重叠区间。


4)在某一个特定时间点kmk_m,会使得xL1x_{L1}xL2x_{L2}的互相关系数rxL1xL2r_{x_{L1}x_{L2}}最大化,我们将这一特定的时间点叫做离散时间位移量(discrete-time lag)。

rxL1xL2(km)=rmax r_{x_{L1}x_{L2}}(k_m) = r_{max}

经过计算之后,x2(n)x_2(n)x1(n)x_1(n)之间的帧移距离为Ss+km1S_s + k_{m1}而不再是SsS_s


5)根据离散时间位移量kmk_m,对x1(n)x_1(n)进行淡出,对x2(n)x_2(n)进行淡入。


6)将x1(n)x_1(n)x2(n)x_2(n)进行叠加形成输出信号。


7)重复步骤1-6对每一对信号进行处理。


由于离散时间位移量kmk_m的存在,使得重叠帧的互相关系数最大,从而保证了叠加部分的波形相似,减少基音的断裂。但是,同样由于kmk_m的存在,导致SOLA算法不能精准地改变语音的长度。

results matching ""

    No results matching ""