摘 要: 為了進(jìn)一步降低低密度奇偶校驗(LDPC)碼譯碼算法的復(fù)雜度,基于經(jīng)典置信傳播(BP)譯碼算法,給出了對數(shù)域迭代后驗概率對數(shù)似然比(APP LLR)算法。通過概率域的和積算法(SPA)和對數(shù)域的迭代APP LLR算法的性能仿真及分析可見,迭代APP LLR算法能以較小的性能損失換取復(fù)雜度的大幅降低。進(jìn)一步選用迭代APP LLR算法,結(jié)合不同地形條件下的VHF頻段信道模型,仿真了LDPC碼編譯碼系統(tǒng)的性能。理論分析及仿真結(jié)果均表明,基于迭代APP LLR算法的LDPC碼,實現(xiàn)簡單,性能優(yōu)異,具有良好的工程應(yīng)用前景。
關(guān)鍵詞: LDPC碼; 迭代APP LLR; 和積算法; VHF頻段
中圖分類號: TN91?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2014)01?0001?04
0 引 言
信道編譯碼技術(shù)可以檢測并且糾正信號在傳輸過程中引入的錯誤,能夠保證數(shù)據(jù)進(jìn)行可靠的傳輸[1]。LDPC碼的校驗矩陣具有稀疏的特性,因此存在高效的譯碼算法,其糾錯能力非常強。1981年,Tanner提出了基于圖模型描述碼字的概念,將LDPC碼的校驗矩陣對應(yīng)到Tanner圖的雙向二部圖上。采用Tanner圖構(gòu)造的LDPC碼,通過并行譯碼可大大降低譯碼復(fù)雜度。Mackay和Neal利用隨機構(gòu)造的Tanner圖研究了LDPC碼的性能,發(fā)現(xiàn)采用和積算法(SPA)的LDPC碼具有優(yōu)異的譯碼性能,在長碼時甚至超過了Turbo碼[2]。本文采用Mackay基于二分圖提出的改進(jìn)方案構(gòu)造LDPC碼的校驗矩陣。基于置信傳播(BP)算法,給出了一種簡化的BP算法——對數(shù)域迭代APP LLR算法,復(fù)雜度大大降低。目前,LDPC碼是最有希望在廣泛的信道范圍取得香農(nóng)容量的誤差糾正技術(shù)[3],在保證LDPC碼糾錯性能的前提下,降低編譯碼器實現(xiàn)的復(fù)雜度是研究的重點,引發(fā)了信道編碼界的研究熱潮。
1 LDPC碼編碼
LDPC碼是一種性能非常接近香農(nóng)極限的“好”碼,它是惟一用校驗矩陣來表示的線性分組碼。LDPC碼的編碼主要分兩步進(jìn)行,首先構(gòu)造奇偶校驗矩陣,然后是基于奇偶校驗矩陣的編碼算法。
1.1 校驗矩陣的構(gòu)造
根據(jù)式子[n*j=m*k]可知,規(guī)則的LDPC碼[(n,j,k),]當(dāng)參數(shù)[n, j, k]確定后,可以得到校驗方程的數(shù)目[m,]則校驗矩陣[H]的大小就可以定為[m×n。]構(gòu)造LDPC碼校驗矩陣的一般步驟為:先生成一個[m]行[n]列的全0矩陣,然后隨機地將每列中的[j]個0換成1,每行中的[k]個0換成1。但在隨機置l的過程中,必須避免出現(xiàn)長度為4的環(huán)[4]。如果最小環(huán)長為4,在迭代中非常容易造成錯誤信息的擴(kuò)散傳播,從而導(dǎo)致譯碼性能的下降[5]。
Mackay為了消除校驗矩陣中長度為4的環(huán),基于Tanner圖提出了改進(jìn)的構(gòu)造方案。采取的準(zhǔn)則是:在構(gòu)造時必須保證任意兩列間的交疊重量不超過1。本文采用的是Mackay的1A構(gòu)造方法,按照此方法構(gòu)造的一個LDPC碼(3,6)碼如圖1所示。
圖1 Mackay的1A構(gòu)造方法
Mackay的1A構(gòu)造方法是最基本的一種構(gòu)造方法,它要求保證固定列重為[γ],而行重盡可能均勻的保持為[ρ]。利用Mackay構(gòu)造方法得到的LDPC碼距離特性很好,且沒有短環(huán)。
1.2 基于奇偶校驗矩陣的編碼算法
LDPC碼的直接編碼方法就是利用高斯消去法,產(chǎn)生一個下三角矩陣,然后進(jìn)一步初等變換得到右邊單位陣形式[H=[P|I]],由[G=[I|P]]得到生成矩陣,再利用信息碼元向量[u]和生成矩陣[G]相乘可得到完整碼字[C,]即[C=M*G]直接編碼[5]。
2 LDPC碼譯碼[4,6?7]
BP算法是在Gallager提出的概率譯碼算法基礎(chǔ)上發(fā)展而來的。BP算法每次迭代包括2步:變量節(jié)點的處理和校驗節(jié)點的處理。概率域就是在節(jié)點間傳遞的是概率信息,采用很多乘法運算,運算量大;而對數(shù)域的和積算法實現(xiàn)是將概率值通過對數(shù)似然比變化為軟信息值(LLR),再進(jìn)行傳遞,這樣就將大量乘法運算變?yōu)榧臃ㄟ\算,大大簡化了譯碼復(fù)雜度,利于硬件實現(xiàn)。下面重點介紹對數(shù)域迭代APP LLR譯碼算法。
2.1 迭代APP LLR譯碼算法的變量定義
對于[(N,K)]LDPC碼,定義變量[U]取值為0和1時的對數(shù)似然比(LLR)為:
[LUdef=logP(U=0)P(U=1)] (1)
設(shè)發(fā)端發(fā)送的碼字為[u=[u1,u2,…,uN]],接收碼字為[y=[y1,y2,…,yN]],由此可以得出在迭代中傳遞的校驗節(jié)點和信息節(jié)點的軟信息為:
[λmn(un)def=log(qmn(0)qmn(1))] (2)
[Λmn(un)def=log(rmn(0)rmn(1))] (3)
2.2 迭代APP LLR譯碼算法
迭代APP LLR譯碼算法的迭代過程如下:
(1) 初始化:設(shè)每個變量節(jié)點[n]的軟信息為:
[L(un)=ln{P(un=0yn)P(un=1yn}] (4)
對于矩陣中[H(m,n)=1,]相應(yīng)的變量節(jié)點的軟信息初始化為信道輸出的軟信息,即[λmn(un)=L(un),][Λmn(un)=0。]
(2) 校驗節(jié)點更新:根據(jù)每個變量節(jié)點[n,]向與該變量節(jié)點相連的所有校驗節(jié)點傳遞更新的軟信息,計算校驗節(jié)點信息:
[Λmnun=2tanh-1n∈Nm\ntanhλmnun2] (5)
(3) 變量節(jié)點更新:根據(jù)每個校驗節(jié)點[m,]向與該校驗節(jié)點相連的所有變量節(jié)點傳遞更新的軟信息:
[λmn(un)=L(un)+m∈M(n)\mΛmn(un)] (6)
對變量節(jié)點[n]進(jìn)行判決時,變量節(jié)點軟信息應(yīng)為:
[λn(un)=L(un)+m∈M(n)Λmn(un)] (7)
(4) 判決:當(dāng)[λn(un)≥0,]則[un=0],否則[un=1,]此時判決出的碼為:[u={u1,u2,…,uN}。]最后根據(jù)校驗矩陣來判斷所譯出的碼字是否正確。如果[uHT=0,]那么譯碼正確,此時,停止迭代;否則繼續(xù)迭代進(jìn)行譯碼,直到迭代次數(shù)達(dá)到所設(shè)定的最大次數(shù)。如果此時仍未正確譯碼,則譯碼失敗。
由以上所述可見,在變量節(jié)點更新時只有加法運算,但是還可以再進(jìn)一步降低算法的實現(xiàn)復(fù)雜度。采用迭代APP LLR算法,將LLR BP算法中的[λn(un)]代替[λmnun]參與校驗信息的迭代。即[λn(un)]不僅用于硬判決,還用于校驗信息的更新。這樣所傳遞的變量消息之間便引進(jìn)了相關(guān)性,傳遞的變量消息就不再是外部消息,僅僅需要計算和存儲一個變量消息的數(shù)值,可以大大地降低算法的復(fù)雜度。
3 LDPC碼在高斯信道下不同譯碼算法的仿真
結(jié)果和分析
基于Matlab按照上述的編譯碼方法,在高斯信道下分別對LDPC碼概率域的SPA和對數(shù)域的迭代APP LLR譯碼算法進(jìn)行了誤碼性能仿真。然后由所得到的性能仿真圖形進(jìn)行分析比較。