摘要:考慮到結構化非規(guī)則重復累積碼具有準循環(huán)的結構便于硬件實現(xiàn),采用了結構化非規(guī)則重復累積碼進行編碼器設計。準循環(huán)矩陣的構造采用了基于ACE約束的PEG填充構造方法。結合所用碼型的特點,設計出了簡單有效的編碼流程圖。譯碼方面,采用了分層修正最小和譯碼算法,并設計出了譯碼器結構。
關鍵詞:結構化非規(guī)則重復累積碼;分層修正最小和譯碼算法;編碼器結構;譯碼器結構
O 引言
重復累積碼(Repeat-Accumulate Codes)是由D.Divsalar等人于1998年提出的,作為LDPC碼與Turbo碼的一個子集,在譯碼方面它具有LDPC碼優(yōu)異的性能以及并行譯碼的優(yōu)勢,在編碼方面又同時具有Turbo碼線性復雜度的特點,因此受到廣泛關注。在實際應用方面,歐洲DVB-S2標準中的信道編碼部分采用了RA碼的技術。經(jīng)過近幾年的研究,重復累積碼有了一些新的發(fā)展,如非規(guī)則重復累積碼(IRA)、擴展重復累積碼(elRA)、累積重復累積碼(ARA)、結構化的非規(guī)則重復累積碼(S-IRA)等,這些碼對RA碼的誤碼性能、誤碼平層、編碼復雜度以及碼率的靈活性等方面進行了改善。
為了減少硬件實現(xiàn)的復雜度,提高編譯碼器的吞吐量,將校驗矩陣構造成準循環(huán)形式是一種普遍被采用的方法。因此,考慮到S-IRA碼具有準循環(huán)形式,本文采用了基于ACE約束的S-IRA碼進行編碼器設計,使用分層最小和譯碼算法進行譯碼器設計。
1 編碼器設計
1.1 RA碼校驗矩陣設計
RA碼編碼就是將信息位u中的每一位重復q次,經(jīng)過交織以后輸入傳輸函數(shù)為的累加器,經(jīng)過累加即得到校驗位p,完成編碼。RA碼可分為非系統(tǒng)碼和系統(tǒng)碼兩類,RA碼與IRA碼系統(tǒng)碼的校驗矩陣可以表示為H=[H1H2]。H1的列重為{db,t},行重為{dc,i}。H2具有差分形式:
由于H2的差分形式,可以直接使用校驗矩陣H進行編碼,為了降低編碼復雜度,將H1設計成準循環(huán)形式,即為結構化的IRA碼(S-IRA)。但如果將H1直接構造成準循環(huán)形式,H2的雙對角線形式會使構造出的校驗矩陣最小漢明距離太小,而先構造與H1相同大小的準循環(huán)矩陣P,再將P進行行交織得到H1則可以避免這個問題。
在設計校驗矩陣時,采用了中提出的基于近似環(huán)外信息度(Approximate Cycle Extrinsic Message Degree)約束的邊增長算法(PEG)來構造準循環(huán)矩陣P。
1.2 編碼器結構
編碼器最復雜的部分在于信息位u通過準循環(huán)矩陣PT,即進行uPT的運算。本文采用上海交通大學無線通信研究所LDPC小組提出的SRAA(shift-register-identity-matrix-ad-der-accumulator)結構進行uPT的運算。
假設準循環(huán)矩陣P的大小為M×Q行,K×Q列。其中Q×Q為P中循環(huán)置換矩陣和全零矩陣的大小。將信息序列u順序分成K段,每段長為Q比特,即u=(u1,u2,…,uK),其中。將準循環(huán)矩陣P寫作:
其中Pi,j為P中的循環(huán)置換矩陣或者全零矩陣。在硬件中存儲P時,只需存儲每個Pi,j第一列“l(fā)”元素的位置,當Pi,j為全零矩陣時,存儲的位置為O。
假設v=uPT,v=(v1,v2,…,vM),其中,有下式成立:
由(2)式以及(3)式,計算vi的電路如下:
圖中的第i個RAM儲存對應循環(huán)置換矩陣的參數(shù),即的第一行“1”元素的位置,因此每個RAM存儲K個“1”元素位置。編碼時,每輸入Q個信息位,SRAA電路便從RAM中讀入循環(huán)置換矩陣的參數(shù)。
交織器使用一段RAM存儲交織順序,并按存儲的順序讀出SRAA中運算結果v,即完成交織。
基于上面的SRAA計算電路本文提出了圖5所示的編碼器結構。
為了使編碼連續(xù)進行,在交織器之后以及編碼器輸出端使用乒乓RAM,如圖5中的RAMl和RAM2,以及RAM3和編碼流程可分為三步:
Stagel:串行輸入信息u,每個輸入的信息ui分成兩路,一路依次存入Bufferl緩存器,另一路輸入uPT計算電路,計算結果v保存在SRAA電路的寄存器中。
Stage2:從Buffer2中將信息位依次讀至RAMl、RAM2,Bufferl中的信息依次讀至Buffer2,而Bufferl中繼續(xù)存入新的信息位。交織器將uPT計算電路的計算結果按交織順序讀至累加器,并將產(chǎn)生的校驗位輸入RAM3、RAM4。
Stage3:將RAMl或RAM2中的信息位u以及RAM3或RAM4中的校驗位p依次讀出,完成碼字的串行輸出。
2 譯碼器設計
譯碼方面采用了LMMSA算法。為了便于硬件的并行處理,本文采用LMMSA譯碼算法,在分層上保證每層的列重至多為1。對于前面所提到的S-IRA碼,則可以對校驗矩陣按照每行為一層進行分層,即從列上看每一層只有一個循環(huán)位移矩陣或全零矩陣。
針對上面提到的S-IRA碼本文提出了如圖6所示的譯碼器結構。
其中Q=36,M=14,K=14,設計成輸入緩存部分以及外信息計算部分。其中外信息計算部分每次計算一層的校驗位,因此并行度為Q=36,將接收到的通過信道串行輸入的每個信息比特的接收值量化成7位定點數(shù),為了讓譯碼器能連續(xù)地接收通過信道傳遞的信息,輸入緩存部分也采用乒乓RAM的形式。由于外信息計算部分的并行度為Q=36,因此輸入緩存部分與下一級之間的每次輸出/輸出均為Q×7位。由于RAMl、RAM2儲存外信息值,因此直接對其中的外信息進行硬判決。
對于外信息計算部分,由于每層的列重至多為1,因此每一個外信息計算單元可以在每一層的計算中更新該單元對應行的外信息。
從輸入緩存部分輸入的外信息與RAMl中的相減得到,將存人RAM2,并輸入比較/選擇器。當該行的全部計算完畢后,從比較/選擇器輸出,經(jīng)過乘法器得到的存入RAMl,并與緩存在RAM2中的相加,得到,即完成一次迭代。由于RAM2中的數(shù)據(jù)輸出可以連續(xù)地輸入輸出,因此在輸入完該次迭代的所有后,馬上可以接著輸入下一次迭代的,從而譯碼可以連續(xù)地進行。
比較/選擇器的作用是計算,即2.1.3式的后半部分。由于輸出的絕對值只有兩種:最大值和次最大值,因此只需得到最大值和次最大值以及各自對應的位置,并記錄對應的正負符號,就可以完全確定。
在譯碼的橫向計算過程中,對于某一行,比較/選擇器首先初始化,其輸入端輸入前一級加法器輸出的,將輸入的符號存入符號寄存器(其中符號寄存器增加一位符號累加位,計算該行的符號),并將||首先與存儲器中的最小值比較,如果輸入值小于最小值存儲器中所存儲的值,則將最小值存儲器中所存儲的值存入次小值存儲器,然后將輸入值存入最小值存儲器,并在最?。涡∵x擇寄存器中記錄最小值位置,接著開始下一個值的比較;如果輸入值大于最小值存儲器中所存儲的值,則接著與次小值存儲器中的值比較,如果輸入值小于次小值存儲器中的值,則將輸入值存入次小值存儲器,接著進行下一個輸入值的比較,如果輸入值大于次小值存儲器中的值,則直接進行下一個輸入值的比較。當該行所有都處理完畢后,則按照符號寄存器中的符號依次輸出,并按照最?。涡∵x擇寄存器中記錄選擇依次輸出最小值或次小值,即。
3 仿真結果及分析
圖lO中黑色曲線為本文提出的RA碼構造方法所構造出碼字的誤碼率曲線和誤幀率曲線。仿真選擇碼長為1008,碼率1/2,b=7,列重分布盡量符合密度進化算法的結果。采用BPSK調(diào)制,AWGN信道,采用log-BP算法譯碼,最大迭代次數(shù)為50次。
紅色曲線為傳統(tǒng)的基于PEG邊增長算法構造出碼字的誤碼率曲線和誤幀率曲線。為便于對比,仿真時選擇的碼長同樣為1008,碼率l/2,采用。BPSK調(diào)制,AWGN信道,采用log-BP算法譯碼,最大迭代次數(shù)為50次。
從仿真結果來看,本文提出的碼字構造方法所構造碼字的誤碼平層在10-6左右,而傳統(tǒng)的基于PEG邊增長算法構造出碼字的誤碼平層則在10-7,性能要更好。這是因為在RA碼的校驗矩陣中存在一列列重為1的列,H2的雙對角形式使得其最小碼距太小,RmD碼便是針對這一問題而產(chǎn)生的。針對H2的優(yōu)化已有很多文章專門討論,文獻所介紹了幾種有效的處理方法。但本文所提的碼字構造方法構造簡單,便于硬件實現(xiàn)時的并行處理,有利于實現(xiàn)編譯碼器的高吞吐量。
對于不同碼長、碼率的S-IRA碼,都可以采用上面所提到的方法得到,當然Q越小,資源消耗就越大。對于編碼器,碼長、碼率不同,則uPT需改變各個存儲器的大小,而計算電路則需改變SR從計算電路的數(shù)量。對于譯碼器同樣需要改變各個存儲器的大小以及外信息計算單元的數(shù)量。
4 結論
使用單位陣的循環(huán)移位矩陣作為非零子矩陣構造LDPC碼的循環(huán)矩陣結構十分適合于部分并行譯碼實現(xiàn),而RA碼則具有編碼復雜度低的特點。本文結合兩者的特點設計出了硬件實現(xiàn)時的編譯碼器結構,由于采用的循環(huán)矩陣結構因而實現(xiàn)時可以占用很少的資源。