微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ITU-TG.729算法及其实时实现

ITU-TG.729算法及其实时实现

时间:12-22 来源:互联网 点击:

G.729编解码算法,实时实现的G.729系统的软件设计和硬件设计。在ADSP-2181上实现的G.729编解码器,已经通过了ITU-T G.729的全部测试矢量,并且已经在数字语音记录仪和H.323网上多媒体通信系统中得到推广应用。

关键词: G.729协议 ADSP-2181 接口模块 IDMA口

G.729协议[1]是由ITU-T的第15研究小组提出的,并在1996年3月通过的8Kbps的语音编码协议。

G.729协议使用的算法是共轭结构的算术码本激励线性预测(CS-ACELP),它基于CELP编码模型[2]。由于G.729编解码器具有很高的语音质量和很低的延时,被广泛地应用在数据通信的各个领域,如IP phone和H.323网上多媒体通信系统等。

针对实时实现G.729的一些难点,我们提出了解决的方法。目前,我们已经在Analog Device的定点数字处理芯片adsp-2181上实时实现了符合ITU-T G.729编解码器的全部功能,该编解码器占用了22MIPS的运算量。我们在ADSP-2181上实现的G.729编解码器,已经通过了ITU-T G729的全部测试矢量,并且已经在数字语音记录仪和H.323网上多媒体通信系统中进行了推广应用。

1 G.729协议编解码算法介绍

1.1 G.729编码算法介绍

电话线路上的模拟语音信号,经话路带宽滤波(符合ITU-T G.712建议)后,被8kHz采样,量化成16bit线性PCM数字信号输入到编码器。该编码器是基于线性预测分析合成技术,尽量减少实际语音与合成语音之间经听觉加权后差分信号的能量为准则来进行编码的。编码器的结构框图如图1所示,其主要部分有:

·线性预测分析和LPC系数的量化;

·开环基音周期估计;

·自适应码本搜索;

·固定码本搜索;

·码本增益量化。

下面分别描述这五部分的主要技术。

·线性预测分析与LPC系数的量化

首先对信号进行加线性预测分析窗,分析窗由两部分组成。第一部分是半个汉明窗,第二部分是四分之一个余弦信号。将加窗后的语音信号通过LevinsonDurbin算法获得线性预测滤波器系数ai i=1......10。由于线谱对参数比线性预测系数具有更好的内插特性和量化特性[3], G.729将LPC参数转换成相应的线

谱对参数,最后对线谱对参数进行量化。

·开环基音分析

为了减少自适应码本搜索的复杂度,需要计算开环基音Top,使自适应码本搜索在开环基音值附近进行。基音值的范围在18~145个样本点之间。

·自适应码本搜索

G.729对每个子帧进行闭环基音搜索,它通过最小化原始语音信号和重构语音信号的加权均方误差来进行闭环基音搜索。对子帧1的闭环基音T1的搜索是局限在开环基音Top的一个小范围内,对子帧2的闭环基音T2的搜索是局限在闭环基音T1的一个小范围内。这样可以减少基音搜索的复杂度。

·固定码本搜索

G.729固定码本矢量含有四个非0脉冲,每个脉冲的幅度要可以是+1或-1。通过最小化加权语音信号和加权重构语音信号的均方误差来进行固定码本的搜索。

·增益量化

G.729对自适应码本增益和固定码本增益采用二级共轭结构码本进行矢量量化。在码本搜索时,采用预搜索策略,使得运算量只为全搜索算法的1/4。

1.2 G.729解码算法介绍

G.729的解码也是按帧进行的,主要是对符合G.729协议的码流进行解码,得到相应的参数,根据语音产生的机理,合成语音。解码的方框图如图2所示,其主要部分为:参数解码;后滤波处理。

G.729解码过程如下。

·参数解码

首先解码得到线谱对参数,并将线谱对参数转换为线性预测系数。然后解码出基音周期,获得自适应码本矢量V(n)。解码出固定码本矢量的四个脉冲的位置和符号,计算出固定码本矢量c(n)。解码出固定本预测增益gc和固定码本增益,接着得到激励信号

,n=0……39。最后将激励信号

u(n)输入到线性预测合成滤波器中,计算出重构语音

·后滤波处理

后滤波处理主要是自适应后滤波。自适应后置滤波器是由三个滤波器级连而成:长时后置滤波器Hp(z),短时后置滤波器Hf(z),频谱倾斜补偿滤波器Ht(z),后面接着进行一个自适应增益控制过程。后置 滤波器的系数每一个子帧更新一次。后置滤波能够有效地改善合成出的语音质量。

2 G.729编解码器的实现

我们在Analog Device的定点数字处理芯片ADSP-2181[4][5]上实时实现了符合ITU-T G.729的全部功能,进行编解码总共用了22MIPS(ADSP-2181处理速度为33MIPS)。实时实现了G.729的编解码功能,主要有以下的难点。

·数据在DSP中的安排。在DSP中只要是声明的变量,DSP的连接程序就会分配数据空间。如果我们象C语言编程那样定义局部变量,就会浪费大量的存储空间。

·数据精度的处理。在16位的定点

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

网站地图

Top