语音信号的编码方式一般为脉冲调制编码(PCM,Pulse Code Modulation)。采用DSP可以直接对PCM编码后的语音信号进行μ律和A律压缩。
PCM编码即脉冲编码调制,也就是将模拟信号转换数码,然后再转换成二进制数字信号的方法。几种常用的二进制编码格式如表1所示。
表1 几种常用的二进制编码格式
μ/A律压缩解压编码是国际电报电话协会(CCITT,Consultative Committee forInternational Telegraph and Telephone)早推出的G.711语音压缩解压编码的一种格式的主要内容。其中欧洲和中国等国家采用A律压缩解压编码,美国和日本等国家采用μ律压缩解压编码。由于中国采用A律,本实例着重介绍A律压缩解压算法。图1是DSP硬件实现数据压缩解压的简单流程,DSP将传输来的压缩后的数据进行解压成16位或者32位,然后对解压后的数据进行分析、处理,将处理后的数据按照要求压缩成8位的数据格式输出到相应设备,供其他设备读取。
图1 数据压缩解压流程
图2是DSP将数据解压的值,DSP将压缩的8位数据解压成16位的DSP通用数据格式,其中高13位为解压后的数据,低3位补0。这是因为6.711的A律压缩只能对13位数据操作。DSP将解压后的数据放在缓冲串口的发送寄存器中,只要运行发送指令,缓冲串口就会将数据发送出去。缓冲串口对接收数据的解压过程和压缩过程完全相反。图3是μ律数据解压的示意图。
图2 A律数据解压
图3 μ律数据解压
DSP内部的缓冲串口(McBSPs)带有硬件实现的μ律/A律压缩解压,用户只需要在相应寄存器中进行设置就可以了。
在进行A律压缩时,采样后的12位数据,默认其位为符号位,压缩时要保持位即符号位不变,原数据的后11位要压缩成7位。这7位码由3位段落码和4位段内码组成。具体的压缩变换后的数据根据后11位数据大小决定。具体的编译码表如表2所示。
表2 A律数据压缩表
压缩后数据的位(第7位)表示符号,量阶分别为1、1、2、4、8、16、32、64,由压缩后数据的第6位到第4位决定,第3位到第0位是段内码。压缩后的数据有一定的失真。有些数据不能表示出,只能取接近该数据的压缩值。例如,数据125,压缩后的值为00111111,意义如下。
终结果为64+4×15=124
也可以使用缓冲串口实现对内部数据的压缩和解压,通过缓冲串口的自发自收功能,可以实现:
(1)将线性数据转换为相应的u律或者A律格式;
(2)将u律或者A律格式的数据转换为线性数据;
(3)通过线性数据的传输以及对这些数据的压缩和解压,评估压缩和解压过程中量化效应对数据的影响;
图4是利用缓冲串口对片内数据进行压缩和解压的两种实现方法,分别由DLB和non-DLB两条路径表示。
图4 DSP内部数据的压缩和解压
(1)DLB路径。缓冲串口设置为数字反馈环路,在RCOMPAND和XCOMPAND位中设定相应的压缩和解压方式。此时DSP仍然可以利用发送(XINT)和接收(RINT)中断或者是DMA的发送(XEVT)和接收(REVT)同步事件进行数据输入输出的同步控制。在这种方式下,压缩和解压的速度取决于设置的串行波特率。
(2)non-DLB路径。当缓冲串口的发送和接收端均对复位后,DRR和DXR只通过压缩和解压模块相连,数据不再经过RBR、XSR、RSR以及DR和DX引脚。数据按照RCOMPAND和XCOMPAND位中设定的方式进行压缩和解压,但此时不能产生DSP所需要的中断信号,也不能产生DMA需要的同步事件。但这种方法直接从DXR到DRR,压缩和解压的速度非常快。
语音信号的p/A律压缩程序如下:
程序实现将1~1024的1024个数据经过压缩然后解压恢复数据。图5是程序产生的1~1024的1024个数据。数据开始地址为0x5000单元,程序运行完个循环loop后可以得到这1024个数据,并继续运行完成程序。这些数据被程序改写成图6所显示的数据。程序对这些数据进行压缩和解压,解压后数据如图7所示,图中数据出现微小的阶梯状是由于解压后产生的量化误差,数据越大量化误差越大。
图5 程序产生的1024个数据
图6 程序改变后的1024个数据
图7 程序解压后的数据
欢迎转载,信息来源维库电子市场网(www.dzsc.com)
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。