現在來分析g729的增益量化,
這裡包含兩個增益,乙個是自適應碼本的增益gp,乙個是固定碼本的增益gc
由於自適應碼本與固定碼本已經被搜尋出來了,
就可以根據這兩級碼本,與反量化的az係數進行卷積,得到解碼的語音頻號(包含未知變數gc與gp)
利用這個解碼的語音頻號與目標語音頻號方差最小為準則,
在增益碼本裡做搜尋,搜尋出最佳增益
即itu文件中的3.9節,公式63.
筆者把這個公式簡略推導列在下面(實際上這個公式太簡單了,根本不需要推導,讀者即可看出端倪)
首先我們把目標語音頻號記作x[n]
反量化az系統的衝激響應已經之前的**中得到了,記作h[n]---h[n]的計算過程,筆者在這個系列的第五章節分析過了
自適應碼本與h[n]的卷積記作y1[n]
固定碼本與h[n]的卷碼記作y2[n]
自然,我們可以這麼表示解壓的語音頻號與目標語音頻號的方差(是方差吧?筆者的統計學不過關,呵呵)
e = σ (x[n] - gp*y1[n] - gc*y2[n])^2 --- 筆者注:^2表示平方
展開e = σ (x[n]^2 + (gp*y1[n])^2 + (gc*y2[n])^2 - 2gp*x[n]*y1[n] - 2gc*x[n]*y2[n] + 2gp*gc*y1[n]*y2[n])
這就是itu文件裡的式63,只不過itu是用矩陣乘法來表達的
corr_xy2:
這個函式會計算出式63中相應的已經係數如 (y1[n])^2, -2x[n]*y[n]等 其中x[n]^2是不需要計算的,
因為在搜尋過程,對於當前子幀,這個項相當於常數項
也就是我們只需要將碼本裡的增益gp gc代入,計算出最小的e即可
這裡itu實際有做一些預估搜尋,即通過乙個估值手段,來縮小碼本的搜尋範圍為原來的1/4.
筆者將在下一章節分析這一塊內容
g729原始碼分析 9 g729 解碼
現在來分析g729的解碼.從g729的測試 看出來,解碼的過程被清晰地分成了兩個部分.第一部分,就解碼出lpc 係數與激勵,合成語音.第二部分,進行感加權,傾斜補償 這些與g723的處理是極其類似的,少了靜音壓縮,這樣就少了一大塊要分析的 了 先來看第一部分,也就是合成語音的部分 decod ld8...
g729原始碼分析 3 基音週期搜尋 上
基音週期搜尋,是自適應碼本搜尋的乙個重要依據,自適應碼本的搜尋就是在基音週期附近進行的.和g723的基音週期搜尋不同,g729的基音週期搜尋搜尋也更為精細 g729把基音週期的搜尋分成3段,取了每一段中自相關的極值,三段區間分別為 20,39 40,79 80,143 這三個區間的權值是不一樣的,以...
g729原始碼分析 4 基音週期搜尋 中
上一節對分數基音週期搜尋作了文字說明,筆者畫了幾幅圖,對分數基音週期搜尋裡的公升抽樣進一步說明 圖1 表示乙個帶限的離散時間訊號的傅利葉變換,它必然是以2 pi為週期的函式.圖2 當我們用 t n 1當n 3 0 對語音頻號進行抽樣時,t n 的頻譜圖如圖2所示,圖3 圖1與圖2的卷積,因為t n ...