微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 基于ACELP语音编译码算法的软件实现及应用

基于ACELP语音编译码算法的软件实现及应用

时间:03-14 来源:3721RD 点击:

文中针对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所示。


图1 ACELP编码原理框图

编码过程主要由短时预测、长时线性预测、码本搜素和增益计算等组成。其中短时预测提取声道滤波器的LPC系数并进行插值和量化;长时线性预测通常分为开环基音分析和闭环基音分析两步,开环基音分析每帧数据(30 ms)处理一次,采用自相关法估算基音周期,按较低基音延迟优先的原则获取基音周期的大致范围,闭环基音分析基于子帧完成,每7.5 ms处理一次,以获取基音周期的准确值;码本搜索和增益计算主要用于计算合适的码本和增益,使重建语音的质量具有更高的清晰度和自然度。

解码过程就是将线性预测参数、基音延迟T、最佳码本索引和最佳增益参数等各个编码参数等从编码比特流中提取出来,重构输出信号和各个滤波器,最后得到重构语音。解码过程以分帧为单位进行。首先将LSP矢量转换为LP滤波器系数,然后通过基音延时查找基音的整数和分数分量,将激励进行解码,对解码后的激励信号通过后基音滤波器送入合成滤波器,得到合成信号。合成信号经过共振峰后滤波器和增益放大单元控制得到语音信号。其ACELP解码原理框图如图2所示。


图2 ACELP解码原理框图

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(Wo

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top