G.729a是ITU制定的一种高质量的中速率语音编码标准,编码速率为8kbps,目前已在许多通信系统中得到了应用。16/32kbps的CVSD是一种抗信道误码非常好的语音编码算法,在军事通信、宇航通信中得到了广泛的应用。32kbps的ADPCM是一种算法较简单的波形编码,具有很好的话音质量和抗噪性能,在卫星通信、数字话路倍增系统中得到了广泛应用。综合了这三种算法的编码系统,在8kbps~32kbps码率具有较高的灵活性。
由于语音压缩的运算量、存储量和精度要求都不太高,在考虑价格因素的基础上,定点DSP足以胜任语音编解码的要求。本文采用了TI公司的TMS320VC5409定点DSP实现了上述三种语音编解码算法。算法DSP的实现通过了有关测试。其中G.729a和ADPCM采用ITUT有关建议提供的测试序列进行了测试,CVSD按照我国有关标准进行了测试。
本文对以上三种语音编码和TMS320VC5409做简单介绍后,对算法的软件和硬件实现进行介绍,并给出算法所需运算量以及所占用的硬件资源。
1 DSP芯片和语音编码算法
(1)TMS320VC5409简介
TMS320VC5409是TI公司生产的一种性价比较高的定点DSP芯片,运算速度为80MIPS/100MIPS。它拥有改进的哈佛结构、一个CPU、片上存储区(32KB的ROM和64KB的DARAM)、片上外设以及专用的指令结构。它具有以下主要优点:
·1条程序总线和3条数据总线。配合存储区的双操作数读取能力,可以支持单周期,三操作数指令,提高了程序的运行效率和通用性;
·先进的针对应用设计的CPU硬件逻辑提高了芯片的性能;
·高度专用的指令结构提供了更快的算法实现和更方便的优化;
·片上外设包括3个McBSP(多通道缓冲串口)、一个6通道的DMA控制器、8bit HPI口及锁相环时钟发生器;
·模块化结构方便了快速的后续发展;
·先进的IC处理技术实现了高性能和低功耗,5V静态CMOS技术进一步降低了功耗。
(2)G.729a算法
G.729是ITU在8kbps速率上的标准,采用“共轭结构代数码本激励线性预测编码方案”(C-ASCELP)算法。这种算法综合了波形编码和参数编码的优点,以线性预测编码技术为基础,采用了矢量量化、分析合成和感觉加权等技术。G.729a只在G.729的基础上减少了一些运算量,保持了兼容性,质量也基本没有下降。
(3)32kbps ADPCM算法
G726是ITU制定的自适应差分脉冲编码算法标准,有4种速率。在此项目中,使用32kbps的速率。ADPCM算法是一种波形编码,它在PCM编码的基础上引入了预测和差分的概念,仅对实际值与预测值之间的差值进行编码。在编码过程中,用过去样点的值对当前样点进行预测,并自适应地调整预测系数,使预测误差很小,从而在降低码率的同时,保持了很高的编码质量。
(4)CVSD(32kbps/16kbps)算法
连续可变斜率增量调制,是一种1bit的差分波形编码方式。自适应的量阶随信号统计特性的变化而变化,在信号很大动态范围内,可获得最大信噪比。并且易于实现,电路结构简单。
主要技术:三连0/三连1检测,即若检测到码流中有三连0或三连1,则表示信号在骤升或骤降,调整量阶以适应信号变化。
2 硬件系统
(1)硬件板介绍
在发端,模拟信号通过前端处理电路和A/D采样,转换成8bit A-law PCM信号。对数PCM信号在TMS320VC5409中转成线性码,并进行压缩编码。输出的G.729a/ADPCM/CVSD码流在信道上传输。
接收端接收到的压缩码流在DSP中被解码成对数PCM信号,再经过D/A变换和用户电路,最终得到模拟话音。其中CPLD用来产生8kHz的帧同步信号,使各硬件芯片之间协同工作。
A/D、D/A部分采用单片MC14557芯片。单路信号的硬件系统框图如图1所示。
(2)算法的硬件选择
程序定义了两个标志变量flag1、flag2。利用VC5409提供的可屏蔽中断INT0~INT3[1],在中断服务例程中对2个标志位进行设置,从而控制主程序的跳转。
系统加电后,INT0~INT3其中一个管脚给出中断请求信号,程序执行中检测到哪个中断,就执行该中断对应的编码算法。接着,主程序对IMR寄存器置位以屏蔽这些中断,直至下一次系统复位。其中INT0中断在测试中是无编码转换的跳转,但在应用中用于选择32kbps的CVSD算法。表1是算法选择的硬件中断与标志位设置。
(3)数据流输入和输出
VC5409提供了3个McBSP (Multichannel Buffered Serial Ports)[2],并在其中集成了硬件对数PCM编解码器。串口的双缓冲区发送、三缓冲区接收能保证数据的连续性。收发的数据流字长可以是8、12、16、20、24、32bit,每帧最多可以有128个字。表2是本项目采用的串口配置。
对每种算法,4路编解码器都要求全双工工作,因此,对3个McBSP都进行了配置。其中,McBSP0负责PCM码流的收发。PCM码流是4路8bit的A-law信号,因此定义字长为8位;McBSP1收发G.729的码流。G.729分帧编码,帧长10ms,每帧80bit。为了数据能够方便、有效地收发,定义串口的字长为16bit,这样,每5个帧同步收全一个G.729帧,共16×5×4(路)=80×4bit。
为了取得数据格式的一致性,方便串口收发码流,对ADPCM和CVSD定义了相同的码流格式,并由McBSP2收发。如图2所示。
32kbps ADPCM每样点用4bit编码,规定其码流为每样点的码字重复2次,即占8bit。4路信号共32bit;16kbps和32kbps的CVSD是每样点2bit和4bit编码,故规定其码流为每比特编码码字分别重复4次和2次,即均占8bit。4路信号也是32bit。
(4)数据流的传输(串口与存储区)
VC5409提供了6个DMA[2]通道,用户可以设置每个DMA通道的源地址、目的地址、一次传输的数据量、同步事件和中断方式等。
表3是本项目中各DMA通道的配置情况。
(5)数据传输的控制