g729原始碼分析 9 g729 解碼

2021-06-29 03:54:36 字數 1373 閱讀 3770

現在來分析g729的解碼.

從g729的測試**看出來,解碼的過程被清晰地分成了兩個部分.

第一部分,就解碼出lpc**係數與激勵,合成語音.

第二部分,進行感加權,傾斜補償

這些與g723的處理是極其類似的,少了靜音壓縮,這樣就少了一大塊要分析的**了

先來看第一部分,也就是合成語音的部分

decod_ld8k 函式名的意思就是長延時8k解碼器

d_lsp(parm, lsp_new, bfi);

這個函式解碼出lsp係數儲存至lsp_new,解碼過程與g723類似,查碼本表,

也g723一樣,採用的是差分量化,之前幀的lsp係數要保留下來,才能得到完整的

量化值int_qlpc(lsp_old, lsp_new, a_t);

lsp插值,兩個子幀,只有第二子幀的lsp係數被量化,而第一子幀的lsp係數是經過

插值得到的.

經過這一系列操作,就解碼出了系統函式a(z).

更新lsp_old為下一幀解碼az係數做準備

接下來,就是解碼激勵了

pred_lt_3(&exc[i_subfr], t0, t0_frac, l_subfr);

這個函式在編碼時分析過了.

從網路報文裡得到了to 與 to_fac(基音延遲與分數基音延遲)

這就是解碼出不含增益的自適應激勵(包含公升抽樣,這在編碼時候分析過了原理與演算法了)

decod_acelp(parm[1], parm[0], code);

這個解出固定碼本,同樣,對基音延遲小於幀長的情況,對應編碼時的處理,做乙個迴圈補充:

if(sub(t0, l_subfr) <0 )

}dec_gain(index, code, l_subfr, bfi, &gain_pitch, &gain_code);

解碼增益,注意到增益中有乙個成分是不經過網路報文傳輸的,而是在編譯碼雙方同步算出來的.

參考編碼時的處理

解碼出了自適應激勵與固定碼本激勵以及它們對應的增益.

做個乘法加法運算,我們就可以得到解碼的激勵了

syn_filt(az, &exc[i_subfr], &synth[i_subfr], l_subfr, mem_syn, 0);

做個卷積,合成出語音,完畢!

copy(&old_exc[l_frame], &old_exc[0], pit_max+l_interpol);

記憶體更新,儲存當前解碼出來的激勵,作為下一幀的自適應碼本

筆者將在下一章節分析感知加權與傾斜補償,其實這些處理同g723基本是大同小異.

讀者們有興趣,也可以自行對比g723的原始碼分析來理解這一塊**.

敬畏:在先哲面前,懂得自身的渺小

求知:程式設計師的本能

不懈:自律者的品質

g729原始碼分析 7 增益量化

現在來分析g729的增益量化,這裡包含兩個增益,乙個是自適應碼本的增益gp,乙個是固定碼本的增益gc 由於自適應碼本與固定碼本已經被搜尋出來了,就可以根據這兩級碼本,與反量化的az係數進行卷積,得到解碼的語音頻號 包含未知變數gc與gp 利用這個解碼的語音頻號與目標語音頻號方差最小為準則,在增益碼本...

G 729演算法介紹

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

g729分析筆記

729感知加權的問題,同723一樣,仍然對高頻分量做乙個估值,高頻低,則認為頻譜是傾斜的。要感知加權的時候應做適當的補償。因為人類的語音資訊,在前兩個共振峰能量較大,高頻共振峰幅度則會依次回落。對比723,729引入了感知加權自適應機制,即,兩個共振峰的位置如果太接近了,頻寬擴充套件有可能導致兩個共...