G 729與G 723語音編碼介紹及優化

2021-04-14 02:48:33 字數 1474 閱讀 8915

語音編碼分成波形編碼、引數編碼和混合編碼.波形編碼就是語音頻號形成的波形進行處理和加工,引數編碼是以語音頻號產生的數字模型為基礎,求出其模型引數,然後按照這些引數還原數字模型,合成語音。混合編碼是綜合了波形編碼和引數編碼的長處,在4-16kbps的速率上進行高質量的語音合成。例如多脈衝激勵線性**編碼(mplpc),碼本激勵線性**編碼(celp)都是混合編碼。

人耳的聽覺範圍在20-20khz,根本抽樣定律要保證聲音不失真,就必須用44khz左右取樣頻率,但是人說話的範圍在300-3400hz,所以就用8khz主要對人聲取樣。

波形編碼前,首先對模擬語音頻號進行取樣,然後對取樣結果進行幅度量化,再進行二進位制編碼。

引數編碼則是對數字模型的引數進行求值,目前常用的是無損聲管離散時間模型,該模型綜合了人聲的最重要三個因素:聲門,激勵和輻射。這三個因素都可以用數學函式表達。再加上在語音頻號的非均勻性和相關性,非均勻性表現在小幅度訊號出現的概率較大,相關性表現在相鄰的兩個樣本點相關和相隔基音週期之間的兩個樣本點也相關。線性**就時利用了相關性從原來的語音頻號計算出現在的訊號。而且人在正常的交談中有50%的時間是靜音,只在聽對方講話,語音檢測vad就是用來判斷是否是靜音,而柔和雜訊再生cng就是用來產生乙個「好聽」的靜音傳給對方。

g.729與g.723是itu制定的適用於ip**語音編碼,因為其高質量,低位元速率而得到廣泛應用,下面分別做介紹:

g.729是itu制定通過的8kbps的語音編碼協議,換算成位元組才1k,它採用共軛結構的算術碼激勵線性**(cs-acelp)。

g.723也是itu制定的,不過它是雙速率語音編碼,它可以工作在5.3kbps和6.3kbps兩個方式上,相應分別採用代數碼激勵線性**(acelp)和多脈衝最大似能量化(mp-mlq)。

通過devpartner對源**進行分析發現無論是g.729還是g.723大部分運算都集中在basic_op.c的函式中,basic_op.c裡面都是些基本運算,l_mac(),l_mult(),l_add()和sature()又占用basic_op.c中的絕大部分運算。所以優化也應該集中在這幾個函式中。在basic_op.c有個溢位標誌位overflow,很多基本函式多對其判斷浪費了很多時間,其實可以直接去掉,使用時直接判斷結果時候為最大值即可知道是否溢位,對basic_op.c的函式採用mmx指令優化,使用其飽和特性可以減掉很多判斷溢位的操作,

下面給出乙個加法的例子

word16 add(word16 var1,word16 var2)

}源**中太多的函式呼叫,比如l_mac就呼叫了l_mult和l_add函式,如果直接把l_mult和l_add**填入l_mac中則可以省去很多函式呼叫浪費的時間,itu的**中為了詳細的描述演算法有很多類似迴圈沒有合併,將其合併也可以提高效率,並且有些在迴圈體內的運算也可以提到迴圈體外,對於用for()控制的迴圈次數最好使用引數,這樣編譯器可以將迴圈解開。

因為本人能力和精力有限,僅僅是在源**的層面上對g.729和g.723進行優化,不過也取得了相當可觀的效果,優化後的效率比優化前提高了一倍,如果再做更深層次的演算法優化相信會有更高的提公升。

G 729演算法介紹

李國帥 取自日誌20050929 語音編碼感性認識 lpc 聲音的線性 係數 演算法 比較簡單,大概就是通過一幀 160點 語音的前n 10左右 個點來 後乙個點的值,通過均方差最小準則來進行計算.這是前項 除此還有後項 有些編解碼器前後項 同時使用的.g.729語音壓縮編譯碼演算法 支援平台 tm...

PJSIP新增G729編碼

1.第一步 config site中新增支援g729 define pjmedia has bcg729 1 2.第二步 3.第三步 執行pjsip的configure命令時設定bcg729的源 位置,參考 configure with bcg7294.第四步 編譯g729,參考 cmake dcm...

音訊編碼技術G 729與G 711

voip中g.729與g.711的部分資料 由於用上了voip閘道器裝置,在設定介面裡關於語音壓縮的設定裡有5種標準可選,分別是g.711 ulaw g.711 alaw g.723 53k g.723 63k g729,g.711和g.729是企業voip部署中非常流行的兩種編解碼器。與通過g.7...