G.729语音编码算法研究及基于DSP的实现
扫描二维码
随时随地手机看文章
摘要:对G.729语音编解码算法的原理进行了简要分析,并提出了一种基于DSP芯片TMS320VC5510的语音编解码算法的实现方法。针对算法特征及体系结构的特点,提出了一些有效的优化措施。实验结果表明,运算复杂度大大降低,且在语音的编解码压缩过程中具有很好的重建效果。
关键词:TMS320VC5510;语音编解码;G.729算法;优化
1 G.729算法介绍
由于G.729的算法复杂度较高,ITU提出了G.729的简化版本G.729A,作为G.729的附录Annex A。后来为了进一步提高压缩率,增加了G.729B,即G.729 AnnexB。在G.729B中,主要使用了VAD和CNG技术,使得语音通信中的静音部分进一步压缩。
1.1 G.729A
1.1.1 G.729A编码器
G.729A编码器的框图如图1所示。G.729A编码器由预处理、线性预测分析和量化内插、知觉加权、基音分析、脉冲响应的计算、目标信号的计算、自适应码本搜索、同定码本结构和搜索、增益量化以及参数编码等模块组成。
模拟语音信号经过话路带通滤波和8 kHz采样之后,量化成16位的PCM信号进入编码器,然后根据预处理后的输入信号进行线性预测分析,得到线性预测系数,即线性预测编码LPC(Linear Prediction Code)信息,利用该系数即可构造合成滤波器。激励信号经合成滤波器后生成重构信号,与输入信号相减后得到残差信号。该残差信号经误差加权滤波器处理,根据听觉感受改变频谱,反馈到控制回路,根据使加权残差信号均方差最小的原则确定激励信号及其增益。误差加权滤波器也是根据预测分析所得的LPC信息构造的。
基音分析模块通过自相关分析推得基音周期,据此信息搜素自适应码本,确定最佳自适应码本矢量,得到语音中具有准周期特性的激励;然后再搜素固定码本,根据最小化加权均方差(Mcan Square Error,MSE)的准则确定最佳固定码本矢量,得到语音模型的随机激励信号;最后再确定两个码本矢量的增益Gc和Gp,采用具有共匀框结构的两级码书进行矢量量化。上述过程确定的线性预测编码信息、自适应码本矢量、固定码本矢量和矢量增益构成完整的G.729声码器编码器参数。所有这些参数均以码本索引的形式发往接收端。
1.1.2 G.729A解码器
G.729A解码器结构框图如图2所示。首先从接收到码流中提取参数序号,解码这些序号得10 ms语音帧对应的编码参数。这些参数是线谱对LSP参数、两个分数基音延时、两个固定码本矢量与两组自适应和固定码本增益、每子帧LSP参数被内插并转换为LP(Linear Prediction)滤波器系数,然后以每5 ms子帧为单位合成语音,合成步骤如下:
①自适码本应和固定码本分别乘以各自的增益加起来构成激励。
②激励LP合成滤波器重构语音。
③重构语音信号经过后置处理,包括长时后置滤波、短时合成滤波和高通滤波。最后输出语音信号。
1.2 G.729B
G.729B是对G.729A的进一步优化,其最主要的机制是静音压缩。静音压缩主要涉及两个机制:VAD(Voice Activity Detection)和CNG(Comfort Noise Generation)。VAD主要是用于编码器,用来决定当前帧是否静音;而CNG则主要用于解码器,产生让人耳感觉舒服的噪声。
1.2.1 VAD机制
VAD算法每隔10 ms做一次判决。首先,VAD会从输入帧中提取参数,这些参数包括全带能量、低频带能量、过零率和某个频域参数。在静音段,这些参数的长时平均值随着背景噪声的性质而发生改变。每进来一帧,就要计算当前帧的参数与其长时平均值的差。根据这些差值参数,VAD可以得到初始的判决结果,最后对初始结果进行平滑,得到最终的判决结果。
1.2.2 CNG机制
舒适噪声是用伪白噪声激励内插后的LPC滤波器产生的,就跟解码器对解码后的激励进行滤波产生活动话音一样。激励水平和LPC滤波器是从前一个SID信息中获取的。子帧内插LPC滤波器是用SID的LSP参数作为当前的LSP,然后和前一帧的LSP作内插得到的,与活动帧一样。伪白噪声ex(n)是由跟活动话音同样类型的激励cx1(n)和高斯白噪声激励ex2(n)相加而产生的。G.729激励ex1(n)是由一个小增益的自适应激励和ACELP固定激励组成的,这改善了活动和非活动话音帧之间的跳变。白噪声ex2(n)的引入是为了产生一个更接近于白噪声的信号。在非活动话音期间,因为编码端和解码端需要保持同步,所以激励在两边都要产生。
首先,我们定义目标激励增益Gt为当前帧t合成激励必须要达到的平均能量的平方根。Gt是用下面的平滑公式计算得到的,其中GSID是解码后的SID增益。
每帧的80个样本分成两个长度为40个样本的子帧。对于每一个子帧,CNG激励样本是用下面的算法合成的:
①从间隔[40,103]中随机选择一个基音延迟。
②根据G.729 ACELP码结构随机选择网格、脉冲符号和位置来构建子帧的固定码本矢量。
③计算单位增益的自适应激励信号,记作ea(n),n=0~39;选择的子帧固定激励被记作ef(n),n=0~39。
④与活动帧一样,伪白噪声ex(n)是由跟活动话音同样类型的激励ex1(n)和高斯白噪声激励ex2(n)相加而产生的。G.729激励ex1(n)是由一个小增益的自适应激励和ACELP固定激励组成的,这改善了活动和非活动话音帧之间的跳变。高斯白噪声ex2(n)的引入是为了产生一个更接近于白噪声的信号。在非活动话音期间,因为编码端和解码端需要保持同步,所以激励在两边都要产生。
[!--empirenews.page--]
即:
1.3 G.729A+B比特流结构
G.729A的比特流结构如表1所列。
由于G.729B引入了VAD和CNG,与G.729A相比码流结构增加了SID(Silence Insettion Descrtptor),其中带有静音的信息。SID的码流结构如表2所列。
2 基于DSP的系统实现方案
2.1 硬件平台设计
TMS320VC5510是一款16位定点数字信号处理器,具有较高的操作灵活性和运行速度;同等条件下其内核的功耗仅为54系列DSP的1/3,而且具有更高的代码执行效率,其指令也与54系列的相互兼容,可以很方便地进行代码的移植,它的最高数字信号的处理能力为200 MIPS,能够很好地满足本平台对运算的要求。本系统基于多片DSP处理器,实现多路话音的G.729(以下将G.729A+B简称为G.729)编解码,同时DSP通过HPI接口与上位机进行通信,并接受上位机的控制,DSP的PCM数据由FPGA进行协调,比特流数据的收发可以由FPGA进行协调或由HPI接口进行操作。整个系统的硬件平台如图3所示。
本设计首先将上位机来的IP包进行解包,再进行G.729编码到PCM编码的转换,得到的PCM信号送往FPGA内的TDM交换矩阵做时隙交换或实现会议功能,再将需要输出的PCM信号作编码转换,封装成IP包后发往上位机。
[!--empirenews.page--]
2.2 系统软件设计
本设计中McBSP0口接收数据处理,主要进行话音编码,并将编码比特流从HPI接口送出,HPI接口接收数据处理,主要进行话音解码,并将解码后的PCM数据从McBSP0口送出。软件系统为了保证McBSP0和HPI接口接收数据的正常处理,还需实现一些辅助功能模块包括:系统初始化模块、支持系统在线配置的模块以及系统收发数据的同步检测模块。系统软件流程如图4所示。
2.2.1 编码过程
G.729编码器的流程如图5所示。首先,编码器会初始化,主要是初始化各缓冲区;然后编码器对输入的原始语音信号进行预处理,包括高通滤波和幅度减半。其中,高通滤波的截止频率为140 Hz,它是一个二阶的零极点滤波器,目的是要去除输入信号中的低频十扰。对输入信号进行预处理以后,编码器开始编码,这是通过调用汇编函数Coder_ld8a实现的;编码产生的参数使用函数prm2bits转化为比特流,送到信道里传输。
2.2.2 解码过程
G.729解码器流程如图6所示。与编码器类似,解码器首先要进行初始化,特别是初始化缓冲区;接着解码器从输入码流中提取参数;由于码流在信道的传输过程中可能发牛错误,所以从码流中提取得到参数后应该进行奇偶校验,以确定参数是正确的;通过了奇偶校验后,解码器正式开始解码,这是通过调用汇编函数Decod_ld8a实现的;解码重建语音信号后,还应该进行后滤波和后处理。其中,后处理起高通滤波和幅度翻倍的作用。
3 系统编解码算法性能测试
编解码算法性能包括两方面:运算量和存储要求。要达到高性能,不仅要运算量低,而且存储器使用也要少。表3和表4分别列出了编解码器的运算量和存储器使用情况。
[!--empirenews.page--]
为了验证编解码器是否正确,采用了如下测试程序进行验证:
结语
本设计中基于TMS320VC5510的语音编解码系统整体运算量为45 MIPS,传输速率8 kb/s,压缩比为16/1,合成语音的质量主观评价分MOS分达4.0。此系统工作稳定可靠,有较高的实用价值。