現在來分析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引入了感知加權自適應機制,即,兩個共振峰的位置如果太接近了,頻寬擴充套件有可能導致兩個共...