网络通信 频道

网络电话语音质量提高的初探(一)


  摘 要:在分析了分组交换网络中影响语音质量的几种因素之后,探讨如何对网络延迟进行分析与统计。并以支持静音消除功能的编码解码器G729AB为例,在分析网络抖动的统计方法的基础上,设计1种传输G729AB语音分组的构造系统和接收端的复现系统,及相应的抖动缓冲自适应算法,以求提高IP电话的语音质量。

  关键词:网络电话;语音质量;抖动缓冲;G729AB;实时协议

  1 引言

  VoIP的基本原理是由专门设备或软件将呼叫方的话音信号采样并数字化、压缩、转换为一定长度的数字化语音包,以数据包的形式经过分组交换网络传输到对方,对方接收到语音包后解压缩,还原成模拟信号。相对于传统电话清晰、稳定的话音,IP电话在话音质量方面还有待改进,主要表现为回声、抖动、分组丢失与延迟4个问题。本文讨论的G729AB是支持静音消除功能的编码解码器,其特点是可以有效降低网络负荷。而设计抖动缓冲自适应控制算法的主要目的是为了消除或者降低网络抖动的影响,从而平滑语音流,同时尽可能的降低延迟,而较低的延迟对于降低声学回声也有积极的意义。

  目前关于抖动缓冲自适应控制算法的讨论已经非常深入,主要集中在如何平衡降低语音分组丢失率以及减少延迟。但是并未涉及如何具体在接收端支持静音消除功能。此外,该自适应抖动缓冲算法也需要在抖动缓冲大小和平滑语音流之间寻找折衷方案。   本文讨论如何将G729AB应用于VoIP终端,以及如何在此系统中寻求实现非常好的的语音质量。该解决方案同样适用于语音网关。

  2 语音质量

  影响语音质量的因素主要有语音压缩编码技术、延迟、分组丢失和抖动。语音压缩编码的主要目的在于降低对带宽的需求。语音延迟是指语音发送端1个声音样本在通过话筒采样后,到达接收端被播放出来之前这一时间间隔。

  在考虑IP电话的延迟时,本文在算法延迟、处理延迟、网络延迟之外引入抖动缓冲延迟以简化抖动缓冲算法的设计。

  (1)算法延迟

  语音处理以语音分组为单位,当音频数据采样量达到一定数量后才进行编码。基于目前的编码解码方式,这种延迟无法避免。

  (2)处理延迟

  语音分组进行编码解码,回声消除,抖动算法,处理器间通信,Socket读写而引入的延迟。这种延迟可以通过改进算法以及优化软件而减少。

  (3)网络延迟

  由于网络物理、路由等原因引起的延迟。数据分组传送延迟主要由带宽情况决定。系统的整个延迟主要是语音数据分组在IP网上传输的延迟。

  (4)抖动缓冲延迟

  语音分组进入接收端后,直到被抖动缓冲算法决定交给解码器播放之前的延迟。这也是抖动缓冲算法所要尽量减少的延迟。

  IP网络的1个特征就是网络延迟与抖动,这将导致IP电话音质下降。网络延迟是指1个IP包在网络上传输所需的时间,网络抖动是指IP包传输时间的长短变化。如果网络抖动较严重,那么有的话音包因迟到而被丢弃,会产生话音的断续及部份失真,严重影响音质。为了降低或者消除抖动的影响,人们采用抖动缓冲技术,即在接收方设定1个缓冲区,话音包到达时首先进入缓冲池暂存,系统以稳定平滑的速率将话音包从缓冲池中取出、解压、播放给受话者。这种缓冲技术可以在一定限度内有效处理话音抖动,并提高音质。

  3 G729AB构造系统

  本节中我们设计并实现了基于G729AB的语音分组发送端RTP构造系统,以实现发送端的实时语音流以及SID数据包。基于目前还没有出现G729AB的RTP封装标准,本文参照互联网草稿“RTP Profile for Audio and Video Conferences with Minimal Control”[1]作为设计基础思想。

  G729AB在附录A的基础上增加了静噪抑制技术(VAD),断续传送(DTX),以及舒适噪音发生器(CNG)[2]。G729AB构造单元用于将G729AB编码器产生的数据帧打包成为RTP数据分组。G729AB编码器每10ms产生1个数据帧,其结果可能为语音数据帧(G729A),静音数据帧(SID帧,G729B帧),或者返回空值。为了将G729B数据帧同G729A数据帧一起打包为RTP数据分组,需要确定RTP数据分组的格式。

  1个G729RTP数据包可以由零个或更多的G.729或者G729A数据帧所组成,其后有零个或1个G.729B数据帧[1]。由此推论:

  (1)当其所有的3个数据帧均为G.729A数据帧的时候,输出30字节数据分组。

  (2)当2个G.729A数据帧后为1G.729B数据帧时,输出22字节数据分组。

  (3)当1个G.729A数据帧后为1G.729B数据帧时,输出12字节数据分组。

  (4)当只有1个G.729B数据帧时,输出2字节数据分组。

  (5)当没有G.729AB数据帧产生时,停止打包,直到有G.729A数据帧或者G.729B数据帧出现。

  (6)1个语音段的第一个数据分组,其RTP数据包头部中设定标志位。此外,在RTP数据分组头部中时间戳的定义为产生数据分组的第一个数据帧中第一个语音样本产生的时间。

  综上所述,G729AB数据包大小不是静态的30ms,而是随着发送端语音而变化。而且其时间戳不会以固定的30ms作为边界。数据帧索引在RTP数据分组中指出数据帧的位置。每一次当G729AB编码器返回1个语音数据帧或1个SID数据帧,数据帧索引将会被加1。当数据分组大小到达30ms时,或最后编码的数据帧是1个SID数据帧,则认为数据分组已经完整。如果数据帧是语音数据帧,而且上1个数据帧是1个SID数据帧或者空帧,RTP数据分组头部的标志位将会被设定,否则它将会被清零。而对于序列号,当1个新的有效RTP数据包准备好了时,自动加1。

 

转载地址:http://www.voipchina.cn/technology/2004-03-24/36519.shtml

0
相关文章