LDPC編譯碼基本原理
學習筆記 V1.1 2015/02/18 |
LDPC編譯碼基本原理 |
概述 |
本文是個人針對LDPC的學習筆記,主要針對LDPC譯碼算法做了簡要的總結。該版本主要致力於闡述LDPC碼譯碼原理,這是一份有很多"問題"的總結,希望能夠慢慢完善。本文分為以下幾個部分 |
修訂歷史 |
以下表格展示了本文檔的修訂過程
|
本文提到的LDPC編碼均指二進制LDPC編碼,多進制暫時不進行討論。為方便起見本文中混用了似然函數和條件概率密度這兩個概念,雖然這樣做是不恰當的。
LDPC碼是一種校驗矩陣具有低密度的線性分組碼。也就是說,LDPC碼和普通的線性分組碼沒有什么不同,但冠以"低密度"三字,說明以下兩點問題
校驗矩陣是一個相對通用的表示工具,線性分組碼都可以由校驗矩陣確定。通用性往往意味着很多時候難以表現一些特性,譬如,低密度。一個好的表示方式往往是解決問題的關鍵。圖論中有一個圖的矩陣表示,校驗矩陣是稀疏的,一個好的表示就是指出其中1的位置,我們在意的也就是這些位置。如果將稀疏矩陣采用圖來描述,這一個目的就達到了,這一類圖被稱為Tanner圖,如圖 1。 Tanner圖和校驗矩陣具有以下對應關系。Tanner圖有
圖 1 校驗矩陣和Tanner圖
此時我們可以先明確一些關於校驗矩陣和Tanner圖的定義
現在,我們應該好好考慮編譯碼的問題了。編碼過程中,知道校驗矩陣后生成矩陣是可以求出來的。求出生成矩陣后,至少可以說明編碼是可進行的。利用其它的一些性質,這個過程可以變得更容易。(此部分內容還沒有仔細看) 關於譯碼規則,香農在證明第二定理的時候采用了最大似然譯碼准則。當然,譯碼准則的選取還取決於信道。譬如,二進制對稱信道下漢明距離譯碼和最大似然是一致的。然而,實際信道往往被看作是加性高斯白噪聲信道,這個時候我們更多的需要考慮采用最大似然譯碼准則了。同時,毋庸置疑的是我們應該采用軟判決譯碼以達到好的效果。此時,似然函數可以表示為 |
1962年Gallager提出了LDPC碼的基本概率譯碼算法,本節將闡述這一思想。
解決一個大的問題的基本思路在於將其分解為一系列的小問題。對於似然函數而言,如果求 如果
發送信號通過信道后成為了接收信號
那么我們有
當我們致力於求解 注意到乘號左側是和信道有關的,右邊的 (1)當兩個校驗方程一樣的時候
此時(一般情況下) (2)校驗方程具有相同項
此時(一般情況下)
可以認為,如果校驗方程行線性無關,那么
引理: 一個長為
證明:
將上述函數展開為關於
這個函數與前一個函數的區別在於:
同樣可得,序列中"1"的個數為奇數的概率是
上文已經闡述 所以在基於除 這個前提是無法達到的,上述過程中我們也看到了求解每一個比特的概率通過校驗方程環環相扣。或許,如果我們可以找到一個線頭,這個問題可能就可以求解了。但很可惜的是,由於比特的相互依賴關系,計算概率的過程實際上是一個環。(大部分情況下是這樣的)這個時候,概率譯碼直接將其修剪成了一棵樹以計算概率分布。 修剪的原則在於,上層節點不能運用底層節點已經用過的校驗信息,防止陷入循環。此時,通過繪制校驗樹,就能夠求解后驗概率分布。 概率譯碼給出了一種求解方式,那么這種針對單一比特的求解方式在真實的計算過程中是否可行?如果基於計算所有碼元考慮是否有更好的計算方法?這種方法求得的解是否最優?在我看來,由於其余比特的概率是不准確的(不是最佳估計),此時我們也不能夠得到求解比特的真實后驗概率。 |
如果我們回到要求解的式子
在求解 或許另一種思路在於,對所有的 感性的認識是由於接收到了其他節點和校驗方程的信息,迭代之后的估計會更好。另一個認識是如果Tanner圖的某一個環的girth很短,那么自身的信息會大量的傳遞回來。因為距離越遠,傳遞信息的比重就會越小(乘了太多小於1的數),環girth很長就不用考慮這個問題。但這還需要更多的理性分析。 下面具體闡述置信傳播算法,假定編碼后的星座映射為假定編碼后的星座映射為 初始值 首先我們計算
圖 2 信息傳遞過程
之后我們更新各個變量節點的概率分布
這個時候我們發現了一個問題,如果對於每一個校驗節點來說,我們都給
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× 這一部分不是我寫的,可以參考任意一本LDPC書,這里就不放上來了 這一部分不是我寫的,可以參考任意一本LDPC書,這里就不放上來了×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
我們注意到在任何一種算法中,終止條件都有一條是校驗式等於零。為何要設置這一個終止條件?實際上在設計的過程中,我們會保證任意兩個可用碼字之間的距離足夠遠。在這一個前提假設下,迭代過程中一旦落入了可用碼字空間內,即使錯誤,那么也是幾乎沒有轉移到正確碼字的可能的。因此設置了這一終止條件。 |
從概率譯碼到置信傳播,一個采用了校驗集合樹的概念,一個運用了Tanner圖。然而我們實際上還是計算的公式,具體來說是
加法和乘法的運用構成了整個概率模型。但為何在這些算法中都引入了圖?圖在這里面起到了什么作用?《Pattern Recognition and Machine Learning》在圖模型章節的開篇是這樣說的
However, we shall find it highly advantageous to augment the analysis using diagrammatic representations of probability distributions, called probabilistic graphical models. These offer several useful properties: 1. They provide a simple way to visualize the structure of a probabilistic model and can be used to design and motivate new models. 2. Insights into the properties of the model, including conditional independence properties, can be obtained by inspection of the graph. 3. Complex computations, required to perform inference and learning in sophisticated models, can be expressed in terms of graphical manipulations, in which underlying mathematical expressions are carried along implicitly.
很多時候我們更關注問題的表示而非其本身。就像LDPC關注校驗矩陣的形式,以及數據的各種變換。概率模型也一樣,三種圖模型被用來表示概率模型,包括有向圖模型、無向圖模型(馬爾可夫隨機場)和因子圖。三種模型各有優點,本節將介紹因子圖。 對於多項式而言,我們有因式分解。譬如在解高次方程的時候,我們非常希望方程能夠分解為多個低次方程的乘積。那么,對於概率分布函數而言,我們也希望能夠這樣做,即 其中 那么這一個式子的因子圖表示如下
圖 3 因子圖
從這個例子,我們總結一下因子圖是什么?因子圖有兩類節點,一是變量節點,另一個成為因子節點。這兩類節點的內部沒有邊直接相連,變量的概率密度可以因式分解為因子節點的函數的乘積,因子節點的函數變量包括與其直接相連的變量節點。 寫到這里忽然發現了一個很嚴重的問題,因子圖這一表示是用來干什么的?不是我不想寫,是我也不知道。如果從和積算法來說,因子圖可以用來計算邊緣概率分布。這也是《Pattern Recognition and Machine Learning》中引入因子圖的理由。置信傳播算法可以看作是和積算法的一個特例。 目的:計算邊緣概率 手段:和積算法(要求兩個節點之間只有一條路徑,即多項式樹結構) 實現方式:
圖 4 因子圖的分解
這里為何要這樣做呢?一個算法要盡可能多的利用已知的結構和信息,和積算法的一個假設是圖無環。同時我們發現,對於一個最簡單的只有一個變量節點和因子節點的圖來說(這時實際上沒有意義了),我們已經達到我們要的結果。如果圖無環的話,意味着只要我斷開一條邊,那么這個大的因子圖就變成了兩個小的因子圖。 如果我們將節點
其中
我們設 我們可以將其看作是因子節點
或許,我們將"計算"改為"表示"更為合適。上文中一直提到"小因子圖"顯然是可以因子化的,也就是說可以表示為
那么 也就是說,實際上這個過程是小因子圖的繼續划分的過程,具體可以表示為下圖
圖 5 因子圖的分解(續)
同理可設
如果我們繼續將其分解下去,那么將再次計算到因子節點向變量節點傳遞的信息,而我們的目的正是如此,希望能夠得到
圖 6因子圖的分解(續2)
由圖 6 易知 也就是說
和積和積,何為和積?變量節點的信息傳遞是求乘積的過程,因子節點傳遞的過程是對求乘積后的結果進行求和的過程(依據該因子節點的方程)。 我們注意到實際上都有一個連接的其他節點求乘積的過程,這也就意味着如果一個節點只和一個節點相連,那么其傳遞的消息是(和1相乘值不變)
到這里,因子圖和和積算法已經寫完了,要把因子圖和和積算法和LDPC譯碼算法對應起來,我們要解決的問題實際上有兩個
這兩個問題還有待進一步思考…… |
參考 |
《LDPC碼基礎與應用》 賀鶴雲 《An Introduction to Low-Density Parity Check Codes》 Daniel J. Costello, Jr. 《LDPC碼理論與應用》 袁東風 《Pattern Recognition and Machine Learning》 |

變量節點和
個校驗節點,對應校驗矩陣
的列數和行數。如果第
個變量節點和第
個校驗節點之間有邊相連,那么
,否則
。顯然,變量節點內部是沒有邊相連的,校驗節點也是如此。 
,其中
是接收序列,
是編碼后序列,
指
在碼本空間內,即滿足校驗方程。顯然,似然函數的計算是難以進行的。但早期Gallager作了很多工作。
的概率密度可以達到同樣的效果,即求
那么求解會方便很多。如果
,那么求解
和求解
具有相同的效果。那么問題在於是否可以這樣做。
之間相互獨立,這一關系顯然是成立的;然而獨立也就意味着不相關,那么這是不符合冗余度要求的。注意到我們求的是條件獨立,條件是
屬於碼本空間。
之間相互獨立。
,信道是加性高斯白噪聲信道(從矢量信道模型去考慮)意味着 
,這是因為同樣在碼本空間內,
的概率分布和
無關。
的時候,實際上我們只需要在0,1之間選擇一個取值,所以我們可以分別計算0,1的概率,計算比值
被
(包含
的方程)代替的原因是其他校驗方程和條件是無關的。寫到這里的時候,我們似乎計算不下去了。不妨做一個不切實際的假設,那就是除
以外的其他概率分布已經求得了。當我們考慮一個校驗方程的時候會發現
時該校驗方程成立的條件是方程中其他的變量具有偶數個1,
時正好相反。但是
是多個校驗方程的集合,如果說這些校驗方程條件獨立,將每一方程成立的概率相乘即可。那么問題是,什么時候校驗方程條件獨立?在回答這個問題之前,我們可以舉出幾個例子。 



的相互獨立的二進制序列,其中第
個比特為1的概率為
,那么整個序列中包含偶數個1的概率是 

的多項式,則
的系數表示這個長為m的序列中"1"的個數為
的概率。 
的奇數次冪的系數符號不同,兩者正好互為正負。將這兩個函數相加,那么
的偶次冪的系數為原函數的2倍,奇次項相加后消去。令
,就可以得到序列中"1"的個數為偶數的概率: 

之間的條件獨立特性,同時
以外的其他概率分布已經求得
是可行的。4 
的過程中我們希望得到
(第
個方程的第
個節點為1的后驗概率
)的好的估計值。采用
是一個很簡單的選擇,但是很顯然不好,因為沒有用到校驗矩陣的約束信息。概率譯碼下考慮到了這一點,所以采用了樹結構將校驗矩陣的約束信息包含在其中。但是即使概率譯碼這樣考慮了,實際上最頂層的節點采用的還是
。
都采用
進行估計得到了一個更加好的估計,再用這些更好的估計進行迭代估計(所有節點並行估計)。
的更好的估計?


這一信息,那么剛從校驗節點傳遞過來的信息立刻就被返回去了。所以
顯然不是
的更好的估計值。參考概率譯碼,我們至少能夠做的是將其他節點傳遞的消息傳遞出去。(關於這個問題,不從得到
更好估計的角度,從消息傳遞的角度會更好解釋,這將在因子圖中介紹)因此置信傳播的迭代過程應該是這樣的。(參考《An Introduction to Low-Density Parity Check Codes》,本部分以下內容來自XXX師兄) 
是
中變量的子集,至於到底能夠如何分解是取決於問題的,就好象多項式的分解取決於其具體形式。對於一個實際的問題,如果有以下關系

表示除
之外的變量集合。 

取出,那么因子圖變成了
個小因子圖,這幾個小因子圖通過節點
相連,故因子圖的概率分布可以寫成 
代表和
相連的因子節點,
代表在這一個小因子圖上的所有因子節點的乘積。
如下
傳遞的信息(也就是小因子圖傳遞的)。

可以表示為

,可將其看作變量節點向因子節點傳遞的信息。
,
之間相對簡單的公式,這樣我們就能夠計算出邊緣概率分布了。 
