LDPC編譯碼基本原理

LDPC編譯碼基本原理 算法

 

 

學習筆記 express

V1.1 2015/02/18ide

LDPC編譯碼基本原理函數

 

概述工具

 

本文是我的針對LDPC的學習筆記,主要針對LDPC譯碼算法作了簡要的總結。該版本主要致力於闡述LDPC碼譯碼原理,這是一份有不少"問題"的總結,但願可以慢慢完善。本文分爲如下幾個部分 學習

修訂歷史ui

如下表格展現了本文檔的修訂過程 編碼

日期spa

版本號設計

修訂內容

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》

相關文章
相關標籤/搜索