语音编码器

  语音编码器是基于语音编码技术基础上研发的一种仪器,因为在很大程度上,语音编码决定收到的语音质量和系统内容。

类别

  语音编码器方法归纳起来可以分成三大类:波形编码、信源编码、混合编码。

  1.波形编码

  波形编码比较简单,编码前采样定理对模拟语音信号进行量化,然后进行幅度量化,再进行二进制编码。解码器作数/模变换后再由低通滤波器恢复出现原始的模拟语音波形,这就是最简单的脉冲编码调制(PCM),也称为线性PCM。可以通过非线性量化,前后样值的差分、自适应预测等方法实现数据压缩。波形编码的目标是让解码器恢复出的模拟信号在波形上尽量与编码前原始波形相一致,也即失真要最小。波形编码的方法简单,数码率较高,在64kbit/s至32kbit/s之间音质优良,当数码率低于32kbit/s的时候音质明显降低,16 kbit/s时音质非常差。

  2.信源编码

  信源编码又称为声码器,是根据人的发生机理,在编码端对语音信号进行分析,分解成有声音和无声音两部分。声码器每隔一定时间分析一次语音,传送一次分析的的道德有/无声和滤波参数。在解码端根据接收的参数再合成声音。声码器编码后的码率可以做得很低,如1.2kbit/s、2.4kbit/s,但是也有其缺点。首先是合成语音质量较差,往往清晰度可以而自然度没有,难于辨认说话人是谁,其次是复杂度比较高。

  3.混合编码

  混合编码是将波形编码和声码器的原理结合起来,数码率约在4kbit/s—16kbit/s之间,音质比较好,最近有个别算法所取得的音质可与波形编码相当,复杂程度介乎与波形编码器和声码器之间。

  上述的三大语音编码方案还可以分成许多不同的编码方案。

  语音编码属性可以分为四类,分别是比特速率,时延、复杂性和质量。比特律是语音编码很重要的一方面。比特速率的范围可以是从保密的电话通信的2.4kbit/s到64kbit/s的G.711PCM编码和G.722宽带(7KHz)语音编码器。

功能

  语音编码器的功能主要就是把用户语音的PCM(脉冲编码调制)样值编码成少量的比特(帧)。这种方法使得语音在连路产生误码、网络抖动和突发传输时具有健壮性(Robustness)。在接收端的时候,语音帧先被误码为PCM语音样值,然后再转换成语音波形。

TD-SCDMA系统中AMR实现

  在语音编码领域中,随着传输、处理、存储等各种信息量的巨增,信息的压缩处理已成为迫切的要求,基于新的网络和新的要求,无论是从节省传输频带资源,还是保持线路通信的高效率等方面来看,研究采用各种可变速率语音编码技术的系统都有重要意义。目前为了适应此需要提出了AMR(adaptivemulti-rate)概念,即自适应话音编码器。基于带宽的考虑可分为AMR- NB(AMRNarrowband)和AMR-WB(AMRwideband)。对于AMR-NB,语音通道带宽限制为3.7 MHz,采样频率为8 kHz,而AMR-WB为7 MHz的带宽,采样频率为16 kHz,但考虑语音的短时相关性,每帧长度均为20 ms。这2种编码器根据带宽的要求虽然选用了不同的速率,但有异曲同工之处,以下着重介绍在TD-SCDMA中AMR-NB的实现。此编码器运用了代数码本线性预测(ACELP)混合编码方式,也就是数字语音信号中既包括若干语音特征参数又包括部分波形编码信息,再运用这些特征信息重新合成语音信号的过程。控制这些参数的提取数目,根据速率要求对信息进行取舍而得到了以下8种速率,混合组成如表1所示的自适应语音编码器。表1中模式AMR-12.20就提取出244比特的参数信息,而模式AMR-4.70却只提取了95比特信息。根据这些比特所含的信息量可以将其分为3类比特class 0,1,2。在信道编码时class0和1都将会使用循环冗余校验码进行差错检验,对于class 2则根据上一帧进行恢复。

  语音编码或语音压缩编码研究的基本问题,就是在给定编码速率的条件下,如何能得到尽量好的重建语音质量。主观评定方法符合人类听话时对语音质量的感觉得到了广泛应用。常用的方法有平均得分意见(mean opinion score,简称MOS)判定法,表2说明了AMR话音编码器各模式的话音质量。

AMR话音编码器各模式的话音质量

  1 AMR模式选择的自适应机制

  自适应的基本概念是以更加智能的方式解决信源和信道编码的速率分配问题,使得无线资源的配置和利用更加灵活和高效。实际的语音编码速率取决于信道的条件,它是信道质量的函数。而这部分的工作是解码器根据噪声等测量参数协助基站来完成的,选择模式,决定速率快慢。原则上在信道很差的时候采用速率比较低的编码器,这样就能分配给信道编码更多的比特数来实现纠错,实现更可靠的差错控制,从而有效地抑制错误发生,提高话音质量[1]。

  在TD-SCDMA系统实现方面为了便于量化比较而采用了C/I(载干比)这一概念,取其滑动平均值,再将此值与一预先定义好的门限值进行比较,来决定速率的选择。由于不同的特性,全速率信道和半速率信道就应有不同的定义值。在全速率信道,当C/I≥13时,MR122的MOS值可以达到4以上,可以提供很好的性能;9≤C/I<13时,MR122、MR102、MR795都是可以选择的,速率越低,误帧率越低;当6≤C/I<9时,选择MR74、 MR67、MR59;而当C/I<6时就应尽量选择越低的速率,随着信道质量的下降,误帧率都会增加,但相对选择的速率低,就能提供相对较好的话音质量。对于半速率信道,与上述类似,不再累述。下面进一步说明自适应速率选择的实现过程。图1是完整的说明图。自适应要求有2类信息需要传输:在下行信道上,需要基站发送给移动台1模式选择测量命令,而在上行信道上,移动台将信道测量信息传送给基站。这种模式要求传送信息准确、可靠、及时,才能有效达到自适应的目的。基站每帧发送1测量命令,得到返回信息,通过比较选择,选择1模式用于下一帧。这样就可以实现速率间的转换,达到自适应的目的,在速率间的切换会有一定功率损耗,并且不同速率间的损 耗是不同的,这是在实现过程中应该考虑的[2,3]。

自适应过程实现框图

  2 AMR编码器算法

  AMR编码器算法是基于代数码本线性预测(ACELP)的混合编码算法[4,5]。基本原理是原始语音按帧输入,根据使合成语音与原始语音的加权均方误差最小的准则,从随机码本和固定码本中挑选合适的码矢以代替残差信号,并将码矢地址和增益及各滤波器的参数量化编码后传送到接收端;接收端恢复各滤波器时,采用与发送端相同的码本,按照码矢地址找到该码矢乘上增益,激励合成滤波器,得到合成语音。在编码部分需要抽取下列典型参数:线性预测滤波器系数(LP),自适应码本(ACB)和固定码本(FCB)索引以及2种码本的增益( 见图2)。下面将分别从编码和解码 的角度阐述AMR编解码方案。

AMR编码原理

  (1)线性预测计算。LPC滤波器表征语音信号发生模型中的声道模型,图2中其中,A(z)为声道传输函数,ai随语音帧的变化不断改变(ai具有短时稳定性)。因此,在每个语音帧中,需要提取LPC系数。按其预测值与实际值最小 化均方误差原则,可得下式:

  上述正则方程[6]采用Durbin算法进行线性预测便可得到参数ak。考虑到线谱频率(LSF)误差的相对独立性及有序有界性质,与线性预测参数(LP)是一一对应的,采用Chebyshev多项式估计方法是可以相互转换的,因此在考虑传输时用LSF参数代替LP参数,将其进行矢量量化,在解码部分再对LP进行恢复。在12.2 kbit/s模式下采用分裂矩阵(SMQ)的方式进行矢量量化,在其它模式下采用分裂矢量(SVQ)的方式进行矢量量化。由于在12.2kbit/s中,每一帧需要进行2次线性预测编码(LPC)分析,所以会得到2组LSF系数。AMR在TD-SCDMA系统的具体实现过程中将这2组系数进行联合量化。也就是将矩阵(r(1),r(2))分为5个2×2的子阵,分别进行矢量量化,维数为4,码本容量分别为128(子阵1),64(子阵5),256(子阵 2,3,4),失真  测度选择计算量最小也有主观评价意义的欧式距离,在码本搜索过程中采用了全搜索算法。同样,对于其它的编码速率,有相同的思路和操作步骤,的差别就是对LSF矢量的子阵划分,它们的划分方法是采用维数为3,3和4的3个子阵(子矢量)。

  (2)码本搜索[4]。TD- SCDMA系统中,AMR自适应码本搜索和代数码本搜索是语音合成的关键,它们都是在子帧的基础上完成的,其中,每个子帧长为5 ms,对应4个样点。自适应码本表征语音信号发生模型中的周期性结构,自适应码本搜索通过一个长时预测滤波器(LTP),去除信号中存在的长时相关,使残差信号频谱更加平坦,以便于形成白噪声激励信号,同时提取基音延迟和对应的基音增益。再经过基音开环和闭环分析得到分数基音延迟决定后,自适应码本矢量v (n)通过在的整数延迟kopt和相位(分数延迟)t处内插就得到

  代数码本表示语音信号发生模型中的随机信号,根据感觉加权均方误差最小的原则,最终获得[2]。代数码本结构是基于交织单脉冲序列(ISPP)的,其脉冲幅度和位置的取值都要受到一定的限制以满足一定的代数结构和比特分配要求,对于不同速率,脉冲位置和个数都选择不同。而且在系统中,码本设计上改进了以前的高斯随机码本结构,构造了中心削波的重叠码本。经稀疏后,码本中就会产生90%的零值。这样是可以简化搜索过程的。通过化下式可?量,d=Htx2表示目标信号x2(n)和冲激响应h′w(n)之间的相关性。在得到以上参数后,AMR中系统总共设计了3种量化器。AMR-12.2代数码本增益的量化是采用6比特标量量化器,AMR -4.75是将自适应码本增益和代数码本增益进行联合量化,而对于其他速率则是按原始语音与合成语音的加权误差最小找出目标矢量。由于考虑多速率的公用,所以码本容量较大,这与其他编码器是不同的。

  (3)AMR解码原理。解码器分为3大部分:译码部分、语音合成和后滤波。在解码器输入端,从接收的比特流中获得LSP矢量、自适应码本和代数码本参数(索引和增益)等。LSP线谱对参数还需要转化为线性预测滤波器系数,再根据LP系数内插得到各子帧的合成滤波器系数。激励矢量由自适应码本和代数码本经各自的增益加权后获得,将激励矢量输入合成滤波器得到重建的语音信号。,重建的语音信号还需要经过后滤波处理。ACELP编码器编码的语音可看成是包含了高斯噪声的原始语音。使用后滤波可以减少合成语音中包含的噪声信号,从而有效地提高合成语音的语音质量。后处理包括两部分功能:自适应后滤波和信号放大。自适应增益控制用于补偿合成语音和经过后滤波的合成语音之间的失真。将信号通过以下滤波器,就可得到修正的后滤波合成语音。

  3 结束语

  AMR的提出能提供高质量的语音,增强抗信道误差的能力,通过低编码速率灵活配置提高了系统容量,编码速率根据无线环境和本地容量需求动态选择不同模式。笔者围绕AMR语音编码算法进行分析和研究。该算法已在TI公司的TMS320 C5510DSP上采用定点C语音和汇编语言的混合编程实现,并用于TD-SCDMA系统中,运算量能降低到20 MIPS左右,通过在TD-SCDMA系统的硬件平台上自环测试,可得到良好的通话语音质量,结果是很理想的。

基于uC/OS-II的低速率系统设计

  随着数字信号处理技术的发展,越来越多的应用于各行各业。但是,以往多数的DSP系统是基于流程图的设计方法,该方法设计的程序稳定性不高,流程中任意一个环节出错都将导致系统崩溃甚至死机。使用RTOS将对系统的稳定性有很大的改善。使应用模块化,可极大提高程序的可读性、可扩展性和可移植性。

  TI公司的定点DSP处理芯片TMS320C54X是目前应用比较广泛的一种DSP芯片,具有功耗低、运行速度快等优点,适合低速率语音编码的应用。

  uC/OS-II是一种免费应且源代码公开的实时内核,经过多年的实际应用,显示出强大的功能和巨大的商业价值。本文实现了uC/OS-II在TMS320C54X上的移植,并提出了在uC/OS-II的平台上的低速率语音编码器的系统设计方案。

  uC/OS-II在TMS320C54X上的移植

  要实现uC/OS-II的移植,主要改写以下三个文件

  OS[_]CPU.H文件

  包括定义数据类型、代码值界区的中断控制、堆栈增长方向变量、任务切换函数定义和变量声明。TMS320C54X中的堆栈数据类型为16位,定义为:

  typedef unsigned int OS[_]STK

  在TMS320C54X中所有的堆栈都必须用OS[_]STK声明。

  RTOS在进入系统临界区之前必须关闭中断,退出临界区后再打开中断。uC/OS-II定义了两个宏来关闭/打开中断:OS[_]ENTER[_]CRITICAL()和OS[_]EXIT[_]CRITICAL()。

  用OS[_]STK[_]GROWTH来设置,OS[_]STK[_]GROWTH为0表示堆栈从低地址向高地址递增;OS[_]STK[_]GROWTH为1表示堆栈从高向低地址递减,TMS320C54X中,堆栈地址是由高向低递减的。

  在uC/OS-II中,OS[_]TASK[_]SW()用来实现任务切换。OS[_]TASK[_]SW()函数模拟一次中断过程,在中断返回时进行任务切换。

  另外,还声明了一个8位变量,用来调用DOS的时钟节拍函数,在TMS320C54X中应该屏蔽掉。

  OS[_]CPU[_]A.ASM文件

  在此文件中,需改写函数:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()。

  OSStartHighRdy(0)函数由Sstart()函数调用,功能是运行优先级的就绪任务。其过程为:获得优先级任务的TCB地址→设置堆栈指针→恢复任务环境→中断返回→运行新任务。在TMS320C54X中实现如程序列表1,其中,CONTEXT[_]RESTORE是将C54X中的寄存器出栈的宏定义,在此不再详述。

  OSCtxSw()函数是一个任务级的任务切换函数。软中断向量指向此函数。在uC/OS-II中,如果任务调用了某个函数,而该函数的执行结果可能造成系统任务的重新调度,则在函数的末尾会调用OSSched()。OSSched()查找当前就绪优先级任务,如果不是当前任务,则找到该任务TCB的地址,并拷贝到变量OSTCBHighRdy中,然后通过宏OS[_]TASK[_]SW()执行软中断调用OSCtxSw()进行任务切换。变量OSTCBCur始终包含指向当前运行任务TCB的指针。在TMS320C54X中实现如程序列表2。

  OSIntCtxSw()函数与OSCtxSw()函数类似,不同的是,OSIntCtxSw()函数进行中断级任务切换。中断可能引起任务切换,在中断服务程序的会调用OSIntExit()函数检查任务就绪状态,如果需要进行任务切换,则调用OSIntCtxSw()。值得注意的是,产生中断后,CPU寄存器会自动被保存,所以,在此函数中不再进行环境保存。在TMS320C54X中实现如程序列表3。

  OS[_]CPU[_]C.C文件

  在此文件中,只需修改OSTaskStkInit()函数。OSTaskStkInit()由任务创建函数OSTaskCreate()或OSTaskCreateExt()调用,用来初始化任务的堆栈。OSTaskStkInit()与调用它的函数有三个参数进行传递:任务代码起始地址(task),参数指针(pdata),任务堆栈顶地址(ptos)。为提高代码效率,此函数用汇编语言改写,在TMS320C54X中实现如程序列表4。(程序列表1~4,均见本刊网站 https://www.eaw.com.cn)

  基于uC/OS-II的低速率语音编码器系统设计

  本系统中,低速率语音编码器的功能有语音编码、语音解码、回波抵消、模拟接口、数字接口等。另外,为提高系统的稳定性,增加了空闲任务和监视任务。系统结构如图1所示。

  系统由里向外分为三层:操作系统层、任务层、硬件层。

  硬件层设计

  硬件层设计主要包括串口和HPI口,用于接收(发送)语音信号和信道上的数据。

  任务层设计

  本系统中共有七个任务,其优先级从高到低依次为:监控任务、模拟接口任务、数字接口任务、回波抵消任务、编码任务、解码任务、Idle任务。各任务的状态有4种,即等待态和挂起态、就绪态、运行态以及中断态,状态的转换关系如图2所示。

  监视任务设计思路为:被监视任务正常运行时其执行时间是可预估的,被监视任务在其即将运行完毕时向监视任务发送消息说明自身运行正常。被监视任务运行时,监视任务处于等待态,等待被监视任务给它发送消息,等待时间被设定为预计的任务正常运行所需的时间。若等待时间内监视任务收到消息,则认为发送消息的任务运行正常,依照各任务执行顺序的先后下一任务开始运行,监视任务等待下一任务发送的消息。若等待时间已过,监视任务仍未收到消息,则系统的时间管理函数将强行把监视任务视为就绪态。因监视任务的优先权是的,它将抢占对CPU的控制权并采取相应的纠错方案。

  操作系统层设计

  在应用中,各个任务之间都有数据要交换,本设计中采用消息机制实现任务间通信。编码任务需要模拟接口任务发送的消息,以接收用于编码的语音数据;数字接口任务需要编码任务发送的消息,以接收用于发往信道的编码数据;解码任务需要数字接口任务发来的消息,以接收来自信道的用于解码的解码字;模拟接口任务需要解码任务发来的消息,以接收用于D/A转换的数字语音信号。回波抵消任务需要等待的消息来自模拟接口任务和解码任务。监控任务接收所有其任务发来的消息,确认系统是否正常运行。

  在运行过程中,操作系统对各任务进行调度。其动作为:

  系统启动时,建立所有的任务,除回波抵消任务外,都处于就绪态;

  此时,监控任务优先级,查询消息队列,没有消息的到来,转为等待态;

  模拟接口任务运行,接收/发送数据,发数据给回波抵消任务,并使回波抵消任务处于就绪态;如条件达到(如帧数已够),向编码任务发消息,传送数据,运行完毕,  自行进入挂起态,等待下一次串口中断将其转为就绪态;

  数字接口任务运行,接收/发送数据,如条件达到(如编码字数够),向解码任务发消息,传送数据,运行完毕,自行进入挂起态,等待下一次串口中断(或HPI中断)将其转为就绪态;

  如消息足够,回波抵消任务运行,运行完毕,自行处于挂起态;

  编码任务运行,如有模拟接口任务发来的消息,则运行,编码完毕,向数字接口发消息;否则,处于等待态;

  解码任务运行,如有数字接口任务发来的消息,则运行,解码完毕,向模拟接口任务和回波抵消任务发消息;否则,处于等待态;

  在所有任务都执行完毕后,Idle任务运行。

  由于所有的任务都有严格的执行时间限制,因此,上述的任务流程在正常情况下可以顺利进行。

  否则,监控任务会重启系统。

  结语

  本文在TMS320C54X的硬件平台上实现uC/OS-II,并针对传统的系统设计方法设计的低速率语音编码器稳定性不佳的问题,提出了基于uC/OS-II的低速率语音编码器系统设计的方案。由于低速率语音编码器通常是单片的,内部任务相对较少。使用实时内核来管理这些任务,会增加系统的内存和CPU时间的消耗,而任务调度的优势不能很好地显示出来,该设计有一定局限性。但是,在系统的内存足够大、CPU运行速度足够快的情况下,使用实时内核设计低速率语音编码器,有利于系统的后继开发。

GSM系统综述

  信号处理内核的发展促进了GSM系统语音编解码器的增强。目前更为密集的分析加合成方法已用于在常见的EFR 及AMR语音编码器中,以在容量有限且容易出错的空中接口上提供质量的语音传输。

  以当前对高速分组数据传输的关注程度,人们很容易忘记GSM数字电信系统的最初主要目的是传输语音。总的感觉是整个系统的复杂性与传输链路的管理有关,但也有很大部分与麦克风捕捉到的音频压缩与解压缩复杂性有关。

  为满足这一主要目的的需求,必须以足够高的采样及分辨率来捕获语音,以清楚地再现原始声音,并用一种可在比特率有限及容易出错的无线传输信道上保持音频高保真度的方式来压缩语音。

  这一需求很具体,其目的是传输语音,故载荷的频率范围及声音质量均为已知。人类听觉系统的工作方式允许编码器在手机耳机上产生出类似自然声音的听觉效果。GSM系统中所使用的语音编码器的主要原理是对人类音域的数学建模,从而产生出一种用于传输语音的有效压缩方法。术语“声码器”或“语音编码器”专门用来描述这些专门执行语音压缩的系统。

  GSM系统对用于传输语音的信道具有一组固定的物理要求。首先,它具有22.8kbps的原始数据速率;其次,帧可以被“偷窃”以及用于信令,且语音编码系统对这种情况必须很稳健,尽管存在对可偷窃语音帧的频率及时序的一定限制。

  信道容量与编码

  GSM物理层是FDMA与TDMA的组合。无线信道在整个GSM频段被分成相隔200kHz的多个信道,这些FDMA信道又被分成8个时隙。GSM物理信道被定义为单个“无线频率信道号”(ARFCN)上的单个时隙--故每一频率均可包含有8个独立物理信道。

  “猝发”是指GSM系统中的无线传输量,且包含以周期577(s发送的114位原始信息。由于语音流量信道传输的多帧结构,故每26次猝发最多有24次可包含语音数据(其余2次猝发用于空闲周期或传输信令信息)。因此合计能给出22.8kbps的原始信道容量。

  原始信道容量是完美传输条件下的用户数据(编码语音)吞吐量。在真实世界中,无线传输并不稳健而且需要为数据增加保护。

  增加冗余信息后,GSM系统中的全速率语音信道用于编码语音的容量为13kbps。

  语音编解码器

  如果以8 kHz采样率及13位精度来对出自GSM蜂窝手机麦克风的音频数据进行采样,则可得到104kbps的源数据速率。GSM系统中有四种编解码器,分别执行:全速率、增强型全速率(EFR)、自适应多速率(AMR)及半速率语音压缩。表1给出了一些声码器的参数比较。

  全速率

  全速率语音编解码器是改良的线性预测编码器(LPC),它将人类声域建模成一系列不同宽度的圆柱体。通过迫使空气通过这些柱体,即可产生语音。LPC编码器用一组联立方程来进行建模。

  标准LPC编码器不能提供电话系统所需的话音质量(虽能听清语句,但很难或不可能分辨出说话的人)。GSM系统中采用两种技术来提高LPC编码器的质量,即:长期预测(LTP)与规则脉冲激励(RPE),而全速率编解码器就被称为RPE-LTP线性预测编码器。

  输入至RPE-LTP编码器的数据为包括160个采样值的20ms语音,每一个采样值都拥有13位精度。数据首先通过预加重滤波器来提高信号的高频分量,以获得更好的传输效率。滤波器一般还消除信号上的任何偏移以简化进一步的计算。

  正如前面所提到的,语音产生模型可看成是空气通过一组不同大小的圆柱体。短期分析级采用自动相关来计算与模型所用的8个圆柱体有关的8个反射系数,同时采用一种称为Schur递归的技术来有效地求解所得到的方程组。参数被变换成可以更少的位数来进行更佳量化的LAR(log-area ratio)。这些是传输流的前8个参数。

  然后再将编码后的LAR解码成系数,并用来对输入采样值进行滤波。解码LAR的原因是为了确保编码器使用解码器上的相同信息来进行滤波。这一级上的其余采样值用于编解码器的LTP级。

  160个采样值被分成4个子窗口,每一个子窗口都拥有40个采样值。长期预测器为每一子窗口产生2个参数:滞后与增益。滞后由当前帧与后两帧之间的交叉相关峰值确定,而增益则由归一化交叉相关系数决定。滞后与增益参数被应用到长期滤波器上,同时对现有短期剩余信号进行预测。

  RPE级通过十取一及交错将40个剩余采样值转换成13个参数,并用APCM将所得出的13个值编码,其中值用对数编码成6位,然后再将13个参数均表示成3位,总共45位。

  一级是从计算出的长期剩余及分析信号来更新短期剩余信号,然后再用此数据来计算下一帧。

  增强型全速率

  全速率编解码器是一种用来传输语音并在计算上相当有效的方法,但通过使用更为密集的算法,语音质量还能提高。全速率编解码器首先在1990年代初的DSP上实现,当时在经济上虽不能采用质量更好的编码器但却是一种更为密集的算法。

  至1990年代中,功能更强的DSP内核的可用性已不再是一个问题,因此增强型全速率编解码器开始在手机中出现。

  EFR声码器是一种代数码激励线性预测(ACELP)编码器,且不同于采用分析加合成方法的全速率系统。它计算虽更加密集但能在输出端得到更为精确的结果。预处理级由80Hz高通滤波器及一些缩减电路组成,以使实现更为容易。每帧进行两次短期分析,由与两个30mS(1.5个语音帧)、长度集中在不同子帧上的不同非对称窗口自动关联。所得到的系数被变换成线谱对(line spectral pairs)并被量化成38位,以获得更好的传输效率。

  同时执行开环间隔(pitch)分析来计算每帧的间隔滞后估计值,然后再用此估计值启动闭环搜索(以得出更快的结果)。再将所得到的闭环值应用于合成器及与非量化输入比较后的结果上(即分析加合成),最小的加权误差从自适应编码本(codebook)上得出并被编码成每子帧35位。

  然后再用代数(固定) 编码本、并再一次用分析加合成方法来对量化后余下的剩余信号进行建模。所得到的编码本增益被编码成每子帧5位。

  ,正如全速率声码器中一样,针对下一帧将存储器刷新。

  EFR声码器的12.2kbps输出等于每帧244位。但编码语音是通过拥有260位容量的常规GSM全速率空中信道来传输,其余16位被填以CRC以及重复一些用于冗余的最重要编解码器参数。

  自适应多速率

  当全部参数均能解码时,全速率及EFR编解码器可实现良好的语音再现。由于传输信道的冗余(请记住,原始信道容量比数据载荷大10kbps),故许多原始位可以出错且参数仍能恢复。

  但当参数丢失或错误时,所接收信号的质量将迅速下降(参见图3中的最右侧黑色曲线)。

  这也是AMR编解码器组所试图解决的问题。通过指定8个全都共享公共数学算法的声码器组,可改变信道的冗余量。以此种方式,语音传输的质量可能会由于降至更低的编码速率上而稍微有所下降,但覆盖编码参数的信心则得以提高。

  结果是在载波干扰增加的情况下可获得感觉更好的语音信号质量(如图3)。

  AMR编解码器组由速率从12.2kbps至4.75kbps的ACELP声码器组成,故可提供87[%]至480[%]的冗余。在一种很糟的情况下,即全速率及EFR帧丢失很久后,4.75kbps编解码器数据仍能恢复。

  半速率

  GSM所采用的空中接口允许使用两个完全独立的半速率子信道,故能使蜂窝单元的语音容量加倍。半速率声码器采用矢量和激励线性预(VSELP)编码器,它以一种类似EFR及AMR编解码器的分析加合成方式工作,速率为5.7kbps。

  半速率声码器的输出帧包含用来指示帧声音内容的2个位。该声码器工作方式在每种模式下略微有些不同,故可获得的音频数据再现质量。

  人们对半速率语音的感觉普遍不佳,所以今天一般不采用此项技术。但以其自适应模式,AMR声码器的6种较低速率将适合半速率空中信道的可用容量,结果是采用带AMR的半速率信道将在高流量领域变得更为普遍。

  非连续传输

  在典型的谈话过程中,语音仅占总时间的大约40[%]。为减少对无线接口的干扰,可采用非连续传输(DTX),即移动电话仅在有语音信号时才进行传输。此功能要求有如下几项内容,即:语音活动检测(VAD)、用于空中接口的静寂描述符(SID)帧及舒适噪音产生等。

  为减少猝发传输的总时间,语音解码器必须能确定什么时候有语音。由于编码的自然特性,可通过分析中间参数来精确确定是否有语音。重要的是要保证阈值合适,太灵敏会由于无线传输次数太多而对空中接口不利,而灵敏度不够则会切断语音并使声音质量严重下降。

  尽管在理论上VAD是实现DTX所需的全部,但来自接收器的完全静寂降低整体感觉质量。为解决此问题,接收器采用了“舒适噪音”功能,即利用SID帧参数的逐渐衰减来产生类似发射器背景噪音的声音。

  当VAD确定没有语音时,在空中接口上不进行传输(实际情况比这更复杂一些,但其基本原理一样)。经过一段预定时间间隔后,再发送一个包含一组参数的SID帧,这些参数用于接收器舒适噪音产生功能。

  实现

  语音编码功能可解释为像卷积这样的数学密集型处理,在带有处理这类计算指令(例如乘法-累加指令)的专用DSP上能得到实现。尽管这可以在通用处理器上实现,但要求有更高数量级的时钟速度来与同样的执行速度相匹配。

  不同处理内核中所实现的EFR及全速率声码器执行速度不同。作为一种与时钟速度有关的比较,DSP全速率实现的速度大约要比奔腾处理器实现的速度快3.5倍,而经彻底优化后的SC140实现的速度要比奔腾处理器实现的速度整整快18倍。

  在语音编解码器中采用了许多优化技术。最初一般将数据偏移以使计算更加容易并能再利用存储器空间。例如,用剩余滤波器写入输入阵列而不使用新存储器空间。

  处理器可采用定制浮点实现来在内核中提供浮点支持。这些实现不是位精确的,这意味着它们不能得出像定点参考实现一样精确的数学结果。但通过软硬件中针对这类数学算法的优化,速度可明显提高。而输出参数,当被送入定点解码器时,将产生感觉上一样的声音帧。

  测试位序列

  为检验依从性,ETSI颁布了一组全面的测试位序列。它们由输入文件(160个13位采样值)、编码文件(通过解码器的结果)、一些解码文件(用于直接提供给解码器)以及输出文件(代表来自输出的160个采样值)组成。

  而像VAD及舒适噪音产生等额外功能,则用各种序列进行隐含测试。同时也对不同输入压缩扩展方案(A-law和(-law)进行测试。

  浮点实现一般不遵循ETSI位序列,但能产生一组感觉上与定点编码器及解码器相兼容的参数。

  对语音编码器实现的定性评价,可用Racal仪器公司带VQA的AIME系统来测试。这种系统允许建立原始流量信道(无需完全的GSM协议实现),且能执行全速率的空中传输双向语音编码。

相关百科