基于ACELP码算法的网络通信的实现及应用
转化。ACELPDec(Word16 parm[],Word16 synth[],TETRA_ACELP_DEC_PARAM*pDecParam)函数完成编码参数的译码处理。编码参数通过ana数组返回。PostProcess(Word16 signal[],Word16 lg)对合成语音进行后处理工作。
2.3 动态链接库封装接口介绍
其中bits为137比特编码比特帧,signal为240*16bits的语音样点数据,pCodParam和pDecParam为编、译码过程中的中间结构体参量。
3 ACELP编译码算法在网络通信中的应用
采用网络服务器、客户端通信模式,将ACELP编译码模块应用到网络语音通信中,最终实现了基于ACELP算法的网络语音通信。具体通信过程为:服务器端采用声卡以8 kHz采样,16比特量化方式对语音信号进行实时采集,对采集到的语音信号每240样点作为一帧送入ACELP编码模块进行压缩编码,压缩后编码数据帧长为137比特,每帧数据进一步封装处理后通过网络实时发送到客户端。客户端通过网络实时接收服务器端编码语音数据包,经ACELP译码处理后实时发送到声卡进行播放处理,从而实现网络语音通信。
3.1 语音信号实时采集与播放技术实现
在语音信号实时采集与播放实现过程中,如何实现声卡采集与播放数据的实时性、连续性和可靠性是软件设计的关键所在。在本文软件系统中,通过直接凋用Windows最底层波形音频接口函数,实现声卡的编程控制,系统中采用了多线程多缓冲技术,即在服务器端,声卡采集与语音压缩编码使用不同的工作线程,同时给声卡提供多个用于承载采集数据的缓冲区,在同一时刻部分缓冲区供声卡采集线程装载数据的同时,另外已经装满数据的缓冲区供语音压缩数据处理线程处理,从而使得语音信号采集和压缩编码处理工作同时进行,有效保证了采集数据的连续性和信号处理的实时性。服务器端声卡实时采集原理框图如图3所示。
3.2 网络通信技术实现
软件系统采用客户/服务器模式和TCP/IP协议,利用Socket套接字编程技术实现数据接收与发送。其中数据接收模块采用VC++的CSo cket类,具体通信过程为:1)程序启动的时候在指定端口创建网络监听套接字,用以监听客户端的连接请求。2)当有客户请求连接时,创建接收套接字与客户端建立连接。3)当有数据需要接收时,CAcceptSocket响应OnReceive消息,调用Receive函数从缓冲里获取客户端传来的数据,实时的交给ACELP译码线程进行译码还原处理。4)当通信结束时,关闭监听套接字和接收套接字并释放资源。数据发送接口采用SOCKET通信技术,为了使系统在实时编码处理的同时及时将编码数据发送到服务器端,软件采用多线程技术;同时为了避免由于待发送数据流不均匀导致的数据帧丢失等情况发生,系统采用了多缓冲机制。主程序编码模块将要发送的编码数据源源不断的向缓冲队列中写,同时发送线程不断的检测缓冲队列中缓冲情况,当有缓冲满时及时进行发送。由于多线程与多缓冲机制的有效使用,使得网络通信能够实时高效的运行。
3.3 系统情况介绍
该系统实现了基于ACELP算法的网络语音通信,能够对通信过程中的语音波形样本数据、ACELP编码数据等进行实时存储和网络发送,对通行过程中的波形进行实时显示等。系统运行稳定,延迟较小,语音通信质量较好。图4所示为本文设计的软件系统运行截图。
4 结束语
文中研究了TETRA系统采用的ACELP语音编译码算法,在此基础上基于VC++编程技术实现ACELP编、译码软件模块,并采用动态链接库对其进行封装处理,接口简单,使用方便。最后开发相应系统,实现了ACELP编译码算法在网络语音通信中的应用。经实践证明,ACELP算法编码质量高,性能优异,具有较好的应用价值。
- 基于DSP的TETRA话音编码设计(07-01)
- 基于DSP的TETRA话音编码系统的设计与实现(07-09)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)