实时音频编解码之九 CELP编码

Posted shichaog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实时音频编解码之九 CELP编码相关的知识,希望对你有一定的参考价值。

本文谢绝任何形式转载,谢谢。

第二章CELP(code-excited linear prediction)

LP编码方法是基于声道滤波模型的建模,激励源是声门或噪声,其有两个限制,其一输入激励信号为白噪声,其二严格区分语音和非语音段,只对语音段使用LPC算法,CELP是基于人发声的源-激励模型,和基于LP的编码相比在这两个方面都有改进,构建激励信号码本使激励信号不再是白噪声,使用长短时估计方法而不再严格区分语音/非语音,长时预测滤波器是针对基频而言的,它只是一个具有长延迟的线性预测器CELP是主流语音编码器(AMR,EVS,G.718,speex以及opus)的基础。

图: CELP语音生成模型

解码端首先根据激励索引值从码本中获取激励信号序列,然后根据编码侧发来的增益值将激励信号序列幅度缩放为合适的大小,然后经过长短时的组合滤波,长时滤波器反应的是信号的周期性,短时滤波器反应的是信号包络,激励信号码本可以是固定或自适应的脉冲或白噪声。

由于CELP并不严格区分语音/非语音,因而对语音/非语音的过渡帧处理更为高效和准确,这使得合成的语音更为自然,此外CELP采用的闭环分析-合成滤波保留了部分相位信息,尽管人耳对相位信息没有幅度信息敏感,但保留一些相位信息增加了合成语音的自然度,这也提高了语音质量。

在一个开环系统中,能代表语音的参数从原始语音提、量化之后,在解码端根据量化的参数合成语音,更优的方式是在编码端使用量化后的参数合成语音信号,并根据合成的语音信号和原始语音信号的差异精细调节编码参数以在解码端获得最优的重构信号,这种再精细调节的方法称为闭环系统,其框图如下:

图分析合成闭环编码结构

理论上最优的合成语音应该是所有参数联合调解最优,然和这联合最优参数调解非常复杂,工程实际中,闭环参数精调只针对局部参数调节,CELP编码器基于分析-合成方法,其编码的激励信号参数是用闭环方法精调得到的,其它诸如滤波器参数则是开环系统得到的。图显示CELP编码器这一方法核心组成以及他们之间的关系,图中误差最小化方法用于选择最终的激励码字,这一过程是时域波形匹配,因而也部分保留了相位信息。

图 CELP编码器关键组成

2.1 感知加权

CELP方法的共振峰系统函数如下:
H ( z ) = 1 A ( z ) = 1 1 + ∑ i = 1 p a i z − i H(z) = \\frac1A(z)=\\frac11+\\sum \\limits_i=1^pa_iz^-i H(z)=A(z)1=1+i=1paizi1
A ( z ) A(z) A(z)是共振峰分析系统函数,假设激励信号码本大小为L,即共有L个码字向量,编码端将输入和L个码字向量分别求最小均方误差值,均方误差值最小的码字向量将作为编码的激励向量,码字向量的长度取决于分段语音的长度,对于大多数CELP编码器,分段的长度即为子帧的长度。
编码器也利用了人耳的掩蔽效应,这一效应意味着语音能量较高的频率可以容忍相对多的噪声而不会引起听觉上的失真,因而语音的谱峰比谱谷可以容忍更大的噪声,在误差最小化之前,可以简单的误差信号进行感知权重滤波调整噪声谱形状,加上感知权重后,CELP的分析-合成闭环编码的结构如下图所示。

图:感知权重滤波分析-合成CELP编码器

感知权重滤波的系统函数可以简单的如下式:
W ( z ) = A ( z ) A ( z / γ ) = 1 + ∑ i = 1 p a i z − i 1 + ∑ i = 1 p a i γ i z − i W(z)=\\fracA(z)A(z/\\gamma)=\\frac1+\\sum \\limits_i=1^pa_iz^-i1+\\sum \\limits_i=1^pa_i\\gamma^iz^-i W(z)=A(z/γ)A(z)=1+i=1paiγizi1+i=1paizi
其中 γ ∈ [ 0 , 1 ] \\gamma \\in [0,1] γ[0,1]的常数,该常数决定了对任何频率的去加重程度,感知权重滤波器放大了无共振峰频谱区域的误差信号能量,同时降低了共振峰频谱区域的误差信号能量,从上式可以看出当 γ \\gamma γ趋近于1时, W ( z ) W(z) W(z)趋近于1,这意味着误差谱趋于无改动,当 γ \\gamma γ趋于0时, W ( z ) W(z) W(z)趋于 A ( z ) A(z) A(z),即趋于共振峰分析滤波器,常数 γ \\gamma γ使得误差权重滤波有增加带宽的效果,对于不同采样率的语音, γ \\gamma γ取值可以不一样。
假设如下的LPC系数

a1 = -1.286; a2 =1.138; a3 =-1.047; a4=0:691; a5=-0.304; 

a6=0.373; a7=-0.071; a8=0.012; a9 =0.048; a10=0.064.

下图是共振峰分析和合成滤波器传递函数幅度谱,

不同 γ \\gamma γ值对应的权重滤波后的谱如下,可以看出感知权重滤波衰减了共振峰合成滤波器谱包络的峰值附近能量,因而,经过该感知权重滤波处理后的误差信号,误差信号对应的输入信号谱谷附近得到了更大的权重,从感知角度看,这非常重要,这是因为在谱峰处的误差由于掩蔽效应对听感影响变小,而谱谷出的误差由于掩蔽效应对听感影响变大。

图感知权重滤波器幅度谱

由于权重滤波器的线性性,可以通过将感知权重和共振峰合成合二为一,这样可以得到如下优化算力要求的结构。

图 感知权重滤波器计算优化结构

2.2 编码和解码

一个简单化的CELP编码器结构如下图所示,输入语音分帧和分子帧,这样做的目的是使信号满足短时平稳性要求,通常分帧的时长是20ms~30ms,子帧的数量通常是4个。短时LP分析(预测误差滤波)得到LPC系数,之后进入长时分析得到LTP系数,通常短时LP分析的输入为分子帧之后的信号或经过预加重之后的该信号,长时LP分析的输入通常是短时LP预测误差信号,经过长短时分析之后,感知权重滤波、基频合成滤波以及修正共振峰合成滤波的系数就得到了。

通过误差最小化准则,可以得到激励信号,激励信号的长度和子帧的长度是一样的,因而需要为每个子帧在激励码本中查找失真最小的码字向量,最后将LPC、增益、激励索引和LTP系数打包,作为CELP压缩之后的比特流。

图 CELP编码框架结构

解码是编码的逆过程,解码时先从编码比特流中获得相关参数,后滤波的目的是提升合成的语音质量。

图 CELP解码框架结构

编解码器尝试用20ms的帧长语音信号作为输出,内部又分解为5ms的帧长进行处理,对16khz采样的信号而言,5ms为80个采样点。编码器首先估计LPC模型,然后从输入中去除其影响,换句话说,由于线性预测是IIR滤波,进而可以用相应的FIR滤波器去除语音信号的影响,得到LPC残差,类似地可以从残差中估计基频(F0),并再次消除其影响以获得F0残差。

F0残差类似于白噪声(符合拉普拉斯分布),因而可以使用噪声量化器以及基频和噪声增益对齐进行量化,由于LPC滤波是自回归IIR滤波,它对输出具有非线性影响,因而使得量化对输出具有非线性影响,因而理论上需要尝试所有的量化方法才能得到最优的量化方法。

2.3 后滤波

可以使用掩蔽效应,在误差最小化的时候加入权重滤波以压低谱谷噪声,这能够提升后期合成语音的主观感受,为了进一步提升语音的主观感受,可以增加抑制合成后语音谱谷能量的滤波器。理想后滤波的频响特性应该和谱包络一致而不产生频谱倾斜。在采用线性预测的预测语音编码中,合成滤波器具有紧跟输入语音频谱包络线的频响特性,所以可以使用和线性预测类似的方法做后滤波。

可以使频带扩展合成滤波器作为后滤波,
H 1 ( z ) = 1 1 + ∑ i = 1 p a i α i z − i H_1(z)=\\frac11+\\sum \\limits_i=1^p a_i\\alpha^iz^-i H1(z)=1+i=1paiαizi1
其中 0 < α < 1 0 \\lt \\alpha \\lt 1 0<α<1常数,图显示了不同 α \\alpha α值的频响特性,这种滤波方式是通过压低语音来减少感知到的噪声的。从图可以看到当 α = 0.8 \\alpha=0.8 α=0.8时可以看到频谱倾斜和共振峰包络,而当 α = 0.5 \\alpha=0.5 α=0.5时只有谱倾斜信息。

为了减小全极点滤波器带来的频谱倾斜(spectral tilt),可以采用零极点滤波器:
H 2 ( z ) = 1 + ∑ i = 1 p a i β i z − i 1 + ∑ i = 1 p a i α i z − i H_2(z)=\\frac1+\\sum \\limits_i=1^pa_i\\beta^iz^-i1+\\sum \\limits_i=1^pa_i\\alpha^iz^-i H2(z)=1+i=1paiαizi1+i=1paiβizi
其中 0 < β < α < 1 0 \\lt \\beta \\lt \\alpha \\lt 1 0<β<α<1,频响的对数域表示是:
20 log ⁡ ( 1 ∣ 1 + ∑ i = 1 p a i α i z − i ∣ ) − 20 log ⁡ ( 1 ∣ 1 + ∑ i = 1 p ∣ a i β i z − i ) 20\\log(\\frac1|1+\\sum\\limits_i=1^pa_i\\alpha^iz^-i|)-20\\log(\\frac1|1+\\sum \\limits_i=1^p|a_i\\beta^iz^-i) 20log(1+i=1paiαizi1)20log(1+i=1paiβizi1)
上式是两个滤波器幅频响应的差值, α \\alpha α β \\beta β的选择通过主观听觉测试得到,当 α = 0.8 \\alpha=0.8 α=0.8 β = 0.5 \\beta=0.5 β=0.5时,上式的相减运算可以很大程度上消除谱倾斜现象。
以上是关于实时音频编解码之九 CELP编码的主要内容,如果未能解决你的问题,请参考以下文章

实时音频编解码之十 CELT编码器

实时音频编解码之十一Opus编码

实时音频编解码之十六 Opus解码

实时音频编解码之十一Opus编码

实时音频编解码之十七 Opus解码 SILK解码

实时音频编解码之十六 Opus解码