專利名稱::基于矩陣分塊的高速ldpc譯碼器實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種LDPC譯碼方法,特別涉及一種基于矩陣分塊的高速LDPC譯碼器實(shí)現(xiàn)方法,屬于信道編碼
技術(shù)領(lǐng)域:
。
背景技術(shù):
:在衛(wèi)星通信、深空通信及各種無線通信系統(tǒng)中,為了提高系統(tǒng)的抗噪聲能力,信道編碼是必不可少的。在目前所有的信道編碼中,LDPC碼是最接近香農(nóng)限的好碼,其性能比Turbo碼還好。LDPC碼的譯碼采用BP(BeliefPropagation)迭代譯碼算法,不僅具有很好的譯碼性能,而且具有線性的譯碼復(fù)雜度,更為重要的是,這是一種并行譯碼算法,可以極大地提高譯碼速度。但是在工程實(shí)現(xiàn)時(shí),對(duì)于完全隨機(jī)構(gòu)造的碼字而言,對(duì)迭代信息的讀寫速度會(huì)相對(duì)較慢,以至于限制了并行譯碼的進(jìn)行。BP迭代譯碼算法分為概率域迭代譯碼與對(duì)數(shù)域迭代譯碼兩種實(shí)現(xiàn)方式,對(duì)數(shù)域迭代譯碼是在概率域迭代譯碼的基礎(chǔ)上發(fā)展而來的,通過取對(duì)數(shù),可以將大量乘法運(yùn)算變?yōu)榧臃ㄟ\(yùn)算,有利于硬件實(shí)現(xiàn),因此工程上大都采用對(duì)數(shù)域迭代譯碼算法。譯碼器的輸入為來自解調(diào)器的軟解調(diào)信息"',z'-l…W;輸出即為譯碼的硬判決結(jié)果。迭代譯碼過程可以看成是在由校驗(yàn)矩陣決定的雙向圖上進(jìn)行的消息傳遞過程,雙向圖又稱為Tanner圖,如圖1所示。圖1中右邊的節(jié)點(diǎn)是變量節(jié)點(diǎn),代表碼字中的一個(gè)比特或校驗(yàn)矩陣中的一列;左邊的節(jié)點(diǎn)是校驗(yàn)節(jié)點(diǎn),代表一個(gè)校驗(yàn)方程或校驗(yàn)矩陣中的一行,當(dāng)碼字中某一比特包含在某一校驗(yàn)方程中,即校驗(yàn)矩陣中相應(yīng)位為1時(shí),圖1中的左右節(jié)點(diǎn)間存在連線。譯碼中間變量為兩組用對(duì)數(shù)似然比(LLR)定義的迭代信息丄(^.)和"。)。其中z'表示變量節(jié)點(diǎn),/表示校驗(yàn)節(jié)點(diǎn),丄(^.)為變量節(jié)點(diǎn)到校驗(yàn)節(jié)點(diǎn)的迭代信息,"。)為校驗(yàn)節(jié)點(diǎn)到變量節(jié)點(diǎn)的迭代信息。令M(O表示與變量節(jié)點(diǎn)z'相連的校驗(yàn)節(jié)點(diǎn)的集合,w(y)表示與校驗(yàn)節(jié)點(diǎn)7相連的變量節(jié)點(diǎn)的集合。迭代時(shí)"^)和i:(。)之間信息的傳遞過程如圖2所示,具體譯碼步驟為(1)初始化i(^)初始化為信道輸入對(duì)數(shù)似然比(LLR)丄(",當(dāng)信道為加性高斯白噪聲信道時(shí),有<formula>formulaseeoriginaldocumentpage4</formula>(1)(2)迭代(a)校驗(yàn)節(jié)點(diǎn)迭代運(yùn)算(CNUP,checknodeupdateprocessing),由CNU單元完成ZWA))](2)<formula>formulaseeoriginaldocumentpage5</formula>(3)(4)<formula>formulaseeoriginaldocumentpage5</formula>(5)若采用加修正因子的最小和算法,則CNUP變?yōu)槭?6)中7為修正因子,其值與校驗(yàn)矩陣的行重有關(guān),一般取0.70.8之間。(b)變量節(jié)點(diǎn)迭代運(yùn)算(VNUP,variablenodeupdateprocessing),由VNU單元完成(7)(8)(3)判決對(duì)丄(^)判決:<formula>formulaseeoriginaldocumentpage5</formula>(9)若版T-0,譯碼正確,退出本次譯碼;否則繼續(xù)迭代,直到最大迭代次數(shù)。實(shí)際中,為了省去計(jì)算W的過程,在完成變量節(jié)點(diǎn)迭代運(yùn)算后,不進(jìn)行判決和校驗(yàn)而直接進(jìn)行校驗(yàn)節(jié)點(diǎn)迭代運(yùn)算,直到達(dá)到最大迭代次數(shù)后,再進(jìn)行判決。從加修正因子的最小和算法可以看出,初始化的式(1)可以用下式來代替=(10)此時(shí)不需要知道噪聲的大小,在實(shí)際應(yīng)用上就省去了信噪比估計(jì)的麻煩。通過調(diào)整修正因子77的值,可以使最小和算法的性能和原算法的性能幾乎一樣。從BP迭代譯碼算法可以看出,當(dāng)校驗(yàn)節(jié)點(diǎn)迭代時(shí),各個(gè)校驗(yàn)節(jié)點(diǎn)(即校驗(yàn)矩陣的每一行)可以同時(shí)進(jìn)行迭代,即可以有多個(gè)CNU單元同時(shí)工作;同樣當(dāng)變量節(jié)點(diǎn)迭代時(shí),各個(gè)變量節(jié)點(diǎn)(即校驗(yàn)矩陣的每一列)也可以同時(shí)進(jìn)行迭代。即BP迭代譯碼算法是一種并行算法,可以實(shí)現(xiàn)高速譯碼。但在工程上,卻不一定可以并行實(shí)現(xiàn)。在BP迭代譯碼的過程中,需要存儲(chǔ)中間變量i^,)和"。,),在CNU運(yùn)算時(shí),需要用到"《,)信息;在VNU運(yùn)算時(shí),需要用到Z(。,)信息。假如將丄(^)存儲(chǔ)在1個(gè)存儲(chǔ)單元的話,則在讀取或?qū)懭雭A(&)時(shí),每個(gè)對(duì)鐘周期都只能操作1個(gè)數(shù);對(duì)丄(。)的操作也一樣。此時(shí)雖然可以有多個(gè)CNU單元和VNU單元同時(shí)工作,但由于從"&)或i:(。,)讀寫數(shù)的速度較慢,大部分時(shí)候都處于等待狀態(tài),不能有效工作,并行運(yùn)算也就不能實(shí)現(xiàn)。一種解決的辦法是將Z(^)和丄(。,)中的每一個(gè)數(shù)據(jù)都用一個(gè)寄存器來存儲(chǔ),則此時(shí)在任意時(shí)鐘都可以對(duì)Z(&.)和丄^)中的任意數(shù)據(jù)進(jìn)行讀寫操作,此時(shí)CNU單元和VNU單元可以實(shí)現(xiàn)完全地并行工作,譯碼器可以達(dá)到很高的速度,但這種方法會(huì)耗費(fèi)大量的資源,在碼長較長時(shí)是不可能實(shí)現(xiàn)的,在通常的中等速度系統(tǒng)也不實(shí)用。
發(fā)明內(nèi)容針對(duì)LDPC譯碼器在工程實(shí)現(xiàn)時(shí)遇到的上述困難,本發(fā)明提出了一種在硬件實(shí)現(xiàn)時(shí)的資源和譯碼速度方面都可以接受的并行譯碼方法。如果將"&)和"r》存儲(chǔ)在多個(gè)存儲(chǔ)單元的話,則每一個(gè)時(shí)鐘可以讀寫和丄(。,)中的多個(gè)數(shù)據(jù),從而送給幾個(gè)CNU單元和VNU單元同時(shí)工作,通過對(duì)這幾個(gè)CNU單元和VNU單元復(fù)用,可以實(shí)現(xiàn)部分并行譯碼。但對(duì)于隨機(jī)構(gòu)造的碼字,即使將£(^)和丄(。,.)存儲(chǔ)在多個(gè)存儲(chǔ)單元,也不能保證每個(gè)時(shí)鐘從Z^)和丄0>)中讀寫的多個(gè)數(shù)據(jù)在校驗(yàn)矩陣的同一行或同一列,CNU單元和VNU單元也只好處于等待狀態(tài),這時(shí)也不能實(shí)現(xiàn)部分并行譯碼。本發(fā)明的方法是將校驗(yàn)矩陣設(shè)計(jì)成具有分塊矩陣的結(jié)構(gòu),如圖3所示。圖3中p為最大行重,《為最大列重,每一個(gè)分塊矩陣《,」?jié)M足每一行最多只有一個(gè)1,每一列也最多只有一個(gè)l。對(duì)于規(guī)則LDPC碼,p即為行重,《即為列重,此時(shí)《,,為方陣,且它的每一行和每一列都恰好只有一個(gè)l。對(duì)于非規(guī)則LDPC碼,根據(jù)碼字的最大行重p和最大列重《,首先構(gòu)造一個(gè)行重為p、列重為《的規(guī)則碼,然后按照非規(guī)則碼的度分布規(guī)則,通過刪除規(guī)則碼的校驗(yàn)矩陣對(duì)應(yīng)位置上的1來實(shí)現(xiàn)。因此本發(fā)明以下討論的都是規(guī)則LDPC碼的情況。由于A^)和"。,)中的元素是和校驗(yàn)矩陣中有1的位置一一對(duì)應(yīng)的,將校驗(yàn)矩陣設(shè)計(jì)成具有分塊矩陣的結(jié)構(gòu)后,部分并行譯碼在工程上即可以實(shí)現(xiàn)。本發(fā)明的方法是以將校驗(yàn)矩陣設(shè)計(jì)成分塊結(jié)構(gòu)為基礎(chǔ)的,并給出了分塊結(jié)構(gòu)校驗(yàn)矩陣的構(gòu)造方法。本發(fā)明提出了一種基于矩陣分塊的高速LDPC譯碼器實(shí)現(xiàn)方法,包括以下具體步驟第一步構(gòu)造具有分塊校驗(yàn)矩陣的LDPC碼(1)根據(jù)所需構(gòu)造碼字的最大行重p與最大列重《確定所構(gòu)造校驗(yàn)矩陣的分塊數(shù),為/7《個(gè)分塊。(2)取/7個(gè)自然數(shù)"',......"p,滿足GCD(fl乂,M)"且(9-l)^〈M,y-l,2…p;同時(shí)還要根據(jù)消除小環(huán)的條件,對(duì)該p個(gè)數(shù)"i,"2......"P進(jìn)行選取,使得所構(gòu)造的校驗(yàn)矩陣無小環(huán)。(3)按方法~="/(10£1^+1,'、1,2…M,y-l,2…戶得到(l,2,…,M〉的;個(gè)重新排列,式中M為校驗(yàn)矩陣的行數(shù);然后構(gòu)造矩陣《"~/=1,^,方法為《"第一列中非0元素所在的行號(hào)為^1,^......、,第二列中非0元素所在的行號(hào)為&,)>一......^⑧,依此類推,再將p個(gè)L合并起來,即得到校驗(yàn)矩陣好。(4)對(duì)第(3)步所構(gòu)造的校驗(yàn)矩陣的行進(jìn)行重排,使重排后的校驗(yàn)矩陣具有分塊的結(jié)構(gòu),重排規(guī)則為將^第j列中非0元素所在的行-["-^+/]"i(modM)+l移至第_/+(''-1)M行,,、1,2…《,y、l,2…M。(5)對(duì)于規(guī)則LDPC碼,到第(4)步后具有分塊結(jié)構(gòu)的校驗(yàn)矩陣即已構(gòu)造完成;對(duì)于非規(guī)則LDPC碼,只需再按照度分布規(guī)則將對(duì)應(yīng)分塊中的1變成0即可。第二步在LDPC碼的校驗(yàn)矩陣具有分塊結(jié)構(gòu)的情況下,對(duì)其實(shí)現(xiàn)高速并行譯碼(1)根據(jù)所要求的并行度及校驗(yàn)矩陣的分塊數(shù),確定需要的存儲(chǔ)單元的數(shù)目。若每個(gè)分塊矩陣分存在n個(gè)存儲(chǔ)單元中,則需要個(gè)存儲(chǔ)和個(gè)存儲(chǔ)丄(。,)的存儲(chǔ)單元。(2)利用式(10)初始化丄(^),初始化可以在"p《個(gè)存儲(chǔ)單元中同時(shí)并行進(jìn)行,設(shè)碼長為W,每個(gè)時(shí)鐘往各個(gè)存儲(chǔ)單元寫一個(gè)數(shù),存儲(chǔ)單元用的是雙口RAM,則初始化需要AZ/(2w/)個(gè)時(shí)鐘。(3)利用式(6)進(jìn)行校驗(yàn)節(jié)點(diǎn)迭代,若存儲(chǔ)器用的是雙口RAM,則可以有2"《個(gè)CNU單元同時(shí)工作。若CNU單元可以一個(gè)時(shí)鐘完成一次運(yùn)算,則進(jìn)行一次校驗(yàn)節(jié)點(diǎn)迭代需要^T/(2"《)個(gè)時(shí)鐘,其中M為校驗(yàn)比特?cái)?shù),即校驗(yàn)矩陣的行數(shù)。(4)利用式(7)和式(8)進(jìn)行變量節(jié)點(diǎn)迭代,若存儲(chǔ)器用的是雙口RAM,則可以有2甲個(gè)VNU單元同時(shí)工作。若VNU單元可以一個(gè)時(shí)鐘完成一次運(yùn)算,則進(jìn)行一次校驗(yàn)節(jié)點(diǎn)迭代需要M(2"p)個(gè)時(shí)鐘。若己經(jīng)達(dá)到了最大迭代次數(shù),則跳到第(5)步,否則跳到第(3)步繼續(xù)迭代。(5)利用式(9)進(jìn)行判決,得到最終的譯碼結(jié)果。判決需要iW(2wp)個(gè)時(shí)鐘。本發(fā)明所述基于矩陣分塊的高速LDPC譯碼器實(shí)現(xiàn)方法具體實(shí)現(xiàn)過程如下一、具有分塊校驗(yàn)矩陣LDPC碼的構(gòu)造方法根據(jù)現(xiàn)代信道編碼理論,隨機(jī)構(gòu)造的碼字性能最好,而對(duì)于具有分塊校驗(yàn)矩陣結(jié)構(gòu)的碼字,要想得到和隨機(jī)碼字相同的性能,就必須采用一定的規(guī)則使構(gòu)造的碼字最優(yōu)。本發(fā)明通過消除所構(gòu)造碼字中的小環(huán),來使碼字的性能最優(yōu);然后對(duì)碼字的行進(jìn)行重新排列,使得到的碼字具有分塊結(jié)構(gòu)。LDPC碼Tanner圖上的節(jié)點(diǎn)如果構(gòu)成圖4中的形式,則存在環(huán)長為4的環(huán);圖5中是存在環(huán)長為6的環(huán)的情況。Tanner圖上的平均環(huán)長對(duì)所構(gòu)造的LDPC碼的性能有很大影響,從BP迭代譯碼算法可知,在譯碼循環(huán)中每個(gè)節(jié)點(diǎn)接收的都不包括從自身發(fā)出的信息,但如果存在環(huán)長為4或6的環(huán),則經(jīng)過4或6次譯碼循環(huán)后,從該節(jié)點(diǎn)出發(fā)的信息又被作為另一節(jié)點(diǎn)的信息傳回來(如圖4和圖5中箭頭所示),從而造成自身信息的疊加,影響譯碼的準(zhǔn)確性。理論上,如果Tanner圖上環(huán)長為無限大,BP迭代譯碼算法能達(dá)到最佳的性能。因此一般構(gòu)造LDPC碼時(shí),都盡量消除Tanner圖上的小環(huán),特別是環(huán)長為4和6的環(huán)。目前一般采取隨機(jī)搜索的方法來消除小環(huán),也有的用代數(shù)方法來消除規(guī)則LDPC碼Tanner圖上的4環(huán)。本發(fā)明提出了一種消除4環(huán)、6環(huán)甚至更多小環(huán)的LDPC碼的構(gòu)造方法。若將圖3中A,。A,,......A,合成一個(gè)矩陣義,,可見〃:,,每行都只有一個(gè)1,若從&的第一列開始直到最后一列,將每列中非0元素所在的行號(hào)排列起來,則得到的排列是排列U,2,…,W的重新排列,其中M為校驗(yàn)矩陣的行數(shù)。為了具體說明,現(xiàn)舉一例,假設(shè)(,如圖6所示,則第一列中非O元素所在行號(hào)為1,6,8;第二列中非O元素所在行號(hào)為2,4,9;第三列中非0元素所在行號(hào)為3,5,7。合起來得到的排列為{1,6,8,2,4,9,3,5,7},它是{1,2,3,4,5,6,7,8,9}的重新排列。類似的,#:,2......義p也有這個(gè)特點(diǎn)。由有限域的理論可知若兩個(gè)自然數(shù)a、M的最大公因子GCD"M)-1,則排列{^16,.=m'(modM)+1,/=1,2…M}是排列{1,2,…的重新排列。證明如果不是這樣,則存在1<ySM,滿足6,=~(modM),故有M|a()-/),因?yàn)镚CD(",A/)-l,故MIC/-!');又因?yàn)閘《/〈jSA/,故y-!'〈M,與MIG'-!')矛盾。故原命題正確。根據(jù)以上知識(shí),可以給出校驗(yàn)矩陣好的構(gòu)造方法如下。(1)取/7個(gè)自然數(shù)a,,。2......ap,滿足GCD(a乂,M)-l且(g-l)a乂<M,_/=1,2…p。(2)按方法^=fl/(modM)+l,z'-l,2…M,/=1》.?得到{1,2"."^的戶個(gè)重新排列。(3)構(gòu)造矩陣A,.,7=1,2":^第一列中非0元素所在的行號(hào)為^,^……,第二列中非0元素所在的行號(hào)為^+1),^+2)......~(29),依此類推。將個(gè)A,按圖3的結(jié)構(gòu)合并起來,即得到校驗(yàn)矩陣好。為了消除校驗(yàn)矩陣中的小環(huán),還得對(duì)",,A......的選取進(jìn)行約束。Tanner圖上的環(huán)也可以從校驗(yàn)矩陣中看出來,校驗(yàn)矩陣中4環(huán)的結(jié)構(gòu)如圖7所示,圖中校驗(yàn)矩陣在A、B、C、D位置的值為1;6環(huán)的結(jié)構(gòu)如圖8所示,同樣校驗(yàn)矩陣在A、B、C、D、E、F位置的值為l。從圖7中可以看出,存在4環(huán)的條件是ABK:D;從圖8中可以看出,存在6環(huán)的條件是AF-BC+DE。其中AB、CD等是校驗(yàn)矩陣好同一列中非0元素所在兩行行號(hào)的差值,由F的構(gòu)造方法易知,該差值為to,或M-;^.,*=1,2...(《-1),/=1》.?。因此所構(gòu)造的校驗(yàn)矩陣中無4環(huán)的條件為y/lXl,2…pWl".2(11)其中《,=fe^1或(M—fe^),6-l,2…(《-l),y-l,2…;。《2類似。同樣,所構(gòu)造的校驗(yàn)矩陣中無6環(huán)的條件為d-《2+《3,V;We{l,2..},y.l-_/2-y3(12)按以上方法畫出8環(huán)甚至更大環(huán)的圖,即可以得到消去這些環(huán)的條件。根據(jù)這些條件,在計(jì)算機(jī)上編程進(jìn)行搜索,即可以得到滿足條件的集合。按以上方法構(gòu)造的校驗(yàn)矩陣好,還不滿足分塊的條件,這可以通過對(duì)好的行進(jìn)行重新排列得到,而且這樣并不改變開的特性,即重排后的好與原好對(duì)應(yīng)同一個(gè)碼。假設(shè)重排以^為基礎(chǔ)進(jìn)行(也可以任意^進(jìn)行),則重排規(guī)則為將&第1列中非0元素所在的行6u-^(modM)+l移至第1行,行612=2"1(111?!?肘)+1移至第1+虹行,行\(zhòng)=/"1(1110€1^)+1移至第1+(/-1)M行,z、l,2…《;第2列中非0元素所在的行、+1)=(《+1)"1(1110(1似)+1移至第2行,行V+0=(《+(modM)+1移至第2+(/-l)M行,/=1,2…《;第_/列中非0元素所在的行ho,+u=[(_/-1)《+(modM)+1移至第_/行,行尸d一=[(_/-1)《+^(modM)+1移至第_/+(/-1)M行,,、1,2…《,j、l,2…M。按此規(guī)則重排后得到的新校驗(yàn)矩陣,即是可以按圖3分塊的校驗(yàn)矩陣。顯然,A,、^......A,都是單位矩陣,滿足每一行和每一列都只有一個(gè)1;由構(gòu)造方法可知,其它分塊矩陣《,,.的每一行只有一個(gè)l,現(xiàn)在要證明它的每一列也只有一個(gè)l??疾熘嘏藕笮r?yàn)矩陣的A,,,它的第/行其實(shí)是原檢驗(yàn)矩陣的第、-一j-[G'-lk+l]",(modM)+l行,則重排后校驗(yàn)矩陣的《,,中任意/1,/2(12/1</22M)兩行,在原校驗(yàn)矩陣中對(duì)應(yīng)兩行的行距為<formula>formulaseeoriginaldocumentpage10</formula>因?yàn)椤禝M,故《|《2_,1;又因?yàn)橐呀?jīng)知道原校驗(yàn)矩陣同一列中非0元素所在兩行的行距為^乂或M-^f,,A=l,2."(《-1),y、l,2…;,且GCD("乂,M)-1,《|M,貝lU!l^a乂且《!IM-fe^。古女有d,2一,^fe3乂且《2—,#M—,A=l,2...(《一1),y'=l,2.-,此即說明原校驗(yàn)矩陣中沒有一列在這兩行上都有非0元素。對(duì)行重排后,則可知分塊矩陣A,,的每一列最多只有一個(gè)1,又由于A,,的每一行都有一個(gè)1且A,是方陣,故^,.的每一列恰好都有一個(gè)1。再考察重排后校驗(yàn)矩陣的《,,/=2...《,情況與^,相同。故可知重排后校驗(yàn)矩陣的分塊矩陣《,,.的每一行只有一個(gè)1,每一列也只有一個(gè)l。至此,無小環(huán)、具有分塊矩陣結(jié)構(gòu)的校驗(yàn)矩陣即已經(jīng)得到。二、具有分塊校驗(yàn)矩陣LDPC碼的高速并行譯碼方法由于Z(^)和Z(。,)中的元素是和校驗(yàn)矩陣中有1的位置一一對(duì)應(yīng)的,將校驗(yàn)矩陣設(shè)計(jì)成具有分塊矩陣的結(jié)構(gòu)后,Z(&.)和Z(。)就可以按照該分塊結(jié)構(gòu)存儲(chǔ)在p《個(gè)存儲(chǔ)單元中。如果每一個(gè)存儲(chǔ)單元都采用一個(gè)單口RAM的話,則每個(gè)時(shí)鐘可以從丄(《,)和Z()讀取或?qū)懭雙《個(gè)數(shù)據(jù),而這/7《個(gè)數(shù)據(jù)恰好在校驗(yàn)矩陣的《行或;列上,則可以有《個(gè)CNU單元或p個(gè)VNU單元同時(shí)工作;若采用常用的雙口RAM,則可以有2《個(gè)CNU單元或2;個(gè)VNU單元同時(shí)工作。若用w月個(gè)存儲(chǔ)單元,其中每個(gè)分塊矩陣分存在《個(gè)存儲(chǔ)單元中,則可以實(shí)現(xiàn)更大的并行度,如果采用雙口RAM,則可以有2"g個(gè)CNU單元或2w/個(gè)VNU單元同時(shí)工作。如果采用FPGA實(shí)現(xiàn),由于一般的FPGA芯片中都有大量的BlockRAM資源,則上述結(jié)構(gòu)非常便于FPGA實(shí)現(xiàn)。采用BP迭代譯碼算法,具有分塊校驗(yàn)矩陣LDPC碼的高速并行譯碼方法的具體實(shí)現(xiàn)步驟如下(1)根據(jù)所要求的并行度及校驗(yàn)矩陣的分塊數(shù),確定需要的存儲(chǔ)單元的數(shù)目。若每個(gè)分塊矩陣分存在w個(gè)存儲(chǔ)單元中,則需要"p《個(gè)存儲(chǔ)"《》和"p《個(gè)存儲(chǔ)Z(/^)的存儲(chǔ)單元。(2)利用式(10)初始化"^),初始化可以在"/^個(gè)存儲(chǔ)單元中同時(shí)并行進(jìn)行,設(shè)碼長為W,每個(gè)時(shí)鐘往各個(gè)存儲(chǔ)單元寫一個(gè)數(shù),存儲(chǔ)單元用的是雙口RAM,則初始化需要M(2wp)個(gè)時(shí)鐘。(3)利用式(6)進(jìn)行校驗(yàn)節(jié)點(diǎn)迭代,若存儲(chǔ)器用的是雙口RAM,則可以有2w《個(gè)CNU單元同時(shí)工作。若CNU單元可以一個(gè)時(shí)鐘完成一次運(yùn)算,則進(jìn)行一次校驗(yàn)節(jié)點(diǎn)迭代需要M/(2^)個(gè)時(shí)鐘,其中M為校驗(yàn)比特?cái)?shù),即校驗(yàn)矩陣的行數(shù)。(4)利用式(7)和式(8)進(jìn)行變量節(jié)點(diǎn)迭代,若存儲(chǔ)器用的是雙口RAM,則可以有2"/個(gè)VNU單元同時(shí)工作。若VNU單元可以一個(gè)時(shí)鐘完成一次運(yùn)算,則進(jìn)行一次校驗(yàn)節(jié)點(diǎn)迭代需要M(2";7)個(gè)時(shí)鐘。若已經(jīng)達(dá)到了最大迭代次數(shù),則跳到第(5)步,否則跳到第(3)步繼續(xù)迭代。(5)利用式(9)進(jìn)行判決,得到最終的譯碼結(jié)果。判決需要7W(2"/7)個(gè)時(shí)鐘。若最大迭代次數(shù)為maxter,則可知完成一個(gè)分組的譯碼需要(moxter+2)iV/(2"p)+m^c/ferM(2"《)個(gè)時(shí)鐘周期,顯然當(dāng)n越大時(shí),需要的時(shí)間越短,可以達(dá)到的譯碼速度越高。本發(fā)明提出的基于矩陣分塊的LDPC譯碼器實(shí)現(xiàn)方法,可以在工程上實(shí)現(xiàn)LDPC碼的高速并行譯碼;實(shí)現(xiàn)時(shí)所用的資源、存儲(chǔ)器容量都沒有增加,只是單個(gè)存儲(chǔ)器的容量變小、存儲(chǔ)器的數(shù)目變多而已;譯碼的過程非常簡單,譯碼復(fù)雜度很低,而一般的LDPC譯碼器迭代時(shí)需要在"《,)表和"。)表之間進(jìn)行大量的地址査找工作,碼長較長時(shí)實(shí)現(xiàn)復(fù)雜度很大;所構(gòu)造的碼字中無小環(huán),性能非常好,與隨機(jī)構(gòu)造的碼字性能相當(dāng)。圖!——Tanner圖的結(jié)構(gòu)。圖2——迭代信息的傳遞過程。圖3——具有分塊結(jié)構(gòu)的校驗(yàn)矩陣。圖4——Tanner圖上4環(huán)的結(jié)構(gòu)。圖5——Tanner圖上6環(huán)的結(jié)構(gòu)。圖6——某一&示意。圖7——校驗(yàn)矩陣中4環(huán)的結(jié)構(gòu)。圖8~~^驗(yàn)矩陣中6環(huán)的結(jié)構(gòu)。圖9——(1008,504)碼的誤碼率性能。具體實(shí)施方式下面結(jié)合附圖和一個(gè)實(shí)例對(duì)本發(fā)明作進(jìn)一步說明?;诰仃嚪謮K的高速LDPC譯碼器的實(shí)現(xiàn)與構(gòu)造主要包括兩部分構(gòu)造具有分塊結(jié)構(gòu)校驗(yàn)矩陣的LDPC碼,并且構(gòu)造的碼字無小環(huán),從而保證了所構(gòu)造碼字的性能;對(duì)于具有分塊結(jié)構(gòu)校驗(yàn)矩陣的碼字,根據(jù)BP算法,利用部分并行譯碼結(jié)構(gòu)或全并行譯碼結(jié)構(gòu)對(duì)LDPC譯碼器進(jìn)行實(shí)現(xiàn)。設(shè)要設(shè)計(jì)的碼字為(1008,504),碼率為1/2,列重為『3,行重為j^6的規(guī)則LDPC碼,即碼字的信息位長為504、編碼后碼長為1008,則校驗(yàn)位長為Af=1008_504=504。則構(gòu)造具有分塊結(jié)構(gòu)校驗(yàn)矩陣碼字的過程如下1、選擇用于構(gòu)造校驗(yàn)矩陣的/(產(chǎn)6)個(gè)參數(shù),y-l,2…p。選擇方法如下(1)因?yàn)?04=23*32*7,504/(《一1)=504/2=252,故首先從自然數(shù)2251中將所有2的倍數(shù)、3的倍數(shù)和7的倍數(shù)劃掉,得到一個(gè)數(shù)的集合A。(2)每次從集合^中取/=6個(gè)數(shù),若這6個(gè)數(shù)滿足無4環(huán)的條件,則將這6個(gè)數(shù)作為一組保存下來,否則丟掉。若集合A中數(shù)的個(gè)數(shù)為丄,則所有6個(gè)數(shù)的組合的個(gè)數(shù)為《。將保存的數(shù)組構(gòu)成一個(gè)新的集合,記為^。(3)依次取出為中的每個(gè)數(shù)組,若數(shù)組中的數(shù)滿足無6環(huán)的條件,則將該數(shù)組保留,否則丟掉。將保存的數(shù)組構(gòu)成一個(gè)新的集合,記為為。(4)若只要求消除6環(huán),則從A中任取一組數(shù)作為a,即可。若還想消除更多的小環(huán),如消除8環(huán),則根據(jù)無8環(huán)的條件,從為中取出各個(gè)數(shù)組逐一驗(yàn)證,保留符合條件的數(shù)組;消除更多環(huán)的情況依此類推,最后從保留的數(shù)組中挑選一組作為^即可。按以上步驟,用計(jì)算機(jī)編程進(jìn)行搜索,得到滿足無6環(huán)的一組參數(shù)為"y=(31,37,41,47,61,79),下面校驗(yàn)矩陣的構(gòu)造即以此參數(shù)進(jìn)行。2、構(gòu)造校驗(yàn)矩陣,步驟如下(1)按方法6力=a/(mod504)+l,/=1,2…504,_/=1,2…6,=(31,37,41,47,61,79)得到{1,2,...,504}的6個(gè)重新排列。(2)生成矩陣乂,,y=l,2...6。其中《,,第一列中非0元素所在的行號(hào)為^,^,^,第二列中非0元素所在的行號(hào)為~4,~5,~6,依此類推。將6個(gè)~按圖3的結(jié)構(gòu)合并起來,即得到校驗(yàn)矩陣好。(3)將^第1列中非0元素所在的行-^(mod504)+l移至第1行,行612=2^(!110(1504)+1移至第1+504/3=169行,行613=3^(1110(1504)+1移至第1+2"04/3=337行;第2列中非0元素所在的行614=(3+l)^(mod504)+l移至第2行,行~3+。=(3+,>1(111(^504)+1移至第2+(/-1>504/3行,/=1,2,3;第_/歹U中非0元素所在的行6p(,闊-[3(y-l)+l]^(mod504)+l移至第y'行,行61[3()-1)+,=[3(_/-1)+/]"1(1110£1504)+1移至第y+(z'-l)x504/3行,/=1,2,3,/=1,2,…504/3。經(jīng)過以上步驟后,具有分塊校驗(yàn)矩陣的碼字(1008,504)即得到了,且校驗(yàn)矩陣中無6環(huán)。為了驗(yàn)證所構(gòu)造碼字的性能,在加性高斯白噪聲信道(AWGN)下,采用BPSK調(diào)制,用計(jì)算機(jī)編程對(duì)本發(fā)明所構(gòu)造的LDPC碼的誤碼率性能進(jìn)行了仿真,迭代次數(shù)20次,其性能如圖9所示。作為對(duì)比,圖9中還同時(shí)列出了MacKay隨機(jī)構(gòu)造的碼字的性能。從圖9中可以看出,按照本發(fā)明方法設(shè)計(jì)出來的碼字的性能與隨機(jī)構(gòu)造的碼字的性能基本相當(dāng),而且經(jīng)過很少的迭代次數(shù)(此處為20次)譯碼器就可以完成譯碼,大大縮短了譯碼的時(shí)間,這可以進(jìn)一步提高譯碼速度;而隨機(jī)構(gòu)造的碼字一般要迭代50次以上,才能得到正確的譯碼結(jié)果。最后一步便是在硬件上實(shí)現(xiàn)該(1008,504)碼譯碼器,可以實(shí)現(xiàn)并行處理的硬件很多,如VLSI(VeryLargeScaleIntegration)、ASIC(ApplicationSpecificIntegratedCircuit)、FPGA(FieldProgrammableGateArray)等,工程開發(fā)上以用FPGA的居多。因?yàn)樵摯a字行重為6,列重為3,故可以用^"1S個(gè)存儲(chǔ)器來存儲(chǔ)迭代信息,如果使用雙口RAM的話,則可以有6個(gè)校驗(yàn)節(jié)點(diǎn)迭代運(yùn)算(CNU)單元并行工作,12個(gè)變量節(jié)點(diǎn)迭代運(yùn)算(VNU)單元并行工作。此時(shí)完成一次校驗(yàn)節(jié)點(diǎn)迭代需要504/6=84個(gè)時(shí)鐘,完成一次變量節(jié)點(diǎn)迭代需要1008/12=84個(gè)時(shí)鐘,故完成一次迭代需要84+84=168個(gè)時(shí)鐘,迭代20次需要168><20-3360個(gè)時(shí)鐘,在這種情況下,譯碼器能夠達(dá)到的最大譯碼速度為工作時(shí)鐘xl008/336(XE作時(shí)鐘x0.3,若工作時(shí)鐘為lOOMHz的話,則譯碼器的最大譯碼速度為30Mbps。如果將上述18個(gè)基本存儲(chǔ)單元又分成若干個(gè)更小的存儲(chǔ)單元,則可以有更多的CNU單元和VNU單元并行工作,譯碼器能夠達(dá)到的譯碼速度將會(huì)更高。權(quán)利要求1、一種基于矩陣分塊的高速LDPC譯碼器實(shí)現(xiàn)方法,包括以下步驟第一步構(gòu)造具有分塊校驗(yàn)矩陣的LDPC碼(1)根據(jù)所需構(gòu)造碼字的最大行重p與最大列重q確定所構(gòu)造校驗(yàn)矩陣的分塊數(shù),為pq個(gè)分塊;(2)取p個(gè)自然數(shù)a1,a2......ap,滿足GCD(aj,M)=1且(q-1)aj<M,j=1,2…p;同時(shí)還要根據(jù)消除小環(huán)的條件,對(duì)該p個(gè)數(shù)a1,a2......ap進(jìn)行選取,使得所構(gòu)造的校驗(yàn)矩陣無小環(huán);(3)按方法bji=aji(modM)+1,i=1,2…M,j=1,2…p得到{1,2,...,M}的p個(gè)重新排列,式中M為校驗(yàn)矩陣的行數(shù);然后構(gòu)造矩陣Hi,j=1,2…p,方法為Hi,j第一列中非0元素所在的行號(hào)為bj1,bj2......bjq,第二列中非0元素所在的行號(hào)為bj(q+1),bj(q+2)......bj(2q),依此類推,再將p個(gè)Hi,j合并起來,即得到校驗(yàn)矩陣H;(4)對(duì)第(3)步所構(gòu)造的校驗(yàn)矩陣的行進(jìn)行重排,使重排后的校驗(yàn)矩陣具有分塊的結(jié)構(gòu),重排規(guī)則為將Hi,1第j列中非0元素所在的行b1[(j-1)q+i]=[(j-1)q+i]a1(modM)+1移至第j+(i-1)M/q行,i=1,2…q,j=1,2…M/q;(5)對(duì)于規(guī)則LDPC碼,到第(4)步后具有分塊結(jié)構(gòu)的校驗(yàn)矩陣即已構(gòu)造完成;對(duì)于非規(guī)則LDPC碼,只需再按照度分布規(guī)則將對(duì)應(yīng)分塊中的1變成0即可;第二步在LDPC碼的校驗(yàn)矩陣具有分塊結(jié)構(gòu)的情況下,對(duì)其實(shí)現(xiàn)高速并行譯碼(1)根據(jù)所要求的并行度及校驗(yàn)矩陣的分塊數(shù),確定需要的存儲(chǔ)單元的數(shù)目設(shè)每個(gè)分塊矩陣分存在n個(gè)存儲(chǔ)單元中,則需要npq個(gè)存儲(chǔ)L(qij)和npq個(gè)存儲(chǔ)L(rji)的存儲(chǔ)單元;(2)利用公式L(qij)=-ri初始化L(qij),初始化在npq個(gè)存儲(chǔ)單元中同時(shí)并行進(jìn)行;(3)利用式(6)<mathsid="math0001"num="0001"><math><![CDATA[<mrow><mi>L</mi><mrow><mo>(</mo><msub><mi>r</mi><mi>ji</mi></msub><mo>)</mo></mrow><mo>=</mo><mrow><mo>(</mo><munder><mi>Π</mi><mrow><msup><mi>i</mi><mo>′</mo></msup><mo>∈</mo><mi>N</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mo>\</mo><mi>i</mi></mrow></munder><msub><mi>α</mi><mrow><msup><mi>i</mi><mo>′</mo></msup><mi>j</mi></mrow></msub><mo>)</mo></mrow><mi>φ</mi><mo>[</mo><munder><mi>Σ</mi><mrow><msup><mi>i</mi><mo>′</mo></msup><mo>∈</mo><mi>N</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mo>\</mo><mi>i</mi></mrow></munder><mi>φ</mi><mrow><mo>(</mo><msub><mi>β</mi><mrow><msup><mi>i</mi><mo>′</mo></msup><mi>j</mi></mrow></msub><mo>)</mo></mrow><mo>]</mo><mo>≈</mo><mrow><mo>(</mo><munder><mi>Π</mi><mrow><msup><mi>i</mi><mo>′</mo></msup><mo>∈</mo><mi>N</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mo>\</mo><mi>i</mi></mrow></munder><msub><mi>α</mi><mrow><msup><mi>i</mi><mo>′</mo></msup><mi>j</mi></mrow></msub><mo>)</mo></mrow><mo>*</mo><mrow><mo>(</mo><munder><mi>min</mi><mrow><msup><mi>i</mi><mo>′</mo></msup><mo>∈</mo><mi>N</mi><mrow><mo>(</mo><mi>j</mi><mo>)</mo></mrow><mo>\</mo><mi>i</mi></mrow></munder><msub><mi>β</mi><mrow><msup><mi>i</mi><mo>′</mo></msup><mi>j</mi></mrow></msub><mo>)</mo></mrow><mo>*</mo><mi>η</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow>]]></math></maths>進(jìn)行校驗(yàn)節(jié)點(diǎn)迭代,設(shè)存儲(chǔ)器用的是雙口RAM,則有2nq個(gè)CNU單元同時(shí)并行工作;(4)利用式(7)和式(8)<mathsid="math0002"num="0002"><math><![CDATA[<mrow><mi>L</mi><mrow><mo>(</mo><msub><mi>q</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>=</mo><mi>L</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>+</mo><munder><mi>Σ</mi><mrow><mi>j</mi><mo>∈</mo><mi>M</mi><mrow><mo>(</mo><mi>i</mi><mo>)</mo></mrow></mrow></munder><mi>L</mi><mrow><mo>(</mo><msub><mi>r</mi><mi>ji</mi></msub><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>7</mn><mo>)</mo></mrow></mrow>]]></math></maths>L(qij)=L(qi)-L(rji)(8)進(jìn)行變量節(jié)點(diǎn)迭代,設(shè)存儲(chǔ)器用的是雙口RAM,則有2np個(gè)VNU單元同時(shí)工作;(5)利用式(9)<mathsid="math0003"num="0003"><math><![CDATA[<mrow><msub><mi>x</mi><mi>i</mi></msub><mo>=</mo><mfencedopen='{'close=''><mtable><mtr><mtd><mn>0</mn><mo>,</mo><mi>L</mi><mrow><mo>(</mo><msub><mi>q</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>≥</mo><mn>0</mn></mtd></mtr><mtr><mtd><mn>1</mn><mo>,</mo><mi>else</mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>9</mn><mo>)</mo></mrow></mrow>]]></math></maths>進(jìn)行判決,得到最終的譯碼結(jié)果。2、根據(jù)權(quán)利要求1所述的譯碼器實(shí)現(xiàn)方法,其特征在于第一步步驟(2)中所述消除小環(huán)的條件為所構(gòu)造的校驗(yàn)矩陣中無4環(huán)的條件為-《,"J2,V幾y.2e{l,2...p},_/l"'2所構(gòu)造的校驗(yàn)矩陣中無6環(huán)的條件為《,+《3,y/l,_/2,y.3e{l,2..Dl".2"'3(12)其中《i:fe^或(M-to力),*=1,2...(《-1),_/=1,2..;根據(jù)8環(huán)以及更大環(huán)的結(jié)構(gòu)圖,得到消去這些環(huán)的條件。全文摘要本發(fā)明涉及一種基于矩陣分塊的高速LDPC譯碼器實(shí)現(xiàn)方法,屬于信道編碼
技術(shù)領(lǐng)域:
。本發(fā)明的方法包括以下具體步驟(1)構(gòu)造具有分塊校驗(yàn)矩陣的LDPC碼首先利用代數(shù)的方法構(gòu)造一個(gè)校驗(yàn)矩陣,該校驗(yàn)矩陣中沒有小環(huán),以保證所構(gòu)造碼字的性能;然后按照一定的規(guī)則,對(duì)該校驗(yàn)矩陣的行進(jìn)行重排,使得重排后的校驗(yàn)矩陣具有分塊的結(jié)構(gòu)。(2)在LDPC碼的校驗(yàn)矩陣具有分塊結(jié)構(gòu)的情況下,對(duì)其實(shí)現(xiàn)高速并行譯碼。本發(fā)明的方法,可以在工程上實(shí)現(xiàn)LDPC碼的高速并行譯碼,譯碼復(fù)雜度很低,所構(gòu)造的碼字中無小環(huán),性能非常好,與隨機(jī)構(gòu)造的碼字性能相當(dāng)。文檔編號(hào)H03M13/00GK101335592SQ20081011781公開日2008年12月31日申請(qǐng)日期2008年8月4日優(yōu)先權(quán)日2008年8月4日發(fā)明者劉策倫,卜祥元,安建平,王忠勇申請(qǐng)人:北京理工大學(xué)