LDPC編譯碼基本原理


LDPC編譯碼基本原理

 

 

學習筆記

V1.1 2015/02/18

LDPC編譯碼基本原理

 

概述

 

本文是個人針對LDPC的學習筆記,主要針對LDPC譯碼算法做了簡要的總結。該版本主要致力於闡述LDPC碼譯碼原理,這是一份有很多"問題"的總結,希望能夠慢慢完善。本文分為以下幾個部分

修訂歷史

以下表格展示了本文檔的修訂過程

日期

版本號

修訂內容

2015/02/04

V1.0

初始版本

2015/02/18 

V1.1

添加因子圖部分,修正部分錯誤

簡介

 

本文提到的LDPC編碼均指二進制LDPC編碼,多進制暫時不進行討論。為方便起見本文中混用了似然函數和條件概率密度這兩個概念,雖然這樣做是不恰當的。

 

 

LDPC碼是一種校驗矩陣具有低密度的線性分組碼。也就是說,LDPC碼和普通的線性分組碼沒有什么不同,但冠以"低密度"三字,說明以下兩點問題

  • 既然限定了校驗矩陣1的個數較少,說明這肯定在某些方面帶來好處。當然,"某些方面"具體是什么,值得我們繼續探討。已知的好處包括計算上的便利,存儲量的減少。以及實際上多個相近的接收信號之間實際上有相關性,稀疏性可以減少其影響。
  • 校驗矩陣其實是校驗方程的集合,對其做初等行變換是不會改變碼本身的特性的。"低密度"三字還表現出我們對其校驗矩陣的表示往往比碼本身感興趣。(一類碼可以有低密度的校驗矩陣,也有不滿足低密度約束的校驗矩陣)。

校驗矩陣是一個相對通用的表示工具,線性分組碼都可以由校驗矩陣確定。通用性往往意味着很多時候難以表現一些特性,譬如,低密度。一個好的表示方式往往是解決問題的關鍵。圖論中有一個圖的矩陣表示,校驗矩陣是稀疏的,一個好的表示就是指出其中1的位置,我們在意的也就是這些位置。如果將稀疏矩陣采用圖來描述,這一個目的就達到了,這一類圖被稱為Tanner圖,如圖 1。

Tanner圖和校驗矩陣具有以下對應關系。Tanner圖有變量節點和個校驗節點,對應校驗矩陣的列數和行數。如果第個變量節點和第個校驗節點之間有邊相連,那么,否則。顯然,變量節點內部是沒有邊相連的,校驗節點也是如此。

圖 1 校驗矩陣和Tanner圖

 

此時我們可以先明確一些關於校驗矩陣和Tanner圖的定義

  • 校驗矩陣的行重:每行1的個數,列重是每列1的個數
  • 正規LDPC碼:校驗矩陣行重、列重都是定值
  • 二分圖:圖的節點可以分為兩類,類中的節點之間沒有直接連接。Tanner圖是一個二分圖,分為校驗節點和變量節點
  • 度:某一節點引出的邊的數目
  • 環和girth:從一個節點按邊不重復回到同一節點的路徑稱為環,環上邊的數量稱為環的girth

 

現在,我們應該好好考慮編譯碼的問題了。編碼過程中,知道校驗矩陣后生成矩陣是可以求出來的。求出生成矩陣后,至少可以說明編碼是可進行的。利用其它的一些性質,這個過程可以變得更容易。(此部分內容還沒有仔細看)

關於譯碼規則,香農在證明第二定理的時候采用了最大似然譯碼准則。當然,譯碼准則的選取還取決於信道。譬如,二進制對稱信道下漢明距離譯碼和最大似然是一致的。然而,實際信道往往被看作是加性高斯白噪聲信道,這個時候我們更多的需要考慮采用最大似然譯碼准則了。同時,毋庸置疑的是我們應該采用軟判決譯碼以達到好的效果。此時,似然函數可以表示為 ,其中是接收序列,是編碼后序列,在碼本空間內,即滿足校驗方程。顯然,似然函數的計算是難以進行的。但早期Gallager作了很多工作。

概率譯碼

 

1962年Gallager提出了LDPC碼的基本概率譯碼算法,本節將闡述這一思想。

  1. 從聯合條件概率分布到邊緣條件概率分布

解決一個大的問題的基本思路在於將其分解為一系列的小問題。對於似然函數而言,如果求的概率密度可以達到同樣的效果,即求那么求解會方便很多。如果 ,那么求解和求解 具有相同的效果。那么問題在於是否可以這樣做。

如果之間相互獨立,這一關系顯然是成立的;然而獨立也就意味着不相關,那么這是不符合冗余度要求的。注意到我們求的是條件獨立,條件是屬於碼本空間。條件獨立的關系應該是成立的,雖然不清楚如何證明,然而其相關性已經作為條件出現在概率分布函數中了,在這一前提下之間相互獨立。

  1. 加性高斯白噪聲信道

發送信號通過信道后成為了接收信號,信道是加性高斯白噪聲信道(從矢量信道模型去考慮)意味着

那么我們有,這是因為同樣在碼本空間內,的概率分布和 無關。

  1. 校驗方程

當我們致力於求解的時候,實際上我們只需要在0,1之間選擇一個取值,所以我們可以分別計算0,1的概率,計算比值

    

注意到乘號左側是和信道有關的,右邊的(包含的方程)代替的原因是其他校驗方程和條件是無關的。寫到這里的時候,我們似乎計算不下去了。不妨做一個不切實際的假設,那就是除以外的其他概率分布已經求得了。當我們考慮一個校驗方程的時候會發現時該校驗方程成立的條件是方程中其他的變量具有偶數個1,時正好相反。但是是多個校驗方程的集合,如果說這些校驗方程條件獨立,將每一方程成立的概率相乘即可。那么問題是,什么時候校驗方程條件獨立?在回答這個問題之前,我們可以舉出幾個例子。

(1)當兩個校驗方程一樣的時候

此時(一般情況下)

    

(2)校驗方程具有相同項

此時(一般情況下)

可以認為,如果校驗方程行線性無關,那么

 

引理:

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

證明:

將上述函數展開為關於的多項式,則的系數表示這個長為m的序列中"1"的個數為的概率。

這個函數與前一個函數的區別在於:的奇數次冪的系數符號不同,兩者正好互為正負。將這兩個函數相加,那么的偶次冪的系數為原函數的2倍,奇次項相加后消去。令,就可以得到序列中"1"的個數為偶數的概率:

同樣可得,序列中"1"的個數為奇數的概率是

 

上文已經闡述之間的條件獨立特性,同時

    

所以在基於除以外的其他概率分布已經求得的前提下,求解是可行的。4

這個前提是無法達到的,上述過程中我們也看到了求解每一個比特的概率通過校驗方程環環相扣。或許,如果我們可以找到一個線頭,這個問題可能就可以求解了。但很可惜的是,由於比特的相互依賴關系,計算概率的過程實際上是一個環。(大部分情況下是這樣的)這個時候,概率譯碼直接將其修剪成了一棵樹以計算概率分布。

修剪的原則在於,上層節點不能運用底層節點已經用過的校驗信息,防止陷入循環。此時,通過繪制校驗樹,就能夠求解后驗概率分布。

概率譯碼給出了一種求解方式,那么這種針對單一比特的求解方式在真實的計算過程中是否可行?如果基於計算所有碼元考慮是否有更好的計算方法?這種方法求得的解是否最優?在我看來,由於其余比特的概率是不准確的(不是最佳估計),此時我們也不能夠得到求解比特的真實后驗概率

置信傳播

 

如果我們回到要求解的式子

在求解的過程中我們希望得到(第個方程的第個節點為1的后驗概率)的好的估計值。采用是一個很簡單的選擇,但是很顯然不好,因為沒有用到校驗矩陣的約束信息。概率譯碼下考慮到了這一點,所以采用了樹結構將校驗矩陣的約束信息包含在其中。但是即使概率譯碼這樣考慮了,實際上最頂層的節點采用的還是

或許另一種思路在於,對所有的都采用進行估計得到了一個更加好的估計,再用這些更好的估計進行迭代估計(所有節點並行估計)。問題在於,是否每次迭代都可以得到對於的更好的估計?

感性的認識是由於接收到了其他節點和校驗方程的信息,迭代之后的估計會更好。另一個認識是如果Tanner圖的某一個環的girth很短,那么自身的信息會大量的傳遞回來。因為距離越遠,傳遞信息的比重就會越小(乘了太多小於1的數),環girth很長就不用考慮這個問題。但這還需要更多的理性分析。

下面具體闡述置信傳播算法,假定編碼后的星座映射為假定編碼后的星座映射為

初始值

    

首先我們計算

    

圖 2 信息傳遞過程

 

之后我們更新各個變量節點的概率分布

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

 

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

這一部分不是我寫的,可以參考任意一本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》中引入因子圖的理由。置信傳播算法可以看作是和積算法的一個特例。

目的:計算邊緣概率

手段:和積算法(要求兩個節點之間只有一條路徑,即多項式樹結構)

實現方式:

  1. 邊緣概率

    

表示除之外的變量集合。

  1. 因子分解

圖 4 因子圖的分解

 

這里為何要這樣做呢?一個算法要盡可能多的利用已知的結構和信息,和積算法的一個假設是圖無環。同時我們發現,對於一個最簡單的只有一個變量節點和因子節點的圖來說(這時實際上沒有意義了),我們已經達到我們要的結果。如果圖無環的話,意味着只要我斷開一條邊,那么這個大的因子圖就變成了兩個小的因子圖。

如果我們將節點取出,那么因子圖變成了個小因子圖,這幾個小因子圖通過節點相連,故因子圖的概率分布可以寫成

其中代表和相連的因子節點,代表在這一個小因子圖上的所有因子節點的乘積。

  1. 將2代入1,得

    

我們設 如下

    

我們可以將其看作是因子節點傳遞的信息(也就是小因子圖傳遞的)。

  1. 計算

或許,我們將"計算"改為"表示"更為合適。上文中一直提到"小因子圖"顯然是可以因子化的,也就是說可以表示為

那么可以表示為

    

也就是說,實際上這個過程是小因子圖的繼續划分的過程,具體可以表示為下圖

圖 5 因子圖的分解(續)

 

同理可設 ,可將其看作變量節點向因子節點傳遞的信息。

  1. 因子圖的繼續分解

如果我們繼續將其分解下去,那么將再次計算到因子節點向變量節點傳遞的信息,而我們的目的正是如此,希望能夠得到 之間相對簡單的公式,這樣我們就能夠計算出邊緣概率分布了。

圖 6因子圖的分解(續2)

 

由圖 6 易知

    

也就是說

    

  1. 總結

和積和積,何為和積?變量節點的信息傳遞是求乘積的過程,因子節點傳遞的過程是對求乘積后的結果進行求和的過程(依據該因子節點的方程)。

我們注意到實際上都有一個連接的其他節點求乘積的過程,這也就意味着如果一個節點只和一個節點相連,那么其傳遞的消息是(和1相乘值不變)

  • 對應變量節點;
  • ,對應因子節點

 

到這里,因子圖和和積算法已經寫完了,要把因子圖和和積算法和LDPC譯碼算法對應起來,我們要解決的問題實際上有兩個

  • 在譯碼過程中觀測量如何處理?上述因子圖的所有變量節點都可以看作是隱藏節點,如何對觀測到的結果進行處理,計算條件概率?
  • 如何處理因子節點和校驗節點之間的關系?

 

這兩個問題還有待進一步思考……

參考

 

《LDPC碼基礎與應用》 賀鶴雲

《An Introduction to Low-Density Parity Check Codes》 Daniel J. Costello, Jr.

《LDPC碼理論與應用》 袁東風

《Pattern Recognition and Machine Learning》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM