资源描述
精品论文推荐用于 G.723.1 语音编解码器加速的向量处理器研究邢雲峰, 桑林 北京邮电大学电信工程学院,北京 (100876) Email: xingyunfeng摘 要:编解码时间是语音编解码器的一个关键性能指标。本文提出了一种利用可配置的向量处理器来配合嵌入式处理器进行G.723.1编码的方法,测试结果表明,这种方式可以显 著提高嵌入式处理器的编解码速度。 关键词:语音编解码器;向量处理器;嵌入式处理器;语音编码中图分类号:TN912.321.引 言G.723.11是国际电信联盟(ITU)于1996年推出的面向多媒体通信的低码率语音编码标 准,采用了码激励线性预测(CELP) 算法,在低码率下能达到较高的合成语音质量,且算法 复杂度不太高。它最初是为可视电话而设计的,包括5.3 kb/s和6.3 kb/s两种速率,分别采用 代数码本激励(ACELP)和多脉冲最大似然量化(MP-MLQ)技术。在VOIP技术蓬勃发展的今天,为了节省IP语音包的带宽占用,大多数的IP终端都支持 用G.723.1进行语音编解码。虽然ITU-T G.723.1协议提供了G.723.1语音编解码器的C语言源 代码,但是在实际的应用中,由于G.723.1编码计算量比较大,如果想通过一台IP终端实现 三方通话,往往需要一片专用DSP来进行语音信号的处理,这样增加了终端的成本。本文先 从分析G.723.1编解码算法的特点出发,然后根据G.723.1编解码算法的特点设计向量处理器 来辅助嵌入式处理器进行编解码,最后根据实际测试结果给出结论。1.G.723.1 算法特点分析首先利用 VC+的 profile 功能对 G.723.1 语音编解码器的定点 C 语言源代码执行参数为function timing 的 profile 测试,测试结果见表 1。表 1 未优化代码的 profile 测试(%)码率5.3k6.3kL_mac21.532.4L_mult16.917.7L_add16.415.6L_msu3.93.8L_shr6.43.1L_sub1.71.7L_shl0.30.4Round0.50.4mult_r0.30.3Sature0.60.1Shr0.10.1Shl0.30.1Add0.70.1Sub0.10.1合计69.775.9- 5 -从表 1 可以发现,在 G.723.1 语音编解码算法中,表中所列的这些基本运算占到总运算量的 70%左右,因此如果可以将这些基本运算拿出来单独处理,将有可能大大减少嵌入式 处理器的编解码时间。进一步的分析发现,这些基本运算很多都出现在计算信号的互相关, 能量,滤波等循环计算中,这种计算形式可以认为是把一段时间的信号看作一个一定长度的 向量来进行处理,如果设计一个专用的向量处理器来进行这种向量的运算,将使得减少 CPU 的编解码时间成为可能。2.向量计算单元数据通路设计向量计算单元设计为一个时钟周期完成一次乘加运算,具体结构如图 1 所示。所有待计 算的向量由 CPU 事先储存于内存中,向量计算单元根据 VDR 寄存器的设置从指定的地址 取得待运算的向量,然后根据 CR 寄存器的指令进行相应的运算。需要指出的是这里的向量 均由 16 位的定点数据组成。图 1 向量计算单元数据通路该计算单元可以完成的向量运算包括两个向量相乘,一个向量乘常数再与另一个向量相 加,两个向量相乘并将结果累加等等。这里用一个具体向量运算指令对图 1 进行说明。 指令名称:VADDQ指令功能:T = ( A + B * CONST16 ) SHIFTT,A,B 均表示由一定长度的 16 位定点数构成的向量,SHIFT 表示每个计算结果右移 的位数。计算过程如下:z在第一个时钟周期,数据 Ai和 Bi被放入寄存器,16 位常数寄存器记录的常数也准备 进入乘法器.z在第二个时钟周期,得到 CONST16 与 Bi相乘的结果 b,同时,Ai被左移 15 位变为Q30 的数 a 作为四路复用器的选择数据(a 的第 32 位按照第 31 位进行了符号扩展)。z在第三个时钟周期,将第二个时钟周期得到的 a 与 b 两数做饱和加法,记录 Q30 和 Q31两个和。z在第四个时钟周期,将 Q31 和右移 SHIFT 位然后进行 16 位饱和及四舍五入变为 Q15结果。z在第五个时钟周期,将 Q15 结果写回向量 T 所在的内存中得到 Ti。 图 1 各个功能块作用解释如下3.1 寄存器整个数据流可以分为 5 个阶段,寄存器记录每个阶段运算的结果。3.2 符号扩展这个功能块是用来把 16 位定点数通过符号位的扩展变成 32 位定点数,扩展后的数据高17 位均为符号位。3.3 Q15 变为 Q30这个功能块是把 Q15 的 16 位定点数直接左移 15 位变为 Q30 的 32 位定点数,最高两位 均为符号位。3.4 乘法器这个功能块是用来做两个 16 位有符号定点数的乘法,结果为 32 位有符号数。3.5 饱和加(减)法器这个功能块用来做饱和加减法,一般情况下,当两个加数符号相同而和与它们的符号相 反时,此时相加结果饱和,当加数为正时,和取为 0x7fffffff ,当加数为负时,和取为0x80000000,其它情况均直接取相加结果作为最终结果。而在做减法时则相反,当被减数和减数符号相反而差与被减数的符号相反时,此时相减运算结果饱和,当被减数为正时,和取 为 0x7fffffff,当被减数为负时,和取为 0x80000000,其它情况均直接取相减结果作为最终 结果。3.6 移位,四舍五入及饱和这个功能块是考虑到计算结果由 Q30 变为 Q15 移位时会遇上饱和问题,以及为了增加 结果的精度进行四舍五入而设计的。3.实际编解码效果将向量处理器集成于ARM922T2的核中,架构方式如图 2 所示。CPU通过AHB总线将 数据写入向量处理器,然后写命令寄存器开始向量运算,运算结束后CPU再通过AHB总线 从向量处理器取回运算结果。图 2 向量处理器应用方式首先将 ITU-T G.723.1 协议所提供的 G.723.1 语音编解码器的 C 语言源代码中可以采用向量运算指令计算的部分全部用向量计算指令优化,然后用 ITU 所有的 G.723.1 测试向量逐一对优化过的代码进行编解码测试,全部与标准结果一致后进行编解码速度的测试。 测试环境设置如下:CPU 与总线工作频率均为 60MHz,打开数据 cache 和指令 cache,打开 MMU。编解码测试性能数据如表 2 和表 3 所示,表中向量长度是用时间计算的,以ms 为单位。表 2 采用向量处理器后的编码性能测试向量向量长度(ms)编码速度(ms)CODEC63.TIN OVERC63.TIN PATHC63H.TIN TAMEC63H.TIN INEQC53.TIN OVERC53H.TIN PATHC53.TIN93906003057030001890630308409345.8757.935681.93841.81721.5583.028596.9表 3 采用向量处理器后的解码性能测试向量向量长度(ms)解码速度(ms)OVERD63P.TCO PATHD63P.TCO TAMED63P.TCO INEQD53.TCO OVERD53.TCO PATHD53.TCO9903000300060780120127.1351.3397.53.651.77.7从表 2,表 3 的结果可以看到,在前面所述的测试环境下,采用 ITU-T G.723.1 进行编解码基本可以做到 1 路实时编码和 7 路实时解码。考虑到实际 CPU 的工作频率一般为测试 频率 60MHz 的 3 倍左右或者更高,那么采用上述方式进行编解码完全可以做到 2 路实时编 码 16 路实时解码。在其它测试环境不变但是不采用向量处理器的情况下,测试结果如表 4 和表 5 所示。表 4 采用向量处理器后的编码性能测试向量向量长度(ms)编码速度(ms)CODEC63.TIN OVERC63.TIN PATHC63H.TIN TAMEC63H.TIN INEQC53.TIN OVERC53H.TIN PATHC53.TIN939060030570300018906303084036144.42708.9130341.913486.45689.82020.298168.1表 5 采用向量处理器后的解码性能测试向量向量长度(ms)解码速度(ms)OVERD63P.TCO PATHD63P.TCO TAMED63P.TCO INEQD53.TCO OVERD53.TCO PATHD53.TCO9903000300060780120294.3819.1903.77.295.214.5表 4,表 5 数据表明,只用单片 ARM9 的 CPU 进行一路 G.723.1 的实时编码是不可能的。4.结 论本文结合 G.723.1 的算法特点设计了向量处理器来分担 CPU 的编解码运算负担,实际 测试结果表明该方法可以大大提高单 CPU 的编解码速度,这使得单台 IP 终端实现以 G.723.1 的编解码方式进行三方通话有了高性价比的解决方案。参考文献1 ITU-T Recommendation G.723.1 Dual Rate Speech Coder For Multimedia Communications Transmitting at5.3&6.3kb/s,Geneva,19952 ARM922T Technical Reference Manual (Rev 0), Vector Processor for G.723.1 Speech CodecXing Yunfeng,Sang LinSchool of Telecommunication Engineering, Beijing University of Posts and Telecommunications, Beijing (100876)AbstractThe running time is a key element of a speech codecThis paper presents the results of an investigation of employing configurable vector processors to accelerate the G.723.1 speech codec.According to the objective test,it can highly improve the coding and decoding speed of theembedded CPU.Keywords: speech codec, vector processor, embedded processor, speech coding
展开阅读全文