logo资料库

论文研究-G.723.1编解码器在TMS320C50上的优化实现.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
第 27 卷第 4 期 2010 年 4 月  计 算 机 应 用 研 究 Application Research of Computers Vol.27 No.4 Apr.2010 G.723.1 编 解 码 器 在 TMS320C50 上 的 优 化 实 现 朱 荣, 胡瑞敏, 常 军, 王中元 (武汉大学 国家多媒体软件工程技术研究中心, 武汉 430072) 摘 要: 数字信号 处 理 器 在 语 音 编 解 码 中 得 到 广 泛 应 用。 在 简 要 介 绍 TMS320C50 定 点 DSP 芯 片 和 ITU唱T G.723.1语音编解码算法后,详细讨论了 G.723.1 在 TMS320C50 上的实现及其技术要点,主要是内存安排、算法 和代码优化、数据精度等。 设计的编解码器通过了 ITU唱T G.723.1 标准测试数据测试,占用内存资源较少,并具 备较高的编解码速度。 关键词: 定点 DSP; 语音编解码; G.723.1; 优化 中图分类号: TP391   文献标志码: A   文章编号: 1001唱3695(2010)04唱1400唱03 doi:10.3969/j.issn.1001唱3695.2010.04.053 Implementation of ITU唱T G.723.1 speech codec on TMS320C50 ZHU Rong, HU Rui唱min, CHANG Jun, WANG Zhong唱yuan (National Multimedia Software Engineering Research Center, Wuhan University, Wuhan 430072, China) Abstract: Digital signal processor is widely used in speech coding and decoding process.This paper after introduced TMS320C50 fixed point DSP chip and the algorithm of ITU唱T G.723.1 briefly, addressed the implementation of G.723.1 co唱 dec on TMS320C50.Some key design techniques, such as memory allocation, algorithm optimization and calculation precision processing were presented in detail.The realized codec not only can pass all the ITU唱TG.723.1 standard test sequences, but also performs high running efficiency with reasonable memory management. Key words: fixed point DSP; speech codec; G.723.1; optimization [1] 准 0 引言 以尽量减少实际语音与合成语音之间经听觉加权后的差分信 TMS320C50 定点芯片上实现的技术要点。 1 存储结构优化 算法的执行效率不仅受处理器速度影响,也与对存储器的 合理利用密切相关。 算法向 DSP 移植之前,需要对数据结构 作调整,使其符合目标芯片的存储结构特点。 此外,在一般 DSP 硬件平台上,存储体最少可分为片外存储器、片内高速缓 冲存储器和寄存器三类,它们的存取效率呈逐级加快趋势,存 储器优化的原则是尽可能使最近、最常用的数据缓冲在最快的 存储体中。 1畅1 算法的数据结构设计 由 ITU唱T 的第15 小组(SG15)1995 年提出的 G.723.1 标 是极低速率多媒体通信标准系列 H.324 中的有关语音编 码的一个标准。 G.723.1 编码器采用了线性预测分析合成的 技术,对8 Kbps 取样的16 bit 精度的PCM 数字音频进行处理, 号的能量为准则来进行编码的。 在 G.723.1 标准中提供了两 种可选速率,即5.27 Kbps 和6.3 Kbps。 与同样速率的其他语 音编码器相比,这两种编码器都具有较高的语音质量,较低的 编码延时(30 ms ~40 ms)。 其中5.27 Kbps 编码器只搜索一 个激励码本,所以速度很快,所需的存储空间也较小。 是美国 TI 公司开发的一种 16 位定点数字 信号处理器,因其具有较高的性价比,在数字信号处理领域得 到广泛应用。 笔者在TMS320C50 定点DSP 芯片上实现了ITU唱 T G.723.1 双速率语音编解码器(CODEC)的全部功能,包括语 音活动检测(VAD) 和舒适噪声插入(CNG)[3]。 该 CODEC 已 全部通过 ITU唱T G.723.1 标准测试数据测试,全部程序代码为 9KB,分配的数据内存为 11 KB( 含 9 KB 的常数表)。 其中 5.27 Kbps为18 MIPS,6.3 Kbps 为 16 MIPS(TMS320C50 MIPS 为28.6/20)。 本文着重讨论了 ITU唱T G.723.1 编解码算法在   收稿日期: 2009唱07唱03; 修回日期: 2009唱09唱02     作者简介:朱荣(1964唱),男,湖北荆门人,副教授,博士研究生,主要研究方向为多媒体信息处理(zhurong@whu.deu.cn); 胡瑞敏(1965唱),男, 湖北武汉人,教授,博导,主要研究方向为多媒体网络通信、多媒体信息处理和编码;常军(1972唱),男,陕西汉中人,讲师,硕士;王中元(1972唱),男, 湖北英山人,讲师,博士,主要研究方向为视频编解码和多媒体通信. G.723.1 是基于码本激励线性预测模型(CELP)的语音参 [4],利用了语音信号的短时相关性,因而在算法中 要保留几处时延信号,即输入语音信号半帧时延、共振峰听觉 加权滤波信号最大基音时延、谐波成形滤波信号最大基音时 延、激励信号最大基音时延。 笔者在分配内存时,将信号的当 前缓冲区和它们各自的时延缓冲区安排在一起,这样的处理方 式可以获得多方面增益。 首先,LP 系数计算、开环基音搜索、谐波成形滤波不用重 新构造工作缓冲区,因为时延信号和当前信号已经连续存放在 TMS320C50[2] 数编码方案
朱 荣,等:G.723.1 编解码器在 TMS320C50 上的优化实现 ·1041·     第 4 期 一起,可以同时直接访问两者。 其次,共振峰听觉加权滤波可 以直接在输入信号缓冲区和加权信号缓冲区进行,省掉了加权 滤波器 FIR 和 IIR 状态更新的时空开销。 同时,重构基音激励 信号可以由时延激励信号移动得到,不需要作基音周期判断。 更进一步,由于 FIR 和 IIR 级联而成的组合 LP 滤波器前 一环节的 IIR 和后一环节的 FIR 具有相同的滤波器状态,利用 这个道理可以减少滤波器状态缓冲区数和状态更新次数。 编 码器中,合成滤波器同加权滤波器的 FIR 共用同一状态缓存, 加权滤波器的 IIR 状态在谐波成形滤波器缓冲区中;解码器 中,合成滤波器同紧随其后的共振峰后置滤波器的 FIR 共享合 成信号缓冲区。 当然,这种设计的前提是,滤波器状态缓存和 输入(或输出)信号缓存物理上安排在一块内存空间。 1畅2 数据在 DSP 中的组织 TMS320C50 DSP 各有 64 KB 的数据区和程序区,其中 9 KB 片内单工 RAM(SARAM),1056 双工 RAM(B0、B1、B2)。 SARAM 可以同时配给数据区和程序区;B0 可以配给数据区也 可以配给程序区,但不能同时满足;B1、B2 是专门给数据区的。 由于在 DSP 中没有操作系统和编译系统的支持,内存分配由 程序员掌握,设计一种好的内存分配方案不仅直接关系到程序 的效率,而且影响到代码的调试和维护。 为了达到节省资源、 提高效率、方便设计的目的,笔者采取内存分配模块化的原则, 将全局变量和局部变量分开存储,局部变量空间可以互相覆 盖、共享分配,下面给出具体设计要点。 从逻辑上将分配的内存划分为五个层次,即常用算术运算 宏工作区、全局状态变量空间、编解码器通用缓冲区、局部过程 空间和常用辅助函数区。 其中全局状态空间保存的是编解码 器等的状态变量,在整个程序运行期间都不能被覆盖;宏和辅 助函数工作区是很小的一部分直接寻址内存,但访问频繁,因 而作为全局变量一样对待;通用缓冲区是供局部过程交换数据 的一块空间,不能被局部过程覆盖,但编解码器彼此之间可以 互相共享;内存管理中最灵活的部分是局部过程变量空间,这 类似于 C 语言中的函数局部变量,不同过程间可以互相覆盖。 这种分层处理方法简化了内存分配的复杂性,从而使内存管理 变得有条不紊,便于代码的维护。 从物理上看,如何将2 KB 数据缓冲区安排在 SARAM、B0、 B1 块中使程序的效率发挥得最好,是内存分配中面临的又一 问题。 这个问题要结合指令编码一起考虑,MAC、BLDD 指令 是 TI 提供的高效数据运算、数据移动指令,在循环模式下单周 期执行,它们要求第一个操作数在程序段,第二个操作数在数 据段,并且如果两操作数同在 SARAM 速度又会下降很多。 所 以,为了充分利用 MAC 指令(这种运算在算法中比例很大), 间接寻 址 内 存 的 分 配 就 要 互 相 兼 顾。 笔 者 的 做 法 是, 将 SARAM 配成数据段和程序段共享,B0 一般只配给数据段,只 在 MAC 或 BLDD 的第一个操作数在它里面时才通过 CNF 开 关暂时配给程序段,运算完后再恢复过来。 直接寻址内存全部加起来不超过128 字,所以可将它们分 配在 B1 块的同一页中,这样做的好处是,访问时不需要切换段 基址。 整个系统的数据存储空间为11 KB,其中常数表占9 KB, 另外2 KB 为上述直接和间接寻址内存的总和,程序代码为 9 KB。 C50 有10 KB 片内存储器,完全可以将2 KB 数据缓冲区 和常数表的大部分安排在片内,9 KB 代码和余下的常数表安 排在片外存储器。 2 算法改进 算法在 DSP 上实现时,针对目标处理器的体系结构,笔者 对原始算法进行了多方面改造,目的是提高算法的执行效率。 下面给出改进增益显著的几个计算环节的实现方案。 1)开环基音搜索 关 未优化算法的语音编解码算法是搜索最大自相关值求开 环基音周期。 在优化算法中,笔者使用分裂基 FFT 计算自相 [5],同时将一个语音帧中的两次开环基音周期合并在一起 计算。 这样可以只用三次傅里叶变换计算四个实序列的循环 卷积,比常规的使用两次傅里叶变换计算两个实序列循环卷积 的算法进一步减少了计算量(每四次傅里叶变换计算就减少 一次),使得优化的基音估计算法比未优化的基音估计算法计 算时间减少了一半。 2)目标信号计算和滤波器状态更新 按照 G.723.1 标准协议,从加权、谐波成形滤波后的语音 信号中减去组合滤波器的零输入响应就得到目标信号,将 W (z).P(z)变形为 ^(z).W(z).P(z) (1) 其中:第一个 A ^(z)即为逆合成滤波器,其输出为残差信号,这 说明目标信号也可以通过另一条途径得到,即将残差信号通过 合成、加权、谐波成形组合滤波器。 这样做的好处是缓存更新 变得简单。 第一种情况的缓存更新方式是将重构激励信号通 过组合滤波器;而第二种是将残差信号和激励信号的差值通过 组合滤波器,设重构激励为 cc(n) pv(n) +g u(n) =g ^ ^ (2) 与残差信号差值为 r(n) -u(n),不难证明其通过组合滤 ^(z). 1 A A 波器的输出为 cz(n) py(n) -g ew(n) =x(n) -g ^ ^ (3) 因此,可以将更新内存原本需要的四个滤波器操作减少到 两个。 3)基音搜索 定义向量 X[L],Y[N],由 X 按照周期 L 重构 Y 可用下式 (4) 构造向量 Y′[N +L]且 Y[i] =X[i mod L] (0≤ i≤N -1) Y′[N +L] =[X|Y] (5) 那么公式 Y′[L +i] =Y′[i] ( 0≤i≤N -1) (6) 显然应该等价于式(4)。 根据这个原理,由时延激励信号重构 当前激励可以用式(6) 代替式(4),而且由于时延信号和当前
计 算 机 应 用 研 究   ·2041· 信号缓冲区已经被安排在一起,式(5) 步骤可省。 另外,基音 基音激励,只要返回主过程即可,无须在主过程中再次重构 一次。 搜索中最后重构得到的当前激励即为搜索到的该子帧最终 4)高码率码本搜索 因为每一种可能的脉冲组合的脉冲幅度相同,所以在计算 插入脉冲的响应时,可以预先计算所有可能位置的响应,在以 后的计算中只须根据脉冲符号执行加减运算即可。 而且,根据 [6],可以采用“先将互相关信号幅度值较 大的位置选出来,然后仅在这些位置处抽取” 的次最优方法简 化计算。 优化后搜索速度提高了一半。 脉冲序列的抽取原理 以上四种优化策略测试效果如表1 所示。 表 1 算法优化对效率的影响 第 27 卷 C50 没有提供功能齐全的数据比较指令,一般比较都要借 助 ACC,这样会覆盖 ACC 的内容,有没有别的办法呢? 笔者在 实践中摸索了几种方法:比较等与不等的情况,直接用并行指 令 CPL;比较大于和等于( 或小于) 可用 BIT 测试变量的符号 位;一般的非负数比较,将一个操作数置于ARCR 中,另一操作 数置于 ARx 中,用 CMPR 指令。 充分利用好辅助寄存器 ARx(x:0 ~7)。 辅助寄存器不仅 作为循环计数器使用,用来实现循环体内变量的递增或递减计 算,更多的用法是做间接寻址的指针。 嵌套循环时内层指针一 般在其内层循环体前初始化,其实这样并不好。 本文处理是, 所有指针一律在最外层循环体前初始化,然后只在其相应的内 层循环体后用 MAR 或 ADRK(或 SBRK) 修改指针,从而精简 了指令条数。 在设计和调试编解码器过程中,以上论述的几个方面都对 效率有不同程度的影响,而每一点都是按照最有利于算法效率 的原则来设计的。 根据几次优化的先后顺序,列出它们对效率 的大致贡献(以6.3 Kbps 码率为例),测试结果如表2 所示。 表 2 不同优化方面对效率的贡献 优化的方面 内存安排 溢出处理 数据结构 算法改进 效率提高/% 4 .8 7 .3 6 .2 21 .5 合计 39 .8 4 结束语 用 TMS320C50 定点芯片实现 ITU唱T G.723.1 算法,是使 用代价比较适中的 DSP 芯片实现复杂语音编解码算法的一个 尝试。 实践表明,对于算法复杂度没有超过 ITU唱T G.723.1 的 语音编码器可以用 TMS320C5x 一类芯片实时实现,但对于 G. 728 这 样 复 杂 的 算 法 最 好 用 更 高 级 的 芯 片 来 实 现, 如 TMS320C54。 目前,笔者已经在 TMS320C50 定点芯片上实现了 ITU唱T G.723.1 的全部功能,并通过了 ITU唱T G.723.1 的全部测试数 据。 对资源的利用也较好,算法所占的程序存储器空间为 9 KB,数据存储器空间为11 KB(其中2 KB 为算法缓冲区空间,9 KB 为常数 表 数 据), 大 部 分 资 源 都 被 节 省 下 来。 相 对 于 TMS320C50 的运算能力来说(MIPS 为 28.6/20),算法效率还 是比较高,其中5.27 Kbps 码率为18 MIPS,6.3 Kbps 码率为16 MIPS。 参考文献: [1] ITU唱T Recommendation G.723.1, Dual rate speech coder for multi唱 media communications transmitting at 5.3 and 6.3 Kbps[S].1996. [2] TMS320C5x user’s guide[K].[S.l.]:Texas Instruments, 1993. ITU唱T recommendation G.723.1 annex A, Silence compression [3] scheme[S].1996. [4] 姚天任.数字语音处理[M].武汉: 华中科技大学出版社,2003. [5] 布莱赫特 R E.数 字 信 号 处 理 的 快 速 算 法[M].肖 先 赐,等 译. [6] ATAL B S.Predictive coding of speech at low bit rates[J].IEEE 北京: 科学出版社,1992. Trans on Communication, 1982,30(4): 600唱614. 模块名 开环基音预估 组合滤波器 基音搜索 高码率码本搜索 1 0 3 1 原时间/s 优化后时间/s 提高/% .3 .20 3 .0 .05 0 3 .87 .4 2 .84 .0 .75 .02 .04 .59 45 60 21 44 3 代码优化 3畅1 定点数溢出处理 算法中的定点数基本以16 位和32 位表示,数据溢出时有 发生,出现溢出时一般取数据表示范围的最大值(正溢出) 或 最小值(负溢出)。 如果按照常规的判断方法会极大地增加程 序的运算量。 在实际中笔者采用了以下几种处理技巧,实践表 明代码量和运算量都下降了很多。 前提条件是,C50 具备自动处理32 位加减、绝对值、取相 反数运算的溢出功能,由溢出模式开关 OVM 控制,在程序中 设置 OVM, 一 旦 发 生 溢 出 芯 片 自 动 将 ACC 内 容 设 成 0X7FFFFFFFH 或0X80000000H。 32 位数左移用32 位加法实现,如左移 N 位相当于将原数 增加(2N -1)倍,这样,移位溢出处理由加法完成。 16 位数加 法也用32 位加法实现,即将加法放在 ACC 高半部作为 32 位 处理,只不过结果依然取 ACC 高16 位罢了。 16 位数左移采用 先移位再控制溢出的方式,不用边移位边判断溢出,即在移位 指令后增加四条指令 LACC #7FFFH CRLT LACC #8000H CRGT 3畅2 其他代码优化策略 C50 DSP 芯片具有很强的计算能力,它提供了一些专用、 高效的指令,使用得当可以有效地提高程序运行效率。 C50 指令按四级流水线方式执行,保持流水线的畅通就意 味着速度的提高。 提高指令并行度的方法有:转移或条件转移 时使用后缀为 D 的指令就不会重新刷新流水线;用条件执行 指令 XC 代替转移指令能避免流水线的中断;通过合适安排指 令顺序来避免流水线冲突,尽量不使用 NOP。
分享到:
收藏