LDPC編譯碼

LDPC最新文章地址https://blog.csdn.net/sinat_38151275/article/details/98102699

LDPC碼簡介

低密度校驗碼(LDPC碼)是一種前向糾錯碼,LDPC碼最早在20世紀60年代由Gallager在他的博士論文中提出,但限於當時的技術條件,缺乏可行的譯碼算法,此後的35年間基本上被人們忽略,其間由Tanner在1981年推廣了LDPC碼並給出了LDPC碼的圖表示,即後來所稱的Tanner圖。1993年Berrou等人發現了Turbo碼,在此基礎上,1995年前後MacKay和Neal等人對LDPC碼重新進行了研究,提出了可行的譯碼算法,從而進一步發現了LDPC碼所具有的良好性能,迅速引起強烈反響和極大關注。經過十幾年來的研究和發展,研究人員在各方面都取得了突破性的進展,LDPC碼的相關技術也日趨成熟,甚至已經開始有了商業化的應用成果,並進入了無線通信等相關領域的標準。

1.1.1 LDPC碼的特點

LDPC碼是一種分組碼,其校驗矩陣只含有很少量非零元素。正是校驗矩陣的這種稀疏性,保證了譯碼複雜度和最小碼距都只隨碼長呈現線性增加。除了校驗矩陣是稀疏矩陣外,碼本身與任何其它的分組碼並無二致。其實如果現有的分組碼可以被稀疏矩陣所表達,那麼用於碼的迭代譯碼算法也可以成功的移植到它身上。然而,一般來說,爲現有的分組碼找到一個稀疏矩陣並不實際。不同的是,碼的設計是以構造一個校驗矩陣開始的,然後才通過它確定一個生成矩陣進行後續編碼。而LDPC的編碼就是本文所要討論的主體內容。

譯碼方法是LDPC碼與經典的分組碼之間的最大區別。經典的分組碼一般是用ML類的譯碼算法進行譯碼的,所以它們一般碼長較小,並通過代數設計以減低譯碼工作的複雜度。但是LDPC碼碼長較長,並通過其校驗矩陣H的圖像表達而進行迭代譯碼,所以它的設計以校驗矩陣的特性爲核心考慮之一。

1.1.2 LDPC碼的構造

構造二進制LDPC碼實際上就是要找到一個稀疏矩陣H作爲碼的校驗矩陣,基本方法是將一個全零矩陣的一小部分元素替換成1,使得替換後的矩陣各行和各列具有所要求的數目的非零元素。如果要使構造出的碼可用,則必須滿足幾個條件,分別是無短環,無低碼重碼字,碼間最小距離要儘可能大。

1.1.3 Tanner圖

LDPC碼常常通過圖來表示,而Tanner圖所表示的其實是LDPC碼的校驗矩陣。Tanner圖包含兩類頂點:n個碼字比特頂點(稱爲比特節點),分別與校驗矩陣的各列相對應和m個校驗方程頂點(稱爲校驗節點),分別與校驗矩陣的各行對應。校驗矩陣的每行代表一個校驗方程,每列代表一個碼字比特。所以,如果一個碼字比特包含在相應的校驗方程中,那麼就用一條連線將所涉及的比特節點和校驗節點連起來,所以Tanner圖中的連線數與校驗矩陣中的1的個數相同。以下圖是矩陣

的Tanner圖,其中比特節點用圓形節點表示,校驗節點用方形節點表示,加黑線顯示的是一個6循環:

Tanner圖中的循環是由圖中的一羣相互連接在一起的頂點所組成的,循環以這羣頂點中的一個同時作爲起點和終點,且只經過每個頂點一次。循環的長度定義爲它所包含的連線的數量,而圖形的圍長,也可叫做圖形的尺寸,定義爲圖中最小的循環長度。如上圖中,圖形的尺寸,即圍長爲6,如加黑線所示。

1.2 LDPC編碼

方法一:設H=[A | B],對H進行高斯消元可得到H=[I| P],設編碼完成的碼字爲u=[c| s],其中c爲監督位,s爲信息位。因爲H*u' = u*H' = 0,可以得到I*c' + P*s' = 0 即 I*c' = P*s' (在GF(2)上),從而可求 c' = P*s'。如果高斯消元過程中進行了列交換,則只需記錄列交換,並以相反次序對編碼後的碼字同樣進行列交換即可。解碼時先求出u,再進行列交換得到u1=[c| s],後面部分即是想要的信息。

方法一示例:

 

方法二:首先推導出根據校驗矩陣直接編碼的等式。將尺寸爲m*n校驗矩陣H寫成如下形式:H=[H1 | H2],其中H1矩陣的大小爲m*k,H2的大小爲m*m,設編碼完成的碼字爲u=[s | p],s爲信息位,p爲監督位。因爲H*u' =u*H' = 0求得p*H2'=s*H1',最後得p=s* H1'* (H2')-

上述兩種方法可以不通過生成矩陣而直接由校驗矩陣進行編碼的等式,一切只依賴校驗矩陣的編碼都是通過這兩個式子實現的。但方法二要考慮H2是否滿秩(可逆)。

1.3 LDPC碼H矩陣的構造

規則的LDPC碼和非規則的LDPC碼

如果校驗矩陣中各行非零元素的個數相同,各列中非零元素的個數也相同,這樣的LDPC碼稱爲規則碼,與規則碼對照,如果校驗矩陣的各行中非零元素的個數不同或各列中非零元素個數不同,此時的LDPC碼稱爲非規則的LDPC碼。

1.3.1 非規則的LDPC碼

構造方法:碼率R=M/N=0.5,構造的H矩陣列重固定,而行重是隨機的。下面通過一個大小爲6*12,列重爲2的H矩陣來說明。因爲列重固定爲2,所以其列座標集合爲[1,1,2,2,3,3,4,4…….12,12],而行座標可以隨機構造。

1.       先構造一個6*12,每一列爲1到6隨機排列的矩陣onesInCol。

2.       選取onesInCol的前2行(和列重一致),如上圖所示。

3.        將所選取的矩陣按列依次排列如下

 

4.       構造矩陣tmp

5.       矩陣tmp重排成c1

6.       full 把稀疏矩陣轉換爲滿陣顯示, sparse 創建稀疏矩陣生成M*N階稀疏矩陣H在以向量r1和c1爲座標的位置上的對應元素值爲向量1的對應值。

1.3.2 規則的LDPC 碼

對於碼率R=0.5的規則的LDPC碼其行重與列重有關,行重是列重的2倍。以6*12的H矩陣爲例,假設其列重爲2,每列1的個數爲2,總的1的個數爲2*12=24,H矩陣有6行,行重相同則每行1的個數爲24/6=4,即行重爲4。假設其列重爲3,其行重爲6。

構造方法:與構造行重類似,行重列重固定之後,其在矩陣中的位置座標集合固定,如列重爲2,行重爲4,列座標集合爲[1,1,2,2,3,3,…..],行座標集合爲[1,1,1,1,2,2,2,2,3,3,3,3,……],下面考慮的就是如何將行列座標組合起來而不重複。這裏採用的是保持行座標集合不變,列座標集合打亂重排。以構造大小5*10,列重爲2,行重爲4的H矩陣爲例說明。

1.       先構造一個5*10,每一列爲1到5隨機排列的矩陣onesInCol。

2.       選取onesInCol的前2行(和列重一致)構成1*20的矩陣

3.       將r按升序排列得到

4.       記錄下排列前的位置索引

5.       因爲列座標集合爲[1,1,2,2,3,3,4,4,……9,9,10,10],將列座標集合根據上面的位置索引重新排列,得到c

 

6.       行座標集合如下,與列座標一一對應,確定矩陣H中1的位置。

7.       最後結果

 

1.3.3 LDPC碼的環

在 LDPC 碼的 Tanner 圖中,從一個頂點出發,經過不同頂點後回到同一個頂點的一些“邊”組成的迴路稱爲“環”。經過的邊的個數稱爲環的長度。所有環中周長最小的環稱爲 LDPC碼的圍長(girth) ‎。

Tanner 圖中的環不可避免的會對譯碼結果造成非常大的干擾。由於迭代概率譯碼會使信息在節點間交互傳遞,若存在環,從環的某一個節點出發的信息會沿着環上的節點不斷傳遞並最終重新回到這個節點本身,從而使得節點自身信息不斷累加,進而使得譯碼的最終結果失敗的概率變大。顯然,環長越小,信息傳遞迴本身所需走的路徑就越短,譯碼失敗的概率就變得越高。Tanner 圖形成一個環至少需要 4 個節點組成4 條相連的邊,即環長最小爲4,這類短環對碼字的譯碼結果乾擾最大。定義 LDPC碼的行列(RC)約束爲:兩行或兩列中不存在元素 1 的位置有 1 個以上相同的情況。顯然,滿足 RC 約束的 LDPC 碼最低就是 6 環,去除了4 環的干擾。由於4環的檢測以及避免最爲簡單並且必要,因此絕大部分構造方法都會滿足 RC 約束。而構造大圈長的碼字則需要精確的設計。

 

1.4 LDPC譯碼

Gallager 在描述 LDPC 碼的時候,分別提出了硬判決譯碼算法和軟判決譯碼算法兩種。經過不斷髮展,如今的硬判決算法已在 Gallager 算法基礎上進展很多,包含許多種加權比特翻轉譯碼算法及其改進形式。硬判決和軟判決各有優劣,可以適用於不同的應用場合。

1.4.1 比特翻轉算法(BF)

硬判決譯碼算法最早是 Gallager 在提出 LDPC 碼軟判決算法時的一種補充。硬判決譯碼的基本假設是當校驗方程不成立時,說明此時必定有比特位發生了錯誤,而所有可能發生錯誤的比特中不滿足校驗方程個數最多的比特發生錯誤的概率最大。在每次迭代時均翻轉發生錯誤概率最大的比特並用更新之後的碼字重新進行譯碼。具體步驟如下:

1.       設置初始迭代次數 k1及其上限kmax 。對獲得的碼字y=(y1,y2…yn)按照下式展開二元硬判決得到接收碼字的硬判決序列Zn 。

2.       若k1=kmax ,則譯碼結束。不然,計算伴隨式s=(s0,s1,…sm-1),sm表示第m個校驗方程的值。若伴隨式的值均爲 0,說明碼字正確,譯碼成功。否則說明有比特位錯誤。繼續進行步驟3。

3.       對每個比特,統計其不符合校驗方程的數量fn (1<=n<=N)

4.       將最大fn所對應的比特進行翻轉,然後k=k+1,返回步驟2。

BF 算法的理論假設是若某個比特不滿足校驗方程的個數最多,則此比特是最有可能出錯的比特,因此,選擇這個比特進行翻轉。BF 算法捨棄了每個比特位的可靠度信息,單純的對碼字進行硬判決,理論最爲簡單,實現起來最容易,但是性能也最差。當連續兩次迭代翻轉函數判斷同一個比特位爲最易出錯的比特時,BF 算法會陷入死循環,大大降低了譯碼性能。

圖50*100

圖 500*1000

1.4.2 置信傳播算法(BP)

置信傳播(Belief Propagation)譯碼算法是消息傳遞(Message Passing)算法在 LDPC譯碼中的運用。消息傳遞算法是一個算法類,最初運用於人工智能領域,人們將其運用到 LDPC 碼的譯碼算法中,提出了LDPC 碼的置信傳播算法。置信傳播算法是基於 Tanner 圖的迭代譯碼算法。在迭代過程中,可靠性信息,即“消息”通過 Tanner圖上的邊在變量節點和校驗節點中來回傳遞,經多次迭代後趨於穩定值,然後據此進行最佳判決。

置信傳播譯碼算法的基本流程如下:

在迭代前,譯碼器接收到信道傳送過來的實值序列y=(y1,y2,….yn),所有變量節點bi接收到對應的接收值yi。

第一次迭代:每個變量節點給所有與之相鄰的校驗節點傳送一個可靠性消息,這個可靠性消息就是信道傳送過來的值;每個校驗節點接收到變量節點傳送過來的可靠性消息之後,進行處理,然後返回一個新的可靠性信息給與之相鄰的變量節點,這樣就完成了第一次迭代;此時可以進行判決,如果滿足校驗方程,則不需要再迭代,直接輸出判決結果,否則進行第二次迭代。

第二次迭代:每個變量節點處理第一次迭代完成時校驗節點傳送過來的可靠性消息,處理完成後新的消息發送給校驗節點,同理,校驗節點處理完後返回給變量節點,這樣就完成了第二次迭代。完成後同樣進行判決,如果滿足校驗方程則結束譯碼,否則如此反覆多次迭代,每次都進行判決,直到達到設定的最大迭代次數,譯碼失敗。在每次迭代過程中,無論是變量節點傳送給校驗節點的信息或者校驗節點傳送給變量節點的信息,都不應該包括前次迭代中接收方發送給發送方的信息,這樣是爲了保證發送的信息與接收節點已得到的信息相互對立。

 

                                                                                         圖50*100

圖500*1000

 

 

結束語

目前LDPC碼研究領域的主要工作集中在譯碼算法的性能分析、編碼方法、碼的優化算法等,經過研究人員的努力,LDPC碼的研究取得很大進展,但仍有許多問題需要進一步研究:

(1)LDPC碼校驗矩陣的構造,儘管在構造最優的LDPC碼方面取得了一些進步,但目前還沒有一套系統的辦法來構造所需要的好碼,特別是在碼字長度有限、碼率一定的條件下,構造性能優異的好碼是一個非常具有挑戰性的課題。

(2)LDPC編碼系統的聯合優化設計,將編碼技術與調製技術、均衡技術、時空編碼技術、OFDM技術結合進行性能優化是當前及將來的發展方向之一。

(3)無線衰落信道及MIMO技術下LDPC碼的性能分析方法及優化設計準則。目前LDPC碼字的優化設計主要在加性高斯白噪聲信道下得到的,而無線衰落信道下,特別是時變信道非線性環境下碼字的性能分析方法、優化設計準則和信道估計的影響也是非常關鍵的課題,需要進一步的研究探索。

此外,基於LDPC碼的鏈路自適應技術,LDPC碼在集成通信網物理層、應用層聯合優化系統中的應用,LDPC碼在無線局域網和深空宇航中的應用,基於LDPC碼的圖像傳輸、圖像數字水印系統中的應用以及尋找更適合硬件實現的LDPC碼編譯碼方法等都是非常值得研究的課題。

發佈了36 篇原創文章 · 獲贊 106 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章