語音編碼之壓縮

我的書:

購買鏈接:

京東購買鏈接

淘寶購買鏈接

噹噹購買鏈接

這本書裏敘述了SILK和Opus語音編解碼器,這裏簡單的串接編解碼的核心知識點。

LPC

LPC(Linear predictive coding)在音頻和語音處理領域常用於表示壓縮信號的譜包絡,這是最強大的語音分析技術之一,也是低比特率高品質語音編碼常用到的方法之一。LPC基於人的發聲生物物理機理的發音過程建模模型。

由於語音信號是短時平穩信號,基頻和共振峯在短時是不變的,通常將一秒鐘的數據分割爲30~50個塊分析各塊的LPC係數(也即壓縮)。

LPC的核心思想是當前語音採樣值可以用過去採樣值的線性組合近似獲得,公式表示如下:

x(m) = \sum_{k=1}^{p}a_kx(m-k) +e(m)

其中​x(m)是當前採樣點的值,p是階數,也就是使用多少個歷史採樣點值來估計當前採樣點的值,​x(m-k)是歷史真實採樣點值,e(m)是誤差信號,​係數​a_k通過最小化有限時間段內真實值和估計值的局方誤差準則計算,這一準則用公式表示如下:

E[e^2(m)]= E[(x(m)-\sum \limits_{k=1}^pa_kx(m-k))^2]= \\E[x^2(m)]-2\sum \limits_{k=1}^pa_kE[x(m)x(m-k)]+\sum \limits_{k=1}^pa_k\sum \limits_{j=1}^pa_jE[x(m-k)x(m-j)]= \\ r_{xx}(0)-2\mathbf r_{xx}^T\mathbf a + \mathbf a^T\mathbf R_{xx}\mathbf a

其中\mathbf R_{xx}=E[\mathbf x \mathbf x^T]​是輸入信號​\mathbf x^T=[x(m-1), x(m-2),\cdots,x(m-p)]的自相關矩陣,​\mathbf r_{xx}=E[x(m)x(m)]是自相關向量,​\mathbf a^T=[a_1,a_2,\cdots,a_p]是預測係數向量。

求解LPC係數的方法種類如下:協方差方法;自相關方法;Lattice方法;逆濾波公式;譜估計公式;最大似然方法;內積方法;

誤差的均方和最小可以通過對式2對a_i係數​求偏導,令偏導數等於零求得,公式表示如下:

\frac{\partial E} {\partial a_i}=0, i=1,2,...,p

令​\frac{\partial}{\partial \mathbf a} = (\frac{\partial}{\partial \mathbf a}_1, \frac{\partial}{\partial \mathbf a_2},\cdots, \frac{\partial}{\partial \mathbf a_p})^T這樣可以得到如下方程:

\frac{\partial}{\partial \mathbf a}E[e^2(m)]=-2\mathbf r^T_{xx}+2\mathbf a^T\mathbf R_{xx}

由於實數的自相關矩陣是託普利茲矩陣,這樣可以得到:

\mathbf R_{xx} \mathbf a = \mathbf r_{xx}

矩陣的表示形式是:

上式可以通過求逆的方式獲得p個解,由於左側是託普利茲矩陣,常用迭代算法替代矩陣求逆運算。

LSP

LSP(Line spectral pairs)或者LSF(Line spectral frequencies)是一種表示LPC係數的方法,使用LSP變換的原因是其差值屬性更好且對量化魯棒性好。LSP分解的核心思想是將p階線性預測器​A(z)分解爲對稱多項式P(z)​和反對稱多項式​Q(z),如下:

p階線性預測器的Z域表示是:

A(z) = 1+\sum \limits_{i=1}^pa_iz^{-i}

則​P(z)和​Q(z)可以由下述兩式求得:

P(z) = A(z)+z^{-(p+1)A(z^{-1})}

Q(z) = A(z)-z^{-(p+1)A(z^{-1})}

則​P(z)和​Q(z)的零點值是LSP參數,零點唯一確定了​P(z)和​Q(z)​​,而這兩者確定了A(z)​,進而確定了LPC係數。

轉換爲LSP參數如下:

 

碼本

code-book是一種編碼技術,最簡單的生成碼本的方法是K-means方法,將LSF向量通過聚類的方法縮減碼本規模,LSF向量的前10個係數是​窄帶信號提取的,後10個係數是​信號提取的,當碼本用於語音增強時,語音的前是10個LSF向量和碼本前10個做匹配搜索,距離最短的碼本條目作爲輸入信號的寬帶LSF向量,過程如下:

這一簡單方法在信號沒有經過濾波或者下采樣等之類的信號處理會導致共振峯在頻域和幅值上變化時,碼本不一定是最優的。

矢量量化

對於PCM數據,一個數一個數的量化叫做標量量化。若對這些數據進行分組,每組K個數構成一個K維矢量,然後以矢量爲單元,逐個矢量進行量化,稱爲矢量量化。矢量量化基於語義編碼,其基本思想是採用非線性量化器,即對空間頻率及能量分佈較大的係數分配比較多的比特數;反之分配較少的比特數,從而達到壓縮的目的。傳統的向量編碼分爲7類:樹形向量量化、直和向量量化、迪卡爾積向量量化、格子向量量化、基於分類的向量量化、反饋向量量化以及模糊向量量化。

總結

從數據壓縮流看,模擬信號先經過ADC採樣,將時域連續信號變成離散信號(PCM),PCM信號通過LPC方法,求解自迴歸模型,這樣可以利用已有點估計未來的點,這樣是對數據進行了壓縮,由於LSP比LPC的優勢,會進行LSP變換,變換後的組成向量,使用矢量量化(可能是二級或更多),量化過程中就使用到了碼本。

實際編碼比這個要複雜,除了要考慮壓縮,還要考慮輸入信號參數,目標比特率,抗丟包,此外,還要區分語音/噪聲,白話,pitch以及長時信息和短時信息(STP(Short-Term Predictors )和LTP(Long-Term Predictors))輸入編碼器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章