摘要:文中针对Tetra通讯体系中选用的ACELP算法,剖析了该算法的基本原理,介绍了其算法依据VC++6.0的软件完结进程,要点论述了ACELP在网络通讯中的完结及运用状况。
跟着通讯技能的快速开展,语音编码技能开展越来越敏捷、运用越来越广泛。TETRA(Terrestrial Trunked Radio)集群通讯体系是欧洲电信规范协会ETSI拟定的数字集群移动通讯规范。近几年开展很快,其产品已被包含我国在内的国际多个国家广泛选用。TETRA承载的语音通讯事务选用ACELP语音编码算法,该算法是一种改善型的CELP,它承继了传统CELP的首要长处,并克服了其缺陷。传统CELP用固定的随机码原本迫临语音信号的余量信号,缺少灵敏性,不能很好地操控码本的频域特性。ACELP选用代数码本结构,不只降低了码本的存储量和查找量,还供给了频域操控函数,然后增强了码本的灵敏性和多样性,能更好地迫临余量信号,确保了高质量的语音服务。该算法占用带宽较小,其编码速率仅为4.567 kbps,一起编码语音质量高,特别适宜多媒体语音通讯运用。现在该算法已有许多在嵌入式体系中完结的计划,但因为编译环境以及硬件条件的约束,运用不行灵敏便利,因而本文依据Visual C++软件编程技能,选用服务器与客户端网络通讯形式,在服务器端选用声卡对语音信号进行实时AD采样,对采样数据进行ACELP语音编码处理,并将编码后数据经过网络实时发送到客户端;在客户端实时接纳服务器端发送的语音编码数据并进行软件译码处理,一起将译码后数据选用声卡进行实时播映,然后完结依据ACELP算法的网络语音通讯。
1 ACELP语音编译码算法的基本原理
ACELP是一种改善的代数码本鼓励线性猜测算法,该算法要求输入语音信号为8 kHz采样、16比特量化,信号以30 ms分帧,每一帧分为4个子帧,每个子帧7.5 ms,每帧数据编码后为137比特,包含线性猜测参数、基音推迟T、最佳码本索引和最佳增益参数。编码器原理框图如图1所示。
编码进程首要由短时猜测、长时线性猜测、码本搜素和增益核算等组成。其间短时猜测提取声道滤波器的LPC系数并进行插值和量化;长时线性猜测一般分为开环基音剖析和闭环基音剖析两步,开环基音剖析每帧数据(30 ms)处理一次,选用自相关法预算基音周期,按较低基音推迟优先的准则获取基音周期的大致规模,闭环基音剖析依据子帧完结,每7.5 ms处理一次,以获取基音周期的精确值;码本查找和增益核算首要用于核算适宜的码本和增益,使重建语音的质量具有更高的清晰度和天然度。
解码进程便是将线性猜测参数、基音推迟T、最佳码本索引和最佳增益参数等各个编码参数等从编码比特流中提取出来,重构输出信号和各个滤波器,终究得到重构语音。解码进程以分帧为单位进行。首先将LSP矢量转换为LP滤波器系数,然后经过基音延时查找基音的整数和分数重量,将鼓励进行解码,对解码后的鼓励信号经往后基音滤波器送入组成滤波器,得到组成信号。组成信号经过共振峰后滤波器和增益扩大单元操控得到语音信号。其ACELP解码原理框图如图2所示。
2 ACELP语音编译码算法的软件完结概述
依据ACELP语音编译码算法原理.本文依据VC++6.0软件渠道,选用面向对象思维,编制CTetra_ACELP_Cod类和CTetra_ACELP_Dec类别离完结语音信号编、译码。别的,本文选用动态链接库方法对编译码类进行封装,接口简练,运用便利。
2.1 CTetra_ACELP_Cod编码类
该类为ACELP语音编码类,首要完结对输入该模块的8 kHz采样,16比特量化的语音样点数据流进行编码,类的首要函数界说如下:
其间Init(TETRA_ACELP_COD_PARAM*pCodParam)函数完结编码模块初始化作业,TETRA_ACELP_COD_PARAM结构体参数实时存储编码进程中相关参数。void PreProcess(Word16 signal[],Word16 lg)函数完结待编码语音信号帧的预处理。ACELPCod(Word16 signal[],Word16parm[],TETRA_ACELP_COD_PARAM*pCodParam)函数完结语音编码处理,signal[]参数为待编码的语音样本帧数据,parm[]为编码后参数。Prm2 bi ts(Word16 prm[],Word16 bits[])函数完结编码参数到比特流的转化。
2.2 CTetra_ACELP_Dec编码类
该类为ACELP语音译码类,首要完结对输入该模块编码数据帧(137比特帧长)进行译码处理,输出8KHz采样,16比特量化的语音数据。类的首要函数界说如下:
其间Init(TETRA_ACELP_DEC_PARAM*pDecParam)函数完结译码模块的初始化作业,TETRA_ACELP_DEC_PARAM结构体参数实时存储译码进程中相关参数。Bits2prm(Word16 bits[],Word16 prm[])函数完结137比特帧数据到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算法编码质量高,功能优异,具有较好的运用价值。