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