張恒皞,叢惠平,趙旦峰
1.哈爾濱工程大學(xué)信息與通信工程學(xué)院,黑龍江哈爾濱150001
2.中國人民解放軍91033部隊,山東青島266071
移動通信系統(tǒng)具有可靠和高效的特點,對于具有時變特性的無線信道,需要能在不同信道條件下進(jìn)行可靠數(shù)據(jù)傳輸?shù)膫鬏敺桨?。低密度奇偶校?low density parity check,LDPC)碼是一種能夠逼近香農(nóng)信道容量極限的信道編碼[1],已經(jīng)被廣泛應(yīng)用于衛(wèi)星電視通信[2]、移動無線通信[3]、無線局域網(wǎng)[4]等領(lǐng)域中。空間耦合LDPC(SC-LDPC)碼是一種源于LDPC卷積碼的新型信道編碼[5],理論上被證明可以達(dá)到一般二元無記憶對稱信道的信道容量[6]。相比于LDPC碼,空間耦合LDPC碼在特殊的耦合結(jié)構(gòu)下具有優(yōu)異的性能,在B5G/6G 移動通信系統(tǒng)中具有廣闊的應(yīng)用前景。碼率兼容LDPC碼是指一組信息位長度相同、碼率不同的LDPC碼,該組LDPC碼在不同的碼率下都有較好的性能,并能夠使用同一套編譯碼器實現(xiàn)[7]。文獻(xiàn)[8]通過對特殊的三邊型LDPC校驗矩陣進(jìn)行擴(kuò)展和組合,實現(xiàn)碼率兼容空間耦合LDPC 碼,理論上可以實現(xiàn)任意碼率,但對校驗矩陣要求較高,在給定的短耦合長度下性能并不理想。文獻(xiàn)[9]通過修改LDPC碼的校驗矩陣結(jié)構(gòu),在耦合邊緣處對矩陣的連接進(jìn)行不同的組合來現(xiàn)碼率兼容,可以實現(xiàn)遞歸編碼。文獻(xiàn)[10]采用打孔方式,將隨機(jī)打孔的碼率兼容LDPC碼進(jìn)行耦合,耦合長度大時譯碼性能較好,但由于打孔操作是隨機(jī)的,具有不確定性,并且長耦合長度對資源的占用較大。文獻(xiàn)[11]提出了一種基于重復(fù)累加擴(kuò)展構(gòu)造LDPC碼的方案,并對其進(jìn)行耦合,通過對校驗矩陣的變量節(jié)點進(jìn)行擴(kuò)展和耦合實現(xiàn)碼率兼容,復(fù)雜度較高。
針對以上情況,本文設(shè)計并實現(xiàn)了一種碼率兼容的空間耦合LDPC碼方案,并基于FPGA 進(jìn)行驗證。通過構(gòu)造碼率兼容的基矩陣進(jìn)行耦合,實現(xiàn)碼率兼容的空間耦合LDPC碼。編碼器直接使用校驗矩陣進(jìn)行系統(tǒng)編碼,譯碼器采用分層最小和譯碼算法,在保證性能的同時可以減少FPGA中資源的占用。
5G標(biāo)準(zhǔn)中增強(qiáng)移動寬帶(enhanced mobile broadband,eMBB)場景下使用的LDPC碼,采用類Raptor 的擴(kuò)展型碼率兼容矩陣結(jié)構(gòu),在可以使用校驗矩陣進(jìn)行系統(tǒng)編碼的同時實現(xiàn)碼率兼容[14],類Raptor 型LDPC碼校驗矩陣結(jié)構(gòu)如圖1所示。
圖1 類Raptor 型LDPC碼矩陣結(jié)構(gòu)
圖中,子矩陣A與子矩陣E是由循環(huán)移位矩陣組成的矩陣陣列,子矩陣O為全零矩陣,子矩陣I為單位矩陣。矩陣A對應(yīng)信息位;矩陣D對應(yīng)校驗位,具有雙對角線結(jié)構(gòu),用于遞歸編碼;核矩陣[A D]對 應(yīng)高碼率部分;矩陣[E I]對應(yīng)擴(kuò)展型碼率兼容的擴(kuò)展位;單位陣I對應(yīng)度為1的校驗位。通過高碼率碼與單校驗碼串行級聯(lián),實現(xiàn)從高碼率到低碼率的碼率兼容。由于子矩陣D與子矩陣I分別為雙對角線和單對角線結(jié)構(gòu),可以利用校驗矩陣進(jìn)行遞歸編碼,無需生成矩陣,編碼過程描述如下:
式中上標(biāo)代表矩陣的循環(huán)移位系數(shù),無上標(biāo)表示矩陣的循環(huán)移位系數(shù)為0。由于二元LDPC碼的加法為模二加,將式(6)右側(cè)方程等號兩邊相加,有
通過式(7)可以求出v0,將其代入式(6),即可求出v1、v2、v3。由于子矩陣I是單對角線矩陣,利用信息位u和計算出的v,計算其余校驗比特為
在部分校驗子前項編碼算法中,式(4)說明了如何利用耦合基矩陣H0計算部分校驗子前項,因此,耦合基矩陣的設(shè)計對空間耦合LDPC碼的部分校驗子編碼算法實現(xiàn)快速遞歸編碼具有重要意義?;仃嘓0若能利用信息位對應(yīng)部分和校驗位對應(yīng)部分進(jìn)行遞歸編碼,則可快速計算出部分校驗子前項,實現(xiàn)SC-LDPC碼的遞歸編碼。因此,本設(shè)計參考類Raptor 校驗矩陣結(jié)構(gòu),構(gòu)造可遞歸編碼的碼率兼容SC-LDPC碼的基矩陣H0,如圖2所示。
圖2 碼率兼容基矩陣結(jié)構(gòu)
基矩陣H0結(jié)構(gòu)圖中,每一個正方形代表大小為32 bit×32 bit 的循環(huán)移位單位矩陣,信息位長為192 bit。圖中豎線陰影部分對應(yīng)類Raptor 矩陣中子矩陣A的信息位;斜線陰影部分對應(yīng)子矩陣D的校驗位;黑色陰影部分對應(yīng)子矩陣E;灰色陰影部分對應(yīng)子矩陣I的校驗位;空白部分對應(yīng)全零矩陣。圖中小矩形部分代表高碼率矩陣,大小為128 bit×320 bit,碼率為3/5;通過對此高碼率矩陣擴(kuò)展到大矩形部分,構(gòu)成大小為192 bit×384 bit、碼率為1/2的矩陣;再繼續(xù)擴(kuò)展,形成最終大小為256 bit×448 bit、碼率為3/7的矩陣,至此整個基矩陣H0構(gòu)造完畢。基矩陣能夠使用校驗矩陣進(jìn)行系統(tǒng)編碼,適用于SC-LDPC碼的部分校驗子編碼方案;同時無需生成矩陣,有效減少了硬件資源占用。在本設(shè)計中,為了使校驗矩陣更加稀疏,SCLDPC碼校驗矩陣的耦合長度設(shè)為最小,即約束長度m=1,校驗矩陣結(jié)構(gòu)如下:
式中H1為耦合約束關(guān)系矩陣,大小與基矩陣H0相同,通過H0與H1進(jìn)行耦合,構(gòu)造出SC-LDPC碼的校驗矩陣。
利用5G 標(biāo)準(zhǔn)中的參數(shù)構(gòu)造對應(yīng)碼率的類Raptor 結(jié)構(gòu)校驗矩陣,使用BP 譯碼算法與本文設(shè)計的SC-LDPC碼校驗矩陣進(jìn)行性能仿真對比,在相同信息位長、最大譯碼迭代次數(shù)為20次、不同碼率的情況下,誤碼率性能如圖3所示。圖中Eb/N0代表歸一化信噪比,BER(bit error rate)代表誤碼率??梢钥闯霰疚乃鶚?gòu)造的碼率兼容SCLDPC 碼校驗矩陣具有更好的譯碼性能,并且在BER=10-6時沒有出現(xiàn)明顯的錯誤平層。
圖3 誤碼率性能比較
根據(jù)部分校驗子前項編碼算法,編碼器主要由控制模塊、部分校驗子前項存儲模塊、碼字計算模塊、輸出碼字存儲模塊組成。編碼器結(jié)構(gòu)如圖4所示。
圖4 碼率兼容空間耦合LDPC 碼編碼器結(jié)構(gòu)
當(dāng)需要編碼的碼字信息位輸入到編碼器時,編碼器將輸入的信息位存儲至寄存器中。當(dāng)信息位接收完畢,編碼器開始進(jìn)行編碼。編碼器的核心模塊為控制模塊和碼字計算模塊。
控制模塊對編碼過程進(jìn)行控制。當(dāng)碼字信息位和碼率指示信號輸入時,控制模塊負(fù)責(zé)對這些信息進(jìn)行接收;當(dāng)信息接收完畢后,控制模塊根據(jù)碼率指示信號,對不同的碼率情況進(jìn)行編碼運(yùn)算。校驗矩陣為準(zhǔn)循環(huán)移位矩陣,輸入的信息位與校驗矩陣相乘等價于對信息位進(jìn)行循環(huán)移位,因此編碼器根據(jù)輸入的碼率控制信號來確定不同循環(huán)移位單元的計算使能,實現(xiàn)SC-LDPC碼在不同碼率下的編碼。
圖5 編碼器碼字計算模塊時序仿真
將編碼器通過Verilog 硬件描述語言實現(xiàn),使用Modelsim 10.7軟件進(jìn)行時序仿真,如圖6所示。在Xilinx xc7k325tff900-2芯片上進(jìn)行實現(xiàn),編碼器資源占用如表1所示。
圖6 編碼器輸出結(jié)果時序仿真
表1 編碼器資源占用表
由于編碼器主要采用循環(huán)移位和異或運(yùn)算進(jìn)行編碼計算,計算產(chǎn)生的中間數(shù)據(jù)存儲在循環(huán)移位寄存器中,只有部分校驗子前項需要在運(yùn)算前進(jìn)行讀取、在編碼完畢后需要進(jìn)行存儲,因此需要少量的RAM 資源來存儲部分校驗子前項,編碼器整體資源占用較低。
由于本文構(gòu)造的SC-LDPC 碼校驗矩陣屬于準(zhǔn)循環(huán)校驗矩陣,從硬件實現(xiàn)的角度考慮,分層譯碼算法是一種十分適用于準(zhǔn)循環(huán)結(jié)構(gòu)校驗矩陣的譯碼算法。一方面,分層譯碼將整個校驗矩陣分成多個層,優(yōu)化了層間的消息傳遞,使迭代譯碼收斂速度更快;另一方面,分層譯碼只需要存儲校驗節(jié)點信息,無需存儲變量節(jié)點信息,減少了資源占用[15]。假設(shè)校驗矩陣的大小為M×N,將校驗矩陣的M個校驗方程分為T組,每組包括M/T行,分層譯碼算法的具體步驟描述如下:
1)初始化。
3)若伴隨式c?HT=0,則停止迭代,進(jìn)行譯碼輸出;否則m=m+1,然后轉(zhuǎn)至步驟4)。
4)若m>T,則l=l+1,m=m+1。如果l小于最大迭代次數(shù),則調(diào)至步驟2)繼續(xù)進(jìn)行迭代譯碼;否則終止迭代。
在SC-LDPC碼的其他譯碼方案中,文獻(xiàn)[16]提出了一種針對SC-LDPC碼的特殊結(jié)構(gòu)——修改優(yōu)化變量節(jié)點信息傳遞規(guī)則的譯碼方式,充分利用變量節(jié)點信息進(jìn)行更新運(yùn)算;文獻(xiàn)[17]提出了一種利用譯碼后驗概率信息進(jìn)行節(jié)點更新的譯碼方式,增加了可靠性。在信息位長192 bit,碼率為1/2,譯碼迭代次數(shù)為20次的情況下,文獻(xiàn)[16]、[17]以及本文提出的分層譯碼與BP譯碼算法性能如圖7所示。
可以看出,本文采用的分層譯碼方式與文獻(xiàn)[16]及[17]提出的譯碼算法相比,在短信息位長時譯碼性能較好,沒有明顯的錯誤平層,并且與BP譯碼算法的性能接近;在硬件實現(xiàn)中,可以將變量節(jié)點更新單元和校驗節(jié)點更新單元合并,不需要存儲變量節(jié)點更新信息,節(jié)省硬件存儲資源占用。因此,選擇分層譯碼算法作為本文設(shè)計的SC-LDPC碼的譯碼算法方案。
圖7 本文譯碼方法與其他文獻(xiàn)譯碼方法性能仿真對比
根據(jù)分層最小和譯碼算法方案,結(jié)合SCLDPC 校驗矩陣,采用分層譯碼方式,譯碼器輸入數(shù)據(jù)采用6 bit 量化,最高位為符號位,中間3 位是整數(shù)位,最后2位為小數(shù)位。譯碼器結(jié)構(gòu)如圖8所示。
圖8 碼率兼容空間耦合LDPC碼譯碼器結(jié)構(gòu)
譯碼器主要由矩陣參數(shù)控制模塊、碼字似然比初始化模塊、譯碼迭代控制模塊、節(jié)點更新計算模塊、校驗節(jié)點概率信息存儲模塊、后驗概率信息存儲模塊組成。其中,碼字似然比初始化模塊、校驗節(jié)點概率信息存儲模塊與節(jié)點后驗概率信息存儲模塊是譯碼器中的信息存儲模塊,主要由RAM 組成,用于數(shù)據(jù)的寫入和讀?。痪仃噮?shù)控制模塊由存儲著矩陣信息的ROM 組成,存儲著矩陣的行列地址索引以及循環(huán)移位系數(shù)等參數(shù)。
譯碼迭代控制模塊采用狀態(tài)機(jī)實現(xiàn),共有6 個狀態(tài),狀態(tài)轉(zhuǎn)移圖如圖9所示。CLEAR 狀態(tài)負(fù)責(zé)將節(jié)點信息RAM 進(jìn)行初始化;DECODE 狀態(tài)讀取矩陣相關(guān)參數(shù),初始化譯碼器的控制信號;UPDATE 狀態(tài)進(jìn)行節(jié)點的信息更新;SAVE 狀態(tài)對更新后的節(jié)點信息進(jìn)行保存;OVER 狀態(tài)將譯碼結(jié)果輸出,輸出完畢后返回IDLE狀態(tài)。
圖9 譯碼器狀態(tài)轉(zhuǎn)移
節(jié)點更新計算模塊的主要功能是進(jìn)行變量節(jié)點的更新和校驗節(jié)點的信息更新。此模塊主要步驟分為有符號加減法運(yùn)算、符號整理運(yùn)算、取絕對值最小值運(yùn)算和乘法運(yùn)算。首先,讀取層存儲模塊中的上一層校驗節(jié)點信息以及上一次迭代產(chǎn)生的變量節(jié)點后驗概率信息,進(jìn)行相減后得到更新的變量節(jié)點信息。之后,進(jìn)行校驗節(jié)點信息的更新,主要分為符號位相乘(異或)、求絕對值的最小值和次小值、比較并取補(bǔ)碼值3個狀態(tài)。符號相乘和取模運(yùn)算是同時進(jìn)行的,輸入數(shù)據(jù)的最高位為符號位,將其進(jìn)行異或運(yùn)算,即符號相乘。求絕對值時,當(dāng)數(shù)據(jù)符號為正,截掉符號位,保留其他位;當(dāng)符號為負(fù),將其他位取反后加一。因為校驗矩陣的最大行重為8,所以求最小值和次小值運(yùn)算需要花費3個時鐘,首先將8個輸入數(shù)據(jù)兩兩比較,分為絕對值大的一組和小的一組;再將絕對值小的一組中的4個數(shù)據(jù)兩兩比較,分為絕對值大的一組和絕對值小的一組;絕對值小的一組中比較出最小值,剩下的數(shù)據(jù)比較出次小值,然后將比較得出的值取補(bǔ)碼,校驗節(jié)點信息更新完畢。最后將更新后的變量節(jié)點信息與校驗節(jié)點信息相加,得到更新后的變量節(jié)點后驗概率信息,分層譯碼中的一層譯碼結(jié)束,繼續(xù)進(jìn)行下一層譯碼。節(jié)點更新計算模塊時序仿真如圖10所示,結(jié)構(gòu)圖如圖11所示。
圖10 節(jié)點更新計算模塊時序仿真
將譯碼器通過Verilog 硬件描述語言實現(xiàn),使用Modelsim 10.7軟件進(jìn)行時序仿真,時序波形如圖12所示。在Xilinx xc7k325tff900-2芯片上進(jìn)行實現(xiàn),譯碼器資源占用如表2所示。
圖11 節(jié)點更新計算模塊結(jié)構(gòu)
圖12 譯碼器輸出波形時序
表2 譯碼器資源占用表
可以看出,譯碼器中的節(jié)點更新計算單元主要消耗LUT 資源,而后驗概率信息與校驗節(jié)點信息存儲模塊消耗了一部分RAM資源來進(jìn)行信息的存儲,譯碼器整體資源占用較低。對譯碼器進(jìn)行性能仿真,并與軟件仿真結(jié)果進(jìn)行對比,結(jié)果如圖13所示。可以看出FPGA 中的結(jié)果與軟件仿真的結(jié)果具有0.5 dB左右的差異,一方面是由于輸入的信噪比經(jīng)過量化輸入到譯碼器中,存在量化誤差;另一方面是由于最小和譯碼在迭代更新計算過程中并沒有進(jìn)行和積運(yùn)算,而是用取最小值作為近似導(dǎo)致的。本文所設(shè)計的3種碼率在歸一化信噪比為3.5 dB時FPGA 仿真的誤比特率都可以達(dá)到10-5量級,具有較好的譯碼性能。
圖13 BP 譯碼仿真與FPGA 測試性能對比
1)針對無線信道的時變特性,本文設(shè)計了一種碼率兼容的空間耦合LDPC碼,通過對高碼率的校驗矩陣進(jìn)行擴(kuò)展,能夠?qū)崿F(xiàn)3種不同碼率的碼率兼容,可以適應(yīng)不同信道條件下的需求。
2)本文基于FPGA 完成了碼率兼容空間耦合LDPC碼的編碼器和譯碼器的設(shè)計。編碼器和譯碼器根據(jù)特殊的校驗矩陣結(jié)構(gòu)實現(xiàn)碼率兼容,在保證編譯碼性能的同時,具有較低的資源占用和較好的性能,在實際工程應(yīng)用中具有一定參考價值,可以為B5G/6G移動通信系統(tǒng)提供可借鑒的傳輸編碼方案。