專利名稱:VoIP抖動緩沖區(qū)的動態(tài)處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及VoIP語音技術(shù),尤其是一種VoIP抖動緩沖區(qū)的動態(tài)
處理方法。
背景技術(shù):
在實(shí)時的VoIP語音網(wǎng)絡(luò)會議中,語音數(shù)據(jù)是經(jīng)過壓縮打包后傳 輸?shù)?。每個數(shù)據(jù)包都包含壓縮后的語音數(shù)據(jù)以及目地I P地址信 息.雖然語音包在發(fā)送端是按一定間隔有序發(fā)送的,但是由于網(wǎng)絡(luò)傳 輸路徑可能不同,不同的數(shù)據(jù)包到達(dá)接收端的時間間隔并不一致。另 外,在采用UDP進(jìn)行語音數(shù)據(jù)實(shí)時傳輸時,到達(dá)接收端的語音次序 也有可能發(fā)生錯亂。這兩個現(xiàn)象就是我們通常說的抖動。在一個多人 參加的VoIP音頻網(wǎng)絡(luò)會議中,劇烈的數(shù)據(jù)包抖動會導(dǎo)致聲音時斷時 續(xù),嚴(yán)重影響參會者的語音實(shí)時交流。為了有效的解決抖動問題,通 常在接收端會引入緩沖區(qū)技術(shù)來消除抖動的影響。
現(xiàn)有技術(shù)中有兩種方法設(shè)計(jì)抖動緩沖區(qū)
1) 、一個是固定長度抖動緩沖區(qū)在解碼和播放語音數(shù)據(jù)包之前,
放入一個固定長度緩沖區(qū),也就是緩沖內(nèi)的語音包個數(shù)是固定不變
的。這個方法的特點(diǎn)是發(fā)送端到接收端的的時延固定不變,并且運(yùn) 算復(fù)雜度最小。缺點(diǎn)是為了消除抖動,通常緩沖區(qū)的長度設(shè)置很長, 導(dǎo)致了聲音質(zhì)量下降。
2) 可變抖動緩沖區(qū)為了盡可能縮小語音時延,最近幾年推出 了可變抖動緩沖區(qū)技術(shù),目前這種技術(shù)在產(chǎn)品上應(yīng)用越來越普遍。這種技術(shù)的核心思路是抖動緩沖區(qū)的長度根據(jù)當(dāng)前網(wǎng)絡(luò)狀況快速自適 應(yīng)調(diào)整。當(dāng)網(wǎng)絡(luò)抖動劇烈時,通過插入靜音包來增加緩沖區(qū)長度;當(dāng) 網(wǎng)絡(luò)條件趨向于暢通時,通過刪除緩沖區(qū)中最老的包來實(shí)現(xiàn)減小緩沖 區(qū)長度的目的。這種方法的優(yōu)點(diǎn)是語音時延較短。缺點(diǎn)是在緩沖區(qū) 中刪除或者增加語音包會導(dǎo)致語音失真。
發(fā)明內(nèi)容
為了克服己有可變抖動緩存區(qū)方法的語音時延較大、語音失真較
大的不足,本發(fā)明提供一種有效減小語音時延、減少語音失真的VoIP
抖動緩沖區(qū)的動態(tài)處理方法。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是
一種VoIP抖動緩沖區(qū)的動態(tài)處理方法,所述動態(tài)處理方法包括以 下步驟
1) 、初始化抖動緩沖區(qū)大小(jbs),設(shè)置兩個不同的閥值(hl,h2)表示抖 動緩沖區(qū)條件;
Jbs = 40 ms Hl= 100 ms H2 = 50ms
2) 、接收到遠(yuǎn)端傳過來的語音包后,立即插入到抖動緩沖區(qū)的末尾;
3) 、計(jì)算平均抖動,在一個固定長度設(shè)為N的滑動窗口范圍內(nèi)計(jì)算平
均抖動,算式為-
上式中,人JO表示平均第i個包的平均抖動,N為滑動窗口長度;4) 計(jì)算抖動偏差乙(0,乙g— (0,算式為 W) =1 W)l
1 w
var (0 = : Z人ar W
上式中,J^,(0是移動平均抖動偏差;
5) 如果平均抖動u/;o閥值hl,則轉(zhuǎn)到步驟6);否則轉(zhuǎn)到步驟2),
繼續(xù)等待下一個語音包到達(dá);
6) 通過放慢緩沖內(nèi)的語音包數(shù)據(jù)節(jié)拍的方式來增加緩沖區(qū)大小,要增 加的緩沖區(qū)目標(biāo)時長由以下公式計(jì)算獲得
7) 如果平均抖動人j/;x閥值h2,則轉(zhuǎn)到步驟8),否則轉(zhuǎn)到步驟2),
繼續(xù)等待下一個語音包到達(dá);
8) 通過加快緩沖內(nèi)的語音包數(shù)據(jù)節(jié)拍的方式來減小緩沖區(qū)大小,要 減少的緩沖區(qū)目標(biāo)時長由以下公式計(jì)算獲得
本發(fā)明的技術(shù)構(gòu)思為基于在一個固定窗的范圍內(nèi),通過計(jì)算加 權(quán)抖動緩沖區(qū)偏移量的移動平均值和語音包的抖動值來動態(tài)的調(diào)節(jié)抖 動緩沖區(qū)長度。抖動緩沖區(qū)長度將根據(jù)收到的數(shù)據(jù)和平均抖動時長在 滑動窗范圍內(nèi)自動收縮或者擴(kuò)展。收縮或者擴(kuò)展緩沖區(qū)長度是通過改 變語音節(jié)拍的方式來實(shí)現(xiàn)。
采用自適抖動緩沖區(qū)算法假設(shè)第i語音包的發(fā)送時間戳為S,、
接收時間戳記為《,則對于兩個包i和i-l,變量D可以表示為第i個語音包的抖動可以表示如下-
J, = (15 x + Z —1))) /16
為了描述自適應(yīng)抖動緩沖區(qū)算法,我們引入了幾個參數(shù):其中A記 為播放時間戳,?!稙槎秳泳彌_區(qū)偏移量。自適應(yīng)抖動緩沖區(qū)算法技術(shù) 描述如下
1) 基于網(wǎng)絡(luò)抖動和時延實(shí)時計(jì)算的值進(jìn)行自適應(yīng)調(diào)整
2) 計(jì)算每個到達(dá)包的抖動偏移量
3) 通過緩沖區(qū)平均偏移量和抖動管理緩沖區(qū)隊(duì)列。 A =《十A:xJ",.
其中,*為2 4范圍內(nèi)波動的可變系數(shù)。系數(shù)yt值越大,播放的 語音包越多,但代價是抖動緩沖區(qū)引起的延遲也就越大。
4) 抖動緩沖區(qū)偏移量。^通過加權(quán)移動平均值計(jì)算獲得 丄,=0, _《
W ="x£, +(1-a)xo1j
這里,o,表示第i包從抖動緩沖區(qū)輸出時間。
這里也提供另外二種算法來計(jì)算抖動緩沖區(qū)偏移量0# 。設(shè)^為
當(dāng)前這段語音的起始點(diǎn)(指靜音后收到的第一個語音包)到收到第i
包的這段時間內(nèi)所有緩沖區(qū)偏移量集合。抖動緩沖區(qū)偏移量0#的二種
計(jì)算方法 or
其中,MED表示中值濾波器,F(xiàn)MH為FIR混合MED。
本技術(shù)對抖動緩沖區(qū)偏移量使用平滑算法。這樣,少部分延遲包
6將不會影響平均抖動緩沖區(qū)偏移量和到致抖動緩沖區(qū)大小增大。
本發(fā)明的有益效果主要表現(xiàn)在l)實(shí)時的改變緩沖區(qū)長度,使語 音時延盡可能的小;2)通過改變節(jié)拍的方式來實(shí)現(xiàn)緩沖區(qū)長度的調(diào) 整,比傳統(tǒng)的刪除或者插入語音包的可變動緩沖區(qū)技術(shù)失真?。?)
采用加權(quán)偏移量的計(jì)算方法,可以更精確的體現(xiàn)當(dāng)前網(wǎng)絡(luò)狀態(tài)。
圖1是VoIP抖動緩沖區(qū)的動態(tài)處理方法的流程圖。
具體實(shí)施例方式
下面結(jié)合附圖對本發(fā)明作進(jìn)一步描述。
參照圖l, 一種VoIP抖動緩沖區(qū)的動態(tài)處理方法,所述動態(tài)處理
方法包括以下步驟
1) 、初始化抖動緩沖區(qū)大小(jbs),設(shè)置兩個不同的閥值(hl,h2:)表示抖 動緩沖區(qū)條件;
Jbs = 40 ms Hl= 100 ms H2 = 50ms
2) 、接收到遠(yuǎn)端傳過來的語音包后,立即插入到抖動緩沖區(qū)的末尾;
3) 、計(jì)算平均抖動,在一個固定長度設(shè)為N的滑動窗口范圍內(nèi)計(jì)算平
均抖動,算式為
上式中,人JO表示平均第i個包的平均抖動,N為滑動窗口長度;
4) 計(jì)算抖動偏差KO,^— (0,算式為-
4(0 =|刷—W)|人vg一var (0 = 77 Z人ar W
上式中,J^^(0是移動平均抖動偏差;
5) 如果平均抖動/。,g(/)〉閥值hl,則轉(zhuǎn)到步驟6);否則轉(zhuǎn)到步驟2),
繼續(xù)等待下一個語音包到達(dá);
6) 通過放慢緩沖內(nèi)的語音包數(shù)據(jù)節(jié)拍的方式來增加緩沖區(qū)大小,要增
加的緩沖區(qū)目標(biāo)時長由以下公式計(jì)算獲得 +2x/avg—var(0
7) 如果平均抖動uo〈閥值h2,則轉(zhuǎn)到步驟8),否則轉(zhuǎn)到步驟2), 繼續(xù)等待下一個語音包到達(dá);
8) 通過加快緩沖內(nèi)的語音包數(shù)據(jù)節(jié)拍的方式來減小緩沖區(qū)大小,要
減少的緩沖區(qū)目標(biāo)時長由以下公式計(jì)算獲得 本實(shí)施例的具體方法包括以下步驟
1) 初始化抖動緩沖區(qū)大小(jbs =40 ms )(處理框圖101)。設(shè)置兩個 不同的閥值(hl,h2)表示抖動緩沖區(qū)條件。這里我們置閥值hl為 勵ms, h2為50ms.
2) 接收語音包(處理框圖102)。接收到遠(yuǎn)端傳過來的語音包后,立 即插入到抖動緩沖區(qū)的末尾。
3) 計(jì)算平均抖動(處理框圖103)。在一個固定長度設(shè)為N的滑動窗 口范圍內(nèi)計(jì)算平均抖動。
這里,人J/)表示平均第i個包的平均抖動,N為滑動窗口長度。4) 計(jì)算抖動偏差乙(/),、_(/)(處理框圖104)
<formula>formula see original document page 9</formula>
5) 跟閥值hl做比較(判斷框105)。如果平均抖動J。vg(/):H詢值hl,則 轉(zhuǎn)到步驟6)。
否則轉(zhuǎn)到處理框102,繼續(xù)等待下一個語音包到達(dá)。
6) 增加緩沖區(qū)大小(處理框106)。在抖動比較厲害時,必須加大緩 沖區(qū)大小,以消除抖動的影響。我們可以通過放慢緩沖內(nèi)的語音包數(shù) 據(jù)節(jié)拍(即放慢播放速度)的方式來增加緩沖區(qū)大小。要增加的緩沖 區(qū)目標(biāo)時長由以下公式計(jì)算獲得
<formula>formula see original document page 9</formula>
7) 跟閥值h2做比較(判斷框107)。如果平均抖動4(/)<閥值112, 則轉(zhuǎn)到步驟8)。否則轉(zhuǎn)到步驟2),繼續(xù)等待下一個語音包到達(dá)。
8) 減小緩沖區(qū)大小(處理框108)。意味著當(dāng)前網(wǎng)絡(luò)交通很通暢,抖 動很小。我們可以通過加快緩沖內(nèi)的語音包數(shù)據(jù)節(jié)拍(即加快播放速 度)的方式來減小緩沖區(qū)大小,進(jìn)而達(dá)到減小時延的目的。要減少的 緩沖區(qū)目標(biāo)時長由以下公式計(jì)算獲得
權(quán)利要求
1、一種VoIP抖動緩沖區(qū)的動態(tài)處理方法,其特征在于所述動態(tài)處理方法包括以下步驟1)、初始化抖動緩沖區(qū)大小jbs,置兩個不同的閥值(h1,h2)表示抖動緩沖區(qū)條件;2)、接收到遠(yuǎn)端傳過來的語音包后,立即插入到抖動緩沖區(qū)的末尾;3)、計(jì)算平均抖動,在一個固定長度設(shè)為N的滑動窗口范圍內(nèi)計(jì)算平均抖動,算式為<maths id="math0001" num="0001" ><math><![CDATA[ <mrow><msub> <mi>J</mi> <mi>avg</mi></msub><mrow> <mo>(</mo> <mi>i</mi> <mo>)</mo></mrow><mo>=</mo><mfrac> <mn>1</mn> <mi>N</mi></mfrac><munderover> <mi>Σ</mi> <mrow><mi>k</mi><mo>=</mo><mn>1</mn> </mrow> <mi>N</mi></munderover><mi>J</mi><mrow> <mo>(</mo> <mi>i</mi> <mo>-</mo> <mi>k</mi> <mo>)</mo></mrow> </mrow>]]></math></maths>上式中,Javg(i)表示平均第i個包的平均抖動,N為滑動窗口長度;4)計(jì)算抖動偏差Jvar(i),Javg-var(i),算式為Jvar(i)=|*(j)-Javg(i)|<maths id="math0002" num="0002" ><math><![CDATA[ <mrow><msub> <mi>J</mi> <mrow><mi>avg</mi><mo>-</mo><mi>var</mi> </mrow></msub><mrow> <mo>(</mo> <mi>i</mi> <mo>)</mo></mrow><mo>=</mo><mfrac> <mn>1</mn> <mi>N</mi></mfrac><munderover> <mi>Σ</mi> <mrow><mi>k</mi><mo>=</mo><mn>1</mn> </mrow> <mi>N</mi></munderover><msub> <mi>J</mi> <mi>var</mi></msub><mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo></mrow> </mrow>]]></math></maths>上式中,Javg-var(i)是移動平均抖動偏差;5)如果平均抖動Javg(i)>閥值h1,則轉(zhuǎn)到步驟6);否則轉(zhuǎn)到步驟2),繼續(xù)等待下一個語音包到達(dá);6)通過放慢緩沖內(nèi)的語音包數(shù)據(jù)節(jié)拍的方式來增加緩沖區(qū)大小,要增加的緩沖區(qū)目標(biāo)時長由以下公式計(jì)算獲得Javg(i)-h1+2×Javg-var(i)7)如果平均抖動Javg(i)<閥值h2,則轉(zhuǎn)到步驟8),否則轉(zhuǎn)到步驟2),繼續(xù)等待下一個語音包到達(dá);8)通過加快緩沖內(nèi)的語音包數(shù)據(jù)節(jié)拍的方式來減小緩沖區(qū)大小,要減少的緩沖區(qū)目標(biāo)時長由以下公式計(jì)算獲得h2-Javg(i)+Javg-var(i)。
全文摘要
一種VoIP抖動緩沖區(qū)的動態(tài)處理方法,包括以下步驟1)初始化抖動緩沖區(qū)大小jbs,設(shè)置兩個不同的閥值(h1,h2)表示抖動緩沖區(qū)條件;2)接收到遠(yuǎn)端傳過來的語音包后,立即插入到抖動緩沖區(qū)的末尾;3)計(jì)算平均抖動,在一個固定長度設(shè)為N的滑動窗口范圍內(nèi)計(jì)算平均抖動;4)計(jì)算抖動偏差J<sub>var</sub>(i)和移動平均抖動偏差J<sub>avg-var</sub>(i);5)如果平均抖動J<sub>avg</sub>(i)>閥值h1,轉(zhuǎn)到步驟6);否則轉(zhuǎn)到步驟2);6)通過放慢緩沖內(nèi)的語音包數(shù)據(jù)節(jié)拍的方式來增加緩沖區(qū)大小;7)如果平均抖動J<sub>avg</sub>(i)<閥值h2,則轉(zhuǎn)到步驟8),否則轉(zhuǎn)到步驟2);8)通過加快緩沖內(nèi)的語音包數(shù)據(jù)節(jié)拍的方式來減小緩沖區(qū)大小。本發(fā)明有效減小語音時延、減少語音失真。
文檔編號H04L1/20GK101582832SQ200810062029
公開日2009年11月18日 申請日期2008年5月17日 優(yōu)先權(quán)日2008年5月17日
發(fā)明者宋旭東, 明 宗, 杜武平 申請人:紅杉樹(杭州)信息技術(shù)有限公司