語音通訊中終端上的時延 latency 及減小方法

2021-08-21 11:26:04 字數 1558 閱讀 7595

時延是語音通訊中的乙個重要指標,當端到端(end2end)的時延(即one-way-delay,單向時延)低於150ms時人感覺不到,當端到端的時延超過150ms且小於450ms時人能感受到但能忍受不影響通話交流,當端到端的時延大於1000ms時嚴重影響通話交流,使用者體驗很差。同時時延也是語音方案過認證的必選項,超過了規定值這個方案是過不了認證的。今天我們就講講時延是怎麼產生的以及怎麼樣在通訊終端上減小時延。

1,時延產生

2,時延測量

時延是過認證的必選項。對於語音通訊解決方案來說,先得讓時延低於認證指定的值,然後再看有沒有減小的可能。如可以將時延做到更小,則是該方案的亮點。要測量時延就得在實驗室搭建乙個理想的端到端的語音通訊系統(理想是指網路幾乎不引入時延),同時兩端均採用該語音方案,這樣就可以用儀器測出端到端的延時了。測時延時,儀器上顯示的時延是乙個平均值,等通話時長達到一定值後就會穩定下來。拿它跟認證指定的值比較,如果大於指定值,認證是過不了的,先要減小時延讓它低於指定值。如果低於指定值,則說明該方案有乙個好的起點,可以繼續減小讓其成為亮點。

用儀器測出來的單向時延大體上應該是終端上各個模組引入的時延之和。要減小時延首先得搞清楚是哪個模組引入的時延較大。有些模組引入的時延是已知固定的,且不能減少,比如訊號處理演算法模組。有些模組引入的時延是未知的,我們就需要去測量這個模組引入的時延具體是多少。做這些前需要對該語音通訊方案的軟體架構熟悉,知道方案中有幾個(除了訊號處理演算法模組外)引入時延的點。這種時延通常是對buffer的訪問引入的時間差,該怎麼測出時延值呢?我一般用如下的方法:當把語音資料放進buffer時記下當時的時間t1,儲存在這段資料開始的地方(雖然破壞了語音資料,不過沒關係,我們只是用來測延時,是一種手段,不關心語音質量),當從buffer中取出這段語音資料時,再記錄下時間t2,將t2減去儲存在資料中的t1就得到本次訪問引入的延時。統計非常多次(我通常用一萬次)再算平均值,就可以得到這個點引入的時延了。下面舉例說明。有一塊可以存5幀(每幀20ms)的buffer,某一幀語音資料放在第三幀處。放時的時間是158120毫秒,將這個值放在放這段資料開始的地方。將這段資料從buffer裡取出來時的時間是158180秒,可以算出本次延時是60ms(158180-158120=60),統計10000次,算出延時總和,再除以10000,得到延時平均值是58ms。所以這個點引入的時延是58ms。

3,時延的減小方法

知道了各個點引入的時延大小,下面就要看怎麼減小時延了。這裡的減小是指能減小的,有些是不能減小的,比如codec引入的時延。我用過的方法主要有以下兩種。

1)用減小緩衝深度來減小時延

這種方法說白了就是讓語音資料在buffer裡呆的時間短些,比如以前在buffer裡有了3幀(假設每幀20ms)語音資料才會從buffer中取出給下一模組,這樣平均就會引入60ms的時延。如果將3幀改為2 幀,則平均引入的時延就降為40ms,這樣就減少了20ms的時延。不過用這種方法是有條件的,要確保語音質量不下降。改了後要用儀器測,如果長時測試下語音質量不下降就說明這個改後的值是可以接受的。經過試驗後找到乙個可以接受的緩衝深度的最小的值,就把這個值用在方案中。

2)用加速訊號處理演算法來減少時延

談談語音通訊中的各種tone

今天談的這個主題 tone 存在於我們的日常打 過程中。先舉兩個場景 1,你拿起固話話筒準備打 按 號碼前先從話筒裡聽到 嗡 的連續音,這叫dial tone 撥號音,表示你可以撥 號碼了 你撥完號碼對方振鈴後你又聽到有規律的 嘟 嘟 的斷續音,這叫ring back tone 回鈴音,表示對方已振...

談談語音通訊中的各種tone

今天談的這個主題 tone 存在於我們的日常打 過程中。先舉兩個場景 1,你拿起固話話筒準備打 按 號碼前先從話筒裡聽到 嗡 的連續音,這叫dial tone 撥號音,表示你可以撥 號碼了 你撥完號碼對方振鈴後你又聽到有規律的 嘟 嘟 的斷續音,這叫ring back tone 回鈴音,表示對方已振...

VOIP通訊中影響語音質量的因素

在voip通訊中,影響語音質量的因素比較多,歸類起來就以下幾個大的因素 1 網路因素,網路一般體現在網路的延遲 抖動 丟包。延遲一般是有語音的編譯碼速度 jitterbuffer延遲 tcp ip協議棧處理速 度 中間路由器路由延遲等引起的,在這些因素中,最重要的是jitterbuffer延遲和中間...