罗功银 周 正 冯伟东 国网湖北省电力公司信息通信公司
基于DM642的高速语音编码器设计与实现
罗功银 周 正 冯伟东 国网湖北省电力公司信息通信公司
变速率语音编码;AMR-NB;算法优化
语音通信是人类通信最基本、最重要的方式之一。由于移动信息网络技术的不断进步,语音通信工程也逐渐发展壮大起来,同时,二者之间的联系也更加紧密。在语音通信的数字化发展过程中,语音编码这个关键技术也有了长足的进步。特别是当移动通信经历了三次革新后,相应的语音编码运算方式也要变得更为先进,表现为码率保持在较低的水准,从而提高系统存储水平,以及要显著提升合成音的质量,从而确保通话活动的顺利进行。与此同时,在移动通信市场领域内表现出极其激烈的竞争,研究热点也很快转移到了对变速率语音编码的研究方面。伴随着日臻成熟的科学技术,其应用范围也变得越来越大[1]。以3GPP与以码激励线性预测(Code Excited Linear Prediction,CELP)算 法 为 基 础, 在AMRNB(Adaptive Multi Rate-Narrow Band)语音编码规范被制定出来,它被广泛应用于第三代移动通信系统中。 300Hz~3400Hz是AMR-NB算法使用的信号频段, 8kHz是其抽样频率,并拥有4.75~12.2 kb/s的八种速率及一种1.8kb/s的背景噪声编解码方式。依据无线信道和传输状况,它能够自适应地挑选一种编码方式实行传输[2]。
对于AMR编码的研究,现在普遍都是在确定基准版本之上,来改善3GPP发布的以AMR-NB准则为前提的ANSI-C代码。实际上,定点C代码是能够自主运行的,然而它会产生大量的不必要损耗,因为算法本身具有极强的复杂性,因此所研发的产品不是需要耗费大量的计算资源,就是难以及时运用到实际领域中,所以难以作用于计算资源受限的移动终端。因此,根据平台的差异,代码也应进行相应地灵活调整。
1.1 语音编码发展现状和发展趋势
在对语音数字进行处理的过程中,通常会用到语音压缩编码,其存在的意义是实现以最小比特达到最高合成音质的效果。该技术在速率方面由变化代替了固定形态,而比特率也在逐渐缩小。根据编码的手段来划分,语音编码有波形、参数以及混合三种编码形式。
图1 AMR-NB语音编码结构图
波形编码会把频率以及时间区域里所发出的信号即时转化成数字信号,它作用于语音波形之上,尽量确保输入波形不发生改变,也就是说反馈的语音信号和输入波形保持高度的一致性,从而达到高音质目标。这种编码的优势在于音质高、抗噪能力强、符合预测编码的要求等。而它的不足之处在于其要求较高的码率环境,一旦速率无法保证,音质也难以达到较高的水准,一般会下降到16kbit/s~64kbit/s的范围里[3]。
参数编码(即声码器编码)是通过频域等转化区域来获得能够反映信源信号特点的参数,并对其加以编译处理,再传递出去;接着把所获数字化的信号内容由译码端编译为相应的特征参数,以此来再构造语音信号。如果实践环境中没有太高的嗓声,那么合成音效也会和音源保持较高的一致性。其特点是码率低,但语音质量不高。以线性预测 (速率为2.4kbit/ s的LPC-10E)为基础的声码器是参数编码器中最有影响力的,不过,因为它较差的语音质量,现在已完全被新的编码器取代。参数编码能够达到语音方面的低速率编码要求,码率下限能够小于2.4kbit/s。而它的不足之处在于音质不好,失真度高[4]。
混合编码整合了以上两种编码方式,它先以语音来创造模型,并将相关参数加以编译,降低波形编码环境里的目标量及其运动区间;还能通过编码使与原始型号语音波形相接近的合成语音得以实现,进而使发言人的所有自然特性得以保留,使合成语音效果得以增强。高品质的合成语音在4kbit/s~6kbit/s速率上可以较容易的获得[5]。
语音编码器早先是以标准PCM波形为基础的,而今已开始运用声码器进行参数编码工作了,其速率也由64kbit/s下降到了4kbit/s,并用自适应的多重码率取代了以往单调而唯一的码率,而这些年中,宽带语音编码技术也产生了巨大的飞跃。根据语音编码的时代变迁情况,其由下列三阶段构成。
第一个阶段,波形编码被语音处理所取代并开始涉及到参数编码探索领域,从此打下语音模型的基础。由于科学、有效的共振峰声码器面世,线性预测编码(LPC:Linear Predictive Coding)也开始在语音分析合成领域发挥出巨大作用,在此基础上产生了协方差、格型以及自相关这类效率高、实效性强的算法。此后又诞生了运用瞬时频率原理而研制出的相位声码器,根据倒谱特性而构造成的同态声码器,并将声码器标准定在了2.4kbit/s。
第二个阶段,语音编码发展的快速时期,闭环分析算法的研究最为突出。 1985年,M.R.Schroeder以及B.S.Atal首次以闭环分析思路创造码本激励线性预测的运算方式。以此算法为前提,产生了联邦标准4.8kbit与FS-1016、G.728、G.729以及G.729A这些标准,同时还将低时延码以及共轭结构代数码这类具有激励性质的线性预测手段用于实践。而且还产生了能够满足Internet双速率(5.3/6.3kbit/ s)的标准G.723,并被广泛运用于多媒体领域[6]。 VoIP技术所遵循的标准一般是G.729、G.729A以及G.723。
第三阶段以移动通信在三次革新后所采取的编码手段为对象,研究并设计相应的宽带标准。在此过程中,变速率技术有了较大的进步,各式各样的国标与区域标准层出不穷。相应的编码包括:QCELP、EVRC、AMR、AMR-WB、SMV以及VMR-WB等等。以3G准则为前提,我国挑选了AMR编码来设计了时分同步码分多址(TD-SCDMA);而美国所创造的CDMA2000标准一度选择QCELP、VMR-WB以及EVRC来进行编码活动;而欧洲所创立的宽带码分多址(WCDMA)也选择了AMR以及AMR-WB技术,此外还有SMV这个预备技术[7]。
语音编码算法一般都是以电话频带所产生的语音信号为对象,通常带宽在300~3400Hz区间中。这样就不会降低语音的主观质量[1],因为很多冗余度来自于语音信号本身,如数据冗余、频谱冗余、时域冗余等。为了实现语音质量的改善,在通信系统总容量不变这一前提下,变速率语音编码为我们的第一选择。 ETSI/3GPP于1999年制定了基于码激励线性预测(CELP)算法的语音压缩编码标准AMR-NB,应用于第三代移动通信W-CDMA系统中。
1.2 AMR-NB语音编码原理
语音信号被AMR编码器进行八种不同速率的编解码, 8kHz采样是编码器的输入频率,线性PCM编码采用16bit进行量化,20ms是一个语音帧的编码操作间隔,这样采样点就是160个。 ACELP模型的参数被发送端编码器进行提取并传输,而解码器在进行接收时,为了建立对应的激励信号,就会按照有关参数重建语音。
AMR编码器的架构图如上图1所示,其主要模块的原理分析如下:
(1)在将要对语音信号进行编码时,需开展预处理工作,也就是压缩信号并进行高通滤波器筛选。这类滤波器会阻截80Hz的频率,从而化解低频干扰,而通过压缩之后,信号就能够有效避免运算溢出的问题。
(2)使基音分析得以简化是开环基音分析的目标,并把开环基音估计值的较近区域作为闭环基音分析的范围。以加权语音数据为基础的是开环基音估计,也就是说这个信号是通过预处理和加权滤波后形成的真正输入信号。
(3)采用AMR语音编码对脉冲响应进行计算,实际上指的是感知加权结合在一起的合成滤波器所产生的脉冲响应,这不仅参考了合成滤波器,还考虑了感知加权滤波器,能够用来进行自适应,也可以用来搜索固定码本。
(4)对于自适应码本的查询活动需要以子帧为平台,基音延时和滤波器增益就是其参数,并包含了闭环检索和矢量计算等工作。相关的搜索流程可适用于所有的语音模式,仅在对适用区间、分数基音分辨率和内插所要用到的FIR滤波器的选择上有所差异。
(5)以交织的单脉冲序列设计为基础的是固定码本结构。包含在码本中的非零脉冲幅度可以为正也可以为负,它在-1和1之间存在。对应子帧和脉冲有40个位置可以被分为n组(n由语音方式种类决定)。将加权输入语音以及解码语音两者之间所存在的均方误差降到最低是搜索固定码本执行的原则。对闭环基音进行搜索主要是通过将自适应码本进行缩减来更新目标信号的。
图2 语音处理的硬件系统框图
DSP芯片是一种专用的处理器,其主要功能在于当模拟信号转换为数字信号的时候对其加以及时的高速处理,在结构设计上具有一定的特殊性,不同于微处理器,比较适合处理实时信号。DSP芯片能够用来实现语音编解码,按照语音编码所具有的复杂程度,还有具体的应用场合,对DSP进行选择,并按照DSP所呈现出的结构特点,对编码加以优化处理,这样可以促使语音编码的有效运行,扩大应用场合的范围。
表1 对10帧语音数据进行编码时调用的基本算子次数
2.1 硬件系统平台
本文所采用的硬件系统平台是直接采用TMS320DM642v1.2开发板。 TI(美国德州仪器)公司推行的新一代以C64内核的32位高性能的定点数字媒体应用处理器为基础的TMS320DM642(Digital Media Processor),600MHz是它的CPU内核频率,能够达到5760MIPS(百万条指令/秒)的数字处理峰值。在对两极缓存加以应用的时候, DM642的外围设置不仅强大,而且富于变化性。一级程序当中的缓存L1P属于一种直接的映射缓存,为128Kbit;此外,另一级程序中的数据缓存L1D属于一个设置缓存,具有双路结合性,也为128Kbit。如果L2存储器的容量为256KB,那么就可以将其设置为一个映射存储器,可以是高速缓存的,也可以把两者结合起来。除此之外,基于外围设置我们可以看出,它一般包括以下配件:用于配置的视频端口3个、10/100Mb/s的以太网控制器(EMAC)1个、数据管理输入输出(MDIO) 1个、内插VCXO控制接口1个、 McASPO 1个、12C总线1个、McBSPs 2个、32位通用定时器3个、用户配置的十六位或三十二位主机接口(HPll6/HPl32) 1个、 PCI 1个、 16引脚的通用输入输出口(GPO) 1个(拥有可编程中断/事件产生模式)和64位EMIFA 1个(可使同步、异步存储器互联,还能沟通外围)。
2.2 构建硬件系统的整体设计
AMR-NB算法实际上是对纯语音数据的一种处理,所以这一算法的实现,仅仅会涉及DM642开发板当中的一些资源,其硬件图如图2。
针对AMR-NB算法,其测评可以分两阶段实行,以测试序列语音的优化处理为基础的是第一阶段,通过仿真器可以对其序列的信号传输进行测评。改进后AMR-NB算法在硬件上的实时实现一般可以在第二阶段进行。
2.3 软件研发平台
CCS2.2 (code composer studio)平台用于AMR-NB算法的代码优化和调试,而VC++软件平台用于最标准参考代码的验证。
TI公司研发了一款新的工具,主要用于DSPs软件开发,即CCS2.2 。其重要组成部分包括以下几种,首先是产生C6000代码的工具,还有软件模拟器,并且还包括实时的基础软件,以及对主机数据进行实时交换的一款软件,此外还包括实时分析软件,以及数据可视化的相关软件。 CCS具备调试功能,并且具有较高的精度,这就使得DSP软件在进行代码开发的时候不再那么困难。
从编程方式来看, CCS2.2 较为灵活,可以应用C语言,也可以使用汇编语言,还能进行线性汇编,此外也能够应用混合语言进行编程。并且它在优化编译器的时候,其组合形式也不尽相同,如果源代码没有发生改变,那么可以对代码性能加以相应的改善。具备代码剖析功能,有助于方便地进行程序测试,并对其加以优化。 CCS2.2 主要有模拟软件以及硬件仿真两种开发环境,在调试代码阶段,主要用模拟软件这种开发环境,实时实现则需要在硬件仿真环境中进行。
http://www.3gpp.org网站下载AMRNB算法的C源代码,由Visual C++6.0平台实现其对这种代码的精确性测评。对它各种各样的模式以及测评系列进行测评是其主要功能。
针对一般的PC机代码就是使用的AMRNB算法里的C源码,就细节性的应用而言,相应的优化处理应依据平台的特性来实现,这样可以使应用的现实目标得以达成。本文对AMR-NB算法的C代码进行阐释、优化,并详细解析了其实时实现的细节化手段和相关手法。
3.1 AMR-NB编码算法移植
在Visual C++6.0下运行ARM_NB标准源码时,需要将编解码的文件整理出来,在对应VC工程下总共有112个C文件。之后,将以上提到的文件以及相应的头文件拷到在CCS2.2 下最新构建的一个工程的目录之下。编译器在BuiltOption中添加-i"D: i myprojectsARM_NB",文件的包含路径就是这个,之后在工程项目下拉菜单里扫描所有文件,就能在DSP编解码库工程中加载标准源码中的头文件了。此外,对内存空间要进行合理的分配,因为DM642只有32M的有限容量,写一个CMD文件分配段的存储小程序就很有必要了。
因为DSP编解码工程具有较多的全局变量以及静态变量,编译时有较大的出错可能,主要是由于全局以及静态变量具有的默认声明都为near,所以寻址范围仅能达到32Kbytes,如果要把这个改成far,那么advanced就会在Built 选项的编译器中将Memory模式自动改成far calls &data。 __MSDOS__;VAD1在VC程序的ARM_NB工程中得到了预编译,所以这些也需要在Built选项中的compiler.->preprocessor里进行同时添加。到这个时候,我们才算是完完整整地建立起了DSP编解码工程。
除此之外,因为一些细微差别存在于PC以及DSP平台的某些数据结构中,比如在VC下long是32位,在DSP平台下是40位就是其最为重要的差别。因此就需要我们对typedef.h中的typedef long Word32进行修改,将其手动改为int型。
3.2 使用内敛函数优化
通过对CCS中所包含的profile进行c代码功能剖,我们能够很容易地发现大多数的运算时间均在basicop2.c以及code.c与decode.c等代码中花费。其中, basicop2.c的算子是标准源码中的所有基础运算,如简单的加减运算和位移运算等。这些基本运算中的大多数在编解码过程的调用次数很多,表1给出了编码10帧语音时的调用次数统计。
C64xDsP提供了大量内联函数,直接与汇编指令相对应,可以使C函数在不同的周期执行,从而有效地提高工作效率,并且代码尺寸也会得以降低。倘若一个函数属于内联函数,那么在对其进行调用的时候,编译器就会将其自动地展开至其调用代码中,就降低了调用成本。若将这些基本运算用内联函数进行优化,则可大大提高编解码库的效率。
对长,短基本算子依据C64xDsP提供的内联函数,可以给出直接定义来进行运用的我们就可以对其进行直接定义,对无法进行重定义的,就实行再一次的编写。 C语言的短型饱和加法就是一个很好的例子,表2给出了替换AMR-NB基本算子所需的内联函数形式。
表2 AMR-NB基本算子所对于的内联函数
用profile测试code.c中的252到310行,此代码段对音频数据进行读取、编码、存储,未优化前的周期数是240461626。对basicop2.c进行内联优化之后的周期数是49035445。
3.3 以编译器为基础的C优化
对满足ANSI标准的C代码采用TMS320C6000的C编码器可以实行编译,其内部包含着具备多个优化级别的C优化器,其级别可以根据不同需要加以设置,十分方便;为了缩短代码长度、提高执行效率,这样的优化也显得尤为必要。
包含在编译器中的C优化器窜向能够实现对C代码进行优化的功能,总共包括四个优化级别,其中默认的级别有-o0、 -o1、 -o2选项,以及-o3。 -o2选项。不仅C优化器可以实现优化,而且C编译器所包含的代码产生器同样能够进行优化,并且独立于优化选项。 C优化器主要是对软件流水进行优化。针对软件循环,自-o2起的优化器将处理相应的软件流水。软件流水是一种的技术,可以用来专门优化循环代码,通过流水产生的代码极为紧凑,因此其编译效率较高。
各种C文件在默认状态都会被C优化器分别进行优化处理。假如可以在整个程序范围内对特定情况实行优化,则还可以进一步的提升优化器的效率。在编译项内能够添加-pm,把一个程序所涵盖的各种C文件加以合并成,然后变成一个模块再实行优化处理,这是它所起到的主要作用。
本文经编译器-o3、-pm、-op2优化,编码10帧音频的周期数是88978822,程序效率提高了63%。若联合使用编译器优化和内敛函数优化,编码10帧音频的周期数是2998123,效率提高了98.7%。
数字通信系统中已广泛使用了语音编码技术,尤其是移动通信领域,其慢慢开始占据主导位置。同时,语音编码技术还在不断的进行着革新,主要表现在定速率向变速率的转变和高速率向低速率的转变。移动通信3G已将AMR-NB语音编码作为一种备用标准。所以怎样提高其实际的运行效率,缩小占用空间,在扩展语音技术应用领域上至关重要。 AMRNB原算法中产生的C标准代码只能应用在PC机上,其针对应用平台的运行效率并不算高。本文充分利用了DM642平台硬件资源的优点,设计了AMR-NB语音编码算法的硬件平台方案并实现了算法移植,移植后算法效率提高了98.7%。
[1] 王炳锡,王洪编著.变速率语音编码[M].西安电子科技大学出版社,2004.6
[2] ETSI.EN 301 704 V7.2.1 Digital cellular telecommunications system (Phase 2+) (GSM);adaptive multi-rate(AMR) speech transcoding[S];ETSI,2000.
[3] 胡航.语音信号处理[M].哈尔滨:哈尔滨工业大学出版社,2002,135-171.
[4] 李昌立,吴善培.数字语音-语音编码实用教程[M].北京:人民邮电出版社,2004,20-24
[5] 韩纪庆,张磊,郑铁然.语音信号处理[M].北京:清华大学出版社,2004.
[6] 王炳锡.语音编码[M].西安:西安电子科技大学,2002,1-8
[7] 王崇斌.G..722.2 的研究及其定点DSP的实现:[M].武汉:华中科技大学,2005,2-5.
罗功银(1963),男,湖北监利人,高级工程师,从事电力信息通信技术研究及运行管理工作。
周正(1980),男,湖北武汉人,高级工程师,从事电力信息通信调控与视频会议运维管理工作。
冯伟东(1982),男,湖北武汉人,高级工程师,从事电力信息通信项目与技术管理工作。
AMR-NB算法的原理是本文研究的重点,同时本文详细地阐释了该算法的每个模块;经过探究DM642芯片的硬件资源,对实现AMR-NB算法的硬件平台的组建条件和计划进行阐明;本文还对AMR-NB算法的优化和实现方法进行了探究。基本算子的内联函数宏定义也在本文提出的优化工作范围之内,重点研究了基于编译器的C优化。在使用AMR-NB算法优化之前和优化以后进行了对比试验,并进行测评与解析,结果显示,其算法通过优化后在计算效率方面有了较大的改善。