低密度奇偶檢查碼（Lowdensity paritycheck code，LDPC code），是線性分組碼（linear block code）的一種，用於更正傳輸過程中發生錯誤的編碼方式。 歷史 在 1962 年，低密度奇偶檢查碼 LDPC code 即被羅伯特加拉格提出 R Gallager LowDensity ParityCheck Codes IRE Trans Inf Theory vol 7 pp 2128 Jan 1962，並被證明其錯誤校正能力非常接近理論最大值，夏農極限。但受限於當時技術，低密度奇偶檢查碼並無法實作。近年，低密度奇偶檢查碼被重新發現 David JC MacKay and Radford M Neal Near Shannon Limit Performance of Low Density Parity Check Codes Electronics Letters July 1996，並隨著積體電路的技術演進，低密度奇偶檢查碼的實作逐漸可行，而成為各種先進通訊系統的通道編碼標準。 運作 低密度奇偶檢查碼是基於具有稀疏矩陣性質的奇偶檢驗矩陣建構而成。對 n k 的低密度奇偶檢查碼而言，每 k 位元資料會使用 n 位元的碼字 codeword 編碼。以下是一個被 16 8 的低密度奇偶檢查碼使用的奇偶檢驗矩陣 H。當中可以見得矩陣內的元素 1 數量遠少於元素 0 數量，所以具有稀疏矩陣性質，也就是低密度的由來。 H left begin matrix 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 end matrixquad begin matrix 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 end matrix right 解碼 低密度奇偶檢查碼的解碼，可對應成二分圖 bipartite graph 作表示。下方的二分圖是依照上述奇偶檢驗矩陣 H 建置，其中 H 的行 row 對應至 check node，而 H 的列 column 對應至 bit node。check node 和 bit node 之間的連線，由 H 內的元素 1 決定；好比 H 中第一行 row 和第一列 column 的元素 1，使 check node 和 bit node 兩者各自最左側的第一個彼此連線。 400px 低密度奇偶檢查碼的解碼演演算法，主要基於有疊代性 iterative 的置信傳播 belief propagation；整個解碼流程如下方所示： 當接收資料 R 從通訊頻道 channel 進入低密度奇偶檢查碼的解碼器，解碼器會對訊息作初始化 initialization。 check node 根據互相連線的多個 bit node 內的資料做更新運算 update。 bit node 對相連線的多個 check node 內的資料做更新運算。 觀察終止 termination 條件，來決定是否繼續疊代計算。 詳細的解碼演演算法，常見有兩種：總和 乘積演演算法 SumProduct Algorithm R M Tanner A Recursive Approach to Low Complexity Codes IEEE Trans Inform Theory Vol IT27 no 5 pp 399431 Sep 1981F R Kschischang B J Frey and H A Loeliger Factor Graphs and the SumProduct Algorithm IEEE Trans Info Theory Vol 47 pp 498519 Feb 2001 和最小值 總和演演算法 MinSum Algorithm M P C Fossorier M Mihaljevic and H Imai Reduced Complexity Iterative Decoding of Lowdensity Parity Check Codes Based on Belief Propagation IEEE Trans Commun vol 47 no 5 pp 673680 May 1999J Chen A Dholakia E Eleftheriou M P C Fossorier and X Y Hu Reducedcomplexity Decoding of LDPC Codes IEEE Trans Commun vol 53 no 8 pp 12881299 Aug 2005。總和 乘積演演算法具有較佳的錯誤更正能力，卻具較高的計算複雜度；反之，最小值 總和演演算法在稍微減低的錯誤更正能力下，換取較低的計算複雜度。 總和 乘積演演算法 假設在一通訊系統的頻道有 AWGN 屬性，而傳送訊號為 mathbf U left u_1 u_2 dots u_nright，接收訊號是 mathbf Y left y_1 y_2 dots y_nright，bit node 有 n 個，check node 有 m 個。而總和 乘積演演算法在解碼流程如下： 初始化：假設 AWGN 的方差 variance 是 sigma2。 bit node n 會被初始化成： lambda_n to m left u_nright logfrac P u_n 0y_nP u_n 1y_n frac 2y_nsigma2。 check node m 會被初始化成： Lambda_m to n left u_nright 0。 check node 更新： check node m 更新為： Lambda_m to n left u_nright 2tanh1left prod_nin Nleft m rightbackslash n tanhleft frac lambda_n to mleft u_nright 2right right ； 其中 nin Nleft m rightbackslash n 是連線到 check node m 的 bit node 組合，但不包含第 n 個 bit node。 bit node 更新： bit node n 更新為： lambda_n to m left u_nright frac 2y_nsigma2 sum_min Mleft n rightbackslash m Lambda_m to n left u_nright；其中 min Mleft n rightbackslash m 是連線到 bit node n 的 check node 組合，但不包含第 m 個 check node。 終止： 解碼位元計算：假設解碼後訊號為 hat mathbf U left hat u_1 hat u_2 dots hat u_nright。Harddecision 解碼位元可由下列兩式求出： lambda_n left u_nright frac 2y_nsigma2 sum_min Mleft n right Lambda_m to n left u_nright hat u_i begin cases 0 mbox if lambda_i left u_irightge 0 forall i in left 1 2 dots nright 1 mbox if lambda_i left u_irightle 0 forall i in left 1 2 dots nright end cases 只要解碼後的碼字 mathbf v 在恆等式 mathbf Hmathbf vT0 成立，即終止疊代計算。 最小值 總和演演算法 最小值 總和演算，大至和總和 乘積演演算法類似，除了於「check node 更新」做不一樣的計算方式。而改變的計算式如下： sigma_m mathrm XOR left sgn left lambda_n to m right nin Nleft m rightbackslash nright ， mu_m min min left lambda_n to m nin Nleft m rightbackslash nright ， Lambda_m to n left u_nright sigma_m cdot mu_m min。 參考文獻 Category 錯誤檢測與校正 Category 編碼理論