zoukankan      html  css  js  c++  java
  • 变速不变调方法

    语音变速不变调,即语音时长规整,是指不改变原说话人的音调及语义信息,只改变说话人的语速。

    语音变速不变调算法有三大类:时域法、频域法、参量法,如表2-1所示。 

    表2-1 变速不变调算法分类

    时域法

    频域法

    参量法

    剪贴法

    LSEE-MSTFTM

    相位声码器

    SOLA、SOLA-FS

    正弦模型

    TD-PSOLA

    时域法包括:剪贴法、同步波形叠加法(Synchronized Overlap-Add, SOLA)、固定同步波形叠加法(Synchronized Overlap-Add and Fixed Synthesis, SOLAFS)、时域基音同步叠加法(Time-Domain Pitch Synchronized Overlap-Add, TD-PSOLA) 波形相似叠加法(waveform similarity overlap-and-add, WSOLA)等。

    剪贴法[32]由Fairbanks等人在1958年提出,其基本思想是将语音划分为若干连续不重叠帧,然后重复或者丢弃其中某些语音帧,来实现语速变慢或者加快。

    这种方法只是简单的重复或者丢弃语音帧,这样会造成相邻两帧之间波形不连续,基音发生断裂,如图2-2所示,因此语音质量较差。

     

    第一帧重复

     

     

    两个连续语音帧

     

      

                          图2-2  剪贴法

    为了减小波形不连续现象,Gabor等人改善了剪贴法,在相邻两帧部分进行平滑处理,但是基音断裂现象仍然存在。

    为了在改善波形不连续的同时,减小基音断裂现象,S.Roucos等人在提出了同步波形叠加法(SOLA)[33]。该算法主要分为分解、合成两个阶段,如图2-3所示。

     

    图2-3 SOLA分解与合成过程

    分解阶段完成原始语音信号的分帧任务,为了减小不连续现象,一般在分帧的同时进行加窗平滑处理,分解后的所有帧用于合成变速语音,这里假设帧长为N,分析帧移为Sa。合成阶段则可以分成两个步骤:

    第一步,确定初步合成重叠距离。按照变速因子a=Ss/Sa,改变分解阶段相邻两帧的帧移距离,Ss=Sa*a,即保持分解阶段的第一帧位置不变,移动之后的各帧,使得相邻两帧的距离由为Sa变为Ss,这样便可获得初步合成帧。

    第二步,确定最终合成帧的起始位置。如果将初步合成帧直接进行叠加合成,则会造成基音断裂。为了减小该现象,通过在已合成第m帧第Ss个采样点的邻域[-kmax, kmax]内移动搜索和分解阶段第m帧信号的波形相关最大的位置k(m),如式2-1,确定最终合成帧的初始位置,保证叠加部分波形相似,减小基频断裂。

                       (2-1)

    其中,k(m) [-kmax, kmax],表示搜索偏移量,表示原始语音信号,表示合成变速后的输出语音信号,L表示分解阶段第m帧信号与已合成信号的重叠区域长度。

    由于偏移量k(m)的存在,所以SOLA算法不能精确的改变语音的时间长度。

    为了解决该问题,D.J.Hejna提出了固定同步波形叠加法(SOLAFS)[34],该算法与SOLA算法很相似,不同的是在合成时固定了合成步长Ss,而在分解阶段第m帧的邻域[-kmax, kmax]内移动搜索与已合成第m帧信号波形相关最大的位置k(m)。即使式2-2最大。

                       (2-2)

    为了进一步达到基音同步的目的,Moulines提出了基音同步波形叠加算法(PSOLA)[35],著名的语音分析软件Praat的变速功能就是基于此原理[36]。在该算法中,变速和变调是两个独立的过程,由不同的参数控制。其主要做法是首先进行基音同步分析,标记基音周期一系列位置点,以这些标记为中心,将原始语音划分成若干合成语音单元。通过重复或者省略合成单元来实现语速时长的控制,通过改变相邻合成单元的重叠长度或者重采样结合变速来改变语音的基频。该算法主要缺点有两点,首先基音周期及其起始点的判定误差会严重影响PSOLA技术的效果,另外计算量大,很难满足实时的变速与变调处理。

    同样地,为了减小基音断裂和相位不连续问题,Verhelst和Roelands 提出了波形相似叠加法(WSOLA)[37],该方法计算量低于PSOLA,同时输出的语音质量高。Grofit对该方法进行了改进,使其也适用于音乐信号的变速处理[38]

    频域法中最具代表性的方法是LSEE-MSTFTM(The Least-Square Error Estimation From the Modified Short-Time Fourier Transform Magnitude)[39],该算法是基于短时傅里叶变换来实现的,利用最小均方误差原则,寻找一个时域信号的短时傅里叶变换幅度谱逼近理想变速信号的频谱。

    参数法是指对语音信号建立模型,然后根据需要修改模型相关参数来达到改变音调和语速的目的。它包括相位声码器[40]和正弦模型法。相位声码器是将语音通过带通滤波器组分解成若干正弦信号,然后对正弦信号随时间变化的幅度和相位通过内插和抽取进行时域压扩,最后经过合成便完成变速不变调。正弦模型法与相位声码器方法相似,需要估算出模型的瞬时幅度、瞬时频率、瞬时相位等参量,合成效果较好,但是复杂度较高。

  • 相关阅读:
    Python 中的map函数,filter函数,reduce函数
    编程中,static的用法详解
    C++ list容器系列功能函数详解
    python中的configparser类
    310实验室OTL问题----将写好的C++文件转换成Python文件,并将数据可视化
    310实验室OTL问题
    常量指针、指针常量、指向常量的指针常量
    Iterator迭代器的相关问题
    struts2中action中的通配符
    struts2访问servlet API
  • 原文地址:https://www.cnblogs.com/welen/p/3284638.html
Copyright © 2011-2022 走看看