專利名稱:用于提高乘積碼譯碼速度的方法及譯碼裝置的制作方法
技術(shù)領(lǐng)域:
用于提高乘積碼譯碼速度的方法及譯碼裝置屬于乘積碼譯碼器技術(shù)領(lǐng)域。
乘積碼是由兩個短分組碼——碼C1和C2,構(gòu)成比較長的分組碼。其中短分組碼是把K個信息比特的序列通過加入N-K個校驗(yàn)位,編成N個比特的碼組。碼Cl的編碼參數(shù)是(N1,K1),碼C2的編碼參數(shù)是(N2,K2),其中Ni、Ki分別表示碼長和信息比特個數(shù)。編碼如
圖1所示,步驟如下1.把信息位a0、a1、a2、…aK1×K2-1排成K1×K2的矩陣,K1行K2列;2.對K1個行逐行用C2編碼,每行加入N2-K2個校驗(yàn)位,變成K1×N2的矩陣;3.對N2個列逐列用C1編碼,每列加入N1-K1個校驗(yàn)位,變成N1×N2的矩陣。
編碼后,乘積碼矩陣的每一行都構(gòu)成碼C2的一個碼字,每一列都構(gòu)成碼C1的一個碼字。其譯碼算法是以列碼C1和行碼C2的軟輸入軟輸出譯碼算法為核心,對乘積碼矩陣反復(fù)多次逐行逐列的迭代譯碼算法。
單次迭代譯碼是根據(jù)接收序列和前次計算的結(jié)果重新計算每個符號的二進(jìn)制判決結(jié)果的似然比估計(是1的概率除以是0的概率),由此得到接收序列可靠性的一個修正值,即外信息。如圖2所示,乘積碼的迭代譯碼就是逐列譯碼再逐行譯碼,再逐列譯再逐行譯,如此反復(fù)多次,每次在行與列譯碼器之間傳遞中間計算結(jié)果——外信息,使得最終的結(jié)果與正確結(jié)果越來越接近。乘積碼譯碼需要存儲并多次讀取接收的符號序列同時還要多次讀取并更新外信息。
由于迭代譯碼使得譯碼速度十分受限,例如采用傳統(tǒng)的串行譯碼方法,4次迭代的譯碼器譯1個比特需要8個時鐘周期,這里迭代一次包括一次逐列譯碼和一次逐行譯碼。如果工作頻率50MHz,則吞吐量大約為6Mbit/s。為了提高譯碼速度,并行處理是一個關(guān)鍵的方法。已有的一種并行譯碼方法如圖3所示,是把逐行和逐列譯碼同時進(jìn)行,但對于二維矩陣的乘積碼這種方法并行度只能為2,所以能且只能提高一倍的速度,而且需要存儲兩組譯碼的中間計算結(jié)果,增加了存儲量。
乘積碼的結(jié)構(gòu)是每行每列都相對獨(dú)立的組成一個較短的碼字,其矩陣的行數(shù)和列數(shù)較大,適于并行譯碼,即同時計算若干行或若干列的符號的似然比的外信息,其基本框圖與傳統(tǒng)的串行譯碼的類似,不同的是用P列或P行并行譯碼器代替了逐行逐列譯碼器,單次迭代的框圖如圖4所示。
P列或P行并行譯碼器由并行工作的P個行和P個列譯碼器組成,這樣占用了更多的硬件資源,行和列采用相同的編碼參數(shù),則行譯碼和列譯碼可共用同一個譯碼器,可以減少譯碼器的數(shù)目。此外并行譯碼要把存儲器分成若干個小的存儲器以支持并行的讀寫操作。本方法能使所需存儲器的數(shù)量盡量小,而且總的存儲量不變,即采用存儲器的數(shù)量是原來的P倍,每個存儲器的存儲量是原來的1/P。
本發(fā)明所提出的方法的特征在于它是一種利用并行工作的P個行譯碼器和并行工作的P個列譯碼器組成的P行或P列譯碼器來依次并行的處理乘積碼的P行或P列的譯碼方法。它所述的譯碼方法依次含有以下步驟(a)把接收到的信號的對數(shù)似然值存儲到接收信號存儲器R1的N×N個存儲單元中,按下列方法得出它們在存儲器R1中所屬的RAM序號令M=N/P,先求出它在矩陣中所處的行號與列號之差,除以M向零取整,再除以P求余數(shù),即為其RAM序號;(b)每次把R1的P列與外信息存儲器R2相應(yīng)位置的P列相加,得到P個和矢量,由P個軟輸入軟輸出(SISO)的子譯碼器譯碼,再把各子譯碼器的輸出即各個外信息向量存入R2相應(yīng)的列中,外信息的初始值為0;(c)重復(fù)M次步驟b,求出乘積碼中所有位的外信息;(d)再把R1的P行與R2相應(yīng)位置的P行相加,得到P個和矢量,分別送入P個子譯碼器,再把所求的P個外信息向量存入R2對應(yīng)的P行;(e)重復(fù)M次步驟d,求出乘積碼中所有位的外信息;(f)把(b),(c),(d),(e)步驟重復(fù)多次,最終輸出所有信息位的判決結(jié)果。
本發(fā)明提出的譯碼裝置的特征在于它含有采集接收信號的RAM讀寫控制器,依次由向量元素計數(shù)器、向量計數(shù)器、迭代次數(shù)計數(shù)器串接而成、且上述各計數(shù)器又分別向RAM讀寫控制器輸出數(shù)據(jù)的多層計數(shù)器,受控于RAM讀寫控制器且平行處理P行或P列信息的P個子譯碼器,在RAM讀寫控制器控制下各自分別接收讀寫控制信號和寫入數(shù)據(jù)且輸出讀出數(shù)據(jù)的各內(nèi)含P個RAM的接收信號存儲器和外信息存儲器。
圖2表示乘積碼的多次迭代串行譯碼。
圖3表示已有的行向列向并行譯碼的單次迭代。
圖4表示P行P列并行譯碼器的單次迭代。
圖5表示P行P列并行譯碼器的組成結(jié)構(gòu)。
圖6表示64×64的乘積碼并行度P=8時P行P列并行譯碼器的流程圖。
圖7表示64×64的乘積碼并行度P=8時RAM的組織和數(shù)據(jù)的存儲。
具體實(shí)施例方式
假設(shè)乘積碼的矩陣是N行N列的,并行度為P,其中P能整除N。譯碼器需要兩組RAM,R1和R2,每組RAM包含N×N個存儲單元,對應(yīng)于乘積碼的矩陣。R1用來存儲接收信號的對數(shù)似然值,R2用來存儲外信息。為了并行處理,每組RAM都由P個小RAM組成,每個小RAM在邏輯上劃分成P個部分,每個部分的深度為M×M,看成M行M列,其中M=N/P。我們將以64×64的乘積碼,P=8的譯碼器為例來說明有關(guān)問題。
該乘積碼的碼矩陣為64×64,所以每組RAM包含64×64個存儲單元。由于并行度為8,所以每組RAM分成8個小RAM。每個小RAM是物理上獨(dú)立的存儲器,深度為512(=8×8×8),地址寬9位。每個小RAM在邏輯上看成8個部分,每部分包含8×8個存儲單元。RAM的具體結(jié)構(gòu)如圖7所示,其中左圖表示一組RAM(R1或R2),每個小方格表示一個部分,從第一列的8個部分(即編號從0到7的8個小方格),分別向右下方劃出8條對角線,劃到最后一行則拐到下一列的第一行繼續(xù)向右下方劃,直到最后一列為止,這樣每條對角線上的8個部分屬于同一個小RAM,小方格上所標(biāo)的整數(shù)代表它屬于第幾個小RAM。一共8個這樣的小RAM,小RAM的編號RAM num從0到7。一個小RAM中的8個部分的排列是按照它們所處的列號從小到大的順序,也就是它們對應(yīng)的高3位地址與所在的列號相同,圖7左圖中第0列的8個部分的高3位地址都為0,第一列的8個部分的高3位地址都為1。對應(yīng)的地址范圍如圖7右圖所示,標(biāo)號為3.0的部分的地址范圍是0到63,標(biāo)號為3.1的部分地址范圍是64到127。而每個部分對應(yīng)了乘積碼矩陣的一個8×8方陣,在其內(nèi)部地址排列的順序是先逐列排、一列排完再排下一列,即9位地址線的中間3位表示列號,低3位表示行號,圖中給出了3.0和3.7兩個部分的內(nèi)部地址排列。
有8個譯碼器,序號Dec_num從0到7。因?yàn)椴⑿卸葹?,分組碼的碼長為64,有64行64列,所以每個譯碼器需要處理8個向量才能完成一次迭代,每個向量含64個元素。向量號Vec_num(寬3位),元素號Ele_num(寬6位)。每個子譯碼器都順序的從R1和R2中讀入一個向量,并存儲在它內(nèi)部的緩存器中,經(jīng)過相同的時間處理后,更新的外信息再順序的寫入R2,因此同時讀寫的8個元素的元素號Ele_num相同。
逐列譯碼時,先讀出矩陣第0行第0、8、16、24、32、40、48、56列的數(shù)據(jù),計數(shù)器Vec_num為0,Ele_num為0;然后依次讀第1、2…63行中這8列的數(shù)據(jù),Vec_num仍為0,Ele_num遞增為1、2…63。第0列的數(shù)據(jù)由0號譯碼器處理,第8列的數(shù)據(jù)由1號譯碼器處理,…第56列的數(shù)據(jù)由7號譯碼器處理。處理完這8列,再處理第1、9、17、25、33、41、49、57列的數(shù)據(jù),Vec_num為1,Ele_num為0、1、2…63。同樣的,第1列的數(shù)據(jù)由0號譯碼器處理,第9列的數(shù)據(jù)由1號譯碼器處理,…第57列的數(shù)據(jù)由7號譯碼器處理,Vec_num從0到7。從中可以看出第0個譯碼器依次處理第0到第7列,第1個譯碼器依次處理第8到第15列,第7個譯碼器依次處理第56到第63列,其規(guī)律是每次用第Dec_num個譯碼器處理第8×Dec_num+Vec_num(Dec_num=0、1、2、..7)的8列數(shù)據(jù),一列中元素序號Ele_num依次為0、1、2、…63。Vec_num為0、1、2、..7,則處理完整個矩陣的逐列譯碼。
逐行譯碼時,先讀出矩陣第0、8、16、24、32、40、48、56行第0列的數(shù)據(jù),計數(shù)器Vec_num為0,Ele_num為0;然后依次讀第1、2…63列中這8行的數(shù)據(jù),Vec_num仍為0,Ele_num遞增為1、2…63。第0行的數(shù)據(jù)由0號譯碼器處理,第8行的數(shù)據(jù)由1號譯碼器處理,…第56行的數(shù)據(jù)由7號譯碼器處理。處理完這8行,再處理第1、9、17、25、33、41、49、57行的數(shù)據(jù),Vec_num為1,Ele_num為0、1、2…63。同樣的,第1行的數(shù)據(jù)由0號譯碼器處理,第9行的數(shù)據(jù)由1號譯碼器處理,…第57行的數(shù)據(jù)由7號譯碼器處理,Vec_num從0到7。每次用第Dec_num個譯碼器處理第8×Dec_num+Vec_num(Dec_num=0、1、2、..7)的8行數(shù)據(jù),一行中元素序號Ele_num依次為0、1、2、…63。Vec_num為0、1、2、..7,則處理完整個矩陣的逐行譯碼。
從中可以看出,逐列譯碼時,如果序號為RAM_num的小RAM與序號為Dec_num的譯碼器傳輸數(shù)據(jù),則讀寫地址和序號滿足如下關(guān)系addr=(Ele_num(5 downto 3)-RAM_num)& Vec_num & Ele_num(2 downto 0);RAM_num+Dec_num=Ele_num(5 downto 3);(這里的加減運(yùn)算為模8的加減運(yùn)算,“m downton”表示二進(jìn)制的第m位到第n位,“&”表示二進(jìn)制數(shù)的并接運(yùn)算,例如1&2=”01”&”10”=”0110”=6)。
逐行譯碼時,如果序號為RAM_num的小RAM與序號為Dec_num的譯碼器傳輸數(shù)據(jù),則讀寫地址和序號滿足如下關(guān)系addr=Ele_num & Vec_num;Dec_num-RAM_num=Ele_num(5 downto 3);RAM讀寫控制器根據(jù)各個計數(shù)器的值,按照以上算法,產(chǎn)生讀寫RAM的地址和使能信號,并把輸入的8路數(shù)據(jù)分配到對應(yīng)的RAM的數(shù)據(jù)端口,以及把從8個RAM中讀出的8路數(shù)據(jù)分配到8個子譯碼器的數(shù)據(jù)端口。這樣控制數(shù)據(jù)的存儲,可以最大程度的減少RAM的數(shù)量。
綜上所述,接收端的譯碼過程如下a)把接收到的信號的對數(shù)似然值存儲到R1中的64×64個存儲單元中。求出它在矩陣中所處的行號與列號之差,除以8向零取整([/8]),再除以8求余數(shù)(%8),得出所屬的RAM序號,例如接收到的信號處在第37行55列,則37-55=-18,[-18/8]=-2,(-2)%8=6,所以存儲在第6號RAM中,若在第55行37列,則55-37=18,[18/8]=2,2%8=2,所以存儲在第2號RAM中。
b)每次把R1的8列與R2相應(yīng)位置的8列相加,得到8個和矢量。這8個向量由8個軟輸入軟輸出(SISO)的子譯碼器譯碼。第i個譯碼器的輸出,也就是第i個外信息向量,存入R2的第i列的部分中。注意外信息的初值為0,第一次譯碼時只有R1中的8列送入子譯碼器。
c)重復(fù)8次步驟b,求出乘積碼中所有位的外信息。
d)把R1的8行與R2相應(yīng)位置的8行相加,得到8個和矢量,分別送入8個子譯碼器譯碼。再把所求的8個外信息向量存入R2對應(yīng)的8行。
e)重復(fù)8次步驟d,求出乘積碼中所有位的外信息。
f)把b、c、d、e重復(fù)4次,最終輸出所有信息位的判決結(jié)果。
并行度為8的譯碼器速度是串行譯碼的8倍,需要增加硬件資源用來實(shí)現(xiàn)8個子譯碼器,包括子譯碼器內(nèi)部的緩存器。而用來存儲乘積碼整個矩陣的接收信號和外信息的R1和R2的存儲量不變,只是每個都分成了8個小RAM。并行度太高,硬件實(shí)現(xiàn)的時候面積會變得很大,極其不利;并行度太低,處理速度慢,比較適合低速的譯碼器,所以應(yīng)該在速度和面積兩方面進(jìn)行折中地考慮選擇并行度。基于這種考慮,在具體實(shí)施中采用了8并行度。
以下對譯碼裝置進(jìn)行說明譯碼裝置即乘積碼譯碼器包括并行處理P行或P列的子譯碼器、接收信號存儲器、外信息存儲器、RAM讀寫控制器和多層計數(shù)器。
子譯碼器部分用于逐行或逐列的譯碼,根據(jù)接收信號和上次迭代的結(jié)果計算并更新每個符號的外信息。P個子譯碼器并行處理P行或P列,每個時鐘周期內(nèi)并行處理P個元素。譯碼器流水工作,即輸出當(dāng)前求出的外信息的同時,讀入并處理下一組行(或列)向量,設(shè)乘積碼矩陣為N×N,每個譯碼器處理N/P個行或列,則處理完整個乘積碼矩陣。迭代一次包括一次逐行和一次逐列的譯碼,在譯碼速度和糾錯性能兩方面進(jìn)行折中地考慮選擇迭代次數(shù)。每個子譯碼器內(nèi)部有用于存儲所處理的向量的緩存器,采用雙端口存儲器。
接收信號存儲器用于存儲接收信號,包括P個RAM。每接收一個信號,按照譯碼時每次同時處理的P個數(shù)據(jù)不在同一塊RAM的原則,選擇并存入RAM。
外信息存儲器用于存儲外信息,包括P個RAM。第一次迭代時外信息為0(不用讀外信息),每次迭代讀出接收信號和相應(yīng)的外信息,處理后把更新的外信息寫入。因?yàn)槊看嗡x的外信息的位置和接收信號的位置相同,所以外信息RAM的組織方式與接收信號RAM的相同。
多層計數(shù)器包括三種計數(shù)器,向量元素計數(shù)器——用于子譯碼器逐行或逐列譯碼時,對一行或一列的N個元素進(jìn)行順序計數(shù);向量計數(shù)器——用于一次迭代過程中,每個子譯碼器所處理的N/P個行向量(或列向量)進(jìn)行順序計數(shù);迭代次數(shù)計數(shù)器——用于迭代次數(shù)的計數(shù),一次逐行譯碼或一次逐列譯碼算半次迭代。
RAM讀寫控制器根據(jù)上述三個計數(shù)器和譯碼器的讀寫方式產(chǎn)生所要讀寫的RAM的地址并控制P個RAM和P個子譯碼器之間數(shù)據(jù)的交換。
圖5為P行P列并行譯碼器的總圖。
圖6為64×64的乘積碼P行P列并行譯碼器在P=8時所用的譯碼方法的程序流程圖。
圖7為64×64的乘積碼并行度P=8時RAM的組織和數(shù)據(jù)存儲地址的分配方法,用圖5中的數(shù)據(jù)存儲部分來實(shí)現(xiàn)。
本方法可在各種可編程邏輯器件中實(shí)施,一個具體實(shí)施是用Xilinx公司的VirtexExcv600e hq240-6芯片來作乘積碼譯碼器,也可用專用集成電路實(shí)現(xiàn)。
權(quán)利要求
1.用于提高乘積碼譯碼速度的方法,它的單次迭代譯碼是根據(jù)接收序列和前次計算的結(jié)果重新計算每個符號的二進(jìn)制判決結(jié)果的似然比估計,得到接收序列可靠性的一個修正值即外信息,乘積碼的迭代譯碼是使列譯碼→行譯碼→列譯碼→行譯碼…反復(fù)進(jìn)行多次,每次在行的與列的譯碼器之間傳遞中間計算結(jié)果即外信息,使最終結(jié)果逐漸趨向正確,其特征在于它是一種利用并行工作的P個行譯碼器和并行工作的P個列譯碼器組成的P行或P列譯碼器來依次并行的處理乘積碼的P行或P列的譯碼方法。
2.根據(jù)權(quán)利要求1所述的用于提高乘積碼譯碼速度的方法其特征在于它所述的譯碼方法依次含有以下步驟(a)把接收到的信號的對數(shù)似然值存儲到接收信號存儲器R1的N×N個存儲單元中,按下列方法得出它們在存儲器R1中所屬的RAM序號令M=N/P,先求出它在矩陣中所處的行號與列號之差,除以M向零取整,再除以P求余數(shù),即為其RAM序號;(b)每次把R1的P列與外信息存儲器R2相應(yīng)位置的P列相加,得到P個和矢量,由P個軟輸入軟輸出(SISO)的子譯碼器譯碼,再把各子譯碼器的輸出即各個外信息向量存入R2相應(yīng)的列中,外信息的初始值為0;(c)重復(fù)M次步驟b,求出乘積碼中所有位的外信息;(d)再把R1的P行與R2相應(yīng)位置的P行相加,得到P個和矢量,分別送入P個子譯碼器,再把所求的P個外信息向量存入R2對應(yīng)的P行;(e)重復(fù)M次步驟d,求出乘積碼中所有位的外信息;(f)把(b),(c),(d),(e)步驟重復(fù)多次,最終輸出所有信息位的判決結(jié)果。
3.根據(jù)權(quán)利要求1所述的用于提高乘積碼譯碼速度的方法而提出的譯碼裝置,其特征在于,它含有采集接收信號的RAM讀寫控制器,依次由向量元素計數(shù)器、向量計數(shù)器、迭代次數(shù)計數(shù)器串接而成、且上述各計數(shù)器又分別向RAM讀寫控制器輸出數(shù)據(jù)的多層計數(shù)器,受控于RAM讀寫控制器且平行處理P行或P列信息的P個子譯碼器,在RAM讀寫控制器控制下各自分別接收讀寫控制信號和寫入數(shù)據(jù)且輸出讀出數(shù)據(jù)的各內(nèi)含P個RAM的接收信號存儲器和外信息存儲器。
全文摘要
用于提高乘積碼譯碼速度的方法及譯碼裝置屬于乘積譯碼器技術(shù)領(lǐng)域,其特征在于它是在已有的單次迭代譯碼和乘積碼迭代譯碼方法的基礎(chǔ)上,利用并行工作的P個行譯碼器和并行工作的P個列譯碼器組成的P行或P列譯碼器來先列后行依次并行的處理乘積碼P行或P列信息的譯碼方法。相應(yīng)的提出了一個含有并行處理P行或P列的子譯碼器、接收信號存儲器、外信息存儲器、RAM讀寫控制器和多層計數(shù)器的乘積碼譯碼裝置。它在提高乘積碼譯碼速度的同時,能使所需存儲器的數(shù)量盡量少,而且總的存儲量不變,即采用存儲器的數(shù)量是原來的P倍,每個存儲器的存儲量是原來的1/P,但所占的芯片面積增加了不到一倍,因而用很小的代價換取了譯碼速度的顯著提高。
文檔編號H04L25/49GK1411235SQ0215387
公開日2003年4月16日 申請日期2002年12月6日 優(yōu)先權(quán)日2002年12月6日
發(fā)明者張秀軍, 趙明, 高春艷, 周世東, 許希斌, 王京 申請人:清華大學(xué)