本發(fā)明屬于無線通信,尤其涉及一種數(shù)據(jù)存儲、校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新以及l(fā)dpc譯碼方法和系統(tǒng)。
背景技術(shù):
1、ldpc(low-density?parity-check低密度奇偶校驗(yàn))碼是robert?gallager于1963年在博士中提出的一種具有稀疏校驗(yàn)矩陣的分組糾錯(cuò)碼。幾乎適用于所有的信道,因此成為編碼界近年來的研究熱點(diǎn)。它的性能逼近香農(nóng)極限,且描述和實(shí)現(xiàn)簡單,易于進(jìn)行理論分析和研究,譯碼簡單且可實(shí)行并行操作,適合硬件實(shí)現(xiàn)。
2、ldpc譯碼器主要有三大主流,完全并行譯碼器,部分并行譯碼器,串行譯碼器。
3、完全并行結(jié)構(gòu)能夠達(dá)到很好的性能和很大的數(shù)據(jù)吞吐量并且控制邏輯簡單,但當(dāng)碼字較長(大于1000)時(shí),這種結(jié)構(gòu)會帶來復(fù)雜的實(shí)現(xiàn)和布線,以及巨大的布線開銷,同時(shí)完全并行結(jié)構(gòu)會增大面積消耗,校驗(yàn)節(jié)點(diǎn)和信息節(jié)點(diǎn)的隨機(jī)化連接也有可能造成路由擁塞。如果為了保證信號的同步采用同步電路實(shí)現(xiàn)的話,那么必須在迭代過程中增加大量的寄存器來存儲數(shù)據(jù),這也進(jìn)一步增加了資源的消耗。并行結(jié)構(gòu)的另一個(gè)缺點(diǎn)是結(jié)構(gòu)固定,只能夠針對某一特定校驗(yàn)矩陣的ldpc碼,靈活性不高。
4、部分并行結(jié)構(gòu)的不足之處在于對校驗(yàn)矩陣的規(guī)則性特別是非零元素的位置的規(guī)則性有一定要求,業(yè)界很多已有的部分并行結(jié)構(gòu)的ldpc譯碼器設(shè)計(jì)都伴隨有相應(yīng)由特殊規(guī)則構(gòu)造的校驗(yàn)矩陣,離開了這種特殊構(gòu)造的校驗(yàn)矩陣的支持,其應(yīng)用范圍很有限。
5、串行結(jié)構(gòu)的缺點(diǎn)是譯碼速率慢,數(shù)據(jù)吞吐量小,無法應(yīng)用于高速數(shù)據(jù)交互系統(tǒng)。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于提供一種數(shù)據(jù)存儲、校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新以及l(fā)dpc譯碼方法和系統(tǒng),部分地解決或緩解現(xiàn)有技術(shù)中的上述不足,在碼長較長的情況下,讓譯碼器面積、速度、功耗和性能上達(dá)到平衡,快速有效的實(shí)現(xiàn)各個(gè)節(jié)點(diǎn)間的信息交換。
2、為了解決上述所提到的技術(shù)問題,本發(fā)明具體采用以下技術(shù)方案:
3、一種數(shù)據(jù)存儲方法,應(yīng)用于ldpc譯碼中信息節(jié)點(diǎn)或/和校驗(yàn)節(jié)點(diǎn)的更新數(shù)據(jù)存儲,包括:
4、構(gòu)建m行n列的校驗(yàn)矩陣h,其中n為信息節(jié)點(diǎn)的數(shù)量,m為校驗(yàn)節(jié)點(diǎn)的數(shù)量;所述校驗(yàn)矩陣h中的元素包括1和0,其中元素1表示信息節(jié)點(diǎn)和校驗(yàn)節(jié)點(diǎn)有連接關(guān)系,元素0表示信息節(jié)點(diǎn)和校驗(yàn)節(jié)點(diǎn)無連接關(guān)系;
5、將校驗(yàn)矩陣h劃分為若干個(gè)m行n列的子矩陣,其中位于第一行的子矩陣為源子矩陣,其余行的子矩陣由對應(yīng)源子矩陣逐行循環(huán)向右平移n列獲得;其中,m為校驗(yàn)矩陣h的列重,n為校驗(yàn)矩陣h的行重;
6、利用若干雙口ram對校驗(yàn)矩陣h中的元素1進(jìn)行存儲,存儲規(guī)則包括:
7、源子矩陣以及其對應(yīng)的子矩陣中相同位置的元素1要存儲在同一個(gè)雙口ram中;
8、將校驗(yàn)矩陣h每一行的元素1兩兩為一組,分別存儲到不同的雙口ram中;
9、并且,將源子矩陣以及其對應(yīng)的子矩陣每兩行為一組,將其中的元素1存儲到同一雙口ram中;若子矩陣的行數(shù)為單數(shù),則將子矩陣的剩余行中的元素1兩兩一組,分別存儲到不同的雙口ram中。
10、本發(fā)明還提供一種校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新方法,包括:
11、從信息節(jié)點(diǎn)數(shù)據(jù)存儲模塊中讀取n個(gè)信息節(jié)點(diǎn)數(shù)據(jù);
12、將n個(gè)信息節(jié)點(diǎn)數(shù)據(jù)輸入cnu計(jì)算單元(校驗(yàn)節(jié)點(diǎn)更新計(jì)算單元)進(jìn)行計(jì)算;
13、將cnu計(jì)算單元計(jì)算的結(jié)果存入校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)存儲模塊中;
14、其中,所述信息節(jié)點(diǎn)數(shù)據(jù)存儲模塊或/和校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)存儲模塊采用上述數(shù)據(jù)存儲方法進(jìn)行數(shù)據(jù)存儲。
15、作為一種改進(jìn),所述cnu計(jì)算單元的計(jì)算步驟包括:
16、對信息節(jié)點(diǎn)數(shù)據(jù)的最高符號位進(jìn)行累乘;
17、求取信息節(jié)點(diǎn)數(shù)據(jù)中除最高符號位外的剩余位最小值和次小值。
18、作為一種改進(jìn),求取信息節(jié)點(diǎn)數(shù)據(jù)中除最高符號位外的剩余位最小值和次小值的步驟包括:
19、s321將輸入的信息節(jié)點(diǎn)數(shù)據(jù)兩個(gè)一組進(jìn)行比較,獲取每兩者間的局部最小值;將信息節(jié)點(diǎn)數(shù)據(jù)存入下一級寄存器,并用指針在寄存器中指示局部最小值的存儲位置;
20、s322將上一級比較中兩組信息節(jié)點(diǎn)數(shù)據(jù)內(nèi)的兩個(gè)局部最小值進(jìn)行比較,其中較小的信息節(jié)點(diǎn)數(shù)據(jù)為四個(gè)信息節(jié)點(diǎn)數(shù)據(jù)中的局部最小值,較大的為失敗值,將局部最小值存入下一級寄存器;將該四個(gè)信息節(jié)點(diǎn)中的與局部最小值在上一級同組比較的信息節(jié)點(diǎn)數(shù)據(jù)再與失敗值進(jìn)行比較,其中較小的為局部次小值,將局部次小值存入下一級寄存器;
21、若上一級比較中獲取的局部最小值為單數(shù)個(gè),則將落單的局部最小值和同組的信息節(jié)點(diǎn)數(shù)據(jù)直接存入下一級寄存器;
22、利用指針在寄存器中指示局部最小值的存儲位置;
23、重復(fù)本步驟,直到獲取輸入的信息節(jié)點(diǎn)數(shù)據(jù)中的最小值和次小值。
24、本發(fā)明還提供一種ldpc譯碼方法,包括:
25、讀取外部軟信息輸入值,并存儲到初始軟信息存儲器內(nèi);
26、從初始軟信息存儲器內(nèi)讀入外部軟信息,并存儲到信息存儲節(jié)點(diǎn)數(shù)據(jù)存儲器;
27、利用上述校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新方法進(jìn)行校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新;
28、進(jìn)行信息節(jié)點(diǎn)數(shù)據(jù)更新;
29、重復(fù)校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新和信息節(jié)點(diǎn)數(shù)據(jù)更新,直到達(dá)到設(shè)置的迭代次數(shù),并將最后一次信息節(jié)點(diǎn)數(shù)據(jù)更新結(jié)果存儲到譯碼結(jié)果存儲器中。
30、作為一種改進(jìn),所述進(jìn)行信息節(jié)點(diǎn)數(shù)據(jù)更新的步驟包括:
31、從校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)存儲模塊中讀取m個(gè)校驗(yàn)節(jié)點(diǎn)數(shù)據(jù);
32、將m個(gè)校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)輸入vnu計(jì)算單元(信息節(jié)點(diǎn)更新計(jì)算單元)進(jìn)行計(jì)算;
33、將vnu計(jì)算單元計(jì)算的結(jié)果存入信息節(jié)點(diǎn)數(shù)據(jù)存儲模塊中;
34、其中,所述信息節(jié)點(diǎn)數(shù)據(jù)存儲模塊或/和校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)存儲模塊采用上述數(shù)據(jù)存儲方法進(jìn)行數(shù)據(jù)存儲。
35、本發(fā)明還提供一種校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新系統(tǒng),包括:
36、校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)存儲模塊,用于利用權(quán)利要求1所述的數(shù)據(jù)存儲方法存儲校驗(yàn)節(jié)點(diǎn)數(shù)據(jù);
37、cnu計(jì)算單元,用于從信息節(jié)點(diǎn)數(shù)據(jù)存儲模塊中讀取n個(gè)信息節(jié)點(diǎn)數(shù)據(jù),并進(jìn)行校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新計(jì)算。
38、作為一種改進(jìn),所述cnu計(jì)算單元包括:
39、符號累乘模塊,用于對信息節(jié)點(diǎn)數(shù)據(jù)的最高符號位進(jìn)行累乘;
40、基于指針的求最小次小值模塊,用于求取n個(gè)信息節(jié)點(diǎn)數(shù)據(jù)中的最小值和次小值,具體又包括:
41、s11將輸入的信息節(jié)點(diǎn)數(shù)據(jù)兩個(gè)一組進(jìn)行比較,獲取每兩者間的局部最小值;將信息節(jié)點(diǎn)數(shù)據(jù)存入下一級寄存器,并用指針在寄存器中指示局部最小值的存儲位置;
42、s12將上一級比較中兩組信息節(jié)點(diǎn)數(shù)據(jù)內(nèi)的兩個(gè)局部最小值進(jìn)行比較,其中較小的信息節(jié)點(diǎn)數(shù)據(jù)為四個(gè)信息節(jié)點(diǎn)數(shù)據(jù)中的局部最小值,較大的為失敗值,將局部最小值存入下一級寄存器;將該四個(gè)信息節(jié)點(diǎn)中的與局部最小值在上一級同組比較的信息節(jié)點(diǎn)數(shù)據(jù)再與失敗值進(jìn)行比較,其中較小的為局部次小值,將局部次小值存入下一級寄存器;
43、若上一級比較中獲取的局部最小值為單數(shù)個(gè),則將落單的局部最小值和同組的信息節(jié)點(diǎn)數(shù)據(jù)直接存入下一級寄存器;
44、利用指針在寄存器中指示局部最小值的存儲位置;
45、重復(fù)本步驟,直到獲取輸入的信息節(jié)點(diǎn)數(shù)據(jù)中的最小值和次小值。
46、本發(fā)明還提供一種ldpc譯碼系統(tǒng),包括:
47、初始軟信息存儲器,用于讀取并存儲外部軟信息輸入值;
48、校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新系統(tǒng),包括用于利用權(quán)利要求1所述的數(shù)據(jù)存儲方法存儲校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)的校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)存儲模塊;以及用于從信息節(jié)點(diǎn)數(shù)據(jù)存儲模塊中讀取n個(gè)信息節(jié)點(diǎn)數(shù)據(jù),并進(jìn)行校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)更新計(jì)算的cnu計(jì)算單元;
49、信息節(jié)點(diǎn)數(shù)據(jù)更新系統(tǒng),包括用于利用權(quán)利要求1所述的數(shù)據(jù)存儲方法存儲信息節(jié)點(diǎn)數(shù)據(jù)的信息節(jié)點(diǎn)數(shù)據(jù)存儲模塊;以及用于從校驗(yàn)節(jié)點(diǎn)數(shù)據(jù)存儲模塊中讀取m個(gè)校驗(yàn)節(jié)點(diǎn)數(shù)據(jù),并進(jìn)行信息節(jié)點(diǎn)數(shù)據(jù)更新計(jì)算的vnu計(jì)算單元;
50、譯碼結(jié)果存儲器,用于在達(dá)到設(shè)置的迭代次數(shù)的情況下,存儲最后一次信息節(jié)點(diǎn)數(shù)據(jù)更新結(jié)果。
51、作為一種改進(jìn),所述cnu計(jì)算單元包括:
52、符號累乘模塊,用于對信息節(jié)點(diǎn)數(shù)據(jù)的最高符號位進(jìn)行累乘;
53、基于指針的求最小次小值模塊,用于求取n個(gè)信息節(jié)點(diǎn)數(shù)據(jù)中的最小值和次小值,具體又包括:
54、s321將輸入的信息節(jié)點(diǎn)數(shù)據(jù)兩個(gè)一組進(jìn)行比較,獲取每兩者間的局部最小值;將信息節(jié)點(diǎn)數(shù)據(jù)存入下一級寄存器,并用指針在寄存器中指示局部最小值的存儲位置;
55、s322將上一級比較中兩組信息節(jié)點(diǎn)數(shù)據(jù)內(nèi)的兩個(gè)局部最小值進(jìn)行比較,其中較小的信息節(jié)點(diǎn)數(shù)據(jù)為四個(gè)信息節(jié)點(diǎn)數(shù)據(jù)中的局部最小值,較大的為失敗值,將局部最小值存入下一級寄存器;將該四個(gè)信息節(jié)點(diǎn)中的與局部最小值在上一級同組比較的信息節(jié)點(diǎn)數(shù)據(jù)再與失敗值進(jìn)行比較,其中較小的為局部次小值,將局部次小值存入下一級寄存器;
56、若上一級比較中獲取的局部最小值為單數(shù)個(gè),則將落單的局部最小值和同組的信息節(jié)點(diǎn)數(shù)據(jù)直接存入下一級寄存器;
57、利用指針在寄存器中指示局部最小值的存儲位置;
58、重復(fù)本步驟,直到獲取輸入的信息節(jié)點(diǎn)數(shù)據(jù)中的最小值和次小值。
59、本發(fā)明的有益之處在于:
60、一、數(shù)據(jù)存儲方法。
61、(1)校驗(yàn)節(jié)點(diǎn)更新時(shí),一個(gè)時(shí)鐘可以通過ram的雙口讀取12個(gè)數(shù),計(jì)算12個(gè)結(jié)果再存儲12個(gè)數(shù),按地址順序讀寫即可,信息節(jié)點(diǎn)更新并行度為2。將校驗(yàn)節(jié)點(diǎn)的更新時(shí)延縮短了一半,并且控制邏輯和地址產(chǎn)生邏輯非常簡單。
62、(2)初始化和信息節(jié)點(diǎn)更新時(shí),由于三個(gè)源子矩陣與其各自的對應(yīng)的子矩陣按序存儲在同一個(gè)ram里,又由于相對位置不變原理,只要知道源子矩陣中的“1”對應(yīng)的信息節(jié)點(diǎn)更新時(shí)需要讀取和寫入的地址,就可以將其作為首地址,依次增加以完成所有對應(yīng)子矩陣的信息節(jié)點(diǎn)的更新。
63、本發(fā)明提供的存儲數(shù)據(jù)的方法,利用了校驗(yàn)矩陣h的高度結(jié)構(gòu)化的準(zhǔn)循環(huán)構(gòu)造,用少量的寄存器和數(shù)據(jù)選擇器的代價(jià)大大簡化了控制邏輯和讀寫地址生成邏輯,并且減小了譯碼時(shí)延,有利于硬件實(shí)現(xiàn),對程序編寫人員也帶來了很大的方便。
64、二、基于指針的求最小值次小值的方法。
65、在同為六輸入的情況下,“基于指針”算法的寄存中間變量的寄存器數(shù)量少于經(jīng)典算法所需的寄存器,在資源占用方面均比經(jīng)典算法少。當(dāng)輸入輸出增加時(shí),兩種算法結(jié)果的fpga實(shí)現(xiàn)的資源占用情況差距會更大。