![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测 . 技术文库 . 会员区 . 开发板 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| DM642上G.729A编解码算法的实现和应用 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
作者:沈勇 唐昆 文章来源:微计算机信息 点击数: 更新时间:2008-4-29 ![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
作者:沈勇 唐昆 来源:微计算机信息 摘要:语音通信是多媒体通信的基础,G.729A标准由于其高质量和低延迟在多媒体通信中被广泛应用;TI TMS320DM642高性能处理器是专门为多媒体通信而设计的,是组成多媒体终端的核心;本文研究了G.729A算法在DM642上的优化方法和具体应用,并实现了高效率的编解码器。 随着互联网络的发展,基于网络的多媒体通信越来越引起人们的关注,多媒体通信的基础是语音通信,为此国际电信联盟电信组(ITU-T)创立了G.711,G.723,G.729等多个语音编码的标准,其中G.729及其附录A以其较低的编解码复杂度,较高的语音质量和很低的编解码延时获得了人们的青睐。 多媒体终端是通信网络的重要组成部分,一个多媒体通信终端需要融合系统、传输、图像、语音、数据等多种功能,这就要求其核心处理器具有强大的处理能力,TI公司最新推出的TMS320DM642芯片正是为此设计的,它为多媒体信息的处理和通信提供了丰富而强大的功能。因此如何在DM642处理芯片上实现和应用G.729A编解码器是一个值得研究的问题。 1.语音编码原理和G.729A编解码器语音编码算法从上个世纪七八十年代兴起,已经发展得相当成熟和完善。语音编码一般分为三种类型:波形编码,参数编码和波形参数混合编码。波形编码是以逼近声音波形为目标的,其代表的算法有G.711,它的声音清晰度好,语音的自然度高,但是压缩效率比较差,常在32kbps以上。参数编码是把人的声道抽象成一个发声模型,对这个模型的参数进行编码,特点是语音压缩效率高,但是自然度比较差,可以在极低速率进行编码。波形参数混合编码结合了以上两者的优点,代表算法有G.723,G.729等,能在4-16kbps的速率上进行高质量的语音合成。 G.729采用的是共轭结构的代数码激励线性预测算法(Conjugate Structure Algebraic Code Excited Linear Prediction,CS-ACELP),这是一种基于CELP编码模型的算法。由于G.729编码器能够实现很高的语音质量(MOS分4.1)和很低的算法延时,被广泛地应用于数据通信的各个领域,如IP Phone和H.323系统等。G.729是对8KHz采样16bit量化的线性PCM语音信号进行编码,压缩后数据速率为8Kbps,具有16:1的高压缩率。 CS-ACELP编码器是以码本激励线性预测编码(CELP)模型为基础的。编码器对10ms长的语音帧进行处理,逐帧地提取CELP模型参数(LP滤波器系数、自适应码本和固定码本索引和增益),然后对这些参数进行编码和传输。编码参数的比特分配显示在表1中。
表1 G.729码字分配表 在解码器端,这些参数用来恢复激励信号和合成滤波器参数。重建语音是使激励信号通过线性预测(LP)滤波器滤波后得到的,如图1所示。其中,短时合成滤波器是一个10阶线性预测滤波器,而长时合成滤波器,或称基音合成滤波器,是利用自适应码本的方法来实现的。计算出合成语音后,还要进行后滤波以提高语音质量。
图1 G729解码器示意图 G.729以10ms为一帧,编码时需要前一子帧作为参考帧,所以编码延时只有15ms,特别适用于实时通信系统。 G.729A是G.729的简化版本,两者的编解码结构相同,码流可以互通。主要的简化有:感觉加权滤波器采用量化的LP滤波系数,简化了自适应和固定码本的搜索,在解码器中只使用整数延迟,简化了谐波后滤波器。经过这些简化,G.729A的运算量比G.729减少约一半,而语音质量只有很小的下降(MOS分3.9),因此在实际的工程应用中一般都采用G.729A。 2. TI DM642平台介绍 DM642是TI公司针对多媒体通信市场而推出的一款定点DSP处理器,它的内部时钟频率高达600MHz,8个并行运算单元,处理能力达到4800MIPS,外部总线频率100MHz。芯片集成了3个高精度、可配置的视频端口,10/100Mbps的以太网MAC,面向音频应用的多通道音频串口(McASP),66MHz 32bit的PCI口。 图2 DM642 DSP处理器
DM642的核心设计有很多出色的地方,DM642采用的是高性能的超长指令字(Very Long Instruction Word,VLIW)架构,核心部分是一个RISC核和通用寄存器。DM642芯片内有64个32bit的通用寄存器,这比C62x多了一倍;DM642支持宽长度的存储器对短字长的数据进行访问和操作,可以在一个时钟周期里面进行4个8位的加法或者2个16位的乘法操作,另外还有增强的移位,取整,比较等的功能,这些都统称数据打包技术。它对速度提升的效果非常明显。 DM642设计的一个特色还在于它的EDMA(Enhanced Direct Memory Access)功能。EDMA控制器可以独立于CPU处理L2 Cache/SRAM和C64x外设之间的数据传输,它的EDMA增强至64个通道,能够同时处理64路不同内容(传输源地址、目的地址、传输数量、触发方式等)的DMA传输。 最后DM642的高性能还得益于DSP内部的两级高速缓存(cache)的结构设计,芯片的第一级(Level 1)缓存包括16KByte的程序缓存(L1P)和16KByte的数据缓存(L1D),第二级缓存(Level 2)有256KByte,程序空间和数据空间是共用的。它可以设置成存储单元(memory),高速缓存(cache),或者是这两者的结合,具体的分配可以由程序员配置。两级缓存的结构设计有效地解决了DSP外部存储器时钟频率小于内部时钟频率的问题。合理利用两级缓存配合低工作频率的外部存储器,系统的效率能够达到全部使用高工作频率的内部存储器的80%到90%。 DM642强大的功能为多媒体信息的处理奠定了坚实的基础。与DM642配合使用的软件开发环境是TI的开发工具CCS(Code Composer Studio)。它包含有C编译器,汇编器,实时操作系统DSP/BIOS,主机与目标板之间的实时数据交换软件RTDX,实时分析和可视化工具等。 3.G.729A在DM642上的优化和实现G.729A编解码器在DSP平台上的实现需要经过以下几个步骤:PC上的算法实现和代码优化,代码向DSP平台的移植和针对DSP平台的代码优化。下面就这几方面进行逐一的介绍。 3.1 PC机上的代码实现和优化 我们以ITU的G.729 Annex A代码为基础,这是一份定点的源程序,有比较好的代码结构和完整的输入输出测试序列,只要通过了各组测试码,就可以认为程序基本正确了。 首先做的修改是把分布于各个文件的静态变量提取出来,定义成全局的编码和解码的结构体,以便于内存的管理和代码的规范。它的另一个作用是在进行多路编码的时候,不同通路的编解码可以定义不同的实体,实现了数据的私有和程序的共享,而原先定义静态变量的方法不能实现多路编解码。 其次,编解码函数接口要修改成语音数据和编码比特作为输入输出,以便于外部函数的调用和系统的集成。 在进行了这些修改之后,用标准测试序列进行测试比较,保证正确之后准备向DSP端移植。 3.2代码的移植 代码移植就是把PC上的C代码移植到DSP端,让它能够初步运行,主要需要考虑的问题是一些语法规则的修改和内存分配的问题。CCS允许程序员对代码的数据和程序区的物理地址进行分配,具体的设置在cmd文件里面进行。 3.3 CCS上针对DSP的代码优化 初步移植的代码在DSP平台上运行效率十分低下,根本不能满足实时编解码的要求,所以有必要针对处理器进行代码优化。 首先要充分利用CCS自带的编译选项进行优化,在DSP处理器性能突飞猛进的同时,编译器的效率也获得了长足的进步,常用的编译选项有-o3和-pm,是分别在文件级和程序级进行优化,优化效果比较明显。 由于语音编码的特点,编解码的函数都是由一些基本的加减乘除的简单函数组织而成的,这些函数定义在BASIC_OP.C和OPER_32B.C两个文件里面,如果能够对这些简单函数进行内联指令(intrinsic)的优化,就能达到事半功倍的效果。内联指令是汇编指令的直接映射,具有很高的效率。例如: #define mult_r(var1, var2) _mpylir(var1, var2) #define L_add(L_var1,L_var2) _sadd(L_var1,L_var2) #define L_mult(var1,var2) _smpy(var1,var2) #define L_shl(L_var1,var2) _sshvl(L_var1,var2) 等,基本函数的内联优化需要对原函数的定义和内联指令都比较熟悉。与此同时带来的一个问题是溢出保护位overflow的判断,这是基本函数里用来标识溢出的全局变量,它的作用等同于CSR(Control Status Register)寄存器的SAT(Saturation)位,当数据溢出时,SAT位被系统自动设置为1,所以编解码函数里对overflow的判断可以转化成对SAT位的判断。引用CSR寄存器时需要在最开始的时候声明extern cregister volatile unsigned int CSR。 G.729A的代码有很大一部分的运算量集中在循环体计算中,因而针对循环的优化很有必要。DM642芯片的8个并行运算单元对循环体的优化效果明显,在多重循环的时候需要把内部的小循环体拆分开来,使得代码结构清晰,编译效率提高,充分利用并行单元的处理能力。在循环体前用#pragma MUST_ITERATE(min,max)语句来说明循环执行的最小和最大次数也能够提高编译效率。循环体的优化还要充分利用数据打包技术,由于DSP对数据访问的指令周期特别长,因此宽长度的存储器对短字长的数据的访问和操作能极大地提高效率,例如_mpy内联指令可以进行一个16bit数的乘法,结果放在一个32bit数里面,_mpy2则可以进行两个16bit数的乘法,结果放在一个64bit数里面,效率至少提高了一倍。在运用数据打包技术的时候要注意数据地址的32bit对齐,否则在数据加载的时候会出现高低位倒置的错误。程序中定义的变量和结构体的地址都是32bit对齐的,而结构体里面的变量则是连续排列的,因此在我们定义结构体的时候需要仔细安排,保证结构体里的每一个数组的首地址都是32bit对齐的。下面是解码结构体G729DECPARM的定义。 图3 解码结构体定义 对于并行性不好的函数,单纯依靠编译器的优化还不够,有必要进行线性汇编或者并行汇编的优化,比较典型的是读写码流的操作,代码读写码流是先把编码出来的参数映射成字节,然后把字节映射成比特,把这两步联合起来,能够节省很多的运算。在编写汇编函数的时候要注意状态寄存器的压栈和保护,否则在实时系统里面可能会出现不可预知的错误。 G.729A的数据和代码长度比较小,可以全部放在DM642的片内,但是作为多媒体通信系统的一部分,片内资源十分宝贵,要预留给别的功能模块,所以只能把数据和代码都放在片外,它们的调度通过设置L2 cache来完成,设置L2 cache的指令是 CACHE_setL2Mode(CACHE_128KCACHE),测试证明,当设置128K L2 cache的时候,整体效率与完全放在片内几乎无异。另外由于语音处理的数据量相对较少,数据的搬移不会对效率造成影响,所以不需要设置DMA进行数据访问。 4.G.729A的优化结果和系统集成在完成了上述优化步骤之后,代码运行的效率大大提高。用CCS的Profiler工具进行测试,优化的结果如表2所示。
表2 G.729A优化结果(编解码器有共用的程序和数据) 在国际上,TI第三方SIGNALS+SOFTWARE公司实现的技术指标分别是编码器5.6MIPS,解码器1.1MIPS。编解码器一共6.7MIPS。 测试结果表明G.729A编解码器的优化效率已经达到了国际先进水平,完全能够满足单路或者多路实时通信的要求。G.729A编解码器集成的系统是经过TI公司认证的H.323通信终端,上面还集成了H.264、H.263、G.723、G.711等多种图像语音编解码器,因此对运算量和存储空间的要求都很苛刻。G.729A代码占用的系统资源很少,为多媒体终端里图像编码、系统调度、数据传输等其他功能的实现提供了保障。 长时间的系统测试表明,G.729A编解码器工作高效稳定,语音还原清晰,编码延迟短,非常适合网络的语音通信。它达到了系统集成的要求,已应用到了DM642平台实现的H.323可视电话系统中,在其它应用中也将有广阔的应用前景。 参考文献: [1] ITU-T Recommendation G.729 Annex A—Reduced Complexity CS-ACELPD, March 1996. [2] 杨行俊、迟惠生主编,《语音信号数字处理》,电子工业出版社,1995 [3] TMS320C6000 Programmer’s Guide, SPRU198 [4] TMS320C6000 Optimizing Compiler User’s Guide, SPRU187 [5] TMS320C6000 CPU and Instruction Set Reference Guide, SPRU189 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 没有相关文章 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|