彭海云 ,徐建敏 ,王 鵬 ,劉 瑋
(1.周口師范學院 計算機科學系,河南 周口 466001;2.東莞理工學院 計算機學院,廣東 東莞 523808;3.同濟大學 通信軟件及專用集成電路設計中心,上海 200092)
LDPC碼的概念最早由R.G.Gallager于1962年提出[1]。然而其研究成果長期為人們所忽視,直到1996年,Mackay等人重新“發現”了LDPC碼的強大性能[2],此后,LDPC碼開始成為信道糾錯編碼的一個主要研究熱點。LDPC碼具有極強的糾錯性能,如S.Y.Chung等人設計的1/2碼率,碼長107的非規則LDPC碼,在二進制輸入AWGN信道下,當錯誤概率為10-6時距Shannon限僅為0.004 55 dB[3],這是迄今為止性能最接近Shannon限的信道編碼。
2006年8月,我國的數字電視廣播地面傳輸標準DTMB正式公布[4]。該標準目前已經正式實施,與歐美等國的ATSC,DVB-T等同類標準相比,其最大的亮點就是在前向糾錯編碼中引入了LDPC碼,使整個系統在相同頻譜利用率條件下的接收門限比ATSC,DVB-T等標準的接收門限更低,也更有利于固定和移動接收。
DTMB標準中的前向糾錯碼由BCH碼和LDPC碼級連而成,依不同應用有0.4,0.6,0.8等3種碼率。其LDPC碼為準循環(QC-LDPC)非規則碼,對應校驗矩陣和生成矩陣均具有分塊循環特性,每個子塊為全零陣或循環陣,以降低編譯碼復雜度,同時仍保持了LDPC碼的優良糾錯性能[5]。
本文針對DTMB標準中LDPC碼的準循環特點,基于循環移位寄存器結構,實現了DTMB標準3種不同碼率的LDPC編碼,整個設計在FPGA芯片上經過綜合和布局布線,最高時鐘達到了182.82 MHz,遠超過DTMB實時編碼要求,而且該設計具有很強的通用性,只需更改編碼器內部的生成矩陣子塊生成多項式記錄模塊,即可適用于任意QC-LDPC編碼。
在DTMB標準中,輸入的比特碼流數據進行擾碼處理后即送入前向糾錯模塊,其前向糾錯編碼(FEC)由外碼(BCH碼)和內碼(LDPC)級聯實現。
LDPC碼生成矩陣Gqc的結構如下

式中:I是 b×b 階單位矩陣;O 是 b×b 階零陣;Gi,j是 b×b循環矩陣,取 1≤i≤k,1≤j≤c。LDPC 編碼碼字輸出信息位在后,校驗位在前。
DTMB標準中規定了3種FEC碼率,對應LDPC碼率也有 3 種,分別是 LDPC(7 493,3 048)碼; LDPC(7 493,4 572)碼;以及 LDPC(7 493,6 096)碼;在將 LDPC 編碼碼字作為FEC輸出時,刪除前面5個校驗位,因此事實上只輸出7 488 bit。
如前所述,DTMB中采用的QC-LDPC碼為系統碼,校驗比特在前,信息比特在后,3種碼率下的子塊大小均為127×127。如果在編碼時能充分利用生成矩陣的子塊循環特性,即使該生成矩陣并不具有稀疏性,也可以在較低的復雜度下完成LDPC編碼[6]。
對QC-LDPC碼生成矩陣(如式(1)所示),由于子矩陣 Gi,j具有循環移位特性,只需記錄其第一行數據 gi,j即可得到整個子矩陣 Gi,j, 故稱 gi,j為該子矩陣的生成多項式,因此整個生成矩陣 Gqc可以由(c×(t-c))個生成多項式 gi,j來 完 整描 述 。
記 a=(a1,a2,...,a(t-c)b)為待編碼信息比特,可將其依子塊大小分成(t-c)個子向量(a1,a2,...,at-c),其中 ai=(a(i-1)b+1,a(i-1)b+2,...,aib),1≤i≤(t-c),根據線性分組碼理論,信息比特a對應的編碼碼字為

上式中,pj=(pj,1, pj,2,…,pj,b)為校驗比特的第 j個子向量,1≤j≤c,由矩陣乘法知識可以得到


至此可以看出,隨著輸入信息比特(a1,a2,…,at-c)串行進入編碼器,第j個校驗比特子向量pj可以通過式(3)~(4)完成,當 ai進入編碼器時,首先根據式(4)完成 aiGi,j運算,該式可方便地采用線性反饋移位寄存器結構實現,然后再計算 Sj=a1G1,1+ a2G2,j+…+aiGi,j,而當 at-c全部進入編碼器后,此時 Sj=a1G1,1+ a2G2,j+…+at-cGt-c,j,恰為第 j個校驗比特子向量pj,因此如果編碼器中包含有c個pj并行計算模塊,即可在讀入所有信息比特后完成所有校驗比特計算,而編碼器內部只需存儲(c×(t-c))個生成多項式 gi,j信息。
編碼器設計需要能夠完成DTMB標準中所有3種LDPC碼的實時編碼。3種LDPC碼的信息比特長度分別為3 048 bit、4 572 bit和 6 096 bit, 碼字長度均為 7 493 bit,但前面5個校驗位不必輸出,只需輸出后面的7 488 bit即可。
采用前述QC-LDPC編碼算法,在所有信息比特輸入完畢的同時計算出所有校驗比特,然后再將刪除前面5位的校驗比特和信息比特組成完整碼字以串行形式輸出,這需要耗費7 488個時鐘周期,而輸入信息比特最大長度為6 096 bit。為提高系統工作穩定性,采用單時鐘設計,輸入、輸出均為1位串行模式,且各自有單獨的Data_Valid信號配合。首先確定編碼器時鐘頻率,按照DTMB標準規定,系統最高凈載荷率為32.486Mbit/s(對應0.8碼率FEC模式),此時LDPC碼信息比特和碼字比特速率分別為32.486×762/752 Mbit/s=32.918 Mbit/s和 32.486×7488/6 016 Mbit/s=40.435 Mbit/s,為留有部分余量,選擇45 MHz為編碼器工作時鐘。
編碼器的核心是移位寄存器-加法器-累加器結構(SRAA),它可以完成式(3)~(4)所示的校驗比特計算,其具體結構如圖1所示。

圖1 SRAA結構圖
可以看出,該SRAA由2組寄存器陣列組成,上方為寄存器B陣列Reg_B,下方為寄存器A陣列Reg_A,其寬度均為子塊大小127。初始狀態時,寄存器陣列A,B內容全部清零,開始編碼時,首先將生成矩陣G子塊G0,0的生成多項式g0,0加載到寄存器B陣列中,此時第1個信息比特s0出現在輸入端,s0與Reg_B經與門陣列相與后出現在異或門陣列輸入端,在GF(2)域中,加法與異或運算是等效的,因Reg_A初始內容為零,可知更新后的Reg_A值為

在下一個時鐘周期,第2個信息比特s1出現在輸入端,Reg_B內容循環右移1位,變為,同樣經與門和異或門陣列后,此時Reg_A變為

以此類推,在第127個時鐘周期時,Reg_A為

式中:s0為信息比特按子塊長度127分割而成的第1組子陣列(s1,s2含義同上,記 s=(s0,s1,s2,…,st-c))。 此后,Reg_B開始加載子塊 G1,0的生成多項式 g1,0,再重復上述操作,經127個時鐘周期后,Reg_A為

這樣,當所有信息比特均輸入完畢后,寄存器陣列A中的值為

因此,一個SRAA結構可以在信息比特長度 (t-c)×127個時鐘周期內完成1個校驗比特子塊計算(含127個校驗比特),采用c組SRAA結構并行工作,可以在所有信息比特輸入完畢后同時得到所有校驗比特(計算結果存儲于Reg_A陣列中),去除前面5個校驗比特,并將余下的校驗比特和原始信息比特組成完整的7 488 bit以串行模式輸出,即完成了整個LDPC編碼過程。
圖2給出了DTMB標準LDPC編碼器頂層模塊結構圖。編碼器采用3級流水線設計:第1級流水線完成輸入信息比特乒乓緩存(由LDPC信息比特最大傳輸速率和編碼器工作時鐘可知完成一幀信息比特傳輸最多耗費8 333個時鐘周期),第2級完成校驗比特計算(最多耗時6 096個時鐘周期),第3級完成編碼碼字輸出(耗時7 488個時鐘周期)。
編碼器硬件實現采用Altera公司的Stratix II系列EP2S15芯片,以下詳細介紹各子模塊設計:
1)load_sbit模塊
load_sbit模塊主要完成信息比特讀入,將讀入的信息比特存入內部乒乓緩沖區,同時還要記錄相應的碼率信息code_rate,該乒乓緩沖區可由一塊位寬為1 bit,深度為16 384 bit的RAM構成,其地址最高位作為乒乓緩沖區切換位。當一幀LDPC碼字傳輸完畢后,置相應buf_available信號為高,代表當前乒乓緩沖區可用,此后SRAA模塊可以接收load_sbit模塊內部乒乓緩沖區輸出的信息比特,同時下一幀信息比特數據也在繼續寫入乒乓緩沖區,這樣可以使load_sbit模塊始終處于工作狀態,減少了系統延時。

圖2 DTMB標準LDPC編碼器結構框圖
2)sbit_FIFO模塊
sbit_FIFO主要用作緩存發送至SRAA模塊的信息比特,當校驗比特計算完畢時,由碼字輸出模塊output_code讀取FIFO中的信息比特數據,并與校驗比特組成完整的LDPC碼字,該模塊可由Altera公司的IP核專用生成工具MegaWizard實現,FIFO數據寬度為1 bit,最大深度為16 384 bit。
3)SRAA模塊陣列
SRAA陣列是編碼器的核心,也是占用資源最多的模塊,其中單個SRAA模塊內部結構如前所述。在DTMB標準3種LDPC碼率中,對應的校驗比特子塊長度分別為35(0.4碼率 FEC 模式)、23(0.6碼率 FEC 模式)和 11(0.8碼率FEC模式)。相應地,3種碼率下所需的SRAA個數也恰為35,23,11。在實際工作中,這些SRAA陣列的工作時序完全相同,因此設計中采用了一個主SRAA模塊SRAA0_prior,該模塊不僅完成3種碼率下的校驗比特子塊計算功能,同時還產生SRAA模塊時序共用信號,供其余從SRAA模塊使用。從SRAA依工作模塊不同也可分成3類,一類可支持所有3種碼率(SRAA0)、一類可支持0.4和0.6碼率模式(SRAA1),還有一類僅支持0.4碼率模式(SRAA2)。SRAA具體排列如圖3所示。
當所有SRAA模塊均被使能,且SRAA0_prior,SRAA0,SRAA1設置為0.4碼率工作模式,編碼器可完成LDPC(3 048,7 492)編碼;當 SRAA0_prior,SRAA0,SRAA1使能,SRAA2 禁用, 且 SRAA0_prior,SRAA0,SRAA1 設置為0.6碼率工作模式,編碼器可完成LDPC(4 572,7 492)編碼;當 SRAA0_prior,SRAA0 使能,SRAA1,SRAA2 禁用,且SRAA0_prior,SRAA0設置為0.8碼率工作模式,編碼器可完成 LDPC(6 096,7 492)編碼。

圖3 SRAA并行計算陣列
在35組SRAA模塊中,SRAA0_prior處于核心地位,信息比特輸入、生成矩陣子塊生成多項式讀取、校驗子塊計算、SRAA狀態更新及輸出等功能均由該模塊完成。其余從SRAA模塊只需配合SRAA0_prior輸出時序信號進行校驗比特計算即可。
4)gbase_data模塊
gbase_data模塊用于存儲LDPC碼生成矩陣子塊生成多項式,每個生成多項式位寬為127 bit。3種碼率下的數據均需存儲,0.4 FEC碼率下對應24×35=840個G矩陣生成多項式;0.6 FEC碼率下對應36×23=828個G矩陣生成多項式;0.8 FEC碼率下對應48×11=528個G矩陣生成多項式。
gbase_data模塊與SRAA模塊一一對應,因此共需要35組gbase_data模塊,其中前面11組需要存儲所有3種碼率下的G矩陣子塊列生成多項式,深度為24+36+48=108;中間12組深度為24+36=60;最后12組深度為24。均由ROM構建,依外部碼率信號不同,Gbase_data模塊可自動輸出對應碼率下的生成多項式數據。
5)output_code模塊
校驗比特計算完畢后,由output_code模塊完成碼字輸出,首先輸出校驗比特數據(去除前面5個校驗位),待校驗比特串行輸出完畢后,再讀取sbit_FIFO中的信息比特數據,也以串行模式輸出,二者配合構成完整的7 488 bit FEC碼字,為減少輸出數據毛刺現象,在輸出編碼數據時增加了一級寄存器。
6)main_control模塊
main_control模塊主要控制各模塊的使能、禁用、FIFO數據清零,以及根據碼率不同確定SRAA工作模式。
采用RTL級Verilog HDL代碼編寫整個設計,實現平臺為EP2S15,在Quartus II 7.2下成功完成了綜合及布局布線,布線后最高工作頻率可達182.82 MHz,已遠超過DTMB標準的時鐘要求。該編碼器布線后具體資源占用情況如表1所示,與現有同類設計相比,節省了近20%的硬件資源[7]。

表1 譯碼器占用資源統計
DTMB標準中采用的是QC-LDPC碼,對應生成矩陣具有準循環移位特性,因此可直接采用生成矩陣完成LDPC編碼,編碼器中只需存儲3種碼率下的LDPC碼生成矩陣子塊生成多項式即可,整個編碼器基于SRAA陣列結構,通過線性反饋移位寄存器來完成LDPC編碼,共占用4 699個ALUT,存儲資源占用為350 Kbit。該編碼器可以在45 MHz的工作時鐘下完成DTMB標準下的實時LDPC編碼,且支持所有3種LDPC碼率。
[1]GALLAGER R G.Low-density Parity-check Codes[J].IRE Trans.Inf.Theory, 1962,8(1):21-28.
[2]MACKAY D J C,NEAL R M.Near Shannon limit performance of low-density parity check codes[J].Electron.Lett., 1996,32(15):1645-1647.
[3]CHUNG S Y, FORNEY G D,RICHARDSON T J,URBANKE R.On the design of low-density parity check codes within 0.0045dB of the Shannon limit[J].IEEE Comm.Letters , 2001,15(2):58-60.
[4]楊知行.地面數字電視國家標準DTMB技術解讀[EB/OL].[2009-06-20].http://www.availink.com.cn/UserFiles/u12850461886 29250001668832814.pdf.
[5]ANDREWSK,DOLINARS,THORPEJ.Encoders for block-circulant LDPC codes[C]//International Symposium Proceedings on Information Theory.Adelaide , Australia:[s.n.].2005, 4(9):2300-2304.
[6]LI Zongwang, CHEN Lei, ZENG Lingqi, et al.Efficient encoding of quasi-cyclic Low-Density Parity-Check Codes[J].IEEE Trans.Comm., 2006,54(1):71-75.
[7]楊抒文,彭克武,潘長勇.DTMB發射機LDPC編碼器的設計與優化[J].電視技術,2008,32(7):4-5.