多制式语音编解码算法的DSP设计实现
扫描二维码
随时随地手机看文章
文摘:本文详细描述了在TI (Texas Instruments) C55x系列DSP平台上集成实时实现0.3kbps至16kbps多种速率语音编解码算法的方法,及在现有C语言源代码基础上优化汇编指令的技巧。介绍了在编写C55x系列DSP汇编程序中的关键技术,诸如函数调用中的参数传递,指令优化,标志位设置,宏使用等。文章同时给出了一种采用TI C55x系列DSP设计实现的能运行多种语音编解码算法硬件系统平台。最后介绍了该硬件平台的动态调整功耗设计,使系统的功耗在休眠状态下最低仅为155.1mW。
Abstract:This paper detailed describes how to implement the real time multi-rate speech encoding and decoding algorithms between 0.3kbps to 16kbps on TI (Texas Instruments) C55x series DSP platform, and introduces methods of optimizing assembly language instructions based on the original C language source code. We introduce the key techniques during writing assembly programs like parameter transferring during function calling; instruction optimizing; status bits setting and macro application. The paper also design a hardware platform for general speech encoding and decoding based on C55x series DSP of TI Company. At last, the adaptive power design of the platform is presented, which reduce power of the system down to 155.1mW when in sleep running mode.
Keyword: Speech Coding; C55x; Assembly language
近二十年来,全球半导体产业的飞速发展带动相关的软件、硬件设计水平迅速提高,这些发展使得一大批性能优良的复杂的数字信号处理算法可以实时实现并在日常通信系统中得到广泛应用,极大地提高了现有通信系统的可靠性和效率。因此,研究语音处理技术并将其用基于DSP芯片硬件系统实现有着非常重要的现实意义和广阔的市场前景。本文介绍了语音编解码硬件平台的设计思路和编解码算法在硬件平台上的实现和优化过程,同时给出了硬件平台结构和低功耗设计思路。
1 平台中语音编解码算法简述
本文在TI C55x系列DSP上实现了0.3kbps至16kbps的多种不同速率的语音编解码算法。其中16kps速率采用连续可变增量调制(CVSD)的波形编码算法,8kps速率采用了ITU-T公布的G.729a标准算法。而低速率编解码采用了正弦激励线性预测(SELP)算法。SELP算法是建立在传统的线性预测模型的基础上,其中清音成分用白噪声拟合,浊音成分在每个谐波处用一个频率变化的正弦信号合成,整个激励的浊音部分由一组不同幅度的正弦叠加而成,这也是SELP模型不同于传统的线性预测的一个非常的重要方面,即激励信号采用分带混合正弦激励。
2 语音编解码算法在DSP数字处理芯片上的实现和优化
由于在DSP上运行的声码器必须要达到实时化的要求,而直接编译的C程序远无法达到。因此需要编写和优化C55x的汇编代码来提高声码器的运行效率。下面介绍几点在算法硬件实现过程中的关键技术:
2.1 C程序和汇编程序的混编,函数的调用和参数传递
把一个模块改写为汇编函数,然后在C程序或者汇编程序中调用它。在C55x的开发中,函数的调用机制是这样的:首先记录下函数传递来的参数,和返回地址SP向低位移。然后再在堆栈中开出本地变量常量所需要的空间,SP再次向低位移。
(1)汇编函数的声明:在汇编函数中定义的函数如果要想在C代码中被调用,必须用.global语句加以声明,这样,对象或函数被定义为外部的(external)。比如:
.global _Rem_Dc
_Rem_Dc:
……
(2)参数传递:在函数调用的过程中,C代码传来的参数按照以下规则存放在特定的寄存器中:即16或23位的数据指针,先后存放在(X)AR0-(X)AR4中。16位的数据,先后存放在T0,T1,AR0-AR4中,32位的数据,先后存放在AC0,AC1和AC2中。如果参数个数超过寄存器个数,则存放在堆栈中。同时,函数的返回值如果是短整型(short)则存放在T0中,如果是长整型(long)则存放在AC0中,如果是指针则存放在(X)AR0中。
例如:
①int fn(int i1, long l2, int *p3);
则fn->T0; il->T0, l2->AC0, p3->AR0
②long fn(int *p1, int i2, int i3, int i4);
则fn->AC0, p1->AR0, i2->T0, i3->T1, i4->AR1
③void fn(long l1, long l2, long l3, long l4, int i5);
则l1->AC0, l2->AC1, l3->AC2, l4->堆栈, i5->T0
④void fn(long l1, long l2, long l3, int *p4, int *p5, int *p6, int *p7, int *p8, int i9, int i10);
则l1->AC0,l2->AC1,l3->AC2,p4->AR0,p5->AR1, p6->AR2, p7->AR3, p8->AR4, i9->T0,i10->T1
2.2 标志位的设置
标志位是DSP芯片在计算时设置一些位置。它们存放在ST0_55~ST3_55中,在运算中主要用到的几个有:
FRCT,当其值等于1时,乘法运算的结果将左移一位。等于零时,运算结果不变。
SATD,当其值等于1时,运算发生溢出时作饱和处理
SXMD,当其值等于1时,输入操作数有符号扩展
SMUL,当其值等于1时,饱和模式开
他们分别存储在ST1_55和ST3_55寄存器的位置如图1所示:
图1 C55x DSP关键标志位在寄存器中的位置
这几个操作位的设置不对的话,会出现运算结果的错误。所以要根据程序的需要正确设置操作位,同时要在程序的前后保护和还原其初值。
psh *(ST1_55)
psh *(ST3_55)
……
pop *(ST3_55)
pop *(ST1_55)
3 语音编解码硬件平台简述
本文设计的多模式语音编解码系统基于C55x系列DSP和MCU的双处理器设计,主芯片采用了TI公司的TMS320VC5510A数字信号处理器。其时钟周期最高为200MHz。拥有160KWord片上RAM(其中包括8块4KWord的DARAM和32块4KWord的SARAM)、16KWord片上ROM、8MWord的最大扩展寻址能力。微控制器(MCU)选用TI公司的MSP430F149,主要完成系统启动,电源管理,状态监控,DSP程序加载,声码器二进制码流位置重排等功能,并和DSP配合实现系统级加密机制。另外,硬件平台的音频编解码芯片选用TLV320AIC10,而程序存储部分采用的是SST39VF160 Flash,容量为1MWord,用来储存程序和数据。本硬件平台的框架结构图如图2所示。
图2 多速率语音编解码系统硬件平台框架结构图
4 低功耗设计
在数字集成电路设计中,CMOS电路的静态功耗很低,与其动态功耗相比基本可以忽略不计,故暂不考虑。其动态功耗计算公式为:
(1)
式中Pd为CMOS芯片的动态功耗;CT为CMOS芯片的负载电容;V为CMOS芯片的工作电压;f为CMOS芯片的工作频率。本硬件平台的低功耗设计从选用有可变电压和多电压的器件、动态功耗管理、动态频率控制三个方面入手。
4.1 选用有可变电压和多电压的器件
首先在文中的系统中,选用的单片机芯片TI公司的MSP430系列MCU是一款功耗相当低的器件,供电电压1.8V~3.6V,运行模式下功耗280μA/MHz,待机模式下功耗1.6μA/MHz,禁用模式下功耗0.1μA/MHz。其次选用的DSP芯片TI的C5510 DSP采用两种驱动电压,内核电压1.6V,I/O电压3.3V,根据(1)式,IC器件的功耗和供电电压的平方成正比,1.6V供电的器件比3.3V供电器件能降低一半以上的功耗。IC设计中通常都将降低电压作为控制功耗的最直接的手段,通过采用低电压供电的DSP,既能有效地降低内核动态功耗,还能兼顾I/O的电平兼容性。
4.2动态功耗管理
PCM编解码芯片TLV320AIC11可以单独将A/D或D/A部分禁用。当话筒PTT没有按下时,表示没有话音输入,此时可以将A/D部分置为IDLE状态。同样的,当MODEM的CD信号为高时,表示没有有效的数字码流输入声码器,故在此时可以将D/A部分设为IDLE状态。通过将该芯片配置成低功耗模式,降低了系统的功耗。另外,C5510 DSP芯片内部划出了五个独立的IDLE域,分别负责CPU、DMA、CACHE、外设、时钟生成器、EMIF接口的配置。每个域可以独立地将该域管辖的多个部件设置成活动模式或IDLE模式以此降低DSP的功耗。针对本文设计,由于没有使用到DMA、CACHE、时钟生成器三个域中的外设,故将这三个域设置成了IDLE模式。EMIF域在DSP和MSP交换数据(为了调整发送和接收的比特流)时才被置为活动,其他时候被置为IDLE。通过这样的设置,更加有效地控制了整个系统的运算功耗。
4.3动态频率控制
根据(1)式,IC器件的功耗和频率成正比,因此,将IC器件的频率控制在刚刚好满足运算处理要求的情况,可以大大减小系统功耗。这种方法的关键是算法运算量的大小,动态的调整芯片的运行频率,从而达到节省功耗的目的。在本文设计的平台上运行的六种速率的低速率语音编解码算法中,600bps、1200bps、2400bps、8000bps、16kbps的峰值运算量分别为37.4MIPS、59.2MIPS、44.8MIPS、18.6MIPS、<1MIPS,因此将DSP的工作频率分别设置在40.096MHz、65.536MHz、49.152MHz、24.576MHz。这样处理能够很有效地降低DSP的内核功耗,最大限度地有效利用运算资源。
通过以上几个方面的优化设计,我们达到了应用场合对功耗的要求。表1是本系统在不同运行模式下的功耗统计。
表1 不同模式下DSP功耗
工作方式 |
功耗 |
全速运行(80MHz) |
521.4mW |
低速运行(2MHz) |
264mW |
低速运行/DSP外设休眠 |
214.5mW |
低速运行/DSP外设休眠/外围芯片休眠 |
155.1mW |
5 小结
本文中介绍了针对语音编解码算法在TI C55x系列DSP上的实现方法。结合作者在实际开发过程中的经验与体会总结了编写汇编程序中的主要技巧。目前C55x的高性能低功耗特点能大幅度提高便携式设备的处理能力和电池的使用寿命,将会广泛应用于语音处理的各个领域。本文介绍的方法和经验具有广阔的推广价值。
本文的创新点:1.指出了多种在TI C55x系列DSP平台上汇编语言的开发经验与技巧。2.实现了一个可同时加载多种速率制式语音编解码的嵌入式硬件平台。 3.采用多种方案实现了对该硬件平台的低功耗设计,很大程度上节约了系统的运行功耗。
参考文献 (References)
[1] 田秋玲,崔慧娟,唐昆. 高质量0.6Kb/s声码器的TMS320VC55x实现[J]. 电声技术,2005,8:50-53
[2] 詹杰,唐昆,崔慧娟. 基于TMS320VC5510的低功耗加密型语音硬件平台的设计与实现[J],微计算机信息,2005/25:63-65
[3] TMS320C55x DSP Programmer’s Guide (spru376a) [R]. Texas Instruments, July 2001
[4] TMS320C55x DSP Mnemonic Instruction Set Reference Guide (spru374g) [R]. Texas Instruments, October 2002
[5] 赵永刚,高攀峰,崔慧娟,等.声码器通用硬件平台的实现[J].电声技术,2004,7:24-26.
[6] 荆元利,樊晓桠,高德远,等.一种数字信号处理器的动态功耗管理方案[J]. 微电子学与计算机,2003,9:60-63.
[7] TI. MSP430X1XX FAMILY USER GUIDE. [R]. Texas Instruments, January 2003