g723原始碼詳細分析 三 lsp量化

2021-08-25 20:28:41 字數 1970 閱讀 8309

4 lsp系數量化

現在來分析這個

10 lsp係數已經計算出來了,由於lsp的性質,可以將它們分成若干段,分別量化

它們將會被分成 3,3,4這三個分向量

每個向量都會有乙個256的碼本表(大概是這麼多的,可以直接計算一下那個陣列的大小)

lsp_qnt 這個函式,執行lsp量化的過程,會形成乙個lsp三個分向量在碼本表裡的下標索引

首先我們看到每個lsp係數被進行了加權

權值就是與相鄰lsp距離大的那個值的倒數,也就是說,乙個lsp係數如果位置有點"偏",那麼

它在量化中的比重就小了

**片段,這裡就不列出計算距離的那一部分了

/* invert the differences */ //lsc權值是距離的倒數

//lsc 為什麼選用0x20,這是因為div_s要求被除數一定要小於除數,而0x20是一定滿足這個條件的,這導致本應用0x80表示

1,最後的結果是擴大2^13次方

tmp0 = (word16) 0x0020 ;

for ( i = 0 ; i < lpcorder ; i ++ ) {

if ( wvect[i] > tmp0 )

wvect[i] = div_s( tmp0, wvect[i] ) ;

else

wvect[i] = max_16 ;

注意取倒數的tmp0 =0x0020,這個值選得是有依據的,保證itu的除法不出錯

然後對權值進行歸一化

去除直流分量,這是由於itu採用的是定點數,所以目標向量的值不宜過大,去除直流分量後,從

直流分量的定義,可以看出來,大概會在+-20之間

*/ //去除直流分量 lsp引數盡量減小,使碼本裡的值不會太大,減少計算的bit位(這可以從碼本裡的值看出來)

for ( i = 0 ; i < lpcorder ; i ++ ) {

currlsp[i] = sub( currlsp[i], lspdctable[i] ) ;

prevlsp[i] = sub( prevlsp[i], lspdctable[i] ) ;

這裡考慮到lsp的相關性,還應扣減之前lsp的值的12/32,進一步減小目標向量值的大小

*/ // 12/32將以前的lsp進行衰減,量化差值

for ( i = 0 ; i < lpcorder ; i ++ ) {

tmp0 = mult_r( prevlsp[i], (word16) lspprd0 ) ;

currlsp[i] = sub( currlsp[i], tmp0 ) ;

lspprd0 就是12/32,即它是擴大了32767倍的這是由於mult_r縮小計算後的值,所以預先擴大12/32

在碼本表裡搜尋,採用的方式是歐式距離最短的那個碼本向量的下標,做為量化的結果(當然,要乘上權值後搜尋),

**片段

g723裡的公式,經過推演實際上為 (e - eb)^2 * w e即為去除直流分量的,並且做了**差值的項,即標準中的 en

(3.4) ,於是在 lsp_svq裡量化時,直接計算 eb為碼本裡的值

只需要計算 w(2 eb * e - eb^2)的最大值即可,因為 e^2是固定的,從這裡看出w的擴大倍數,對計算結果無影響

return lsp_svq( currlsp, wvect ) ;

lsp_svq 這個就是搜尋歐式距離最小的那個碼本向量 search vector quat(呵呵,看函式名應該是這個意思)

注意,並沒有完整地計算歐式距離,因為e^2是固定的,只需要計算w(2 eb * e - eb^2)最大即可,

推導w(e^2 - 2 eb * e + eb^2),本應計算此式的最小值,因為e^2不變,所以只需計算w(2 eb * e - eb^2)最大

**片段較為簡單,此處不列舉了

至此,完成了聲道引數的編碼過程.接下來,就是要對激勵進行編碼了(也就是逆濾波後的殘差訊號)

待續....

林紹川2011.5.15 於杭州

g723原始碼詳細分析 17 舒適雜訊解碼

dec cng舒適雜訊解碼 知道舒適雜訊如何生成,解碼就簡單了.sid會傳遞濾波引數 在濾波器相似度不高時,sid報文會被傳送 解出報文裡的lpc引數與增益估值 片段 sid frame decoding deccng.sidgain dec sidgain line sfs 0 mamp inve...

g723原始碼詳細分析 18 丟包補償

g723對網路丟包行為了一些處理 涉及的函式為comp info regen comp info 負責計算插值依據 它的四個引數 word16 buff 激勵陣列,包含之前的145個激勵 word16 olp 當前幀的基音週期 word16 gain 輸入增益 歸一化的 word16 shgain ...

g723原始碼詳細分析 19 基音後置濾波器

現在來分析g723基音後置濾波器 根據基音周期間,激勵訊號的相關性,來對激勵訊號做乙個增強處理 相應的函式分別是 comp lpf filt lpf comp lpf 負責計算最佳的基音延後,具體地說,是在基音週期延遲附近,找出最匹配當前子幀激勵的60個連繼激勵e i 使用的方法自然找自相關最大的....