專利名稱:一種低密度校驗(yàn)碼的構(gòu)造方法、編碼器和譯碼器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及編碼技術(shù),尤其涉及一種低密度校驗(yàn)碼的構(gòu)造方法、編碼器和譯碼器。
背景技術(shù):
為了保證數(shù)據(jù)傳輸?shù)陌踩?,在無線通信等領(lǐng)域需要用到編碼技術(shù)。在各種編碼技術(shù)中,低密度校驗(yàn)(Low Density Parity Check Code,LDPC)碼已經(jīng)成為下一代衛(wèi)星數(shù)字視頻廣播標(biāo)準(zhǔn)(DVB-S2)的一項(xiàng)關(guān)鍵技術(shù),也是微波全球互操作系統(tǒng)(WiMAX)技術(shù)標(biāo)準(zhǔn)中可選的信道編碼技術(shù)之一。
LDPC碼是一種線性分組碼,即LDPC碼分為兩部分,分別為消息部分和冗余部分。其中的消息部分由信息比特組成,冗余部分由校驗(yàn)比特組成,消息部分的長(zhǎng)度除以LDPC碼長(zhǎng)度得到的商是該LDPC碼的速率。
對(duì)于任意一個(gè)LDPC碼,必然存在一個(gè)二維矩陣H,使得二維矩陣H與該LDPC碼的碼向量的乘積為0向量,該二維矩陣H即為所述LDPC碼的校驗(yàn)矩陣。
LDPC碼的校驗(yàn)矩陣中,每一行為1的元素的個(gè)數(shù)稱為該行的行重,每一列為1的元素的個(gè)數(shù)稱為該列的列重。當(dāng)校驗(yàn)矩陣的所有行重都相等,所有列重也都相等時(shí),該校驗(yàn)矩陣表示的LDPC碼為規(guī)則LDPC碼,否則,該校驗(yàn)矩陣表示的LDPC碼為非規(guī)則LDPC碼。經(jīng)研究表明,非規(guī)則LDPC碼的性能比規(guī)則LDPC碼的性能好。LDPC碼還分為有結(jié)構(gòu)的LDPC碼和隨機(jī)LDPC碼,其中,有結(jié)構(gòu)的LDPC碼多是循環(huán)或準(zhǔn)循環(huán)結(jié)構(gòu),編碼遠(yuǎn)比隨機(jī)LDPC碼簡(jiǎn)單,性能也更好,然而,有結(jié)構(gòu)的LDPC碼在碼長(zhǎng)、碼率等碼參數(shù)的選擇上不如隨機(jī)LDPC碼自由,例如,碼長(zhǎng)為2的冪次的有結(jié)構(gòu)的LDPC碼在短長(zhǎng)度上很難尋找到性能較好的碼。
LDPC碼可由其校驗(yàn)矩陣H唯一確定,因此,現(xiàn)有技術(shù)在中,通過求取待構(gòu)造LDPC碼的校驗(yàn)矩陣H來構(gòu)造LDPC碼,然后再根據(jù)求得的校驗(yàn)矩陣H設(shè)計(jì)LDPC編碼器和LDPC譯碼器。
現(xiàn)有由校驗(yàn)矩陣H構(gòu)造LDPC碼的典型方法有下三角式校驗(yàn)矩陣的LDPC碼構(gòu)造方法和類下三角式校驗(yàn)矩陣的LDPC碼構(gòu)造方法,下面對(duì)這兩種方法分別予以介紹。
一、下三角式校驗(yàn)矩陣的LDPC碼構(gòu)造方法 設(shè)LDPC碼的校驗(yàn)矩陣H為m×n維,且行滿秩,其中n為待構(gòu)造的LDPC碼的長(zhǎng)度。LDPC碼向量為行向量x,滿足HxT=0,其中xT是x的轉(zhuǎn)置。下三角式校驗(yàn)矩陣的LDPC碼構(gòu)造方法具體包括 先用高斯消元法將校驗(yàn)矩陣H化簡(jiǎn)為H=[H1,H2],其中H2為下三角形矩陣;然后將LDPC碼向量x分成兩部分,一部分為消息部分向量s,由n-m個(gè)信息比特構(gòu)成,另一部分是冗余部分向量p,由m個(gè)校驗(yàn)比特構(gòu)成,用公式表示則有x=(s,p)。按照以下步驟構(gòu)造一個(gè)LDPC編碼器 1)將n-m個(gè)信息比特作為向量s的元素; 2)利用下式遞歸計(jì)算校驗(yàn)比特pi其中,hi,j是校驗(yàn)矩陣H的第(i,j)個(gè)元素。
將校驗(yàn)矩陣H化簡(jiǎn)為H=[H1,H2]后構(gòu)造LDPC碼,計(jì)算的復(fù)雜度包括兩部分一是對(duì)校驗(yàn)矩陣H進(jìn)行高斯消元運(yùn)算的復(fù)雜度,為待構(gòu)造LDPC碼的長(zhǎng)度n的三次方的高階無窮小o(n3);二是計(jì)算m個(gè)校驗(yàn)比特的復(fù)雜度,為n的二次方的高階無窮小o(n2)。
二、類下三角形式校驗(yàn)矩陣的LDPC碼構(gòu)造方法 假設(shè)對(duì)校驗(yàn)矩陣只進(jìn)行行列變換,這時(shí)變換得到的新的校驗(yàn)矩陣依然為稀疏矩陣,設(shè)新的校驗(yàn)矩陣為 A,B,C,D,E,T分別是(m-g)×(n-m),(m-g)×g,g×(n-m),g×g,g×(m-g),(m-g)×(m-g)維矩陣,且都是稀疏矩陣,并且T是下三角矩陣。矩陣H左乘一矩陣得到 這樣,LDPC碼向量x=(s,p1,p2),s是為消息向量,p1,p2分別是校驗(yàn)向量,s長(zhǎng)為n-m,p1長(zhǎng)為g,p2長(zhǎng)為m-g。由HxT≡O(shè)(O為0向量)可得 設(shè)-ET-1B+D可逆,令
則
據(jù)此求出第一個(gè)校驗(yàn)向量p1的轉(zhuǎn)置p1T和第二個(gè)校驗(yàn)向量p2的轉(zhuǎn)置其中,p1T的總計(jì)算復(fù)雜度為O(n+g2),p2T的總計(jì)算復(fù)雜度為O(n)。
可見,現(xiàn)有技術(shù)在構(gòu)造LDPC碼時(shí),都是先通過數(shù)學(xué)運(yùn)算計(jì)算LDPC碼的校驗(yàn)矩陣,然后再根據(jù)校驗(yàn)矩陣來構(gòu)造LDPC碼。這種方法需要的運(yùn)算量很大,構(gòu)造LDPC碼和LDPC編碼及譯碼的復(fù)雜度較高。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明實(shí)施例的目的在于提供一種低密度校驗(yàn)碼的構(gòu)造方法、編碼器和譯碼器,以降低構(gòu)造LDPC碼、以及LDPC碼編碼或譯碼的復(fù)雜度。
為達(dá)到上述目的,本發(fā)明實(shí)施例的技術(shù)方案具體是這樣實(shí)現(xiàn)的 一種低密度校驗(yàn)LDPC碼的構(gòu)造方法,預(yù)先確定待構(gòu)造LDPC碼的碼長(zhǎng)和碼率,以及用于存儲(chǔ)LDPC碼的編碼矩陣的存儲(chǔ)空間,該方法還包括以下步驟 A、根據(jù)確定的碼長(zhǎng)和碼率,將待構(gòu)造LDPC碼的消息部分劃分為M個(gè)消息子集,將待構(gòu)造LDPC碼的冗余部分劃分為K個(gè)校驗(yàn)子集,將各個(gè)消息子集分別存儲(chǔ)在編碼矩陣的不同的行中,并在所述編碼矩陣中留出K行分別用于存儲(chǔ)各個(gè)校驗(yàn)子集;其中,M和K均為自然數(shù); B、根據(jù)確定的碼長(zhǎng)和碼率產(chǎn)生循環(huán)移位矩陣; C、根據(jù)生成的循環(huán)移位矩陣,將編碼矩陣中的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得各列的和值分別對(duì)應(yīng)存入所述編碼矩陣留出的用于存儲(chǔ)消息子集的同一行的相應(yīng)列中,作為一個(gè)校驗(yàn)子集的校驗(yàn)比特,判斷采用當(dāng)前的循環(huán)移位矩陣是否已產(chǎn)生K個(gè)校驗(yàn)子集,若是轉(zhuǎn)入步驟D,否則,根據(jù)所述循環(huán)移位矩陣將所述編碼矩陣中每一行的元素進(jìn)行行循環(huán)移位后,返回步驟C; D、根據(jù)編碼矩陣中的消息子集和校驗(yàn)子集得到LDPC碼,驗(yàn)證LDPC碼的性能是否滿足預(yù)定指標(biāo),若是,結(jié)束本流程,否則,返回步驟B。
一種LDPC碼的編碼器,該編碼器包括消息部分接收模塊、循環(huán)移位矩陣存儲(chǔ)模塊、冗余部分生成模塊、編碼矩陣和碼輸出模塊; 所述消息部分接收模塊,接收待構(gòu)造LDPC碼的消息部分,將所述消息部分劃分為M個(gè)消息子集并分別存儲(chǔ)在編碼矩陣的M行中; 所述循環(huán)移位矩陣存儲(chǔ)模塊,存儲(chǔ)有預(yù)先根據(jù)待構(gòu)造LDPC碼的校驗(yàn)矩陣產(chǎn)生的循環(huán)移位矩陣; 所述冗余部分生成模塊,根據(jù)所述循環(huán)移位矩陣存儲(chǔ)模塊中的循環(huán)移位矩陣將存儲(chǔ)在所述編碼矩陣中的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得結(jié)果分別存入所述編碼矩陣用于存儲(chǔ)校驗(yàn)子集的同一行的相應(yīng)列中,作為一個(gè)校驗(yàn)子集的校驗(yàn)比特,根據(jù)循環(huán)移位矩陣對(duì)編碼矩陣的元素進(jìn)行行循環(huán)移位,根據(jù)循環(huán)移位矩陣將存儲(chǔ)在所述編碼矩陣的消息子集和已生成的校驗(yàn)子集按列分別并行地對(duì)各列中的元素進(jìn)行異或加以產(chǎn)生下一校驗(yàn)子集,直至產(chǎn)生所有的校驗(yàn)子集,向所述碼輸出模塊發(fā)送輸出指示; 所述編碼矩陣,用于存儲(chǔ)消息子集和校驗(yàn)子集; 所述碼輸出模塊,用于收到來自冗余部分生成模塊的輸出指示后,根據(jù)編碼矩陣的消息子集和校驗(yàn)子集輸出LDPC碼。
一種LDPC碼的譯碼器,該譯碼器包括LDPC碼接收模塊、LDPC碼存儲(chǔ)矩陣、循環(huán)移位模塊、校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊和糾錯(cuò)模塊; 所述LDPC碼接收模塊,用于接收LDPC碼,將所述LDPC碼的消息部分和冗余部分分別劃分為M個(gè)消息子集和K個(gè)校驗(yàn)子集,將各個(gè)消息子集和校驗(yàn)子集分別存儲(chǔ)在LDPC碼存儲(chǔ)矩陣的不同的行中; 所述LDPC碼存儲(chǔ)矩陣,用于在不同的行中存儲(chǔ)各個(gè)消息子集和校驗(yàn)子集,根據(jù)來自糾錯(cuò)模塊的糾錯(cuò)指示對(duì)存儲(chǔ)的LDPC碼進(jìn)行糾錯(cuò); 所述循環(huán)移位模塊,存儲(chǔ)有預(yù)先根據(jù)LDPC碼的校驗(yàn)矩陣產(chǎn)生的循環(huán)移位矩陣,接收校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊的移位指示,根據(jù)所述循環(huán)移位矩陣對(duì)LDPC碼存儲(chǔ)矩陣中的元素進(jìn)行行循環(huán)移位; 所述校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊,將LDPC碼存儲(chǔ)矩陣中的元素按列分別并行地根據(jù)校驗(yàn)方程生成校驗(yàn)節(jié)點(diǎn)并存儲(chǔ),在需要繼續(xù)產(chǎn)生校驗(yàn)節(jié)點(diǎn)時(shí),向所述循環(huán)移位模塊發(fā)送移位指示; 所述糾錯(cuò)模塊,根據(jù)校驗(yàn)節(jié)點(diǎn)的值向所述LDPC碼存儲(chǔ)矩陣發(fā)送糾錯(cuò)指示。
可見,本發(fā)明實(shí)施例中,將待構(gòu)造LDPC碼的消息部分劃分為M個(gè)消息子集,并存儲(chǔ)在編碼矩陣的不同的行中,將待構(gòu)造LDPC碼的冗余部分劃分為K個(gè)校驗(yàn)子集,并在編碼矩陣中預(yù)留K行用于存儲(chǔ)校驗(yàn)子集;根據(jù)LDPC碼的碼長(zhǎng)和碼率產(chǎn)生循環(huán)移位矩陣,在每次將編碼矩陣中的元素按列分別進(jìn)行異或加之前,通過根據(jù)所述循環(huán)移位矩陣對(duì)編碼矩陣中的元素進(jìn)行行循環(huán)移位,使得對(duì)于編碼矩陣中的同一列,參與所述異或加的信息比特和校驗(yàn)比特各次不同,進(jìn)而由所述異或加產(chǎn)生不同的校驗(yàn)比特,因此,通過搜索循環(huán)移位矩陣,本發(fā)明實(shí)施例即可構(gòu)造出LDPC碼,與現(xiàn)有技術(shù)中大量的矩陣運(yùn)算相比,本發(fā)明降低了構(gòu)造LDPC碼以及LDPC碼編碼和譯碼的復(fù)雜度。
由于每次將編碼矩陣中的元素按列分別進(jìn)行異或加時(shí),各列元素的異或加是并行進(jìn)行的,因而一次可產(chǎn)生多個(gè)校驗(yàn)比特,加快了構(gòu)造LDPC碼、以及LDPC碼編碼和譯碼的速度。
圖1是本發(fā)明實(shí)施例提供的構(gòu)造LDPC碼的示意圖; 圖2是本發(fā)明實(shí)施例提供的LDPC碼的構(gòu)造方法流程圖; 圖3是碼長(zhǎng)為256位、碼率為0.5的LDPC碼的構(gòu)造方法流程圖; 圖4是在AWGN信道下進(jìn)行仿真得到的誤碼率效果圖; 圖5是在AWGN信道下進(jìn)行仿真得到的誤字率效果圖; 圖6是本發(fā)明實(shí)施例提供的LDPC碼編碼器結(jié)構(gòu)圖; 圖7是本發(fā)明實(shí)施例提供的LDPC碼譯碼器第一結(jié)構(gòu)圖; 圖8是本發(fā)明實(shí)施例提供的LDPC碼編碼器第二結(jié)構(gòu)圖。
具體實(shí)施例方式 為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。
圖1是本發(fā)明實(shí)施例提供的構(gòu)造LDPC碼的示意圖。下面結(jié)合圖1,對(duì)LDPC碼的構(gòu)造方法進(jìn)行簡(jiǎn)單介紹 圖1示出了用于存儲(chǔ)待構(gòu)造的LDPC碼的編碼矩陣和用于構(gòu)造LDPC碼的異或加法器。將待構(gòu)造的LDPC碼的消息部分的信息比特輸入到編碼矩陣中,其中,所述消息部分的信息比特?cái)?shù)目是預(yù)先確定的,具體確定方法為根據(jù)預(yù)先確定的LDPC碼的碼長(zhǎng)和碼率計(jì)算構(gòu)造當(dāng)前的LDPC碼所需要的信息比特?cái)?shù)目,例如,如果碼長(zhǎng)是256,碼率是0.5,那么需要輸入的信息比特?cái)?shù)目即為128,輸入編碼矩陣的128個(gè)信息比特即為當(dāng)前待構(gòu)造的LDPC碼的消息部分。
將輸入的信息比特劃分為M個(gè)消息子集,各個(gè)消息子集存儲(chǔ)在編碼矩陣的不同的行中,其中M的值是待構(gòu)造LDPC碼的校驗(yàn)矩陣的最小行重減去1得到的差,其中,LDPC碼的最小行重可以由LDPC碼的碼長(zhǎng)和碼率預(yù)先進(jìn)行選擇,具體選擇方法為現(xiàn)有技術(shù)。在圖1中,M個(gè)消息子集分別存儲(chǔ)在編碼矩陣的前M行中,如圖1所示,第一個(gè)消息子集的信息比特s(1,1)、s(1,2)......s(1,n-1)、s(1,n)存儲(chǔ)在編碼矩陣的第一行中,第二個(gè)消息子集的信息比特s(2,1)、s(2,2)......s(2,n-1)、s(2,n)存儲(chǔ)在編碼矩陣的第二行中,依此類推,第M個(gè)消息子集存儲(chǔ)在編碼矩陣的第M行中。
根據(jù)待構(gòu)造LDPC碼的碼長(zhǎng)和碼率以及消息部分的長(zhǎng)度,可以確定待構(gòu)造的LDPC碼的冗余部分的長(zhǎng)度,將冗余部分劃分為K個(gè)校驗(yàn)子集,并在編碼矩陣中為每個(gè)校驗(yàn)子集預(yù)留一行存儲(chǔ)空間。其中的K是根據(jù)M確定的,具體確定方法請(qǐng)見圖2中的相關(guān)說明。
對(duì)存儲(chǔ)在編碼矩陣中所有存儲(chǔ)了消息子集或者校驗(yàn)子集的行中的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得結(jié)果作為一個(gè)校驗(yàn)子集的校驗(yàn)比特存入編碼矩陣既沒有存儲(chǔ)消息子集也沒有存儲(chǔ)校驗(yàn)子集的行的相應(yīng)列中。在圖1中,首先對(duì)M行信息比特按列分別并行地對(duì)各列中的信息比特進(jìn)行異或加,所得結(jié)果分別存入相應(yīng)列的下一行中,這樣,在第M+1行中就存儲(chǔ)了由LDPC碼的消息部分生成的一個(gè)校驗(yàn)子集,即圖1中的p(1,1)、p(1,2)......p(1,n-1)、p(1,n)。之后再生成校驗(yàn)子集時(shí),先將編碼矩陣中的元素按照預(yù)先生成的循環(huán)移位矩陣進(jìn)行行循環(huán)移位,由編碼矩陣中的消息子集和校驗(yàn)子集按列分別并行地對(duì)各列中的信息比特和校驗(yàn)比特進(jìn)行異或加,產(chǎn)生新的校驗(yàn)子集并存入編碼矩陣中的下一行,直至產(chǎn)生所有的校驗(yàn)子集。由消息子集和校驗(yàn)子集即可構(gòu)成LDPC碼。
圖1中的異或加法器只是示意圖,表示對(duì)編碼矩陣的元素按列并行地對(duì)各列中的元素進(jìn)行異或加,將異或加所得的結(jié)果存儲(chǔ)到編碼矩陣的下一行對(duì)應(yīng)該各列的列中。實(shí)際應(yīng)用中,可以為編碼矩陣的每一列均設(shè)置一個(gè)異或加門電路,該異或加門電路用于對(duì)該列的元素進(jìn)行異或加操作,并將異或加得到的和存儲(chǔ)到下一行對(duì)應(yīng)該列的列中,各個(gè)異或加門電路并行動(dòng)作,從而對(duì)編碼矩陣的元素實(shí)現(xiàn)按列并行地分別進(jìn)行異或加操作。
下面結(jié)合圖2,對(duì)LDPC碼的構(gòu)造方法進(jìn)行詳細(xì)介紹。
圖2是本發(fā)明實(shí)施例提供的LDPC碼的構(gòu)造方法流程圖,如圖2所示,該方法包括 步驟201,將待構(gòu)造LDPC碼的消息部分劃分為M個(gè)消息子集并存儲(chǔ),將待構(gòu)造LDPC碼的冗余部分劃分為K個(gè)校驗(yàn)子集并預(yù)留存儲(chǔ)空間。
本步驟中,預(yù)先確定待構(gòu)造LDPC碼的碼長(zhǎng)和碼率,以及用于存儲(chǔ)LDPC碼的編碼矩陣的存儲(chǔ)空間,根據(jù)確定的的碼長(zhǎng)和碼率將待構(gòu)造LDPC碼的消息部分劃分為M個(gè)消息子集,將待構(gòu)造LDPC碼的冗余部分劃分為K個(gè)校驗(yàn)子集,將各個(gè)消息子集分別存儲(chǔ)在編碼矩陣不同的行中,并在所述編碼矩陣中留出K行分別用于存儲(chǔ)各個(gè)校驗(yàn)子集,M和K均為自然數(shù)。
具體地,M的值可以是LDPC碼的校驗(yàn)矩陣的最小行重減去1得到的差,其中,LDPC碼的最小行重可以由LDPC碼的碼長(zhǎng)和碼率預(yù)先進(jìn)行選擇,具體選擇方法為現(xiàn)有技術(shù)。
M的值確定以后,即可確定編碼矩陣的列數(shù),具體地,如果LDPC碼的消息部分的長(zhǎng)度能夠整除M,則編碼矩陣的列數(shù)N是所述整除得到的商,否則,N是所述消息部分的長(zhǎng)度除以M得到的商加上1的和。
N的值確定以后,校驗(yàn)子集的數(shù)目K也是可以確定的,具體方法為如果LDPC碼的冗余部分的長(zhǎng)度能夠整除N,則K是所述整除得到的商,否則,K是所述消息部分的長(zhǎng)度除以N得到的商加上1的和。K的值確定以后,即可在編碼矩陣中預(yù)留K行用于存儲(chǔ)K個(gè)校驗(yàn)子集,其中,所述K行中的每一行存儲(chǔ)一個(gè)校驗(yàn)子集。
步驟202,根據(jù)待構(gòu)造LDPC碼的碼長(zhǎng)和碼率產(chǎn)生循環(huán)移位矩陣。
本步驟中,將待構(gòu)造LDPC碼的校驗(yàn)矩陣劃分為用于與LDPC碼的消息部分相乘的第一矩陣Hs、和用于與LDPC碼的冗余部分相乘的第二矩陣Hp,其中,Hs是隨機(jī)矩陣,Hp是結(jié)構(gòu)化矩陣。具體地,Hp的結(jié)構(gòu)為將Hp分塊,其中的行塊數(shù)和列塊數(shù)均是校驗(yàn)子集的數(shù)目,Hp的對(duì)角線上的分塊矩陣是單位陣,右上三角的分塊矩陣均是0矩陣,左下三角的分塊矩陣是0矩陣和置換矩陣。
對(duì)于較短的LDPC碼,例如長(zhǎng)度小于2000的LDPC碼,先根據(jù)碼長(zhǎng)、碼率等參數(shù)確定編碼矩陣的維數(shù)和校驗(yàn)子集的數(shù)目,進(jìn)而確定Hp的結(jié)構(gòu);對(duì)于較長(zhǎng)的LDPC碼,先進(jìn)行度分布優(yōu)化設(shè)計(jì),根據(jù)度分布優(yōu)化結(jié)果確定編碼矩陣的維數(shù)和校驗(yàn)子集的數(shù)目,進(jìn)而確定Hp的結(jié)構(gòu)。其中,如何進(jìn)行度分布優(yōu)化設(shè)計(jì)是現(xiàn)有技術(shù)。
由于本發(fā)明實(shí)施例中將校驗(yàn)矩陣分為了隨機(jī)結(jié)構(gòu)的Hs和結(jié)構(gòu)化的Hp,因此,本發(fā)明實(shí)施例中要構(gòu)造的LDPC碼實(shí)際上是一種半隨機(jī)結(jié)構(gòu)的碼,與現(xiàn)有技術(shù)中的有結(jié)構(gòu)的LDPC碼和隨機(jī)LDPC碼相比,這種半隨機(jī)結(jié)構(gòu)的LDPC碼能夠兼顧在碼長(zhǎng)、碼率等碼參數(shù)的選擇上的自由性以及碼的性能。
循環(huán)移位矩陣的元素的值和有效性可以根據(jù)Hs和Hp中為1的元素所在的位置確定,其中,循環(huán)移位矩陣的第i行第j列的元素的值表示,采用當(dāng)前的循環(huán)移位矩陣產(chǎn)生第i+1個(gè)校驗(yàn)子集時(shí),對(duì)編碼矩陣的第j行元素進(jìn)行行循環(huán)移位的位數(shù)和方向;循環(huán)移位矩陣的第i行第j列的元素的有效性表示,采用當(dāng)前的循環(huán)移位矩陣將編碼矩陣中的元素按列分別并行地進(jìn)行異或加以產(chǎn)生第i+1個(gè)校驗(yàn)子集時(shí),編碼矩陣的第j行元素是否參與所述異或加運(yùn)算。
由于Hs是隨機(jī)的,Hp是結(jié)構(gòu)化的,因此,循環(huán)移位矩陣中與Hs對(duì)應(yīng)的元素的值和有效性、即用于表示對(duì)編碼矩陣中的消息子集進(jìn)行循環(huán)移位的元素的值和有效性是可以隨機(jī)產(chǎn)生的,而循環(huán)移位矩陣中與Hp對(duì)應(yīng)的元素的值和有效性需要與Hp的結(jié)構(gòu)相對(duì)應(yīng)。鑒于上述Hp的結(jié)構(gòu),具體地,循環(huán)移位矩陣中與Hp的左下角的分塊矩陣對(duì)應(yīng)的元素的值和有效性隨機(jī)產(chǎn)生,循環(huán)移位矩陣中與Hp的其他分塊矩陣對(duì)應(yīng)的元素保持為無效。
鑒于上述對(duì)Hs、Hp和循環(huán)移位矩陣之間的關(guān)系的分析,如果產(chǎn)生了循環(huán)移位矩陣,那么相應(yīng)地Hs和Hp也就確定了,LDPC碼的校驗(yàn)矩陣也確定了。在產(chǎn)生循環(huán)移位矩陣時(shí),保證循環(huán)移位矩陣中與Hp的左下角分塊矩陣對(duì)應(yīng)的元素是無效的,循環(huán)移位矩陣中的其他元素則可以隨機(jī)地產(chǎn)生。這樣,通過搜索循環(huán)移位矩陣,即可以搜索LDPC碼的校驗(yàn)矩陣。
步驟203,根據(jù)循環(huán)移位矩陣產(chǎn)生校驗(yàn)子集并存儲(chǔ)。
本步驟中的校驗(yàn)子集分成兩部分,第一部分校驗(yàn)子集完全由消息子集產(chǎn)生,第二部分校驗(yàn)子集由消息子集和已經(jīng)生成的校驗(yàn)子集產(chǎn)生。具體地 當(dāng)編碼矩陣中只有消息子集時(shí),根據(jù)所述循環(huán)移位矩陣將編碼矩陣中的消息子集按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得結(jié)果分別存入所述編碼矩陣未存儲(chǔ)有消息子集和校驗(yàn)子集的同一行的相應(yīng)列中,作為一個(gè)校驗(yàn)子集的校驗(yàn)比特。
當(dāng)編碼矩陣中既有消息子集也有校驗(yàn)子集時(shí),先根據(jù)循環(huán)移位矩陣對(duì)編碼矩陣中的消息子集和校驗(yàn)子集進(jìn)行行循環(huán)移位,然后再將編碼矩陣中的消息比特和校驗(yàn)比特按列分別并行地進(jìn)行異或加,所得結(jié)果分別存入所述編碼矩陣留出的用于存儲(chǔ)校驗(yàn)子集的同一行的相應(yīng)列中,作為一個(gè)校驗(yàn)子集的校驗(yàn)比特。
其中,根據(jù)循環(huán)移位矩陣對(duì)編碼矩陣中的消息子集和校驗(yàn)子集進(jìn)行行循環(huán)移位時(shí),循環(huán)移位矩陣的行數(shù)表示對(duì)編碼矩陣中的元素進(jìn)行行循環(huán)移位的次數(shù),由于只有產(chǎn)生第一個(gè)校驗(yàn)子集時(shí)不需要對(duì)編碼矩陣中的元素進(jìn)行行循環(huán)移位,因此,循環(huán)移位矩陣的行數(shù)應(yīng)不小于K減去1得到的差。
循環(huán)移位矩陣每一行中的各列元素的值表示,采用循環(huán)移位矩陣中的當(dāng)前行元素對(duì)編碼矩陣中的消息子集和校驗(yàn)子集進(jìn)行行循環(huán)移位時(shí),對(duì)編碼矩陣中的各行元素進(jìn)行循環(huán)移位的位數(shù)和方向。循環(huán)移位矩陣每一行中的各列元素的有效性表示,對(duì)編碼矩陣中的各列元素進(jìn)行異或加時(shí),相應(yīng)行元素是否參與所述異或加。由于每列元素進(jìn)行異或加時(shí),參與所述異或加運(yùn)算的元素個(gè)數(shù)等于LDPC碼的校驗(yàn)矩陣的某一個(gè)行重減去1得到的差,因此,循環(huán)移位矩陣的列數(shù)不小于LDPC碼的最大行重減去1得到的差。
具體地,根據(jù)循環(huán)移位矩陣對(duì)編碼矩陣中的消息子集和校驗(yàn)子集進(jìn)行行循環(huán)移位的方法可以為 當(dāng)采用當(dāng)前的循環(huán)移位矩陣將編碼矩陣中的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加以產(chǎn)生第i+1個(gè)校驗(yàn)子集時(shí),即采用當(dāng)前的循環(huán)移位矩陣第i+1次進(jìn)入步驟203時(shí),如果循環(huán)移位矩陣的第i行第j列的元素有效,則按照循環(huán)移位矩陣的第i行第j列的元素的值對(duì)編碼矩陣的第j行元素進(jìn)行行循環(huán)移位,而且編碼矩陣的第j行元素參與按列分別并行地將編碼矩陣中的各列元素進(jìn)行異或加的運(yùn)算,否則不必對(duì)編碼矩陣的第j行元素進(jìn)行循環(huán)移位,所述第j行元素也不參與所述異或加運(yùn)算。
本步驟中,由于一個(gè)校驗(yàn)子集的所有效驗(yàn)比特是并行產(chǎn)生的,因此,可以一次產(chǎn)生一個(gè)完整的校驗(yàn)子集,提高了構(gòu)造LDPC碼的速度。
步驟204,判斷采用當(dāng)前的循環(huán)移位矩陣是否已產(chǎn)生K個(gè)校驗(yàn)子集,若是,進(jìn)入步驟205,否則,返回步驟203。
本步驟中,若已產(chǎn)生了K個(gè)校驗(yàn)子集,則說明已構(gòu)造出一個(gè)LDPC碼;如果產(chǎn)生的校驗(yàn)子集數(shù)目小于K,說明還需要采用當(dāng)前的循環(huán)移位矩陣?yán)^續(xù)產(chǎn)生校驗(yàn)子集。
步驟205,根據(jù)編碼矩陣中的消息子集和校驗(yàn)子集得到LDPC碼。
由于LDPC碼是由消息子集和校驗(yàn)子集構(gòu)成的,因此,得到了消息子集和校驗(yàn)子集自然也就得到了LDPC碼。
步驟206,驗(yàn)證LDPC碼的性能是否滿足預(yù)定指標(biāo),若是,結(jié)束本流程,否則,返回步驟202。
本步驟中,對(duì)于碼長(zhǎng)較短(例如碼長(zhǎng)小于2000)的LDPC碼,可以采用蒙特卡洛仿真分析LDPC碼的性能是否滿足預(yù)定指標(biāo),對(duì)于碼長(zhǎng)較長(zhǎng)(例如碼長(zhǎng)不小于2000)的LDPC碼,可以采用圖論和/或密度進(jìn)化理論分析LDPC碼的性能是否滿足預(yù)定指標(biāo)。
下面結(jié)合具體的實(shí)例對(duì)LDPC碼的構(gòu)造方法進(jìn)行介紹。
圖3是碼長(zhǎng)為256位、碼率為0.5的LDPC碼的構(gòu)造方法流程圖,如圖3所示,該方法包括 步驟301,將LDPC碼的消息部分劃分為4個(gè)消息子集并存儲(chǔ),將LDPC碼的冗余部分劃分為4個(gè)校驗(yàn)子集并預(yù)留存儲(chǔ)空間。
碼長(zhǎng)為256位、碼率為0.5的LDPC碼的度分布公式可以為λ(x)=0.25x4+0.75x5和ρ(x)=0.125+0.25x+0.25x2+0.375x3,可見,LDPC碼的最小行重為5,所以消息子集的數(shù)目取為4,即最小行重減去1的差。
LDPC碼的消息部分的長(zhǎng)度是256×0.5=128位,相應(yīng)地,冗余部分的長(zhǎng)度為256-128=128位,編碼矩陣的列數(shù)根據(jù)消息部分的長(zhǎng)度除以消息子集的數(shù)目得到,校驗(yàn)子集的數(shù)目根據(jù)冗余部分的長(zhǎng)度除以編碼矩陣的列數(shù)得到,在本實(shí)例中,編碼矩陣的列數(shù)是128/4=32,校驗(yàn)子集的數(shù)目是128/32=4。
因此,采用一個(gè)8×32的二維矩陣作為編碼矩陣,可以用該編碼矩陣的前4行分別存儲(chǔ)4個(gè)消息子集,后四行被預(yù)留用于存儲(chǔ)4個(gè)校驗(yàn)子集。其中,每個(gè)消息子集由32個(gè)信息比特組成,每個(gè)校驗(yàn)子集由32個(gè)校驗(yàn)比特組成。
步驟302,產(chǎn)生循環(huán)移位矩陣。
本步驟中,將LDPC碼的校驗(yàn)矩陣H劃分為Hs和Hp兩部分,其中Hs用于與消息子集相乘,Hp用于與校驗(yàn)子集相乘,具體地H=[Hs Hp], 其中I為32X32的單位陣,O為32X32的0矩陣,PiP(i=1,2,3,4)為置換矩陣,Hs是隨機(jī)矩陣。
Hs中為1的元素的位置表示生成校驗(yàn)比特時(shí)參與異或加的信息比特在消息部分中的位置,Hp中為1的元素的位置表示生成校驗(yàn)比特時(shí)參與異或加的校驗(yàn)比特在冗余部分中的位置。
產(chǎn)生3×7的循環(huán)移位矩陣RR中前4列的元素與Hs對(duì)應(yīng),具體地,前4列元素中的第一行元素對(duì)應(yīng)Hs,2,前4列元素中的第二行元素對(duì)應(yīng)Hs,3,前4列元素中的第三行元素對(duì)應(yīng)Hs,4,RR中前4列的元素都是隨機(jī)產(chǎn)生的,該前四列元素產(chǎn)生后,Hs也就相應(yīng)地確定了。RR中的第1行第6、7列元素和第2行第7列元素分別對(duì)應(yīng)Hp中第2行第2、3列元素和第3行第3列元素,需要保持為無效,RR中的第6、7、8列中的其他元素對(duì)應(yīng)Hp中的左下角的分塊矩陣,具體地,P1P對(duì)應(yīng)RR中第1行第5列的元素,P2P對(duì)應(yīng)RR中第2行第6列的元素,P3P對(duì)應(yīng)RR中第3行第6列的元素,P4P對(duì)應(yīng)RR中第3行第7列的元素,該其他元素可以隨機(jī)產(chǎn)生,該其他元素產(chǎn)生后,Hp也就相應(yīng)地確定了。
RR的元素為正表示向左循環(huán)移位,為負(fù)表示向右循環(huán)移位,元素的絕對(duì)值表示循環(huán)移位的位數(shù),X表示該元素所對(duì)應(yīng)的編碼矩陣的行不參與當(dāng)前的異或加運(yùn)算。由于在只根據(jù)消息子集產(chǎn)生校驗(yàn)子集時(shí)不需要對(duì)編碼矩陣中的元素進(jìn)行循環(huán)移位,因此RR的行數(shù)為3,RR的第一行表示產(chǎn)生第二個(gè)校驗(yàn)子集時(shí),第一行信息比特不移位、第二行信息比特循環(huán)右移10位、第三行信息比特循環(huán)右移11位、第四行信息比特循環(huán)左移2位、第一個(gè)校驗(yàn)子集循環(huán)右移7位,進(jìn)行上述循環(huán)移位后,將第1~4行信息比特和第1個(gè)校驗(yàn)子集中的元素按列分別并行地進(jìn)行異或加,得到第二個(gè)校驗(yàn)子集。依次類推,RR的第二行表示對(duì)第1~4行信息比特和第二個(gè)校驗(yàn)子集進(jìn)行循環(huán)移位,然后由第1~4行信息比特和第二個(gè)校驗(yàn)子集得到第三個(gè)校驗(yàn)子集,RR的第三行表示對(duì)第2~4行信息比特和第2~3個(gè)校驗(yàn)子集進(jìn)行循環(huán)移位,然后由第2~4行信息比特和第2~3個(gè)校驗(yàn)子集得到第四個(gè)校驗(yàn)子集。
步驟303,根據(jù)循環(huán)移位矩陣構(gòu)造LDPC碼。
由步驟302中對(duì)循環(huán)移位矩陣的介紹可知,可以用數(shù)學(xué)公式將LDPC碼的構(gòu)造過程表示為 步驟304,在加性白高斯噪聲(Additive White Gaussion Noise,AWGN)信道下進(jìn)行蒙特卡洛仿真評(píng)估所構(gòu)造的LDPC碼的性能。
本步驟中,對(duì)采用本發(fā)明方法構(gòu)造的LDPC碼采用BPSK進(jìn)行調(diào)制并在AWGN信道下進(jìn)行了仿真,同時(shí)對(duì)采用現(xiàn)有技術(shù)的方法構(gòu)造得到的各種碼也在AWGN信道下進(jìn)行了仿真,以比較采用本發(fā)明方法構(gòu)造的LDPC碼和采用現(xiàn)有技術(shù)方法構(gòu)造的碼的性能,具體請(qǐng)見圖4和圖5。
圖4是在AWGN信道下進(jìn)行仿真得到的誤碼率效果圖。圖4的橫坐標(biāo)是分貝(dB),縱坐標(biāo)是誤碼率。
圖5是在AWGN信道下進(jìn)行仿真得到的誤字率效果圖。圖5的橫坐標(biāo)是dB,縱坐標(biāo)是誤字率。
圖4和圖5中帶圓圈標(biāo)記的曲線分別代表的是采用本發(fā)明方法產(chǎn)生的LDPC(128,256)碼的誤碼率和誤字率、帶雪花標(biāo)記的曲線分別代表的是第三代伙伴計(jì)劃(3rd Generation Partnership Project,3GPP)Turbo(128,256)碼的誤碼率和誤字率、帶菱形標(biāo)記的曲線分別代表的是隨機(jī)構(gòu)造的非規(guī)則LDPC(128,256)碼的誤碼率和誤字率,帶正方形標(biāo)記的曲線分別代表的是規(guī)則LDPC(128,256,3,6)碼的誤碼率和誤字率、帶三角標(biāo)記的曲線分別代表的是3GPP卷積碼的誤碼率和誤字率。其中的(128,256)表示碼的長(zhǎng)度為256位、消息部分長(zhǎng)度為128位;(128,256,3,6)表示碼的長(zhǎng)度為256位、消息部分長(zhǎng)度為128位、行重為3、列重為6。
由圖4和圖5可見,與采用現(xiàn)有技術(shù)的方法得到的Turbo碼、或非規(guī)則LDPC碼、或規(guī)則LDPC碼、或卷積碼相比,采用本發(fā)明方法產(chǎn)生的LDPC碼均具有較低的誤碼率和誤字率。
下面給出LDPC碼的編碼器和譯碼器的實(shí)施例。
圖6是本發(fā)明實(shí)施例提供的LDPC碼編碼器第一結(jié)構(gòu)圖,如圖6所示,該編碼器包括消息部分接收模塊601、循環(huán)移位矩陣存儲(chǔ)模塊602、冗余部分生成模塊603、編碼矩陣604和碼輸出模塊605。
消息部分接收模塊601,接收待構(gòu)造LDPC碼的消息部分,將所述消息部分劃分為M個(gè)消息子集并分別存儲(chǔ)在編碼矩陣604的M行中。
循環(huán)移位矩陣存儲(chǔ)模塊602,存儲(chǔ)有預(yù)先根據(jù)待構(gòu)造LDPC碼的校驗(yàn)矩陣產(chǎn)生的循環(huán)移位矩陣。
冗余部分生成模塊603,根據(jù)循環(huán)移位矩陣存儲(chǔ)模塊602中的循環(huán)移位矩陣將存儲(chǔ)在編碼矩陣604中的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得結(jié)果分別存入所述編碼矩陣用于校驗(yàn)子集的同一行的相應(yīng)列中,作為一個(gè)校驗(yàn)子集的校驗(yàn)比特,根據(jù)循環(huán)移位矩陣對(duì)編碼矩陣的元素進(jìn)行行循環(huán)移位,根據(jù)循環(huán)移位矩陣將存儲(chǔ)在編碼矩陣604的消息子集和已生成的校驗(yàn)子集按列分別并行地對(duì)各列中的元素進(jìn)行異或加以產(chǎn)生下一校驗(yàn)子集,直至產(chǎn)生所有的校驗(yàn)子集,向碼輸出模塊605發(fā)送輸出指示。
編碼矩陣604,用于存儲(chǔ)消息子集和校驗(yàn)子集。
碼輸出模塊605,用于收到來自冗余部分生成模塊603的輸出指示后,根據(jù)編碼矩陣604的消息子集和校驗(yàn)子集輸出LDPC碼。
圖7是本發(fā)明實(shí)施例提供的LDPC碼編碼器第二結(jié)構(gòu)圖。圖7中的消息部分接收模塊601、循環(huán)移位矩陣存儲(chǔ)模塊602、編碼矩陣604和碼輸出模塊605與圖6中的消息部分接收模塊601、循環(huán)移位矩陣存儲(chǔ)模塊602、編碼矩陣604和碼輸出模塊605分別對(duì)應(yīng)相同,圖7中的冗余部分生成模塊603包括第一部分校驗(yàn)子集生成模塊6031和第二部分校驗(yàn)子集生成模塊6032。
第一部分校驗(yàn)子集生成模塊6031,根據(jù)循環(huán)移位矩陣存儲(chǔ)模塊602中的循環(huán)移位矩陣將存儲(chǔ)在編碼矩陣604的M行消息子集按列分別并行地進(jìn)行異或加,所得結(jié)果分別存入編碼矩陣604用于存儲(chǔ)第一部分校驗(yàn)子集的同一行的相應(yīng)列中,作為第一部分校驗(yàn)子集的校驗(yàn)比特,向第二部分校驗(yàn)子集生成模塊6032發(fā)送生成指示。
第二部分校驗(yàn)子集生成模塊6032,接收第一部分校驗(yàn)子集生成模塊6031的生成指示,根據(jù)循環(huán)移位矩陣存儲(chǔ)模塊602將編碼矩陣604中的消息子集和已生成的校驗(yàn)子集進(jìn)行行循環(huán)移位,根據(jù)循環(huán)移位矩陣存儲(chǔ)模塊602將循環(huán)移位后的編碼矩陣604的消息子集和已生成的校驗(yàn)子集按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得結(jié)果分別存入編碼矩陣604未用于存儲(chǔ)第二部分校驗(yàn)子集的同一行的相應(yīng)列中,作為第二部分校驗(yàn)子集的校驗(yàn)比特。
圖8是本發(fā)明實(shí)施例提供的LDPC碼譯碼器結(jié)構(gòu)圖,該譯碼器包括LDPC碼接收模塊801、LDPC碼存儲(chǔ)矩陣802、循環(huán)移位模塊803、校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊804和糾錯(cuò)模塊805。
LDPC碼接收模塊801,用于接收LDPC碼,將所述LDPC碼的消息部分和冗余部分分別劃分為M個(gè)消息子集和K個(gè)校驗(yàn)子集,將各個(gè)消息子集和校驗(yàn)子集分別存儲(chǔ)在LDPC碼存儲(chǔ)矩陣802的不同的行中。
LDPC碼存儲(chǔ)矩陣802,用于在不同的行中存儲(chǔ)各個(gè)消息子集和校驗(yàn)子集,根據(jù)來自糾錯(cuò)模塊805的糾錯(cuò)指示對(duì)存儲(chǔ)的LDPC碼進(jìn)行糾錯(cuò)。
循環(huán)移位模塊803,存儲(chǔ)有預(yù)先根據(jù)LDPC碼的校驗(yàn)矩陣產(chǎn)生的循環(huán)移位矩陣,接收校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊804的移位指示,根據(jù)所述循環(huán)移位矩陣對(duì)LDPC碼存儲(chǔ)矩陣802中的元素進(jìn)行行循環(huán)移位。
校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊804,將LDPC碼存儲(chǔ)矩陣802中的元素按列分別并行地根據(jù)校驗(yàn)方程生成校驗(yàn)節(jié)點(diǎn)并存儲(chǔ),在需要繼續(xù)產(chǎn)生校驗(yàn)節(jié)點(diǎn)時(shí),向循環(huán)移位模塊803發(fā)送移位指示。
糾錯(cuò)模塊805,根據(jù)校驗(yàn)節(jié)點(diǎn)的值向LDPC碼存儲(chǔ)矩陣802發(fā)送糾錯(cuò)指示。
圖8中的循環(huán)移位模塊803以及圖6中的冗余部分生成模塊603根據(jù)循環(huán)移位矩陣對(duì)編碼矩陣的元素進(jìn)行行循環(huán)移位的方法均和圖2中的步驟203中根據(jù)循環(huán)移位矩陣對(duì)編碼矩陣中的消息子集和校驗(yàn)子集進(jìn)行行循環(huán)移位的方法相同。
下面以采用硬判決方法進(jìn)行譯碼的譯碼器為例說明圖8所示的譯碼器。
當(dāng)圖8所示的譯碼器采用硬判決方法進(jìn)行譯碼時(shí),校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊804將LDPC碼存儲(chǔ)矩陣802中的元素按列分別并行地進(jìn)行異或加,將所得的加和值作為校驗(yàn)節(jié)點(diǎn),由于各列元素是并行地進(jìn)行異或加的,因此一次可以產(chǎn)生一組校驗(yàn)節(jié)點(diǎn)。統(tǒng)計(jì)不為0的校驗(yàn)節(jié)點(diǎn)生成時(shí)所用到的信息比特,當(dāng)所述信息比特中某一信息比特的出現(xiàn)概率較高時(shí),則說明這一信息比特出錯(cuò)的概率也較高,因此,糾錯(cuò)模塊805統(tǒng)計(jì)所述信息比特中各個(gè)信息比特的出現(xiàn)概率,篩選出現(xiàn)概率較高的信息比特,向LDPC碼存儲(chǔ)矩陣802發(fā)送對(duì)篩選出的信息比特進(jìn)行糾錯(cuò)的指示,LDPC碼存儲(chǔ)矩陣802根據(jù)該糾錯(cuò)指示對(duì)相應(yīng)的信息比特進(jìn)行位翻轉(zhuǎn)。進(jìn)行所述位翻轉(zhuǎn)后,LDPC碼譯碼器需要對(duì)翻轉(zhuǎn)后的LDPC碼再次進(jìn)行譯碼,直至糾錯(cuò)模塊805統(tǒng)計(jì)得到不為0的校驗(yàn)節(jié)點(diǎn)數(shù)占總的校驗(yàn)節(jié)點(diǎn)數(shù)的比率小于預(yù)定數(shù)值,則說明當(dāng)前的LDPC碼的誤碼率和誤幀率已經(jīng)符合要求了,這時(shí)可以停止譯碼,此刻LDPC碼存儲(chǔ)模塊802中的LDPC碼即是譯碼結(jié)果。
由上述技術(shù)方案可見,將LDPC碼的消息部分和冗余部分分別劃分為M個(gè)消息子集和K個(gè)校驗(yàn)子集,并分別存儲(chǔ)在編碼矩陣的不同的行中;根據(jù)LDPC碼的碼長(zhǎng)和碼率產(chǎn)生循環(huán)移位矩陣,在每次將編碼矩陣中的元素按列分別進(jìn)行異或加之前,通過根據(jù)所述循環(huán)移位矩陣對(duì)編碼矩陣中的元素進(jìn)行行循環(huán)移位,使得對(duì)于編碼矩陣中的同一列,參與所述異或加的信息比特和校驗(yàn)比特各次不同,進(jìn)而由所述異或加產(chǎn)生新的校驗(yàn)比特、構(gòu)造出LDPC碼,因此,通過搜索循環(huán)移位矩陣,本發(fā)明實(shí)施例即可構(gòu)造出滿足預(yù)定指標(biāo)的LDPC碼,與現(xiàn)有技術(shù)中大量的矩陣運(yùn)算相比,本發(fā)明降低了構(gòu)造LDPC碼以及LDPC碼編碼和譯碼的復(fù)雜度。
由于每次將編碼矩陣中的元素按列分別進(jìn)行運(yùn)算時(shí),各列元素的運(yùn)算是并行進(jìn)行的,因而一次可產(chǎn)生多個(gè)校驗(yàn)比特,加快了構(gòu)造LDPC碼、以及LDPC碼編碼和譯碼的速度。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種低密度校驗(yàn)LDPC碼的構(gòu)造方法,其特征在于,預(yù)先確定待構(gòu)造LDPC碼的碼長(zhǎng)和碼率,以及用于存儲(chǔ)LDPC碼的編碼矩陣的存儲(chǔ)空間,該方法還包括以下步驟
A、根據(jù)確定的碼長(zhǎng)和碼率,將待構(gòu)造LDPC碼的消息部分劃分為M個(gè)消息子集,將待構(gòu)造LDPC碼的冗余部分劃分為K個(gè)校驗(yàn)子集,將各個(gè)消息子集分別存儲(chǔ)在編碼矩陣的不同的行中,并在所述編碼矩陣中留出K行分別用于存儲(chǔ)各個(gè)校驗(yàn)子集;其中,M和K均為自然數(shù);
B、根據(jù)確定的碼長(zhǎng)和碼率產(chǎn)生循環(huán)移位矩陣;
C、根據(jù)生成的循環(huán)移位矩陣,將編碼矩陣中的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得各列的和值分別對(duì)應(yīng)存入所述編碼矩陣留出的用于存儲(chǔ)校驗(yàn)子集的同一行的相應(yīng)列中,作為一個(gè)校驗(yàn)子集的校驗(yàn)比特,判斷采用當(dāng)前的循環(huán)移位矩陣是否已產(chǎn)生K個(gè)校驗(yàn)子集,若是轉(zhuǎn)入步驟D,否則,根據(jù)所述循環(huán)移位矩陣將所述編碼矩陣中每一行的元素進(jìn)行行循環(huán)移位后,返回步驟C;
D、根據(jù)編碼矩陣中的消息子集和校驗(yàn)子集得到LDPC碼,驗(yàn)證LDPC碼的性能是否滿足預(yù)定指標(biāo),若是,結(jié)束本流程,否則,返回步驟B。
2、如權(quán)利要求1所述的方法,其特征在于,步驟A中,
預(yù)先確定待構(gòu)造LDPC碼的最小行重,M是待構(gòu)造LDPC碼的校驗(yàn)矩陣的最小行重減去1得到的差;
在待構(gòu)造LDPC碼的消息部分的長(zhǎng)度能夠整除M時(shí),編碼矩陣的列數(shù)N是所述整除得到的商,否則,列數(shù)N是所述消息部分的長(zhǎng)度除以M得到的商加上1的和;
在待構(gòu)造LDPC碼的冗余部分的長(zhǎng)度能夠整除列數(shù)N時(shí),K是所述整除得到的商,否則,K是所述消息部分的長(zhǎng)度除以列數(shù)N得到的商加上1的和。
3、如權(quán)利要求1所述的方法,其特征在于,步驟B具體包括
B1、將待構(gòu)造LDPC碼的校驗(yàn)矩陣劃分為用于與待構(gòu)造LDPC碼的消息部分相乘的第一矩陣Hs、和用于與待構(gòu)造LDPC碼的冗余部分相乘的第二矩陣Hp,其中,Hs是隨機(jī)矩陣,Hp是結(jié)構(gòu)化矩陣,Hp的結(jié)構(gòu)由所述碼長(zhǎng)和碼率確定;
B2、根據(jù)Hs和Hp中為1的元素所在的位置確定循環(huán)移位矩陣的元素的值和有效性;
其中,循環(huán)移位矩陣的第i行第j列的元素的值表示采用當(dāng)前的循環(huán)移位矩陣對(duì)編碼矩陣進(jìn)行行循環(huán)移位以產(chǎn)生第i+1個(gè)校驗(yàn)子集時(shí),對(duì)編碼矩陣的第j行元素進(jìn)行所述行循環(huán)移位的位數(shù)和方向;
循環(huán)移位矩陣的第i行第j列的元素的有效性表示,采用當(dāng)前的循環(huán)移位矩陣將編碼矩陣中的元素按列分別并行地進(jìn)行異或加以產(chǎn)生第i+1個(gè)校驗(yàn)子集時(shí),編碼矩陣的第j行元素是否參與所述異或加運(yùn)算,其中的i和j均是自然數(shù)。
4、如權(quán)利要求3所述的方法,其特征在于,步驟C中,
將編碼矩陣中的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加包括
采用當(dāng)前的循環(huán)移位矩陣將編碼矩陣中的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加以產(chǎn)生第i+1個(gè)校驗(yàn)子集時(shí),如果循環(huán)移位矩陣的第i行第j列的元素有效,則編碼矩陣的第j行元素參與所述異或加運(yùn)算,否則不參與所述異或加運(yùn)算;
根據(jù)所述循環(huán)移位矩陣將所述編碼矩陣中每一行的元素進(jìn)行行循環(huán)移位包括
采用當(dāng)前的循環(huán)移位矩陣對(duì)編碼矩陣進(jìn)行行循環(huán)移位以產(chǎn)生第i+1個(gè)校驗(yàn)子集時(shí),按照循環(huán)移位矩陣的第i行第j列的元素的值對(duì)編碼矩陣的第j行元素進(jìn)行行循環(huán)移位。
5、如權(quán)利要求3所述的方法,其特征在于,步驟B中,
所述循環(huán)移位矩陣的行數(shù)不小于K減去1得到的差、列數(shù)不小于LDPC碼的最大行重減去1得到的差。
6、如權(quán)利要求3所述的方法,其特征在于,步驟B2中根據(jù)Hs和Hp中為1的元素所在的位置確定循環(huán)移位矩陣的元素的值和有效性包括
將Hp劃分為行塊數(shù)和列塊數(shù)均為校驗(yàn)子集的數(shù)目的分塊矩陣,其中Hp的對(duì)角線上的分塊矩陣是單位陣,右上角的分塊矩陣是0矩陣,左下角的分塊矩陣是置換陣和0矩陣,將循環(huán)移位矩陣中與Hp的對(duì)角線上的分塊矩陣對(duì)應(yīng)的元素和與Hp的右上角的分塊矩陣對(duì)應(yīng)的元素保證為無效,循環(huán)移位矩陣中的其他元素隨機(jī)產(chǎn)生。
7、如權(quán)利要求1所述的方法,其特征在于,步驟D中,
所述驗(yàn)證LDPC碼的性能是否滿足預(yù)定指標(biāo)包括
在LDPC碼的碼長(zhǎng)小于預(yù)定長(zhǎng)度時(shí),采用蒙特卡洛仿真分析LDPC碼的性能是否滿足預(yù)定指標(biāo),在LDPC碼的碼長(zhǎng)大于預(yù)定長(zhǎng)度時(shí),采用圖論和/或密度進(jìn)化理論分析LDPC碼的性能是否滿足預(yù)定指標(biāo)。
8、一種LDPC碼的編碼器,其特征在于,該編碼器包括消息部分接收模塊、循環(huán)移位矩陣存儲(chǔ)模塊、冗余部分生成模塊、編碼矩陣和碼輸出模塊;
所述消息部分接收模塊,接收待構(gòu)造LDPC碼的消息部分,將所述消息部分劃分為M個(gè)消息子集并分別存儲(chǔ)在編碼矩陣的M行中;
所述循環(huán)移位矩陣存儲(chǔ)模塊,存儲(chǔ)有預(yù)先根據(jù)待構(gòu)造LDPC碼的校驗(yàn)矩陣產(chǎn)生的循環(huán)移位矩陣;
所述冗余部分生成模塊,根據(jù)所述循環(huán)移位矩陣存儲(chǔ)模塊中的循環(huán)移位矩陣將存儲(chǔ)在所述編碼矩陣中的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得結(jié)果分別存入所述編碼矩陣用于存儲(chǔ)校驗(yàn)子集的同一行的相應(yīng)列中,作為一個(gè)校驗(yàn)子集的校驗(yàn)比特,根據(jù)循環(huán)移位矩陣對(duì)編碼矩陣的元素進(jìn)行行循環(huán)移位,根據(jù)循環(huán)移位矩陣將存儲(chǔ)在所述編碼矩陣的消息子集和已生成的校驗(yàn)子集按列分別并行地對(duì)各列中的元素進(jìn)行異或加以產(chǎn)生下一校驗(yàn)子集,直至產(chǎn)生所有的校驗(yàn)子集,向所述碼輸出模塊發(fā)送輸出指示;
所述編碼矩陣,用于存儲(chǔ)消息子集和校驗(yàn)子集;
所述碼輸出模塊,用于收到來自冗余部分生成模塊的輸出指示后,根據(jù)編碼矩陣的消息子集和校驗(yàn)子集輸出LDPC碼。
9、如權(quán)利要求8所述的編碼器,其特征在于,所述冗余部分生成模塊包括第一部分校驗(yàn)子集生成模塊和第二部分校驗(yàn)子集生成模塊;
所述第一部分校驗(yàn)子集生成模塊,根據(jù)所述循環(huán)移位矩陣存儲(chǔ)模塊中的循環(huán)移位矩陣將存儲(chǔ)在所述編碼矩陣的M行消息子集按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得結(jié)果分別存入所述編碼矩陣用于存儲(chǔ)第一部分校驗(yàn)子集的同一行的相應(yīng)列中,作為第一部分校驗(yàn)子集的校驗(yàn)比特,向所述第二部分校驗(yàn)子集生成模塊發(fā)送生成指示;
所述第二部分校驗(yàn)子集生成模塊,接收第一部分校驗(yàn)子集生成模塊的生成指示,根據(jù)所述循環(huán)移位矩陣存儲(chǔ)模塊將存儲(chǔ)在所述編碼矩陣中的消息子集和已生成的校驗(yàn)子集進(jìn)行行循環(huán)移位,根據(jù)所述循環(huán)移位矩陣存儲(chǔ)模塊將循環(huán)移位后的消息子集和已生成的校驗(yàn)子集的元素按列分別并行地對(duì)各列中的元素進(jìn)行異或加,所得結(jié)果分別存入所述編碼矩陣用于存儲(chǔ)第二部分校驗(yàn)子集的同一行的相應(yīng)列中,作為第二部分校驗(yàn)子集的校驗(yàn)比特。
10、一種LDPC碼的譯碼器,其特征在于,該譯碼器包括LDPC碼接收模塊、LDPC碼存儲(chǔ)矩陣、循環(huán)移位模塊、校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊和糾錯(cuò)模塊;
所述LDPC碼接收模塊,用于接收LDPC碼,將所述LDPC碼的消息部分和冗余部分分別劃分為M個(gè)消息子集和K個(gè)校驗(yàn)子集,將各個(gè)消息子集和校驗(yàn)子集分別存儲(chǔ)在LDPC碼存儲(chǔ)矩陣的不同的行中;
所述LDPC碼存儲(chǔ)矩陣,用于在不同的行中存儲(chǔ)各個(gè)消息子集和校驗(yàn)子集,根據(jù)來自糾錯(cuò)模塊的糾錯(cuò)指示對(duì)存儲(chǔ)的LDPC碼進(jìn)行糾錯(cuò);
所述循環(huán)移位模塊,存儲(chǔ)有預(yù)先根據(jù)LDPC碼的校驗(yàn)矩陣產(chǎn)生的循環(huán)移位矩陣,接收校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊的移位指示,根據(jù)所述循環(huán)移位矩陣對(duì)LDPC碼存儲(chǔ)矩陣中的元素進(jìn)行行循環(huán)移位;
所述校驗(yàn)節(jié)點(diǎn)產(chǎn)生模塊,將LDPC碼存儲(chǔ)矩陣中的元素按列分別并行地根據(jù)校驗(yàn)方程生成校驗(yàn)節(jié)點(diǎn)并存儲(chǔ),在需要繼續(xù)產(chǎn)生校驗(yàn)節(jié)點(diǎn)時(shí),向所述循環(huán)移位模塊發(fā)送移位指示;
所述糾錯(cuò)模塊,根據(jù)校驗(yàn)節(jié)點(diǎn)的值向所述LDPC碼存儲(chǔ)矩陣發(fā)送糾錯(cuò)指示。
全文摘要
本發(fā)明實(shí)施例公開了一種低密度校驗(yàn)碼的構(gòu)造方法、編碼器和譯碼器。將待構(gòu)造LDPC碼的消息部分和冗余部分分別劃分為M個(gè)消息子集和K個(gè)校驗(yàn)子集,并分別存儲(chǔ)在編碼矩陣的不同的行中;根據(jù)待構(gòu)造LDPC碼的碼長(zhǎng)和碼率產(chǎn)生循環(huán)移位矩陣,在每次將編碼矩陣中的元素按列分別進(jìn)行異或加之前,通過根據(jù)所述循環(huán)移位矩陣對(duì)編碼矩陣中的元素進(jìn)行行循環(huán)移位,使得對(duì)于編碼矩陣中的同一列,參與所述異或加的信息比特和校驗(yàn)比特各次不同,進(jìn)而由所述異或加產(chǎn)生不同的校驗(yàn)比特,因此,通過搜索循環(huán)移位矩陣,本發(fā)明實(shí)施例即可構(gòu)造出LDPC碼,與現(xiàn)有技術(shù)中大量的矩陣運(yùn)算相比,本發(fā)明降低了構(gòu)造LDPC碼以及LDPC碼編碼和譯碼的復(fù)雜度。
文檔編號(hào)H03M13/11GK101340193SQ20081011828
公開日2009年1月7日 申請(qǐng)日期2008年8月12日 優(yōu)先權(quán)日2008年8月12日
發(fā)明者李晉聲 申請(qǐng)人:普天信息技術(shù)研究院有限公司