您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术应用TMS320C6201实现多路ITU-TG728语音编码标准 正文
应用TMS320C6201实现多路ITU-TG728语音编码标准

应用TMS320C6201实现多路ITU-TG728语音编码标准

点击数:7382 次   录入时间:03-04 11:57:07   整理:http://www.55dianzi.com   DSP/FPGA技术
 

    数字技术的出现与应用为人类带来了深远的影响,人们如今已生活在一个几乎数字化的世界之中,而数字音频技术则称得上是应用最为广泛的数字技术之一,CD、 VCD等早已走进千家万户,数字化广播正在全球范围内逐步得到开展,正是这些与广大消费者密切相关的产品及应用促使数字音频压缩技术得以产生和发展。

    随着数字语音压缩技术的应用领域越来越广,将高质量语音编码算法实用化的需求也越来越迫切。16kbit/s LD-CELP ITU-T G.728语音编码标准,采用后向自适应技术,单向编码延迟小于2ms,主观评价MOS分4.0,达到进入公众通信网的需求,因而广泛适用于数字卫星系统、数字线路倍增设备(DCME)、综合业务数字网(ISDN)、公共交换电话网(PSTN)、话音存储转发系统等。但其算法复杂度高,运算量庞大,定点实现时,一路全双工约需30~40MIPS.一般通用的数字信号处理器(DSP),只能做到一片DSP实现一路G.728语音编解码。

    TMS320C6201是TI公司最新推出的C6X数字信号处理芯片系列中具代表性的定点处理芯片。由于内部含有具备超长指令字(VLIW)处理能力的CPU和8个功能单元,故它可在一个时钟周期内执行多达8条指令。此外,1M位的片内RAM、可扩展的外部RAM接口和灵活的外围设备使其成为实现具有高速运算的复杂处理系统的首选芯片。

    本文研究了在单片TMS320C6201芯片上实时实现ITU-T G.728语音编码标准,实验结果表明,单片TMS320C6201能实现至少4路语音编解码。这对于扩展基于G.728标准的单路处理系统的功能或降低基于G.728标准的多路处理系统的系统复杂度都具有现实的意义。

    文中将扼要介绍G.728编解码算法和TMS320C6201芯片,并详细讨论G.728算法在TMS320C6201上的实时实现,最后给出结论。

    1 G.728语音编解码原理简介

    图1给出了G.728语音编解码器的原理框图。

     

     

    编码器中五个连续语音样点形成一个5维语音矢量。激励码本中共有1024个5维的码矢量,对于每个输入语音矢量,编码器利用合成分析法从码本中搜索出最佳码矢,然后将其标号选出,LP系数和增益均由后向自适应提取和更新。

    解码操作也是逐个矢量地进行。根据接收到的码本标号,从激励码本中找到相应的激励矢量,经过增益调整后得到激励信号,将其输入综合滤波器合成语音信号,再经自适应后滤波处理,以增强语音的主观感觉质量。

    由于编码器只缓冲5个样点(一个语音矢量),在8kHz的采样率下,算法延迟只有0.625ms,加上处理延迟和传输延迟,故总的单向编码延迟小于2ms.采用后向自适应技术,预测器参数在解码端通过LP分析恢复,不再作为传输内容,编解码器间仅需传送最佳码矢的索引值,故码率为10bit/0.625ms=16kbit/s.

    2 TMS320C6201定点数字信号处理芯片简介

    TMS320C6201是美国德州仪器公司(TI)最新推出的含多处理单元的C6X数字信号处理芯片中具有代表性的定点芯片。VLIW结构提供的高输出量、高效开发工具保证的易用性、以及可接受的价格,使得TMS320C6201成为高速运算的理想选择。以下从硬件结构和软件资源两方面,简要介绍TMS320C6201芯片。

    2.1 C6201的硬件结构

    2.1.1 CPU

    采用了VeLOCiTI的VLIW结构,因而在每个时钟周期内最多可并行执行八条32位宽(一个字长)的指令,在200MHz的主频下可以得到1600MIPS的高处理速度。CPU中包括了两套对称的运算单元(L,S,M,D)和相应的两套寄存器组,每组有16个32位宽的寄存器。

    2.1.2 存储空间

    C6201的地址总线为32位,寻址范围达到4GB.存储空间可分为四部分:片内程序空间、片内数据空间、外部存储空间和内部外围设备空间,可通过对五个BOOTMODE引脚的灵活设置设定各空间的地址范围。片内数据空间分成四个8K×16的交织块,使得CPU可同时访问数据RAM的两个块而不会发生冲突。片内程序空间可设为Cache ,存储经常使用的代码,减少片外访问次数,从而提高程序运行速度。

    2.1.3 外设

    C6201的外围设备包括DMA控制器、主机接口(HPI)、中断选择等。两个多通道缓存串行口(McBSP ,除多通道、双缓存外,还支持多种数据格式、硬件A/μ率压扩、位时钟和帧时钟的灵活编程。

    2.2 C6201的软件资源

    2.2.1 丰富的指令

    C6201的指令集共有五十余条指令,大部分是单周期的,可完成数据传输、算术逻辑运算和程序控制等功能。指令支持8/16/32位数据存取,给不同结构的数据操作带来方便。由于多处理单元的采用,在无资源冲突下,C6201最多可并行执行8条基本指令。

    2.2.2 流水线操作

    流水线操作和超长指令字是C6201的高性能特点。其指令执行可分为四个步骤:取指(Fetch)、指令拆装(Dispatch)、译码(Decode)、执行(Execute)。流水线操作即指以上四个步骤的并行操作。由于引入了多单元结构和超长指令字,所以和常见的数字处理芯片相比,多了一个指令拆装的过程。

    2.2.3 灵活的寻址方式

    C6201支持多种寻址方式,如寄存器寻址、直接寻址、短立即数寻址、长立即数寻址和相对寻址。此外,它还提供循环寻址方式,适用于相关和卷积运算中的存储器寻址。

    3 G.728在TMS320C6201上的实时实现

    3.1 硬件结构

    由上面介绍的TMS320C6201的结构特点可见,以C6201为核心器件,辅以相应的输入输出电路,可完成对单路语音信号的实时编解码工作,同时具备多路(如T1/E1一次群)语音信号的输入输出接口。

    本文应用了TI公司的TMS320C6201EVM板。板上配有单片TMS320C6201和与串口McBSP0连接的16位A/D芯片CS4231.EVM板通过ISA总线与PC机相连,启动时由PC机将程序装载入C6201的片内存储空间,在C6201全速运行时,PC机可以查询其运行状态,读取压缩后的G.728码流,或送入待解码的G.728码流。串口0接CS4231,用于接收和发送模拟信号;串口1用于接收和发送已压缩的G.728码流,因此系统可仿真实现单路G.728语音编解码。通过进一步对算法复杂度的分析,可判断多路G.728编解码的实现能力。

    3.2 软件开发

    编解码软件采用定点算法,用标准ANSIC语言和TMS320C6201汇编语言混合编制完成。软件包括主处理程序和中断服务程序,流程图如图2所示。

     

     

    在编程中,需注意以下几点:

    (1)双缓冲区的运用

    为实时处理输入语音和合成语音,避免数据覆盖,必须设置两个双缓冲区。对编码过程而言,当串口将语音信号写入输入缓冲区A时,编码器处理输入缓冲区B中已存储的5个语音样点;同理,对解码过程,当串口送出输出缓冲区A'中合成语音时,解码器的输出结果写入缓冲区B'.在中断程序中,计数判断何时切换相应缓冲区。

    (2)数据精度的处理

    C6201是定点DSP芯片,为确保运算精度和防止数据溢出,在实现时主要采用了两种方法:一是对某些精度要求较高的运算,将计算的中间变量采用32位来表示;二是对于幅度范围变化比较大的变量或数组,如激励增益、50阶杜宾算法的自相关数组等,采用标量浮点或块浮点表示,用一个字存储使该数或数组归一化所需的左移位数(NLS),其余字存储归一化后的尾数。

    (3)存储空间的分配

    C6201 1M位的片内存储区包括64Kbyte程序空间和64Kbyte数据空间,足够单路G.728编解码算法的使用。但若应用于多路语音处理,则需谨慎分配存储空间。由于编解码程序、常数表格等均可公用,多路应用主要考虑数据空间的使用。对临时变量、数组等采用公共域(UNION)分时存储技术,能有效提高存储空间的利用率,确保全部数据都在片内处理。

    (4)计算量的均衡

    C6201的高速运算能力,使实现G.728编解码算法不再需要考虑运算量的均衡。但若考虑到与其它实时性要求高的控制处理模块协调工作,则仍需按标准中介绍的方法均衡运算量。

    3.3 软件优化

    TMS320C6201的代码开发流程与传统DSP截然不同,它是一个不断调整C代码与线性汇编代码比例的过程,力求在性能与开发周期上寻得最佳平衡点。代码开发有三步:

    第一步,在通用的C平台上开发ANSIC代码,调试通过后不做任何变化地移植到C6201开发平台上,由C编译器完成所有的优化。利用测试工具判断代码性能是否达到要求,从而决定是否需要后续的优化步骤。这一阶段,开发者不需要对DSP有所了解,开发容易,但C编译器优化后的代码并行性差,未能充分利用C6201独特的硬件结构和软件资源,运行效率低。

    第二步,优化C代码。在此阶段,开发者应该根据C6201的特点,如充分利用数据宽度、使用内在函数等,对C代码加以改进。这一阶段要求开发者了解C6201DSP并掌握常用的技巧。经过此步优化后,代码的效率将大幅度提高。

    第三步,编写线性汇编代码。当上一步的优化仍不能满足要求时,就必须把那些对效率影响重大的模块抽取出来,改由线性汇编语言实现。在这一阶段,编程者一定要对C6201DSP有深入的了解并具备一定的编程经验,才能较好地解决诸如资源分配、消除数据的关联性等关键问题。此步优化难度较大,但运用于核心模块,能显着提高代码的并行性。

[1] [2]  下一页


本文关键字:语音  DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术

《应用TMS320C6201实现多路ITU-TG728语音编码标准》相关文章>>>