李 超,石 磊
(中國電子科技集團公司第20研究所通信事業部,陜西西安 710068)
1962年Gallager[1]在對糾錯編碼的研究中提出了LDPC碼,但是由于當時的硬件條件不足,直到90年代末隨著超大規模集成電路的推廣才真正為人們所重視[2]。雖然在高斯信道中 LDPC(Low Density Parity Check,低密度奇偶校驗碼)碼相比其他編碼方法具有更優良的性能,但是由于其逼近香農限的性能是在較長的碼長情況下才能得到體現,使得實現起來具有相當大的復雜度,即便是當今的超大規模集成電路也很難直接實現較長碼長的編碼和解碼。于是如何構造和改進LDPC碼成為目前研究的熱點,而準循環低密度奇偶校驗碼的發現,為LDPC編譯碼的硬件實現提供了可能。QC-LDPC碼具有更好的結構性與隨機性,在保證碼的信道性能不變的前提下,極大的簡化了編碼和譯碼電路,是目前實現LDPC編譯碼器的主流算法。正是由于這些優勢,LDPC碼已被 WIMAX(IEEE802.16e[3-4])、WLAN(IEEE802.11n)、DVB-T等標準選定為信道編碼的備選編碼,并且極有可能成為第四代無線通信的編碼標準。
IEEE802.16e標準中 LDPC 碼[5]的校驗矩陣為

其中,Pij被定義為z×z的單位變換矩陣或零矩陣,單位變換矩陣是通過對單位矩陣循環右移得到的。LDPC碼是由的效驗矩陣H定義,其中m是校驗位的長度,n是碼長的長度。基本矩陣中的移位集{p(i,j)}是用來決定相同碼率不同碼長的移位大小,對于碼率 1/2、3/4A、3/4B、2/3B和 5/6的各種碼,p(i,j)p(i,j)由式(2)決定。

其中,?x」表示不大于x的最大整數。(?x」為取整函數)。
在IEEE802.16e標準中各種碼長和碼率的校驗矩陣H都是由基本矩陣Hb膨脹得到的,每個基本矩陣有24列,膨脹因子 z=n/24(n為碼長)。IEEE802.16e標準支持碼長從576到2304共19種碼長。
IEEE802.16e中對于不同碼率的 LDPC碼給定了不同的基本矩陣,以碼率為1/2的碼為例,基本矩陣Hb如圖1所示。

圖1 IEEE802.16e標準中1/2碼率的基本矩陣
圖1中-1為全零陣;0為單位陣,其余標號為相應右移次數的單位陣。
高編碼復雜度是LDPC碼需要解決的主要問題,LDPC編碼器直接實現具有和碼長成二次方的時間復雜度,而Turbo碼可以在線性時間內編碼。于是如何使得LDPC碼能夠在與碼長成線性時間內編碼就成為一個非常關鍵的問題。
IEEE802.16e標準中規定的LDPC碼是一種結構性碼,其算法大大的降低了 LDPC碼的編碼復雜度。但是如果采用傳統的編碼方法,其編碼復雜度仍令人難以接受。校驗矩陣H得到的生成矩陣是一個稀疏矩陣,所以可以根據校驗矩陣H的稀疏性以及準循環特性[6]來進行快速編碼。
IEEE802.16e標準中給出了3種LDPC快速編碼的算法[7-8]。由于第 3 種編碼方式[4]是最常用的,而且已經比較成熟,現只對第3種編碼方式進行說明。
為了說明效驗矩陣結構,現將其分割為6個子矩陣表示

設膨脹因子為z,碼字x=(kb,p1,p2),其中kb=(u1,u2,…,ukb),p1=(p1)1*2,p2=(v1,v2,…,vmb-1),而 ui(i=1,…,kb),vj(j=1,…,mb-1)為1×z的矢量。

則

所以效驗位p1和p2可由以下公式得到

基于IEEE802.16e標準的LDPC碼的編碼算法[9]可以轉化為以下6個步驟:
(1)計算 f1=A和 f2=C。
(2)計算 f3=T-1f1和 f4=Ef3。
(3)計算 p1=f4+f2。
(4)計算 f5=B。
(5)計算 f6=f1+f5。
(6)計算 p2=T-1f6。
根據上述編碼算法,FPGA程序實現了0.5碼率,碼長為2304 bit,信息位為1152 bit數據流的編碼。每幀送入1152 bit原始數據流,經過編碼后產生1152 bit效驗位,因為是系統碼,所以將原始信息位后緊跟效驗位就可以合并成所要發送的編碼碼流。編碼器的硬件總體結構如圖1所示。

圖2 LDPC編碼器總體結構圖
從圖2可以看出,LDPC編碼器中主要包含矩陣乘法模塊[10],前項置換模塊,矢量加法模塊,以及生成碼字模塊。現對矩陣乘法模塊,前項置換模塊和碼字生成模塊進行介紹。
(1)矩陣乘法器模塊:主要由循環移位器和模二加法器組成。由于FPGA運算的并行特點,編碼器在計算矩陣乘法時可按行并行操作。輸入的原始信息比特流與效驗矩陣Hb的每一行進行相乘運算時,首先按照RAM中存儲的非零列號找到相對應的信息位中的矢量,并對該矢量進行循環右移,循環右移的次數依照IEEE802.11e標準的規定進行控制,然后把這一行中的所有非零元素和信息位相乘所得結果做一次異或操作,這就是矩陣的一行與信息位相乘的結果。該過程可以并行執行,同時完成矩陣中每一行與信息位的相乘運算。
(2)前項置換器模塊:IEEE802.16e標準中規定,LDPC碼的效驗矩陣T是雙對角矩陣,所以對于乘矩陣T的逆的操作采用前項置換方法,其原理如下:
設 f3=(u1,u2,…,umb-1),f1=(v1,v2,…,vmb-1),則

所以在FPGA中進行乘矩陣T的逆的計算,不必進行求逆和相乘運算,僅用異或運算就能完成。
(3)生成碼字模塊:主要作用是將原始信息位與效驗位p1和p2合成。在IEEE802.16e標準中規定LDPC碼為系統碼,所以將原始信息位與效驗位p1和p2按順序依次拼接起來,就是實際編碼后數據。
在QuartusⅡ軟件下進行編譯和綜合,器件選擇為Altera公司STRATIXII系列的EP2S90F1020C3,整個LDPC編碼器最高工作時鐘214 MHz,邏輯資源占用3027 LE。LDPC碼編碼仿真結果如圖3所示。

圖3 LDPC碼編碼器仿真結果
code_rden:編碼器使能標志,高電平說明LDPC編碼器正在工作。
matlab_code:LDPC編碼的Matlab仿真結果輸出。
ldpc_code:LDPC編碼的FPGA仿真結果輸出。
result_out:比對Matlab與FPGA仿真結果,輸出碼流進行相減一直為零,說明仿真結果正確。
文中分析了基于IEEE802.16e標準的LDPC碼的校驗矩陣H,然后在QuartusⅡ平臺下根據分塊矩陣的快速編碼算法設計了一種編碼器,滿足IEEE802.16e標準的碼長為 2304,碼率為 1/2的LDPC碼的編碼要求,并仿真驗證了LDPC編碼器的性能。仿真結果證明通過合理的構造LDPC碼的校驗矩陣以及選擇合適的編碼算法,可以有效降低編碼復雜度,并實現了線性編碼。
[1] GALLAGER R G.Low density parity- check codes[J].IRE Trans.Inf.Theory,1962,IT -8(1):21 -28.
[2] MACKAY D J C,NEAL R M.Near shannon limit performance of Low -density Parity-check codes[J].Electronic Letters,1996,32(4):1645 -1646.
[3] 苗忠良,宛斌,張孝林.WiMAX協議的體系結構研究[J].計算機技術與發展,2007,17(6):42-45.
[4] IEEE Organization.Air interface for fixed broadband wireless access systems IEEE802.16e - 2005[S].USA:IEEE Organization,2005.
[5] IEEE Organization.IEEE P802.16e/d8 IEEE standard for local and metropolitan area networks[S].USA:IEEE Organization,2005.
[6] 李水平,劉玉君,邢慶君,等.LDPC碼的環分析[J].信息工程大學學報,2003,12(4):82-84.
[7] RICHARDSON T J,URBANKE R L.Efficient encoding of Low-Density-Parity-Check codes[J].IEEE Transactions on Information Theory,2001,47(2):585 -597.
[8] 彭立,朱光喜.一種LDPC碼編碼器設計方案的研究[J].現代電子技術,2004(10):11-13.
[9] ZAHID K,TUGHRUL A,SCOTT M D.A real time programmable encoder for Low-Density Parity-Check-Code as specified in the IEEE P802.16e PD7 standard and its efficient implementation on a DSP processor[C].England:Freescale Semiconductor,Inc,2006.
[10]陳志凱,韓澤耀.基于IEEE802.16e的LDPC編碼器設計與實現[J].電子技術應用,2007(2):119-122.