深入浅出讲解语音合成三:声码器篇之LPCNet

在语音合成过程中,前端和中端负责从文本预测语音的压缩特征,如MFCC等。而最后由这些压缩特征到合成可测听的语音需要借由声码器来完成(vocoder)。下文将介绍常用的声码器之一:LPCNet~

https://zhuanlan.zhihu.com/p/54952637

上面的文章介绍的很详细了,本文算是做了一些补充和自己的理解。

1.LPC线性预测分析原理

一个语音的采样值能够用过去若干语音采样值的线性组合来逼近。通过使实际语音采样值和线性预测采样值之间差值的二次方和(在一个有限间隔上)达到最小值,即进行最小均方误差的逼近,能够决定唯一的一组预测系数。LPCNet中的线性预测采用的是自莱文逊-杜宾自相关法。

(1)该方法的第一步是求解加窗后序列的自相关函数。LPCNet利用了LPC系数来简化神经网络,本质上来讲,就是神经网络部分拟合的是真实采样点和LPC算出来的采样点之间的误差。也就是给定一帧语音的BFCC,先计算出LPC,然后利用LPC来计算当前的采样点,然后用网络来估计误差,LPC估计出的采样点和网络估计出的误差相加就是更逼近真实值的采样点。

BFCC的计算:

一帧语音的功率谱--->一个频带内的多个频点的功率乘系数相加得到频带功率--->对频带功率取对数做DCT得到BFCC

逆过程:

BFCC--->BFCCIDCT取指数得到频带功率--->对频带功率插值得到功率谱--->对功率谱做IDCT得到自相关序列--->莱文逊-杜宾法计算LPC

从BFCC中计算LPC系数,尽管这种方式计算的LPC分析不够精确(因为谱的低分辨率,过多的谱线被包含在一个频带中),但是在输出的影响是比较小的,因为网络能够去补偿。

公式的计算方式是由时域下进行的,显然计算的复杂度为n平方。但自相关函数还有另外一种计算方式,即对对信号的功率谱做IDFT,可以得到信号的自相关序列。当信号窗长较大时,由频域计算自相关序列将要快很多。以基二DFT为例,其算法的复杂度为0.5*N*log2N,当窗长为1024时,对比时域N^2的复杂度,将加速102.4倍(理想状态下),是较为可观的。同时,如果对信号的功率谱做IDFT之前,对功率谱取对数,则可以获得信号的倒谱,因此,可以将倒谱理解为自相关序列的对数压缩。

LPCNet分为两部分,一部分是每帧计算一次的特征计算部分,另一部分是每个采样点都要计算的采样部分,特征计算的输入就是BFCC和两维的pitch信息,输出可以称为帧特征。采样部分的输入是特征计算部分的输出和用LPC计算的当前采样点的线性部分,还有上一个采样点以及上一个采样点的采样网络输出(非线性部分),输出就是当前点的非线性部分。最后只要将LPC计算的值和采样网络输出的值加起来就是最后的输出。

同时在LPCNet源码中,增添了加噪模块和二阶滤波模块,这一部分的代码是作者在训练数据匮乏的情况下增加样本多样性而准备的。在训练数据足够的情况下,可以注释掉这部分代码。同时如果训练了大样本的多说话人模型,如果显卡内存不够,需要对训练样本进行分块训练,算是存在了一些模型的局限性。

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值