LDPC 低密度奇偶校驗碼的軟判決譯碼(三)-算法和代碼
(這是系列文章,見右側(cè)目錄,有列表)
這篇小文,把前兩個文章講的原理和算法,用 Octave/Matlab 代碼寫出來,我用 matlab2020a 調(diào)試的。GNU Octave 7.2.0 上也測試通過。
這個文檔對應(yīng)兩個視頻:
算法描述:? https://www.bilibili.com/video/BV1ae4y1y7cM/
代碼講解:https://www.bilibili.com/video/BV15t4y1j7gp/
后續(xù)的文章和視頻中,用到了兩個簡寫,我整理在這里:
其中 N(n) 表示比特 n 參與的那些校驗方程, \m 表示集合減法,即不考慮校驗方程 m,則N(n)\m 表示:”比特 n 參與的那些校驗方程”?? 中去掉??? “標號為m 校驗方程”?? 后的校驗方程
算法描述:
---------------------------------------------------------------------------------------------------------------
輸入: A, 信道的后驗概率 , 以及最大的迭代次數(shù) L
初始化: 對所有 A(m,n)=1 的 (m,n), 令
Horizontal Step:對每個A(m,n)=1 的 (m,n):
??? 計算?
?? ?計算
????????????????????????????????
?? ?計算?? 和??
Vertical Step:對每個A(m,n)=1 的 (m,n):
?? ?計算
????
????????????????????
?????????????????????? 和
????????????????????
?? ???? 其中?? 是使得
成立的值
???? 計算 準后驗概率(pseudo-posterior):
?? ??? ?
????????????? 和
????????
?? ???? 其中?? 是使得?
成立的值
?? ???? 做一次臨時判決:若? 則
, 否則
?? ???? 如果滿足 , 則 停止. 否則,如果 迭代次數(shù) < L,循環(huán)至? Horizontal Step,否則,宣布譯碼失敗并停止.
---------------------------------------------------------------------------------------------------------------
下面的 Octave/Matlab 程序,還是使用前面文章中的校驗矩陣:
發(fā)送的原始信息 , 經(jīng)過 LDPC 編碼之后(這里先略過如何編碼的):
經(jīng)過一定的高斯信道,我們可以得到如下后驗概率:
如果用大于 0.5 為 1? 做判決,則硬判決得到的結(jié)果為:
兩個畫底線的數(shù)字是錯誤的,
則意味著有兩個校驗方程是沒有成立的,出錯了!
下面是 Octave/Matlab 代碼:
版權(quán)聲明:此代碼取自[1] 配套的代碼,稍作修改。
[1] Error Correction Coding--Mathematical Methods and Algorithms , Todd K. Moon, Wiley, 2005