ITU-T G.728标准

更新时间:2023-12-16 08:17:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

附录A: ITU-T G.728标准

16kbit/s LD-CELP语音编码

1. 概述

这个建议包含用低延迟码激励线性预测方法进行16kbit/s语音编码算法的描述。该建议由以下几个部分组成。

在第2节给出了LD-CELP算法的简要原理。在第3节和第4节,分别讨论了LD-CELP编码器和解码器的原则。在第5节,定义了与每个功能算法块有关的计算细节。附件A、B、C和D包含了用于LD-CELP算法的常数表格。在附件E中,给出了可变自适应序列及其用途。最后在附录I(略)中提供了用于验证算法实现的信息。 2. LD-CELP概述

LD-CELP算法由一个编码器和一个解码器组成,分别在2.1节和2.2节描述它们,原理图示于图A.1。

CELP技术的本质,是用分析—合成的方法对码书进行搜索,该方法被保留在LD-CELP中。但是,LD-CELP用反向自适应预测器和增益来获得一种延迟0.625ms 的算法,只有激励码书的索引被传送。预测器系数通过对以前量化语音的LPC分析来更新,激励增益通过利用以前嵌入在量化激励中的增益信息来修正。激励矢量和增益自适应块的体积仅为5个采样值。一个感觉加权滤波器利用未量化语音的LPC分析来更新。

2.1 LD-CELP编码器

从A-律或μ-律PCM变换到均匀PCM后,输入信号被分成五个连续输入信号样值的各个块,对每一个输入块,编码器让1024个候选码书矢量(存储在一个激励码书中)中的每一个通过一个增益调节单元和一个综合滤波器。从这1024个候选量化信号矢量中,编码器鉴别出一个使频域加权均方误差最小的量代表输入信号矢量。对应代表最佳候选量化信号矢量的最佳码书矢量(或“码矢量 ”)的10位码书索引被传送到解码器。然后,最佳码矢量通过增益调节单元和综合滤波器准备为下一个信号矢量而建立正确的滤波器存储。综合滤波器参数和增益被以反向自适应的方式周期地更新,而这种反向自适应的方式是以以前量化信号和增益调节激励为基础的。

239

64kbit/s A-律或μ-律PCM输入变换成均匀PCM矢量缓冲器+激励VQ码书增益综合滤波器_听觉加权滤波器均匀误差VQ 16kbit/s输出 最小化索引反向自适应增益反向自适应预测器图A.1(a) LD-CELP编码部分

VQ索引16kbib/s输入激励VQ码书增益综合滤波器后滤波器转换为PCM反向自适应增益反向自适应预测器64kbit/sA-律或μ-律PCM输出语音图A.1(b) LD-CELP解码部分

2.2 LD-CELP 解码器

解码操作也是以一块接一块的方式被执行。每接收到一个10bit索引,解码器执行一次查表操作以从激励码书中提取对应的码矢量。然后这个码矢量通过一个增益调节单元和一个综合滤波器以产生正确的解码信号矢量。然后综合滤波器系数和增益以与在编码器中相同的方式被更新。接着,解码信号矢量通过一个自适应后滤波以提高听觉质量。后滤波器参数的周期更新是利用解码器端的有效信息。后滤波器矢量的5个采样值接着被变换成5个A-律或μ-律PCM输出值。

240

3. LD-CELP编码原则

图A.2是LD-CELP编码器的详细方框原理图。这个图与前面的图A.1信号在数学上是等价的,但对于实现更为有效。

64kbit/s A-律或μ-律PCM输入语音线性PCM输入PCM输入语音格式转换器s( k )u12矢量缓冲器3量化语音调节器sq( n )23综合滤波器后向调节器10感觉加权滤波器12r( n )感觉加权滤波器调节器W( z )4感觉加权滤波器v( n )11VQ目标矢量计算x( n )VQ目标矢量归一化?(n)x逆时卷积模块16输入语音矢量s( n )so( k )仿真译码器 819激励y( n )VQ码书21增益e( n )20后向矢量增益调节器567P( z )9综合滤波器冲激响应矢量计算h(n )波形码矢卷积模块17码书搜索模块 24误差计算18最佳码矢标号选择最佳码矢标号送最佳码矢标号到信道Ej能量表计算22综合滤波器σ( n )Yj141315p( n )图A.2 16 kbit/s LD-CELP 编码器原理图

28 输出 PCM 格式变换 64kbit/s A律或 μ律PCM 输出语音

最佳码矢标号 29 激励VQ 码书 31 增益 30 后向矢量 增益调节器 32 综合 滤波器 33 综合滤波器 后向调节器 合成 语音 34 后滤波器 35 后滤波器 调节器 图A.3 LD-CELP解码器

241

对图A.2做下列说明:

a.对每一个要描述的变量,k是采样索引,样值以125μs的间隔被采样。

b.在一个已给信号中,一组5个连续样值被叫做这个信号的一个矢量。例如,5个连续语音采样值形成一个语音矢量,5个连续激励样值形成一个激励矢量等等。

c.我们用n表示矢量索引,它不同于采样索引k。 d.四个连续的矢量构成一个自适应周期。在后面章节里,我们也把自适应周期叫做帧,两个名称可互换使用。

激励矢量量化(VQ)码书索引明显地是从编码器向解码器传送的唯一信息。三种其它参数被周期地更新,它们是:激励增益、综合滤波器和感觉加权滤波器参数。这些参数是从出现在当前信号矢量以前的信号中以一种反向自适应的方式推导出来的。激励增益对每一个矢量更新一次,而综合滤波器系数和感觉加权滤波器系数每四个矢量更新一次(即20个采样值或2.5ms更新周期)。注意,虽然算法中的处理序列有4个矢量(20个采样值)的自适应周期,但基本缓冲器体积仍然是一个矢量(5个采样值)。这样小的缓冲体积使得到一个少于2ms的延迟方式成为可能。

编码器的每个方框的说明在下面给出。因为LD-CELP编码器主要用于对语音编码,为便于描述,在下面我们将假定输入信号是语音,虽然实际上它也能用于非语音信号。

3.1 输入PCM格式转换

这个方框把输入A–律或?–律PCM信号s0(k)转换成一个均匀PCM信号su(k)。

3.1.1 内部线性PCM电平

在从A–律或?–律变换为线性PCM过程中,不同的内部表示是可能的。这决定于仪器。例如,对于?–律PCM标准表格定义的线性范围是-4015.5~+4015.5。这对应于A–律PCM的范围是-2016~+2016。两种表列出的某些输出值有0.5的小数部分;这些小数部分在整数仪器中并不能表示出来。除非整个表格乘以2以使所有的值都成为整数。事实上,这一点在定点DSP芯片上是很普遍的。相反,浮点DSP芯片能表示列在表中同样的值。这篇文章假定输入信号有最大范围-4095~+4095,这包括了?–律和A–律的情况。在A–律的情况下,它意指当线性变换的结果在-2016~+2016范围时,在继续对信号编码之前,这些值应被一个2的因子调节(乘2)。在?–律情况下,对一个定点处理器,输入范围被变换到 -8031~+8031。它意指在开始编码处理以前,输入值应除以2。换句话说,这些值能被作为Q1格式来处理,意指有一位在十进制小数点的右边,那么所有涉及到这个数据的计算都应把这一位考虑进去。

对于16-bit线性PCM输入的情况,有满动态范围-32768~+32768,输入值应被考虑成Q3格式,这就是说,输入值应被除以8。在解码器输出端,这个因子8将被恢复。

242

3.2 矢量缓冲器

这个方块缓冲5个连续语音样值su(5n),su(5n+1),?,su(5n+4)以形成一个5维语音矢量s(n)?[su(5n),su(5n?1),?su(5n?4)]。

3.3 感觉加权滤波器自适应

图A.4显示了感觉加权滤波器调节器的细节操作(块3)。这个调节器对每四个语音矢量计算一次感觉加权滤波器的系数,而这四个语音矢量是基于未量化语音的线性预测分析(常被叫做LPC分析)上的。系数更新出现在每四个矢量自适应周期的第三个语音矢量处,这些系数在每两次更新间保持为常数。

输入语音 3 36 混合窗 37 Levinson- Durbin 递推计算 38 感觉加权 滤波器 系数计算 感觉加权 滤波器系数 图A.4(a) 感觉加权滤波器系数更新

参考图A.4(a),这个计算按下列步骤执行。首先,输入(未量化)语音矢量通过一混合(hybrid)窗模块(块36)即加一窗在以前的语音矢量上,然后计算加窗语音信号的头11个自相关系数。Levinson-Durbin递推模块(块37)变换这些自相关系数成为预测器系数。以这些预测器系数为基础,权滤波器系数计算器(块38)能得出期望的权滤波器系数。下面我们仔细讨论这三部分。

递归部分b非递归部分bαbα2wm( n ):窗函数当前帧下一帧时间m + 2L -1m - N - 1m - Nm - 1mm + L -1m + L图A.4(b) 混合窗

我们先描述混合窗的原理。因为这个混合窗技术将被用于三种不同的LPC分析中,我们先给出它的总体描述,然后再针对不同情况专门讲述。假定LPC分析对每L个信号样值执行一次,为一般化,认为对应于当前LD-CELP自适应周期的信号样值是su(m),su(m?1),su(m?2),?,su(m?L?1)。那么,对于反向自适应LPC分析,混合窗

243

被用于样值索引小于m的所有以前的样值,如图A.4(b)。设在混合窗函数中有N个非递归样值,则信号样值su(m?1),su(m?2),?,su(m?N)全部被这个窗的非递归部分加权。从,样值左边的所有信号样值被这个窗的递归部分加权,su(m?N?1)开始(包括这个样值)有值b,?,?2,?,这里,0

在时刻m,混合窗函数wm(k)被定义为:

-[k-(m-N-1)], k≤m-N-1,?fm(k)=b??wm(k)=?gm(k)=-sin[c(k-m)], m-N≤k≤m-1 (A.3.1)

??0, k≥m窗加权信号是:

-[k-(m-N-1)] k≤m-N-1?su(k)fm(k)=su(k)b??sm(k)=sw(k)wm(k)=?su(k)gm(k)=-su(k)sin[c(k-m)], m-N≤k≤m-1

??0, k≥m(A.3.2)

非递归部分gm(k)的样值和递归部分fm(k)的起始段对不同的混合窗在附件A中被专门说明。对一个M阶LPC分析,我们需要计算M+1个自相关系数Rm(i), i?0,1,2,?,M,对当前自适应周期,第i个自相关系数能被表示为:

Rm(i)?k???m?N?1?smm?1m(k)sm(k?i)?rm(i)?m?N?1k?m?N?sm?1m(k)sm(k?i) (A.3.3)

这里, rm(i)?k????s(k)sm(k?i)?k????su(k)su(k?i)fm(k)fm(k?i) (A.3.4)

在方程(A.3.3)的右边,第一项rm(i)是Rm(i)的“递归部分”,而第二项是“非递归部分”,对于每个自适应周期都要计算非递归部分的有限和。另一方面,递归部分被递归计算。下面来说明怎样做。

假定我们对于当前的自适应周期已经计算和储存了所有的rm(i),想要继续下一个自适应周期,它是从采样su(m?L)开始的。混合窗被右移L个采样,对下一个自适应周期,这个新的窗加权信号变成:

sm+L(k)=su(k)wm+L(k)L?su(k)fm+L(k)=su(k)fm(k)?, k≤m+L-N-1;?=?su(k)gm+L(k)=-su(k)sin[c(k-m-L)] m+L-N≤k≤m+L-1 ??0, k≥m+L (A.3.5) Rm?L(i)的递归部分被写作

244

m?L?N?1rm?L(i)? ? ?k???m?N?1k????sm?L(k)sm?L(k?i)m?L?N?1sm?L(k)sm?L(k?i) ?sm?L(k)sm?L(k?i)?k??m?NL(A.3.6)

m?N?1su(k)fm(k)??k???2Lm?L?N?1su(k?i)fm(k?i)?Lm?L?N?1?sm?L(k)sm?L(k?i)?k?m?N或 rm?L(i)??rm(i)?k?m?N?sm?L(k)sm?L(k?i) (A.3.7)

因此,rm?L(i)能从rm(i)方程(A.3.7)递归计算。这个新计算出的rm?L(i)送回存储器以为下一个自适应周期所使用。然后,自相关系数Rm?L(i)由下式计算:

m?L?1Rm?L(i)?rm?L(i)?m?Lk?m?L?N?s(k)sm?L(k?i) (A.3.8)

迄今,我们已以一般方法描述了混合窗的计算方法。对图A.4(a)中的模块36中的混合窗,参数值是M=10,L=20,N=30,

?=(0.5)1/40=0.982820598 (因为?2L=1/2)

用上边描述的混合窗方法计算了11个自相关系数R(i)后(i?0,1,?,10),一个“白噪声”相关方法被应用,通过一个小量来增加能量R(0):

R(0)?(257)R(0) (A.3.9)

256这样做有一个作用,即用白噪声来填充谱谷以便降低谱动态范围和缓和后续 Levinson-Durbin递推的不良条件。白噪声相关因子257/256对应于大约24dB的白噪声电平,这个电平低于平均语音能量。

其次,应用白噪声修正自相关系数,Levinson-Durbin递推模块37递归地计算了1~10阶预测器的系数。令第i阶预测器的第j个系数为aj,则递归方法可如下描述:

E(0)?R(0) (A.3.10)

R(i)?ki??(i)?aj?1i?1(i?1)jR(i?j) (A.3.11)

E(i?1)ai(i)?ki (A.3.12)

aj(i)?aj(i-1)(i-1) (A.3.13) ?ki ai-j, 1≤j≤i-1 2E(i)?(1?ki)E(i?1) (A.3.14)

方程(A.3.11)到(A.3.14)对i?1,2,?,10递归计算,最终的解可给出:

qi=ai(10),1≤i≤10 (A.3.15)

245

如果我们定义q0?1,则10阶“预测误差滤波器”(有时被称作“分析滤波器”)有如下的传递函数

~Q(z)??qiz (A.3.16)

i?010?i10?i相应地,10阶线性预测器用下列传递函数定义:

Q(z)???qiz (A.3.17)

i?1感觉加权滤波器系数计算(块38)根据下列方程来计算感觉加权滤波器系数:

W(z)?1-Q(z/?1), 0??2??1≤1 (A.3.18)

1-Q(z/?2)10i?ii?1Q(z/?1)???(qi?1)z (A.3.19) Q(z/?2)???(qi?2)z (A.3.20)

i?110i?i感觉加权滤波器是在方程(A.3.18)中用传递函数W(z)定义的一个10阶零–极滤波器。?1和?2的值分别是0.9和0.6。

参考图A.2,感觉加权滤波器调节器(块3)根据方程(A.3.17)至(A.3.20)周期地更新W(z)的系数,再把这些系数馈送到冲激响应矢量计算器(块12)和感觉加权滤波器(块4和块10)。

3.4 感觉加权滤波器

在图A.2中,当前输入语音矢量s(n)通过感觉加权滤波器(块4),成为加权的语音矢量v(n)。注意,除了在预置期间,滤波器存储值(即内部状态变量,或被保留在滤波器延迟单元的值)在任何时间不应再置为0。换句话说,感觉加权滤波器(块10)的存储器将需要下面描述的特殊处理。

3.4.1 非语音操作

对调制解调器信号或其它非语音信号,CCITT测试结果表明,最好不用感觉加权滤波器,这等于置 W(z)=1。如果在方程(A.3.18)中,?1和?2被设为0,就很容易地得到了这个结果。在语音方式下这些变量的标称值是0.9和0.6。

3.5 综合滤波器

在图A.2中,有两个具有同样系数的综合滤波器(块9和块22),这两个滤波器被后向综合滤波器调节器(块23)更新。每一个综合滤波器是一个50阶全极点滤波器,该全极点滤波器由一个在反馈支路中具有50阶LPC预测器的反馈环组成。综合滤波器的传递函数是

246

F(z)=1/[1-P(z)],这里的P(z)是50阶LPC预测器的传递函数。

如果已获得加权语音矢量v(n),则用综合滤波器(块9)和感觉加权滤波器(块10)产生一个零输入响应矢量r(n)。为做到这一点,我们首先打开开关5,即把它指向节点6。这意味着从节点7到综合滤波器9的信号将是零。然后我们让综合滤波器9和感觉加权滤波器10构成5个采样(1个矢量)的“环”。这意指我们继续对五个采样信号和节点7的零信号进行操作。加权滤波器10的输出结果就是期望的零输入响应矢量r(n)。

3.6 VQ目标矢量计算

这个块从加权的语音矢量v(n)减去零输入响应矢量r(n),以获得VQ码书搜索目标矢量x(n),即x(n)?v(n)?r(n)。

3.7 反向自适应综合滤波器

这个调节器23调整综合滤波器9和22的系数。它把量化的(合成的)语音做为输入,产生一组综合滤波器系数做为输出。它的操作类似于感觉加权滤波器调节器3。

这个调节器的流程说明示于图A.5,混合窗模块49和Levinson-Durbin递推模块50的操作除下列三点与图A.4(a)中模块36和37的计算部分不同外,其余完全相同:

a. 现在的输入信号是量化(合成)语音,而不是未量化(原始)输入语音; b. 预测器阶数是50而不是10;

c. 混合窗参数不同:N=35,?=(3/4)1/40=0.992833749

注意:更新周期仍然是L=20,白噪声相关因子仍然是257/256=1.00390625。

量化语音2349混合窗50Levinson-Durbin递推计算51带宽扩展模块综 合滤波器系数图A.5 综合滤波器系数更新

?(z)表示50阶LPC预测器的传递函数,则它有形式 令P?i?(z)???a?iz (A.3.21) Pi?150?i是预测器系数。 这里a为改善信道对误差的鲁棒性,把这些系数作微小的改动,以便LPC谱的峰值宽度稍微增

?i,一组新的ai根据大。带宽扩张模块51按下列方法执行带宽扩张。已给LPC预测器系数a下式得到:

247

?i, i=1,2,?,50 (A.3.22) ai=?ia这里 ??253?0.98828125 (A.3.23) 256这样,通过一个?的因子,就能把综合滤波器的所有极点快速地向原点移动。因为这些极点离开了单位圆,频域响应的峰就被加宽了。

这样的带宽扩张以后,变化了的LPC预测器的传递函数为:

P(z)???aiz (A.3.24)

i?150?i接着,改变的系数被传送到综合滤波器9和22,这些系数也被传送到冲激响应矢量计算器12。

综合滤波器9和22有传递函数为:

F(z)?1 (A.3.25) 1?P(z)类似于感觉加权滤波器,综合滤波器9和22也是每4个矢量更新一次,更新也发生在每4个矢量自适应周期的第三个语音矢量,但是,更新正是建立在一个自适应周期的量化语音矢量基础上,或者说,更新发生前引进了两个矢量的延迟。这是因为Levinson-Durbin递推模块50和能量表计算器15(后边介绍)在计算上过于集中。结果,虽然以前量化语音的自相关在每4个矢量周期的第一个矢量是有效的,但计算可能要求不只一个矢量的时间,因此,为保持一个矢量的基本缓冲体积(为使编码延迟短),和维持实时操作,在滤波器更新中,一个2-矢量延迟被引进,以利于实时实现。

248

3.8 后向矢量增益调节器

这个调节器更新激励增益?(n),n为每个矢量的索引,激励增益?(n)是一个调节因子,用于调节选择的激励矢量y(n)。调节器20以增益调节的激励矢量e(n)作为输入,产生一个激励增益?(n)作为它的输出。基本上,它希望在对数增益域用自适应线性预测方法预测e(n)的增益,e(n)是基于e(n-1),e(n-2),...的。这个后向矢量增益调节器20被详细地示于图A.6中。

46对数增益线性预测器δ( n )47对数增益限幅器激励增益 σ( n )48反对数运算41带宽扩展模块44Levinson-Durbin递归计算43混合窗模块δ( n-1 )45对数增益补偿671-矢量延迟e ( n –1 )RMS运算3920激励矢量e ( n )-+4240取对数运算图A.6 矢量增益后向调节器

参考图A.6。这个增益调节器操作如下。1–矢量延迟单元67输入为e(n),输出为e(n-1),均方根计算器39计算这个矢量e(n-1)的RMS值,接着,对数计算器40计算RMS的对数值,首先计算以10为底的对数,再把结果乘以20。

在图A.6中,一个32dB的对数增益补偿值被储存在对数增益补偿值保持器中,这个值近似等于浊音语音平均激励增益电平(dB值)。加法器42从对数增益计算器40中产生的对数增益减去这个对数补偿值,得到?(n?1)。这个对数增益又被用于混合窗模块43和Levinson-Durbin递推模块44。模块43和44的操作与感觉加权滤波器调节器模块(图A.4(a))中的块36和37的操作完全一样,只是混合窗参数不同,而且现在分析的信号是移去偏移的对数增益而不是输入语音。(注意对每5个语音样值只产生一个增益值)。

这时混合窗参数(块43)是M=10,N=20,L=4和?=(3/4)1/8=0.96467863

模块44(Levinson-Durbin递推模块)的输出是一个10阶线性预测器的系数,具有传递函数:

?i?(z)?????iz (A.3.26) Ri?110接着,带宽扩展模块45按照与图A.5的模块51相类似的方法向z平面的原点快速移动

这个多项式的根。结果,带宽扩展增益预测器有如下的传递函数

249

R(z)????iz (A.3.27)

i?110?i这里系数?i用下式计算:

?i?(0.90625)??i (A.3.28) ?i?(29)?ii32这个带宽扩展使增益调节器(图A.2中的块20)对信道误差更具有鲁棒性,这些?i接着被用作对数增益线性预测器(图A.6中的块46)的系数。

这个预测器46每4个语音矢量更新一次,更新出现在每4个矢量自适应周期的第二个语音矢量。这个预测器希望预测?(n),?(n)是基于?(n?1),?(n?2),?,?(n?10)的一个

?(n),以下式给出: 线性组合。?(n)的预测值被表示成??(n)?-∑??i?(n-i) (A.3.29)

i?110?(n)后,从对数增益线性预测器46得到?我们把它加上在块41中储存的对数增益补偿值

32dB,然后对数增益限幅器47检查得出的对数增益值,如果这个值不合理地大或小,就削去或省略。显然,最低和最高限幅被设为0dB和60dB。然后,增益限幅器的输出被传递到反对数计算器 48,它是对数计算器40的逆操作,把增益从dB值转变为线性值。增益限幅器保证线性域的增益在1~1000之内。

3. 9 码书搜索模块

在图A.2中块12到18构成一码书搜索模块24。这个模块在激励矢量码书19中的1024个候选码矢量中进行搜索,鉴别出一个最好的码矢量索引,这个码矢量对应于一个与输入语音矢量最接近的量化语音矢量。

为了减少码书搜索的复杂性,10bit、1024项的码书被分解成两个较小的码书:一个7bit“波形码书”含有128个独立的码矢量和一个3bit“增益码书”包含8个标量,这8个值以零为对称(即1位是符号位,2位是幅度位),最终的输出码矢量是最佳波形码矢量(来自7bit波形码书)和最佳增益电平(来自3bit增益码书)的积。7bit码书表在附件B中给出,3bit增益码书表也在附件B中给出。

3.9.1 码书搜索原理

原理上,码书搜索模块24通过当前的激励增益?(n)来标定1024个候选码矢量中的每一个,然后,让这1024个结果一次一个地通过由综合滤波器F(z)和感觉加权滤波器W(z)组成的级联滤波器。每当这个模块传送一个新的码矢量给具有传递函数H(z)?F(z)W(z)的级联滤波器时,这个滤波器的存储器都被预置为0。

VQ码矢量的滤波能用矩阵矢量乘法来表述。令yj是7bit波形码书中的第j个码矢量,

gi是3bit增益码书中的第i个电平。让{h(n)}表示并行滤波器的冲激响应序列,那么,当由

码书下标i和j给定的码矢量被传送到并行滤波器H(z)时,滤波器输出可以表示为:

250

~xij?H?(n)giyj (A.3.30)

这里,

?h(0) 0 0 0 0??h(1) h(0) 0 0 0???H??h(1) h(1) h(0) 0 0? (A.3.31)

??h(3) h(2) h(1) h(0) 0????h(4) h(3) h(2) h(1) 0??码书搜索模块24搜索下标i和j的最佳组合,这种组合使下面的均方误差最小:

D?x?n??~xij2??n??giHyj??2(n)x2 (A.3.32)

?(n)?x(n)/?(n)是归一化的VQ目标矢量。展开这些项,得到 这里,x??n??2gix?T(n)Hyj?gi2HyjD??2(n)[x22] (A.3.33)

?(n)因为x2?和?2(n)的值在码书搜索期间是确定的,所以使D最小就等价于使下式D最小:

???2gpT(n)y?g2E (A.3.34) Dijij?(n) (A.3.35) 这里, p(n)?Hx并且 Ej?Hyj2T (A.3.36)

?(n)。注意到Ej实际上是第j个经过滤波的波形码矢量的能量,不依赖于VQ目标矢量x也注意到波形码矢量yj是确定的,矩阵H只依赖于综合滤波器和加权滤波器,这两个滤波器在经过一个四矢量语音周期后被确定。结果,经过四矢量的一个语音周期后Ej也被确定。以这些结论为基础,当两个滤波器被更新时,我们能计算和储存这128个可能的语音项

Ej,j?0,1,?,127(对应于128个波形码矢量),然后用这些能量项在下一个四矢量语音周期期间重复码书搜索。这种处理减少了码书搜索的复杂性。

为进一步减小计算量,我们可以先计算和储存矩阵bi?2gi和

ci?gi (i?0,1,?,7)

?表示成: 因为gi是固定的,这两个矩阵也是固定的。我们可以把D2???bipj?ciEj D这里 pj=pT(n)yj

251

注意到,一旦Ej、bi和ci值被预先计算和储存,只依赖于j的内积项pj?p(n)yj就?中最大的计算量。因此,码书搜索方法通过波形码书的改善,对每个波形码矢量y判占有DjT别出最佳增益索引i。

对于一个已给定的波形码矢量yj,找到最佳增益索引i有以下几种方法:

?值对应于8个可能的i值,然后找(1) 第一种也是最明显的方法是计算出8个可能的D?的索引i 。但是,对于每个 i ,这种方法要求2次乘法。 出对应于最小D??p?j/Ej,然后把这个增益g?在3bit增益码书(2) 第二种方法是首先计算最佳增益g?的增益电平gi的中量化成8个增益电平?g0,g1,?,g7?之中的一个。最好的索引i是最接近g索引。但是这种方法对于128个波形码矢量中的每一个要求一次除法,而除法很明显对于使用DSP处理器是很无效的。

?的量化能被看(3) 第三种方法,是对第二种方法稍加修改,对于DSP实现是有效的。g?和“量化元边界”做在g(即两相邻增益电平的中点)间的比较结果。令di是有相同符号的??di?”就等价于检验“pj

通过利用后者检验,我们能避免除法操作。对每个索引i,仍然只要求一次乘法。这就是用

在码书搜索中的方法。增益量化元边界di是固定的,能被预先计算和储存一个表中,对八个增益电平,实际上只使用六个界限值d0,d1,d2,d4,d5和d6。

一旦最佳下标i和j被鉴别出来,它们被联系起来以形成码书搜索模块的输出—唯一的10bit最佳码书索引。

3.9.2 码书搜索模块的操作

根据已经介绍的码书搜索原理,码书搜索模块24的操作在下面描述。参考图A.2。每当综合滤波器9和感觉加权滤波器10被更新时,冲激响应矢量计算器12计算级联滤波器F(z)W(z)冲激响应的头5个样值。为了计算冲激响应矢量,我们首先置级联滤波器的存储器为0,然后用一个输入序列{1,0,0,0,0}来激励滤波器。对应的5个输出样值是h(0),h(1),?,h(4),它们组成了期望的冲激响应矢量。这个冲激响应矢量被计算后,它将保持为常数且被用于接着的四个语音矢量的码书搜索,直到滤波器9和10被再次更新。

接着,波形码矢量卷积模块14计算128个矢量Hyj,j=0,1,2,?,127。或者说,它对每个波形码矢量yj,j?0,1,2,?,127和冲激响应序列h(0),h(1),?,h(4)做卷积,在这里,卷积只对前5个采样值有效。然后根据方程(A.3.36)通过能量表计算器15计算128个矢量的能量并储存,一个矢量的能量定义为每个矢量元素平方值的和。

注意到在块12、14和15中的计算只是对每四个语音矢量进行一次,而在码书搜索模块

j中的其它块则是对每一个语音矢量执行一次。也注意到E表的更新与综合滤波器的系数更新是同步的。也就是说,新的Ej表将从每个自适应周期的第三个语音矢量开始被使用。 ?(n)?x(n)/?(n)。在DSPVQ目标矢量归一化模块16计算归一化增益VQ目标矢量x实现中,首先计算1/?(n)是更有效的,然后再用1/?(n)乘以x(n)的每个元素。

?(n)的元素倒?(n)。这个操作等价于先把x接着,逆时卷积模块13计算矢量p(n)?Hx序,然后把它与冲激响应矢量卷积,最后再把输出元素的序列颠倒。(因此命名为逆时卷积)。

一旦Ej,bi和ci表被预先计算和存储,矢量p(n)也被计算出来,那么误差计算器17和最

252

T佳码书索引选择器18一起工作来完成下面有效的码书搜索算法:

?为一个比可能最大的D?值还要大的数(或者用DSP数表示系统的最大的可a) 预置Dmin能数);

b) 设波形码书索引j=0;

c) 计算内积pj?pT(n)yj;

d) 如果 pj<0,转向步骤h)通过负增益搜索;否则,继续步骤e)通过正增益搜索; e) 如果 pj

???bipj?ciEj; k) 计算 D?

m) 如果j<127,置j=j+1,转向步骤c);否则继续n);

n) 当这个算法执行到这里时,全部1024个可能的增益和波形的组合已被搜索完毕。显然,对增益和波形而言,得出的imin和jmin是期望的码书下标。输出最佳码书索引(10位)是这两个下标的级联,对应的最佳激励码矢量是y(n)?gi过通信信道被发送到解码器。

minyjmin。选择的10bit码书索引通

3.10 仿真解码器

迄今,虽然解码器已经鉴别和传送了最佳码矢量,但一些附加的任务必须在下面的语音矢量的编码准备中被执行。首先,最佳码书索引被传送到激励VQ码书以提取对应的最佳码矢量y(n)?giyj;然后,这个最佳码矢量被在增益段21中的当前激励增益?(n)所调节,

minmin得到的增益调节矢量是e(n)= ?(n)y(n)。

这个矢量e(n)然后被送到综合滤波器22以获得当前量化语音矢量sq(n)。注意到块19~23形成一仿真解码器8。

253

因此,实际上当没有信道误差时量化语音矢量sq(n)是仿真解码语音矢量。在图A.2中,后向综合滤波器调节器23需要这个量化语音矢量sq(n)以更新综合滤波器系数。类似地,后向矢量增益调节器20需要增益调节激励矢量e(n)以更新对数增益线性预测器的系数。

在继续对下一个语音矢量进行编码之前的一项任务是更新综合滤波器9和感觉加权滤波器10的存储器。为完成这项任务,我们先保留滤波器9和10的存储值,后者是完成零输入响应计算(在3.5节中描述)后被保留下来的。然后我们置滤波器9和10的存储值为零并且合上开关5。也就是说,把它与结点7连接起来。接着,增益调节激励矢量e(n)被传送到两个滤波器9和10的存储器。注意到因为e(n)只是5个样值的长度,滤波器有零存储值,乘加的数目对5个样本的周期只从0上升到4,这在计算量上是一个很大的节省。因为如果滤波器存储值不是零,每个样本将有70次乘加。然后,我们再把原先保留的存储内容与对e(n) 滤波后新建立的滤波器存储值相加。结果,这就是把滤波器9和10的零输入响应与零状态响应相加。这使得滤波器的存储值按期望设置,它被用于计算在下一个语音矢量编码期间的零输入响应。

注意到滤波器存储值更新后,综合滤波器9的存储器的头5个元素与期望的语音矢量sq(n)的元素完全相同。因此,实际上,我们能忽略综合滤波器22而从综合滤波器9的更新存储器值来获得sq(n),这意味着每秒节省50次乘–加运算。

到现在为止描述的编码方法是针对一个单独的输入语音矢量的。整个语音波形的编码通过对每个语音矢量重复上面的操作而获得。

3.11 同步和带内信号传送

在上述对编码器的描述中,假定解码器知道接收的10-bit码书索引的界限值,也知道什么时候综合滤波器和对数增益预测器需要更新(回忆它们每4个矢量被更新一次)。实际上,这样的同步信息通过在16kbit/s位流的顶部加一同步位就可有效。但是,在许多应用中,有必要插入同步位或带内传送信号位成为16kbit/s位流的一部分。这可以按下列方法办到:认为一个同步位每N个语音矢量被插入一次,那么,对每次第N个输入语音矢量,我们可以只搜索波形码书的一半而产生一个6bit波形码书索引。用这种方法,我们每次从第N个传送的码书索引中得到1位,插入1个同步位或带内传送信号位。

注意到我们不能从一个已经选出的7-bit波形码书索引中任意得到一位,相反,编码器必须知道哪一个语音矢量将被去掉一位,然后对于这些语音矢量只搜索一半码书。否则,解码器对这些语音矢量将没有同样的解码激励码矢量。

因为编码算法有一个四矢量的基本自适应周期,让N是4的倍数是合理的,以便解码器能容易地决定编码自适应周期的界限。对一个合理的N值(例如16,对应于一个10ms的位擦除周期),在语音质量上的降低基本上是可忽略的。特别是,我们发现N=16的值导致极小的偏差。这个位擦除速率仅是100bit/s。

如果上述方法被采用,我们建议当期望位是一个0时,波形码书的前一半被搜索,也就是说,这些矢量具有下标0到63。当这个期望位是1时,那么,码书的另一半被搜索,结果索引值在64到127之间,这种选择的意义是期望位在码字的最左边。因为7位波形码矢量先于3位符号和增益码书,我们进一步建议同步位从一个四矢量周期的最后一个矢量获得。当

254

它被检测的时候,接收的下一个码字可以开始新的码矢量周期。

虽然,我们陈述了同步能引起极小的误差,但我们注意到在包含这个同步方法的硬件上进行非正式的检测时,降低的质量没有测量出来。

但是,我们特别建议在编码器被重复接通和断开的系统中不要为了同步而用同步位。例如没有语音出现的一个系统可能用一台语音活动检测器来断开编码器。每当编码器被接通时,解码器就需要确定同步序列。按100bit/s算,这可能要花费几百毫秒的时间;另外,从解码状态到跟踪编码状态也需要时间。两者时间的结合将导致一种称作首尾削波的现象,这种现象是语音的起始点将被丢失。如果编码器和解码器在与语音起始时刻相同的时刻动作,那么就没有语音丢失。要做到这一点唯一的可能是在系统中使用外部信号来确定起始时刻和进行外部同步。

255

4. LD—CELP解码原理

图A.3是LD—CELP解码器的框图,每个框的功能叙述在下面的章节中给出。

4.1 激励VQ码书

这个框含有一个激励矢量量化码书(包括波形和增益码书),它与在LD—CELP编码器中的码书19是一致的。它用接收到的最佳码书索引来提取在LD—CELP编码器中选择的最佳码矢量y(n)。

4.2 增益调节单元

这个块计算已调节的激励矢量e(n)?y(n)σ(n)

4.3 综合滤波器

这个滤波器的传递函数与LD—CELP编码器中的传递函数是相同的(假设没有误差传输)。它对已调节的激励矢量e(n)滤波以产生解码语音矢量sd(n)。注意到在解码期间为了避免任何可能的舍入误差的积累,有时希望精确地复制用在编码器中的方法。如果是这样,那么若编码器获得sq(n)是从综合滤波器9的更新存储中得到的,则解码器也应该把sd(n)作为综合滤波器的零输入响应和零状态响应来计算,就象在编码器中那样。

4.4 后向矢量增益自适应

这个块的功能在3.8节中描述过。

4.5 后向综合滤波器自适应

这个块的功能在3.7节中描述过。

4.6 后滤波器

这个块对解码语音进行滤波以增强感觉质量。这个块在图A.7基础上进一步扩展以表示出更多的细节。参考图A.7,这个后滤波器主要由三部分组成:长时后滤波器71,短时后滤波器72和输出增益调节单元77。在图A.7中的其余四个块刚好是用于计算输出增益调节单

256

元77中的合适的调节因子的。

绝对值和计算73调节因子74绝对值和计算71长时后滤波器解码语音72输出短时后滤波器增益调节77经过后滤波的合成语音7576一阶低通滤波器34长时后滤波更新信息短时后滤波更新信息从自适应后滤波来(块35)图A.7 后滤波器原理框图

长时后滤波器71,有时叫做基音后滤波器,是一个在将要进行后滤波的语音基频的整数倍处具有谱峰的梳齿滤波器。基频的倒数被叫做基音周期。基音周期可以利用基音检测器从解码语音中提取。令p是通过基音检测器获得的基音周期,那么长时后滤波器的传递函数可以表示为:

Hl(z)?gl(1?bz?p) (A.4.1)

在这里系数gl,b和基音周期p每4个语音矢量更新一次(一个自适应周期),实际的更新发生在每个自适应周期的第三个语音矢量。为方便起见,从现在开始,我们称一个自适应周期为一帧。gl,b和p的推导将在后边的4.7节描述。

短时后滤波器72由一个10阶零极滤波器和与之级联的一个一阶全零滤波器组成。10阶零极滤波器对共振峰间的频率部分进行衰减,而一阶全零滤波器试图补偿10阶零极滤波器频率响应中的谱的倾斜。

~,i?1,2,?,10是通过解码语音的反向LPC 分析而获得的10阶LPC预测器的系数,令ai~和 k可以通过50阶反向LPCk1是通过同样的LPC分析而获得的第一个反射系数。那么,ai分析(图A.5中的块50)附带地得到。我们需要做的事是使50阶Levinson-Durbin递推在10

~,a~,?,a~,然后从11阶到50阶重新开始Levinson-Durbin递阶时停下来,记录下k1和a1210推。短时后滤波器的传递函数为

1??biz10?i Hs(z)?i?110?1?? z? (A.4.2)

?1?i

1??aizi?1257

~(0.65)i ,i?1,2,?,10bi?ai(A.4.3)~(0.75)i ,i?1,2,?,10 (A.4.4) 这里 ai?ai(A.4.5)??(0.15)k1~系数ai,bi和?也是一帧调节一次,但调节发生在每一帧的第一个矢量处(也就是使ai尽快有效)。

总之,解码语音通过长时滤波和短时滤波后,滤波语音将不再与未滤波语音有相同的数量级。为了避免有时有大的增益偏离,有必要使用增益控制来迫使后滤波的语音与未滤波的语音有大致相同的数量级,这项工作由块73到块77来完成。

绝对值和计算器73对逐个矢量进行操作,它取当前的解码语音矢量sd(n)并计算它的五个语音样点的绝对值之和。类似地,绝对值和计算器74执行同类型的计算,但当前语音是短时后滤波器的输出语音矢量sf(n)。然后调节因子计算器75用块74的输出值除以块73的输出值获得现行sf(n)矢量的一个调节因子。这个调节因子随后通过一个一阶低通滤波器76以得到对应于sf(n)中的五个元素中每一个独立的调节因子。一阶低通滤波器76的传递函数为:

0.01(1?0.99z?1)

输出增益调节单元77利用低通滤波器的调节因子对短时后滤波器的输出进行逐个样点的更新。注意到因为调节因子计算器75对每个矢量只产生一个调节因子,如果没有低通滤波器,它将对块77逐个样点的调节操作有一个阶梯的影响。低通滤波器76对这样的阶梯波能有效地平滑。

4.6.1 非语言操作

CCITT客观测试结果表明:对一些非语音信号,当自适应后滤波器被关闭时,这个编码器的功能被改善,因为自适应后滤波器的输入是综合滤波器的输出,所以这个信号总是有效的。在实际实现时,当这个开关被置于使后滤波器无效位置时,这个未滤波的信号也就是输出。

4.7 自适应后滤波器

这一块一帧一次地计算和更新后滤波器的系数。这个自适应后滤波器在图A.8中被详细说明。

258

到长时后滤波器到短时后滤波器3584长时后滤波器系数计算器83基音预测器抽头系数计算8110阶LPC解码语音逆滤波器基音周期提取8285短时后滤波器系数计算器10阶LPC预测器系数一阶反射系数

图A.8 自适应后滤波器框图原理

参考图A.8,10阶LPC逆滤波器模块81和基音周期提取模块82一起工作以从解码语音中提取基音周期。实际上,具有合理功能的基音提取器(不引进附加延迟)都可以用在这里。我们在这里描述的只是实现基音提取的一种可能方法。

10阶LPC逆滤波器81有如下传递函数:

10~~z?i A(z)?1??aii?1~是从Levinson-Durbin递推公式(图A.5中的块50)得到的,它在每一帧在这里系数ai的第一个矢量处被更新。这个LPC逆滤波器以解码语音作为它的输入,产生LPC预测残差序列{d(k)}作为它的输出。我们使用100个样点的基音分析窗和20到140个样点的基音周期范围。基音周期提取模块82保持一个长的缓冲区以保留LPC预测残差的最后240个样点。为方便检索,这240个LPC残差样值被标以d(-139),d(-138),?,d(100)而储存在缓冲器里。

基音周期提取模块82一帧一次地提取基音周期,在每帧的第三个矢量基音周期被提取。因此,LPC逆滤波器输出矢量应该以特殊的次序储存在LPC残差缓冲器里。对应于上一帧的第四个矢量的LPC残差矢量被储存为d(81),d(82),d(83),?,d(85),现行帧的第一个LPC残差矢量被储存为d(86),d(87),?,d(90),现行帧的第二个LPC矢量被储存为d(91),d(92),?,d(95),现行帧的第三个LPC残差矢量被储存为d(96),d(97),d(98),d(99),d(100)。样点d(-139),d(-138),?,d(80)只是以现行的时间次序排列的以前的LPC残差样值。

一旦LPC残差缓冲区准备好,基音周期提取模块82就以下列方式工作:首先,LPC残差的最后20个样值[d(81)~d(100)]通过一个1kHz的三阶椭圆低通滤波器(系数在附录

259

D中给出),然后按4:1压缩采样点数(也就是用因子4除采样数),这形成5个低通滤波的,4:1抽取的LPC残差样值,标以d(21),d(22),?,d(25)。储存在压缩后的LPC残差缓冲器中,除这5个采样外,其余55个采样d(-34),d(-33),?,d(20)通过移动以前帧压缩抽取后的LPC残差样值来获得。接着,压缩LPC残差样值的第i个相关由下式计算:

?(i)??d(n)d(n?i) (A.4.7)

n?125??时间滞后i=5,6,7?,35(对应于基音周期从20~140个样点值)。从31个计算出的相关值中,找出最大的一个对应的时间延迟τ,因为这个时间延迟τ是在4:1抽取的残差域中,所以,对应于最大相关的时间延迟应在4τ-3到4τ+3之间。为得到原来的时间解,我们用未抽取的LPC残差缓冲来计算未抽取的LPC残差的相关:

c(i)??d(k)d(k?i) (A.4.8)

k?1100延迟i=4τ-3,4τ-2,?,4τ+3,从这7个延迟中,可以确定出对应于最大相关的延迟

p0。

这种方法找出的时间延迟p0,可能产生的是真正的基音周期的倍数,在长时后滤波器中我们需要的是真正的基音周期,而不是它的倍数,因此,我们需要做的更多的处理是找出基本的基音周期。我们利用这样的事实,我们很频繁地估计基音周期,每20个语音样点一次。因为基音周期典型变化范围为20到40个样点,我们频繁地估计基音意味着在每次谈话的开始,在基音周期的倍数有机会出现在峰值检测处理之前。我们将首先得到基音周期。从这里开始,通过检查确认在前帧的基音周期附近是否有任何相关峰值出现,就有机会锁定基本的基音周期。

?是前帧的基音周期,如果上面获得的时间延迟并不与p?邻近,那么,我们对令 p??6,p??5,?,p??5,p??6也计算方程(A.4.8)。从这13个可能的时间延迟中,时间延i?p迟p1对应于最大相关,然后,我们检查确认这个新的延迟p1是否应该作为现行帧的基音周期输出。首先,我们计算:

d?k?d?k?p0??k?1d?k?p0?d?k?p0??k?1100100?0? (A.4.9)

?0是具有p0个样点延迟的单抽头基音预测器的最佳抽头权,然后?0的值被限钳位在0~1之间。接着,我们也计算?1

?1?d?k?d?k?p1??k?1d?k?p1?d?k?p1??k?1100100 (A.4.10)

?1是具有p1个样点延迟的单抽头基音预测器的最佳抽头权,然后,?1的值也被钳位在

0~1之间,则块82 的输出基音周期p以下式给出:

260

?p0 若?1≤0.4?0p?? (A.4.11)

若?>0.4?p?110基音提取模块82 提取基音周期后,基音预测器抽头计算器83计算解码语音的单抽头基

音预测器的最佳抽头权。基音预测计算器83和长时后滤波器71共用解码语音的长缓冲器。这个缓冲器含有解码语音样点sd??239?,sd??238?,sd??237?,?,sd?4?,sd?5?,这里长时后滤波器71用这个缓冲器作为这个滤波器的sd?1?到sd?5?对应于解码语音的当前矢量。

延迟单元。另一方面,基音预测器抽头计算器83用这个缓冲器来计算?

??k??990?sd?k?sd?k?p?0 (A.4.12)

k??99?sd?k?p?sd?k?p?接着,通过长时后滤波器系数计算器84得到基音周期p和基音预测抽头?,计算长时后滤波器系数b和gl如下:

,?<0.6?0 ?b??0.15? ,0.6≤?≤1 (A.4.13)

?,?>1?0.151 (A.4.14) 1?b总之,?越靠近单位圆,语音波形就越具有周期性。在方程(A.4.13)和(A.4.14)中,可以 gl?看到,如果??0.6,大致对应于清音或语音过渡区,则b?0,gl?1,长时后滤波器的传递函数为Hl(Z)?1,这意味着长时后滤波器关闭。相反,若0.6≤?≤1,长时后滤波器被打开,梳状滤波器的滤波程序由?决定。语音波形越具有周期性,滤波器的梳状越明显。最后,若?>1那么b被限于0.15;这是为了避免过多的梳状滤波。系数gl是长时后滤波器的一个调节因子以确保语音波形的浊音区相对于清语音或过渡区,幅度不是太大(如果gl在单位圆内保持为常数),则长时滤波后,浊音区将被放大大约(1+b)倍,这将使某些对应于清音或过渡区的听得不清楚或太弱的音变得和谐。

短时后滤波器系数计算器85在每帧的第一个矢量处根据方程(A.4.3),(A.4.4)和(A.4.5)计算短时后滤波器系数ai,bi和?。

4.8 输出PCM格式转换

在这一块解码语音矢量的五个样点被转换成为五个对应的A-律或?-律PCM样值,并以125?s的时间间隔序列输出这5个PCM样值。注意,如果这个内部线性PCM格式象在 3.1.1节中描述的那样经过更新,则在变换为A-律或?-律PCM之前,必须进行逆更新。

261

本文来源:https://www.bwwdw.com/article/yhh5.html

Top