田瑞甫,劉 聚,鐘 鳴,張朝路,侯 俊
(上海航天電子技術(shù)研究所,上海 201109)
衛(wèi)星通信信號在傳輸過程中受衰減和噪聲干擾的影響會出現(xiàn)差錯,信道編碼技術(shù)作為保證信息可靠傳輸?shù)挠行侄伪粡V泛應用于衛(wèi)星通信系統(tǒng)[1-2]。LDPC最早由Gallager提出[3],經(jīng)Mackay等人進一步研究表明[4],LDPC碼的性能在置信傳播(Belief Propagation,BP)譯碼算法下可以接近香農(nóng)極限,且具有較低的誤碼平臺[5]。準循環(huán)LDPC(QC-LDPC)碼,因其校驗矩陣具有準循環(huán)性,可以采用簡單的移位寄存器實現(xiàn)具有線性復雜度的編譯碼,硬件復雜度大大降低,是CCSDS推薦的衛(wèi)星通信糾錯碼型之一[6]。
BP算法涉及較大動態(tài)范圍取值的非線性函數(shù)的計算,不易于硬件實現(xiàn)[7]。因此,實際應用中通常對BP譯碼算法進行簡化,MMSA被認為是在譯碼性能和實現(xiàn)復雜度間取得較好平衡的一種算法[8-9]。MMSA算法在譯碼處理過程中,所需主時鐘高于輸入數(shù)據(jù)伴隨時鐘,如果主時鐘由輸入數(shù)據(jù)伴隨時鐘倍頻后得到,需要通過硬件鎖相環(huán)實現(xiàn),對于不同輸入數(shù)據(jù)速率的譯碼運算往往需要復雜硬件邏輯和時鐘切換邏輯[10-11]。
根據(jù)型號任務需求,設計的LDPC譯碼器采用MMSA譯碼算法實現(xiàn)LDPC譯碼功能,并在此基礎(chǔ)上通過對輸入數(shù)據(jù)加填充幀和輸出數(shù)據(jù)伴隨有效性標記位方式,實現(xiàn)了單一主時鐘處理多種速率數(shù)據(jù)的譯碼運算。
MMSA譯碼過程是不斷迭代的消息傳遞過程,一般包含4個步驟[12-13]:
① 初始化。設定最大迭代次數(shù),并對每個變量點賦予由信道得到的LLR,作為變量點的內(nèi)信息。
(1)
式中,Pn為第n個變量節(jié)點的信道先驗信息。
② 第t次迭代,變量節(jié)點到校驗節(jié)點的傳遞信息。
(2)
③ 第t次迭代,校驗節(jié)點到變量節(jié)點的信息傳遞。
(3)
迭代若干次后,若滿足最大迭代次數(shù),計算后驗概率并判決,否則重復步驟②和步驟③。
④ 計算變量節(jié)點的后驗概率并判決輸出。
每個變量節(jié)點輸出的后驗概率為:
(4)
根據(jù)以下規(guī)則對每一個比特進行判決:
(5)
式中,最大后驗概率L(post)(un)為變量節(jié)點n的外信息與節(jié)點n的初始似然比信息之和。
QC-LDPC碼的譯碼器結(jié)構(gòu)主要有3種[14-15]:
① 串行譯碼:通過重復使用一個CFU和VFU運算單元來完成所有行(列)運算,占用資源最少,但需要很多個時鐘周期才能完成一次完整的行(列)更新。
② 全并行結(jié)構(gòu):通過為每一行(列)配置一個運算單元,并使所有的運算單元并行工作來提高運算速度,最少只需要2個時鐘周期就可以完成一次迭代運算,但是需要消耗很多硬件資源,芯片難以支持。
③ 半并行結(jié)構(gòu):利用QC-LDPC校驗矩陣準循環(huán)的特點,可以使用半并行結(jié)構(gòu),將校驗矩陣劃分成若干個子塊,每個子塊的節(jié)點映射成一個硬件處理單元,每次迭代過程中通過重復一個子塊的校驗節(jié)點與變量節(jié)點運算單元來計算該子塊校驗節(jié)點與變量節(jié)點的外信息,所有節(jié)點的信息更新依次由這一個子塊節(jié)點處理單元來完成,這種結(jié)構(gòu)能夠獲得串行和并行的折中。
本文設計基于CCSDS標準(8176,7154)的縮短LDPC碼譯碼器,采用部分并行譯碼結(jié)構(gòu),根據(jù)H矩陣特點,使用2個校驗節(jié)點運算單元,16個變量節(jié)點運算單元同時運算,即行、列更新運算的并行度分別是2,16,這樣的結(jié)構(gòu)需要511×2或者1 022個時鐘周期才能完成一次迭代運算,數(shù)據(jù)吞吐量[13]為:
(6)
式中,dnum為信息比特數(shù);fmax為譯碼器的工作時鐘頻率;nc為一次迭代所需周期數(shù);Niter為譯碼器的迭代次數(shù),如果時鐘工作頻率為100 MHz,則譯碼器的吞吐量等于70 Mbps。為簡化時鐘處理邏輯,采用數(shù)據(jù)吞吐率為0.5,即100 MHz主時鐘處理數(shù)據(jù)速率50 Mbps。
譯碼器結(jié)構(gòu)如圖1所示。
輸入數(shù)據(jù)處理模塊對接收各速率數(shù)據(jù)做幀同步檢測、跨時鐘域處理和填充空幀。由伴隨時鐘將數(shù)據(jù)送入FIFO,同時對輸入數(shù)據(jù)做幀格式檢測,輸入數(shù)據(jù)格式錯誤則對FIFO做復位處理,格式正確數(shù)據(jù)送入后續(xù)處理模塊。本地時鐘讀取FIFO數(shù)據(jù)時根據(jù)FIFO的空滿狀態(tài)添加空幀,以連續(xù)數(shù)據(jù)形式送入后續(xù)譯碼模塊,并將數(shù)據(jù)是否有效狀態(tài)量Flag送入輸出數(shù)據(jù)處理模塊。
圖1 譯碼器結(jié)構(gòu)
輸出數(shù)據(jù)處理模塊根據(jù)式(4)和式(5)對完成迭代譯碼后的數(shù)據(jù)硬判決后輸出,并根據(jù)接收接口處理模塊中FIFO讀取數(shù)據(jù)的有效性,對輸出數(shù)據(jù)有效性做標定。
輸入數(shù)據(jù)處理模塊填充幀處理單元狀態(tài)轉(zhuǎn)移如圖2所示,用于FIFO數(shù)據(jù)讀取狀態(tài)控制。
圖2 填充幀處理單元狀態(tài)轉(zhuǎn)移示意
根據(jù)型號任務需求,為適應不同衛(wèi)星通信工作模式,需要同一譯碼器完成多種速率LDPC譯碼任務。為解決不同速率時復雜時鐘切換邏輯問題,也為后續(xù)更多速率譯碼留有升級空間,采用了單一主時鐘加填充幀的處理模式。當輸入數(shù)據(jù)速率低于處理主時鐘時,添加空幀使核心譯碼模塊處于固定速率連續(xù)工作狀態(tài),不需要時鐘切換。
輸入數(shù)據(jù)處理模塊FIFO的讀取時鐘固定為50 MHz,讀取端根據(jù)設置FIFO的滿/空標記讀取或添加填充幀,共3個狀態(tài):初始狀態(tài)、讀FIFO數(shù)據(jù)和填充空數(shù)據(jù),狀態(tài)標記由Sta表示(Sta=10表示FIFO的滿狀態(tài)標記為“1”,空狀態(tài)標記為“0”)。
FIFO的讀取標記經(jīng)延時后送至輸出數(shù)據(jù)處理模塊,作為數(shù)據(jù)有效性標記位伴隨輸出(以高電平表示該幀數(shù)據(jù)有效,低電平表示該幀數(shù)據(jù)無效)。后續(xù)數(shù)據(jù)處理單機根據(jù)伴隨標記位狀態(tài)讀取數(shù)據(jù)。
迭代譯碼模塊中變量節(jié)點單元結(jié)構(gòu)如圖3所示[13],用于實現(xiàn)變量節(jié)點數(shù)據(jù)更新。
變量節(jié)點更新過程又稱為垂直運算,主要實現(xiàn)式(2)內(nèi)容,作用包括2部分:一部分是更新變量節(jié)點消息,送至迭代信息存儲器用于給校驗節(jié)點進行下一次迭代;另一部分(vout)是更新后驗概率消息,該消息主要用于硬判決。
變量節(jié)點單元工作流程為:從每個信道初始信息存儲器中讀出一個信道似然比(LLR)信息。同時,根據(jù)地址從4個迭代信息存儲器中讀出4個校驗節(jié)點信息。變量節(jié)點單元通過對由迭代信息存儲器中讀出的校驗節(jié)點信息和LLR信息進行垂直運算,得到新的變量節(jié)點信息。最后,將新的變量節(jié)點信息按讀地址寫回到各迭代信息存儲器中,完成置信度信息更新。完成一次迭代的垂直運算需要對這個過程重復10次。
垂直運算過程采用5級流水線方式,完成算法中變量節(jié)點到校驗節(jié)點的計算,其中式(2)的factor取0.75[8],只要進行移位相加就能實現(xiàn)。
圖3 變量節(jié)點單元結(jié)構(gòu)
圖3中的in0,in1,in2,in3是在Tanner圖中與一個變量節(jié)點相連的4個校驗節(jié)點更新后的信息。IntrinsicValue是變量節(jié)點的初始化信息。out0~out3是4個變量節(jié)點進行更新之后的信息。vout是內(nèi)信息和4個輸入信息的和,通過檢查該信息的最高位來判決。
迭代譯碼模塊中校驗節(jié)點單元結(jié)構(gòu)如圖4所示[12],用于實現(xiàn)校驗節(jié)點數(shù)據(jù)更新。
圖4 校驗節(jié)點單元結(jié)構(gòu)
校驗節(jié)點處理單元主要實現(xiàn)式(3),用來完成校驗節(jié)點消息的更新,其更新過程稱為水平運算,是迭代過程的一部分,進行的操作主要是使譯碼器對每個行塊的第i行做行置信度信息更新運算。
其工作流程為:每個校驗節(jié)點從32個迭代信息存儲器中讀出32個變量節(jié)點消息。由于32個存儲器的讀地址均為i,因此這一步操作只需要計數(shù)器就能實現(xiàn)信息的讀取。然后,32個變量節(jié)點信息讀出后直接送給該校驗節(jié)點單元進行信息更新運算,得到新的校驗節(jié)點信息。最后,將新的校驗節(jié)點信息按讀地址寫回到各迭代信息存儲器中,完成校驗節(jié)點信息更新。完成一次迭代的水平運算,即校驗節(jié)點信息更新運算,需要對這個過程重復10次。
在修正最小和算法中,校驗節(jié)點處理模塊需要完成的工作是求出與一個校驗節(jié)點相連接各變量節(jié)點數(shù)據(jù)(除自身外)絕對值的最小值。如果當前節(jié)點的值為最小值,則輸出為其他所有值中的最小值,即次最小值。求各數(shù)據(jù)符號值的乘積,將所得最小值與符號值合并成新數(shù)據(jù)。
圖4所示結(jié)構(gòu)圖主要實現(xiàn)功能:
(7)
各符號的乘積可以通過查找表的方式得到。
迭代譯碼模塊中控制單元流程如圖5所示,用于各單元工作協(xié)調(diào)控制。
圖5 控制單元流程
迭代譯碼模塊的工作流程[16]如下:
① 總狀態(tài)機控制初始信息存儲單元的一組RAM,該組RAM寫使能有效,接收來自信道的信息,當一幀數(shù)據(jù)全部存儲后,切換到另一組RAM存儲下一幀數(shù)據(jù),同時返還給總控一個信號。
② 控制單元在一幀數(shù)據(jù)存儲結(jié)束后,使能VFU模塊,并使能初始化存儲單元讀取功能,進行變量節(jié)點更新運算,運算結(jié)果寫入外信息存儲模塊。
③ VFU運算完成后,VFU單元給總控發(fā)送結(jié)束信號,總控屏蔽VFU和初始化存儲單元,啟動CFU的運算。CFU從外信息存儲單元讀取信息,并將運算結(jié)果寫入、讀出地址相同位置中。
④ CFU運算結(jié)束后,CFU單元給總控發(fā)送結(jié)束信號,總控屏蔽CFU單元,啟動VFU單元和初始化存儲單元,VFU單元和CFU單元交替運算。
⑤ 經(jīng)過10次迭代運算后,進行硬判決,對判決數(shù)據(jù)做有效性標記并輸出,開始下一幀數(shù)據(jù)迭代譯碼。
基于前文設計思想,采用VHDL語言編寫,ISE14.7編譯環(huán)境,在Xilinx公司Virtex-4系列FPGA芯片XC4VSX55上實現(xiàn)了CCSDS規(guī)定的縮短(8176,7154)準循環(huán)LDPC譯碼器。譯碼器的邏輯資源和存儲資源利用情況如表1所示。
表1 譯碼器資源利用率
資源類別數(shù)目占總資源百分比/%Slice Flip-Flops14 25429Slice LUT15 47031Bonded IOBs112Block RAM/FIFO13140
譯碼器設計實現(xiàn)后,需要對其進行測試,以驗證其糾錯性能[17]。譯碼器測試原理如圖6所示。
圖6 譯碼器測試原理
測試步驟如下:
① 碼源產(chǎn)生PN15偽隨機數(shù)據(jù),按CCSDS標準組幀;
② 在數(shù)傳發(fā)射機內(nèi)進行LDPC編碼和QPSK調(diào)制;
③ 射頻信號通過下變頻器到中頻信號,并在中頻加噪聲;
④ 在接收機內(nèi)進行QPSK解調(diào)[18],并標定輸出Eb/N0值;
⑤ LDPC譯碼,分別比對譯碼前后對應誤碼率。
分別在50,30,20,10,2,1 Mbps速率下進行了測試,不同速率下譯碼性能測試結(jié)果一致,如表2所示。
表2 譯碼性能測試結(jié)果
解調(diào)后(Eb/N0)/dB譯碼前BER/bit譯碼后BER/bit12.40011.91.56?10-70102.12?10-505.85.82?10-305.48.14?10-31.26?10-7
測試結(jié)果顯示,設計的譯碼器在BER為1×10-7量級有6.5 dB增益。
以航天型號為基礎(chǔ),采用MMSA譯碼算法對CCSDS標準推薦的縮短LDPC碼實現(xiàn)譯碼功能的基礎(chǔ)上,通過對輸入數(shù)據(jù)加填充幀和輸出數(shù)據(jù)伴隨有效性標記位的方式,實現(xiàn)單一主時鐘處理不同速率數(shù)據(jù)功能。通過對輸入數(shù)據(jù)格式判斷和復位處理相結(jié)合,使譯碼器具有接收錯誤數(shù)據(jù)后自恢復功能。實驗結(jié)果表明,譯碼器在BER為1×10-7量級有6.5 dB增益,且在不高于50 Mbps速率條件下可以速率自適應。