日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LDPC译码算法代码概述

發布時間:2025/7/25 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LDPC译码算法代码概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序說明

V0.0 2015/1/24

LDPC譯碼算法代碼概述

?

概述

?

本文介紹了包括LDPC_Simulation.m, ldpcdecoderbp1.m,ldpcdecoderminsum.m, ldpcdecoderbp2.m,ldpcdecoderminsum2.m在內的MATLAB代碼的編寫思路,基本原理和功能,具體代碼可見文后。本文暫不涉及LDPC校驗矩陣的構造和編碼程序,此部分由他人提供。

修訂歷史

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

日期

版本號

修訂內容

2015/02/02

V1.0

初始版本,初步仿真正確

簡介

?

本程序基于MATLAB 2014a 編寫,本文檔中提到的"MATLAB"均指該特定版本MATLAB。本文提到的LDPC編碼均指二進制LDPC編碼,多進制暫時不進行討論。

LDPC(低密度奇偶校驗)編碼,顧名思義有兩個特性:糾錯編碼采用奇偶校驗,該種編碼方式具有低密度的特點。在學習LDPC編碼之前,必須要對線性分組碼的基本概念有詳細的了解,包括線性分組碼的映射思想、生成矩陣、校驗矩陣等。這部分內容可參考《通信原理》等書籍。有限域上的編碼可不做了解,這一點我現在也不懂。

低密度的意思是對于校驗矩陣H而言,1的個數遠小于0的個數。這對于譯碼算法而言是至關重要的,這表現在兩個方面。其一是對于一個大的校驗矩陣而言,太多的1會導致計算上的困難;其二是譯碼算法(此處特指置信傳播類算法)中的很多假設實際上是不成立的,在H不滿足低密度約束下對其性能會有很大影響。

LDPC的置信傳播算法包括以下假設:

  • Tanner圖無環
  • 各個校驗方程獨立
  • 矩陣設計過程中各個碼字距離足夠遠
  • 計算條件邊緣概率(?)
  • 其他

關于置信傳播的具體原理和假設將在《學習筆記:LDPC編譯碼基本原理》中做具體闡述,此處不再詳細說明。(由于《學習筆記:LDPC編譯碼基本原理》還未開始撰寫,該部分內容可能會有較大變動)

程序設計

?

程序結構

校驗矩陣和編碼程序已經給定程序(腳本)按順序由以下幾個部分構成

  • 參數設置
  • 隨機序列(數據)生成和編碼
  • AWGN信道仿真
  • 譯碼程序
  • 誤比特數等信息統計

校驗矩陣已知,且命名為H(800,480).mat,采用load('H(800,480).mat')即可載入,校驗矩陣為H。隨機序列(數據)生成和編碼采用ldpcencoder(H)調用函數,返回數據及其編碼。本文僅對AWGN信道和譯碼程序做說明。

?

AWGN信道

加性高斯白噪聲信道,說明信道的仿真只需要加上一個高斯白噪聲就可以了。"白"意味著任意兩個不同時刻的噪聲都是不相關的,"高斯"即服從高斯分布,滿足這兩個要求很簡單,采用randn生成一組序列即可。唯一不確定的就是噪聲的方差了。

對于零均值信號而言,方差代表的就是功率。問題就轉變成了如何通過EbN0計算噪聲的功率?EbN0是一個比值,每比特能量/噪聲功率譜密度。如果我們將信號功率歸一化,那么噪聲功率就是信噪比SNR的倒數。

在本程序中,校驗矩陣為480×800(比特速率為碼速率的0.4),采樣頻率等于碼速率(帶寬為采樣頻率的一半),因此有

SNR_dB = EbN0_dB((nEbN0)) + 10*log10(2)+10*log10(0.4);

?

譯碼程序編寫思想(置信傳播為例)

譯碼算法實際上是很簡單的,問題在于呢,如何早到那些要乘的數。就是下式中所表現的 集合中的數據

對于這個問題,有兩個考慮方式:

1. 傳播都是在邊上的,那么從邊入手。

H矩陣中有多少個非零元素,就有多少條邊,記為L。對于每一條邊而言,用兩個個長度也為L的向量保存邊所連接的變量節點和校驗節點的編號(r_Mark,c_Mark)。

初始化:

變量節點傳遞的信息是P(X|Y),那么只需要知道邊所對應的變量節點(c_Mark(l))就知道了傳遞的信息。

迭代:

對于每一次的迭代,從第一條邊開始。找出邊的r=r_Mark(l),之后找到所有的r_Mark = r的邊,計算校驗節點的信息。

同理計算變量節點傳播的信息

判決

……

?

問題在于:

找在MATLAB中采用find就可以了,但是復雜度到底是多少呢?每個循環都要find一下實在是太浪費了……

?

2. 利用H矩陣的天然結構

也就是說實際上我們要取的集合是H對應的每一行或每一列的數。如果我們采用和H矩陣完全相同的方式去構造信息傳遞的兩個矩陣,那么在尋址的過程中將會容易很多。

想法1對應的程序是ldpcdecoderbp1和ldpcdecoderminsum,想法2對應的程序是ldpcdecoderbp2和ldpcdecoderminsum2。實驗證明,程序對應的校驗矩陣如本代碼所附時,采用方式1運行效率高。

算法

?

置信傳播

以下內容是置信傳播算法的編程具體實現方式,按上述思路1編寫對應ldpcdecoderbp1

LDPC譯碼過程可以用Tanner圖直觀表示,如圖 1所示,接收到的序列表示為 ,校驗節點為 ,我們要求的是 的條件后驗概率。

圖 1 Tanner圖

?

本文不敘述過多原理性問題,僅列出計算步驟,此處假定編碼后的星座映射為 。

1.初始化:(P0,P1 = 1-P0)

2.校驗消息處理:(校驗節點傳遞信息rmn0,rmn1 = 1-rmn0)

????

3.變量消息處理:(k為歸一化常數)

????

4.譯碼判決:(求0,1后驗概率之比值qn0_1,大于1判決為0)

????

如果滿足 或達到最大迭代次數,返回譯碼后結果,退出循環;否者回到步驟2。

最小和算法

以下內容是最小和算法的編程具體實現方式,按上述思路2編寫,對應ldpcdecoderminsum2。

對于最小和算法,尤其要注意的是發送端的映射關系。對于置信傳播算法而言,如果把關系搞錯了,會發現誤碼率大約是1減正確情況下誤碼率,這個時候很快就能發現毛病所在;但在最小和中,弄錯了的話,誤碼率會變得怪怪的。

最小和算法本質上和置信傳播沒有什么區別。正如我們所觀察到的,置信傳播算法中有兩個可以改進的地方:其一是對于概率來說,不是0就是1,沒有必要采用兩組變量,更好的選項可能是采用比值的形式;其二是算法中采用的乘法取對數之后會變成加法,這樣能減少運算量。從這兩點出發,提出了對數似然比算法,最小和算法實際上是對數似然比算法的近似。

同置信傳播算法的前提假設,但以想法2為例,最小和算法闡述如下。

1.初始化: (按校驗矩陣結構對應vl至vnm)

2.校驗消息處理:(校驗節點傳遞信息unm)

????

3.變量消息處理:(變量節點)

????

4.譯碼判決:(qn0_1,大于0判決為0)

????

如果滿足 或達到最大迭代次數,返回譯碼后結果,退出循環;否者回到步驟2。

改進思路

?

改進的意思是這一程序是對的,但是能夠做得更好。譯碼程序的初步驗證過程是將EbN0設置為一個較大的值,在這一情況下迭代次數應該是1。很顯然這里的四個譯碼函數都完成了這一個測試,但是否真正無誤還有待更進一步的考驗。

做得更好的"好"往往是必須有一個標準的,如果我們將程序計算復雜度和空間復雜度降低、且易于FPGA實現作為"好"的標準,那么可以從以下幾個方面改進

  • 采用最小和算法
  • 采用了兩種變量存儲變量信息和校驗信息,但實際上一組足以
  • 可以選擇一種綜合1、2想法的存儲思路
  • 將1想法中需要find的取值預先存起來
  • 多參考譯碼器實現的學位論文
  • ……

參考

?

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

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

代碼

……

轉載于:https://www.cnblogs.com/sea-wind2/p/4268408.html

總結

以上是生活随笔為你收集整理的LDPC译码算法代码概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。