語音訊號處理之(三)向量量化(Vector Quantization)

來源:互聯網
上載者:User

語音訊號處理之(三)向量量化(Vector Quantization)

zouxy09@qq.com

http://blog.csdn.net/zouxy09

 

       這學期有《語音訊號處理》這門課,快考試了,所以也要瞭解瞭解相關的知識點。呵呵,平時沒怎麼聽課,現在只能抱佛腳了。順便也總結總結,好讓自己的知識架構清晰點,也和大家分享下。下面總結的是第三個知識點:VQ。因為花的時間不多,所以可能會有不少說的不妥的地方,還望大家指正。謝謝。

 

       向量量化(VQ,Vector Quantization)是一種極其重要的訊號壓縮方法。VQ在語音訊號處理中佔十分重要的地位。廣泛應用於語音編碼、語音辨識和語音合成等領域。

 

一、概述

       VectorQuantization (VQ)是一種基於塊編碼規則的有損資料壓縮方法。事實上,在 JPEG 和 MPEG-4 等多媒體壓縮格式裡都有 VQ 這一步。它的基本思想是:將若干個標量資料群組構成一個向量,然後在向量空間給以整體量化,從而壓縮了資料而不損失多少資訊。

       在以前,VQ運用的一個痛點在於它要要解決一個多維積分(multi-dimensional integration)的問題。後來,在1980年,Linde, Buzo和Gray(LBG,這個縮寫也是LBG演算法的命名)提出一種基於訓練序列的VQ設計演算法,對訓練序列的運用繞開了多維積分的求解,使得世上又誕生了一種經典的被世人稱為LBG-VQ的演算法!它一直延綿至今,經典永不褪色。

 

二、知識準備

      VQ實際上就是一種逼近。它的思想和“四捨五入”有異曲同工之妙,都是用一個和一個數最接近的整數來近似表示這個數。我們先來看看一個一維VQ的例子:


       這裡,小於-2的數都近似為-3,在-2和0之間的數都近似為-1,在0和2之間的數都近似為1,大於2的數都近似為3。這樣任意的一個數都會被近似為-3、-1、1或者3這四個數中的其中一個。而我們編碼這四個數只需要兩個二進位位就行了。所以這是1-dimensional,2-bit VQ,它的rate(量化速率?)為2bits/dimension。

       我們再看一個二維的例子:

        在這裡,我們用藍色實線將這張圖劃分為16個地區。任意的一對數(也就是橫軸x和縱軸y組成的任意的一個座標點(x, y))都會落到上面這張圖中的某一特定地區。然後它就會被該地區的紅星的點近似。這裡有16塊不同地區,就是16個紅星點。然後這16個值就可以用4位的二進位碼來編碼錶示(2^4=16)。因此,這是個2-dimensional, 4-bit VQ,它的速率同樣是2bits/dimension。上面這些紅星點就是量化向量,表示圖中的任意一個點都可以量化為這16個向量中的其中一個。

       對於二維,我們還可以用映像壓縮來說明。類似於將映像的每個像素點當作一個資料,跑一下 K-means 聚類,假設將映像聚為k類,就會得到每類的質心centroids,共k個,然後用這些質心的像素值來代替對應的類裡的所有點的像素值。這樣就起到壓縮的目的了,因為只需要編碼k個像素值(和映像每個像素點的對這k個值得索引)就可以表示整張映像了。當然,這會存在失真了,失真的程度就是k的個數了。最偏激的就是原映像每個像素就是一個類,那就沒有失真了,當然這也沒有了壓縮。

      以上的兩個例子,紅星被稱為碼矢(codevectors)。而由藍色邊定義的地區叫做編碼地區(encoding regions)。所有碼矢的集合稱為碼書(codebook),所有編碼地區的集合稱為空白間的劃分(partition of thespace)。

 

三、VQ設計問題

       VQ問題可以這樣描述:給定一個已知統計屬性的向量源(也就是訓練樣本集,每一個樣本是一個向量)和一個失真測度。還給定了碼矢的數量(也就是我們要把這個向量空間劃分為多少部分,或者說量化為多少種值),然後尋找一個具有最小平均失真度(資料壓縮,肯定是失真越小越好)的碼書(所有碼矢的集合,也就是上面的那些所有紅色星星點)和空間的劃分(圖中所有藍色線的集合)。

        假定我們有一個有M個向量源(訓練樣本)的訓練序列(訓練集):T={x1, x2,…, xM};

這個訓練序列可以通過一些大資料庫得到。例如如果這個向量源是語音的話,那麼我們就可以對一些電話錄音裁剪得到。我們假設M足夠大(訓練樣本足夠多),這樣才可以保證這個訓練序列包含了源的所有統計特性。我們假設源向量是k維的:

       xm=(xm,1,xm,2, …, xm,k), m=1,2,…,M

       假設碼矢的數目是N(也就是我們要把這個向量空間劃分為N個部分,或者說量化為N種值),碼書(所有碼矢的集合)表示為:C={c1, c2,…, cN};

       每一個碼矢是個k維向量:cn=(cn,1, cn,2, …, cn,k),n=1,2,…,N;

       與碼矢cn對應的編碼地區表示為Sn,然後將空間的劃分表示為:P={S1, S2,…,SN};

        如果源向量xm在Sn內,那麼它的近似(用Q(xm)表示)就是cn,

                                              Q(xm)=cn, 如果xm 屬於Sn

        假設我們採用均分誤差失真度量,那麼平均失真度表示如下:

 

       這裡||e||2為歐式距離。

       那麼設計問題就可以簡單的描述為:給定T(訓練集)和N(碼矢數目),找到能使Dave(平均失真度)最小的C(碼書)和P(空間劃分)。

 

四、最佳化準則

       如果C和P是上面這個最小化問題的一個解,那麼這個解需要滿足以下兩個條件:

1)Nearest NeighborCondition 最近鄰條件:

       這個條件的意思是編碼地區Sn應該包含所有與cn最接近的向量(相比於與其他碼矢的距離)。對於在邊界(藍色線)上面的向量,需要採用一些決策方法(any tie-breaking procedure)。

2)Centroid Condition質心條件:

       這個條件要求碼矢cn是編碼地區Sn內所有的訓練樣本向量的平均向量。在實現中,需要保證每個編碼地區至少要有一個訓練樣本向量,這樣上面這條式的分母才不為0。

 

五、LBG演算法

       LBG-VQ演算法是一個迭代演算法,它交替地調整P和C(解上面這兩個最佳化準則),使失真度不斷地趨向於它的局部最小值(有點EM的思想哦)。這個演算法需要一個初始的碼書C(0)。這個初始碼書可以通過分裂(splitting)方法得到。這個方法主要是把一個初始碼矢設定為所有訓練樣本的平均值。然後把這個碼矢分裂成兩個(分裂的方式見下面的LBG演算法的第3步的公式,只要是乘以一個擾亂係數)。把這兩個碼矢作為初始的碼書,然後迭代演算法就在這個初始的碼書上面跑。它每一次都將每個碼矢分裂為2個,重複這個過程,直到獲得要求的碼矢個數。1個分裂為2個,2個分裂為4個,4個分裂為8個……

 

LBG演算法:

1、給定訓練集T。固定ɛ(失真閾值)為一個很小的正數。

2、讓N=1(碼矢數量),將這一個碼矢設定為所有訓練樣本的平均值:

計算總失真度(這時候的總失真很明顯是最大的):

3、分裂:對i=1,2,…,N,他們的碼矢分別為:

 

讓N=2N,就是每個碼矢分裂(乘以擾亂係數1+ɛ和1-ɛ)為兩個,這種每一次分裂後的碼矢數量就是前一次的兩倍。

4、迭代:讓初始失真度為: 。將迭代索引或者迭代計數器置零i=0.

1)對於訓練集T中的每一個訓練樣本m=1,2,…,M。在所有碼矢中尋找的最小值,也就是看這個訓練樣本和哪個碼矢距離最近。我們用n*記錄這個最小值的索引。然後用這個碼矢來近似這個訓練樣本:

 。

2)對於n=1,2,…,N,通過以下方式更新所有碼矢:

 

也就是將所有屬於cn所在的編碼地區Sn的訓練樣本取平均作為這個編碼地區的新的碼矢。

3)迭代計數器加1:i=i+1.

4)計算在現階段的C和P基礎上的總失真度:

 

5)如果失真度相比上一次的失真度(相對失真改進量)還大於可以接受的失真閾值ɛ(如果是小於就表明再進行迭代運算失真得減小是有限的以停止迭代運算了),那麼繼續迭代,返回步驟1)。

6)否則最終失真度為 。對n=1,2,…,N,最終碼矢為:

5、重複步驟3和4至到碼矢的數目達到要求的個數。

 

六、二維類比

       二維類比動畫點擊這裡http://www.data-compression.com/vqanim.shtml(這裡吐槽一下,為什麼CSDN不支援gif動畫的插入呢?)


1)訓練樣本集是由零均值和單位方差的高斯分布產生。

2)小的綠色的點就是這些訓練樣本。有4096個。

3)我們把閾值設定為ɛ=0.001。

4)這個演算法會保證得到一個局部最小解。

5)訓練序列需要足夠的大,建議M>=1000N。

 

七、參考資料:

[1]http://www.data-compression.com/vq.html

[2]漫談Clustering (番外篇): Vector Quantization: http://blog.pluskid.org/?p=57

[3] lbgvq.c --- C program forLBG VQ design

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.