语音信号的A律编解码的DSP实现
语言压缩技术既节省了存储时所占用的存储空间,又减少了传输时所占用的带宽,而快速发展的数字信号处理(DSP)技术使得实时实现各种复杂的语音压缩算法成为可能。
国际电信联盟(ITU)1972年制定出来的一套语音压缩标准称为G.7ll,主要用于公用电话网。它用脉冲编码调制(PCM)对语音信号采样,采样率为8kHz,比特率为64kb/s。该标准下主要有两种压缩算法,一种是μ律,另一种是A律。其中欧洲和中国等国家采用A律压缩算法,美国和日本等国家采用μ律压缩算法。
1 A律压缩算法简介
A律编码的数据对象是12位精度的二进制数,它保证了压缩后的数据有5位的精度并存储到一个字节(8位)中。A律符合下式的对数压缩方程:
式中,x为归一化的输入语音信号,y为压扩后的归一化输出信号,A为压缩参数取值。由于该方程是一条连续的光滑曲线,物理上实现比较复杂。在实用中一般用13段折线近似该曲线,此时选择AA=87.6。对PCM信号,一般地,输入的模拟语音信号经过低通滤波、放大和限幅后,然后进入A/D转换器编码,常用的编码方法有2的补码和折叠二进制码两种。表l是A律压缩编码规律表,其中只给出了在抽样值为正值时,A/D转换器输出的12位二进制数(补码)是如何压缩成8位二进制数的。
2 A律算法的硬件构成
采用合众达电子的SEED-DEC5416嵌入式DSP开发板作为实现A律算法的硬件开发平台,其系统结构原理如图1所示。主处理器选择的是1 6 bit定点DSP芯片TMS320vC5416,语音信号经过差分运算放大后送入ADC进行模数转换,采样率为8kHz,量化位数为12bit,转换后的数据送入McBSP,然后对McBSP中的数据进行压缩编码,压缩后的数据送入'C5416内部的DARAM保存,还可以直接解压后经McBSP送DAC,数模转换后再送入功放模块驱动扬声器发声。其中,McBSP与ADC/DAC之间的数据交换是靠ADC/DAC提供的移位信号和帧同步信号实现的。
3 A律算法的软件设计
在TI提供的开发工具CCS中进行源程序的编辑和调试,源程序采用'C54x系列的汇编语言编写。首先完成对DSP芯片必要的初始化、McBSP的初始化及开放McBSP中断,然后执行A律压缩解压算法。
一般地,用程序进行A律编码解码有两种方法:一种是查表法,这种方法程序代码小,执行速度快,但需要占用较多的内存以存储查找表(表的大小为212=4096个字),另一种方法是直接计算法,这种程序代码较多,执行速度慢一些,但可以节省内存空间。对照表l,可以画出A律压缩编码直接计算方法的流程如图2所示。待压缩的数据来自voidin变量空间(见附录1),该变量空间保存着McBSP中的数据,保存符号位就是将待压缩数据的位11放入压缩数据的位7,并通过测试位11决定是否对该数求补即对负数求绝对值(A/D转换后的数据用二进制补码表示),求绝对值的目的是为了减小直接对负值压缩时带来的量化误差。另外,还将两个8位的压缩数据组成一个16位的字保存至compress变量空间。
解压一般是压缩的逆过程,但有时为了使得量化误差不超过△i/2,可在解压后的数据位增加一个最低有效位,该最低有效位为1时经过D/A转换后对应△min/2电压,即将8位的压缩数据解压成13位的数据。本文中解压仍然按照解压成12位的数据,其解压流程如图3所示。图3中压缩数据暂存单元com的位*的段码值若大于l时,需将这4位段内码的前后相邻位都置1,然后将这6位送至解压数据暂存单元dcom的位(段码值+3)~位(段码值-2)即可,代码(见附录2)中采用的方法是对这6位逻辑左移(段码值-2)位。
4 实验分析及结论
由于语音信号可以分解成许多正弦频率的和,实验中采用200Hz的正弦信号代替实际的语音信号。将汇编语言编写的源程序和命令连接文件都添加到新建立的工程文件夹中,并编译、链接及装载程序运行,然后执行集成开发环境ccs的菜单命令View|Graph|Time Frenquency,打开Graph Property Dialog对话框,在此分两次输入标题名sine和decompress sine、起始地址0x0082和0x065E(命令连接文件.cmd中将.bss段定位到DARAM的org=0080h上),并选择数据的长度为200及数据类型为16-bit signed integer,然后点击ok按钮即可生成图4和图5的曲线。
与图4相比,图5只有在幅值比较大时两者的误差才略为明显,这是A律解压算法特性造成的,对语音信号的影响并不大,因为语音信号出现大幅度值的概率小。
|