摘 要: 對空間數(shù)據(jù)系統(tǒng)委員會(CCSDS)推薦的QC-LDPC碼進行了研究,給出了改進的分層譯碼算法?;诟倪M的分層譯碼算法設計部分并行結構QC-LDPC譯碼器,譯碼速率較快,適合應用需求,并通過仿真驗證所設計的譯碼器的性能。
關鍵詞: LDPC碼;準循環(huán);分層譯碼算法;部分并行結構
LDPC碼[1](Low-Density Parity-Check Code)已經(jīng)被證明是實用的好碼,因其優(yōu)異的糾錯性能和高效的迭代譯碼算法而具有廣闊的應用前景。QC-LDPC碼(Quasi-Cyclic LDPC Code)是根據(jù)系統(tǒng)化構造方法構造的一類非常重要的LDPC碼,目前已經(jīng)成為LDPC碼硬件實現(xiàn)研究的熱點??臻g數(shù)據(jù)系統(tǒng)委員會(CCSDS)推薦了多種碼長和碼率的QC-LDPC碼作為衛(wèi)星通信和深空通信的信道編碼標準[2]。
為滿足不同碼率的需要,同時考慮譯碼器應當具有低復雜度和低功耗,本文設計了一種基于改進分層譯碼算法的譯碼器結構,以滿足實際需要。
其中每個子矩陣Ai,j都是一個z×z的循環(huán)方陣,此方陣只可能是零矩陣、單位陣或者單位循環(huán)移位后的矩陣。
置信傳播算法[3-4]BP(Belief-propagation decoding algorithm)是很重要的一類基于LDPC碼的譯碼算法,因其具有嚴格的數(shù)學結構和良好的性能,可以對譯碼算法的性能做定量分析。修正最小和(MMSP)譯碼算法[5]實際采用的是BP算法機制,雖然具有較低復雜度并保持良好的性能,但在實際應用中會占用大量硬件資源,且譯碼延時較長?;贠MS(Offset Min-Sum)的分層譯碼算法[6]能保證信息馬上得到傳遞,從而改進信息的收斂性。
2 譯碼器的FPGA實現(xiàn)
2.1 譯碼器結構總體設計
譯碼器有三種不同的譯碼結構:全并行結構、串行結構和部分并行結構。部分并行結構避免了全并行結構資源消耗過大、硬件實現(xiàn)難度大的缺點,同時譯碼速率比串行結構快得多,十分適于實際應用。然而,部分并行結構對校驗矩陣中非零元素的分布有特定的要求,而現(xiàn)有的大多數(shù)LDPC碼其校驗矩陣中“l”的分布具有隨機性,因此譯碼器采用部分并行結構十分困難。
QC-LDPC校驗矩陣H的每行校驗子矩陣中所有行對應的校驗節(jié)點自然地被劃分為一個校驗節(jié)點集合,而且任意兩個集合Li和Lj,滿足Li∩Lj=?準。集合Li中的任意兩個校驗節(jié)點Ci、Cj不與相同的變量節(jié)點相連,因此可以并行地對每一集合中的校驗節(jié)點Ci進行更新。
為此,借鑒全并行結構的思想,對串形結構進行修改,增加譯碼器中的并行節(jié)點更新模塊(NUU)個數(shù),得到的部分并行結構共有b個NUU單元。b為循環(huán)子矩陣的行數(shù)。
QC-LDPC并行譯碼器模塊主要由以下幾個模塊構成:輸入緩沖模塊、控制模塊、節(jié)點更新模塊(NUU)、數(shù)據(jù)存儲模塊、數(shù)據(jù)重構模塊、校驗模塊和譯碼輸出緩沖模塊,如圖1所示。其中,控制模塊分別產(chǎn)生各子模塊的使能,它是譯碼器的核心控制模塊,控制著迭代的正確進行;NUU為譯碼器的核心運算模塊;數(shù)據(jù)緩沖模塊用來判斷譯碼器速率是否大于進入譯碼器的數(shù)據(jù)速率;數(shù)據(jù)存儲模塊完成中間數(shù)據(jù)的存儲;數(shù)據(jù)重構模塊將變量節(jié)點更新的輸出數(shù)據(jù)按照校驗節(jié)點運算的取數(shù)順序重新排列;校驗模塊用來校驗判決出的碼字是否滿足校驗矩陣。
2.2 節(jié)點更新模塊(NUU)
本文實現(xiàn)的譯碼器采用基于修正因子的分層譯碼算法,每一層的校驗節(jié)點處理完成以后,信息立即被用來更新變量節(jié)點。它的結果被用來提供給下一層的校驗節(jié)點處理。因而校驗節(jié)點處理模塊和變量節(jié)點處理模塊可以合并成同一個模塊,簡稱節(jié)點更新模塊NUU(Node Update Unit)。
本文只研究信息位k=1 024的QC-LDPC碼,其結構如表1所示。
圖2所示的模塊是每層b路并行處理單元中的一個,b為校驗矩陣H的循環(huán)子矩陣的行數(shù)。為了降低部分并行LDPC碼譯碼器中連接的復雜度,節(jié)點更新模塊(NUU)中節(jié)點更新的信息都采用數(shù)據(jù)串行方法。變量節(jié)點的度決定了校驗節(jié)點單元一次處理的節(jié)點數(shù),將校驗節(jié)點單元處理的節(jié)點數(shù)設為節(jié)點變量的最大值,可以通過邏輯選通來適應不同的碼率。
2.3 數(shù)據(jù)存儲模塊
本文對接收到的原始數(shù)據(jù)和計算過程產(chǎn)生的中間數(shù)據(jù)都采用了8 bit整數(shù)量化,其中1 bit為符號位,7 bit為數(shù)據(jù)位。將譯碼開始時外部輸入的數(shù)據(jù)存入判決信息存儲器時,將接收的前b個二進制數(shù)據(jù)的最高位依次級聯(lián)為一個b bit的數(shù)據(jù),存入判決信息存儲器1,地址為0;將前b個數(shù)據(jù)的次高位級聯(lián)為一個b bit的數(shù)據(jù),存入判決信息存儲器2;然后依次將b個數(shù)據(jù)剩下的相同位置的數(shù)據(jù)級聯(lián),存入判決信息存儲器2:7,地址為0;將接收的后b個數(shù)據(jù)按上述同樣的方式存入判決信息存儲器1:7,地址為1;當待譯碼字的所有數(shù)據(jù)都存入了判決信息存儲器后,就開始譯碼。圖3為數(shù)據(jù)存儲模塊框圖。