网络通信 频道

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

5 抖动缓冲算法设计

  在自适应抖动缓冲算法中,缓冲大小伴随网络抖动的实际情况而变化。接收端根据接当前收到的数据分组的延迟与算法保存的延迟信息进行比较,得出当前可能得到的最大抖动,从而选择相应的抖动缓冲大小。其优点是网络抖动较大时丢包率低,而延迟及抖动较小时,语音延迟相对较小。

  RTP头部的时间戳提供了1种传递语音流平滑信息的手段。如果不存在抖动现象,则只用RTP头部的时间戳就可以复现语音流。当需要进行抖动缓冲设计时,则应采用如下3种时间戳:RTP头部中的时间戳、本地的到达时间戳和本地的播放时间戳。

  假设有2个数据分组,其序列号是i和j(j>i),则时间戳定义如下:

  Si:数据分组i的RTP时间戳;

  Ri:数据分组i到达的本地时间戳;

  Pi:数据分组i播放的本地时间戳。

  其他的定义是:

  Dr(j,i)=Rj- Ri;

  Ds(j,i) = Sj- Si;

  Dp(j,i) = Pj- Pi

  Jn(j,i)=Dr(j,i)- Ds(j,i)

  =(Rj- Ri)- (Sj- Si)

  Jp(j,i)=Ds(j,i)- Dp(j,i)

  =(Sj- Si)- (Pj- Pi)

  Jj(j,i)=Dp(j,i)- Dr(j,i)

  =(Pj- Pi)- (Rj- Ri)

  Ds(j,i)反映在发送端产生2个数据分组时的时间间隔。如果在语音段中只有固定速率的语音流,则语音流传输速率Ds(j,j-1)总是1个固定的数值。

  Dr(j,i)反映在接收端收到2个数据分组时的时间间隔。Dr(j,j-1)根据网络抖动和语音流传输速率Ds(j,j-1)改变,所以如果我们将Ds(j,i)从Dr(j,i)减去,我们可以得到数据分组之间的网络抖动Jn(j,i)。

  Dp(j,i)反映在2个播放数据分组时的时间间隔。如果我们能完整地复现语音流,则对于所有的数据分组,Dp(j,i)应该等同于Ds(j,i)。

  Jn(j,i)反映在2个数据分组之间的网络延迟的不同,即网络抖动。Jn(j,i)被网络产生,而且用来决定抖动缓冲区的大小。

  Jp(j,i)反映在数据分组之间播放间隔和数据分组产生间隔间的差异。Jp(j,i)应当被尽可能的缩小以保持语音流的连续性。

  Jj(j,i)反映数据分组在抖动缓冲区中被延迟的时间的不同。

  需要注意Jn(j,i)+Jp(j,i)+Jj(j,i)=0。其计算公式可以被简化成如下形式以便于应用:

  Jn(j,i)=(Rj-Ri)-(Sj-Si)=(Rj-Sj)-(Ri-Si)

  Jp(j,i)=(Sj-Si)-(Pj-Pi)=(Sj-Pj)-(Si-Pi)

  Jj(j,i)=(Pj-Pi)-(Rj-Ri)=(Pj-Rj)-(Pi-Ri)

  在静态的抖动缓冲区控制运算中,我们只需要考虑该如何将Jp(j,i)减到最少。如果Jp(j,i)=0,则意味着播放数据分组j的非常好的时间:Pj=Pi-Ri+Rj=Pi+(Rj-Ri)。(Rj-Ri)只考虑在2个数据分组之间的抖动。在静态的抖动缓冲区控制算法中它将会被1个常量替换。而在1个自适应抖动缓冲区控制算法中它将会被1个变量替换。

  此外,我们应该注意网络抖动有可能突变。1个抖动突变意味网络延迟的突然增加,增加的延迟可以是100ms或更长。抖动突变的结果是1系列的数据分组几乎同时到达。为了处理抖动突变,抖动缓冲区大小一定可以是非常快地增加以适应突然出现的大的抖动。在本文中,我们采用全部抖动缓冲区用于解决抖动突变。假定抖动缓冲区可以保存最大数目MAX_JB_SIZE的数据分组,我们将会在抖动缓冲区中使用所有的数据分组的抖动信息,包括那些已经被播放的数据分组。在公式Pj=Pi中-Ri+Rj=Pi+(Rj-Ri),(Rj-Ri)将会被JBSize替换。然后有:

  JBSize=max[Ri-Si]-min[Ri-Si],

  i=0,1,…MAX_JB_SIZE-1。

  假设数据分组m有最小[Ri-Si],i=0,1,…MAX_JB_SIZE-1,则数据分组k的播放时间为:

  Pk=Pm+JBSize

  JBSize将会被作为新的语音段的抖动缓冲区的大小。类似于抖动缓冲的设计目的是为了在抖动和延迟之间寻找非常好的的折衷方案,G729AB复现系统自适应抖动缓冲区控制算法也必须在抖动缓冲大小和平滑语音流之间寻找折衷方案。我们可以从以下公式中得到结论:

  Jn(j,i)+Jp(j,i)+Jj(j,i)=0

  在我们的设计中,自适应总是当新的语音段启动的时候发生。基于这个理由,如果我们想要有一个完整复现的语音流,则应该有:

  Jp(j,i)=Dp(j,i)-Ds(j,i)

  =(Pj-Pi)-(Sj-Si)=0

  对于i=j-1,Pj=P(j-1)+(Sj-S(j-1)),

  令Sj-S(j-1)=PkgSize(j),则Pj=P(j-1)+PkgSize(j)。

  对于自适应算法,

  Pk=Pm+JBSize,JBSize是自适应抖动缓冲区的大小。

  Pk=Pm+(w×JBSize+(1-w)PkgSize(k)),

  式中0参数“w”的选择对于抖动缓冲算法的集成有直接影响。在理想情况下,参数“w”为一变量,反映语音上下文和网络抖动的变化。如果“w”设置得较小,可以更好地确保语音流的完整复现,但是如果JBSize较小而网络抖动变化较快时,丢包率也会相应提高,这是因为抖动缓冲的大小并没有真实反映网络抖动的变化。相反,如果“w”设置过大,丢包率虽然可以降低,但是当语音段较短,并且频繁出现时,如果此时网络抖动变化较快,虽然可以保持较低的丢包率,但是由于不同语音段的抖动缓冲大小亦不同,导致各语音段之间的起始延迟也不同,对于受话人来说,语音段之间延迟不断变化,将引起由于人为抖动导致的失真。   由此可见,选择参数“w”必须同时考虑语音上下文和网络抖动两种因素。然而目前由于无法确认语音上下文的变化规律,以及如何在复现系统中得到有价值的相关信息,需要进一步对不同网络抖动环境和各种可能的语音上下文同时进行大量测试,根据语音质量最终确定如何选择参数“w”,例如将其设为以语音上下文特征为自变量的变量。这将有待于进一步研究。

  6 总结

  本文阐述了影响VoIP终端语音质量的几种因素,在延迟分析中引入了抖动缓冲延迟的概念,并且分析了抖动现象,建立了1种G729AB的构造系统模型与复现系统模型,设计了相应的抖动缓冲的自适应算法,并且将其与G729AB的复现系统集成。在G729AB的复现系统与抖动缓冲的自适应控制算法集成算法中,如何在抖动缓冲大小与语音流平滑之间求得非常好的平衡还有待深入讨论。

  参考文献:

  [1] RTP Profile for Audio and Video Conferences with Minimal Control, RFC1890[Z], Network Working Group, Audio Video Transport Working Group,January 1996.

  [2] ITU T Recommendation G.729 Annex B[Z]. International Telecommunication Union.1996,11.

  [3] RTP: A Transport Protocol for Real Time Applications, RFC1889[Z], Network Working Group, Audio Video Transport Working Group,January 1996.

 

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

0
相关文章