本發(fā)明涉及通信,具體地,涉及一種適用于各種base?graph(基圖)ldpc(low-density?parity-check,準循環(huán)ldpc碼)塊并行讀寫同序譯碼的排序方法。
背景技術:
1、ldpc碼是一種具有系數(shù)校驗矩陣的分組糾錯碼,幾乎適用于所有的信道,因此成為編碼界近年來的研究熱點,它的性能逼近香農(nóng)極限,且描述和實現(xiàn)簡單,易于進行理論分析和研究,譯碼簡單且可實行并行操作,適合硬件實現(xiàn)。
2、塊并行譯碼是使用很廣泛的一種ldpc譯碼方式,這種方式同一時刻能且只能讀一個塊,寫一個塊;而且必須保證讀一個塊之前,這個塊已經(jīng)完成上一次的寫操作,如果在讀的時候發(fā)現(xiàn)沒有寫完,那么就要增加延遲,等待上一次寫完才能開始讀,延遲越多譯碼效率就越低,影響性能。
3、同時為了滿足硬件開銷問題,會采取讀寫順序一致的塊并行譯碼算法,這就更加大了降低時延的難度。
技術實現(xiàn)思路
1、為了在讀寫同序的ldpc塊并行譯碼時,不改變譯碼時層順序的前提下,避免讀寫沖突,大幅降低譯碼所需額外延遲,適應各種不同bg,自動生成讀寫順序而提出本發(fā)明所述方法。
2、本發(fā)明采用的技術方案為:
3、一種ldpc塊并行讀寫同序譯碼的排序方法,包括以下過程:
4、步驟1:輸入需要排序的bg矩陣,得到每一層需要用到的塊號;
5、步驟2:對第一層塊號的讀寫順序進行排列,并計算每一層讀的起始位置和寫的起始位置;其中排序規(guī)則為:第一層之后設定層數(shù)中要用到的塊號次數(shù)越多,對應塊號的排序優(yōu)先級越高;
6、步驟3:增加每一層讀數(shù)前的延遲,使得同一時刻只有一層在讀和一層在寫,讀寫相同塊號時,寫的時刻在讀時刻之前;
7、步驟4:每一層與前設定個鄰近層存在相同塊號時,若因某塊號導致新增延遲,則將對應塊號后移,返回步驟3,直到每一層塊號順序不變;
8、步驟5:每一層與后設定個鄰近層存在相同塊號時,若因某塊號導致新增延遲,則將對應塊號前移;
9、步驟6:增加每一層讀數(shù)前的延遲,使得同一時刻只有一層在讀和一層在寫,讀寫相同塊號時,寫的時刻在讀時刻之前;返回步驟5,直到每一層塊號順序不變;
10、步驟7:輸出每層讀寫塊的順序,以及每層開始的時刻。
11、進一步的,所述步驟2包括:
12、步驟2.1:將第一層用到的塊號定義為4部分:①.第二層和第三層都用;②.第二層用,第三層不用;③.第二層不用,第三層用;④.第二層和第三層都不用;
13、步驟2.2:然后第一層按照①、②、③、④的順序排列存入order_buffer(1);讀的起始位置記為1,存入read_pos_buffer(1);寫的起始位置記為d+rowdegree(1),存入write_pos_buffer(1);其中,d為每一層讀寫操作之間必須的延遲數(shù),rowdegree(1)存儲第1層使用塊的個數(shù);
14、第二層到最后一層layer_num按bg矩陣中原順序排列,存入對應的order_buffer(k);第k層讀的起始位置記為:存入read_pos_buffer(k);第k層寫的起始位置記為:read_pos_buffer(k)+d+rowdegree(k),存入write_pos_buffer(k);其中,2≤k≤layer_num;rowdegree(k)存儲第k層使用塊的個數(shù);order_buffer(k)存儲第k層讀寫塊的順序,長度為rowdegree(k);read_pos_buffer(k)存儲第k層讀第一個塊的時刻;write_pos_buffer(k)存儲第k層寫第一個塊的時刻。
15、進一步的,所述步驟3包括:
16、從第二層到第layer_num層順序循環(huán),其中第k層處理過程為:
17、步驟3.1:同時讀和同時寫沖突檢測:計算k-1層讀的最后一個的位置read_pos_buffer(k-1)+rowdegree(k-1)-1和k層第一個讀的位置read_pos_buffer(k),二者作差得delay1;計算k-1層寫的最后一個的位置write_pos_buffer(k-1)+rowdegree(k-1)-1和k層第一個寫的位置write_pos_buffer(k),二者作差得delay2;
18、步驟3.2:共用塊沖突檢測:循環(huán)當前層使用的每一個塊,稱當前循環(huán)塊為block_same;循環(huán)當前層往上最多三層,即,k-1,k-2,k-3;如果k為第2層,則只循環(huán)k-1,如果k為第3層,則只循環(huán)k-1和k-2,如果k大于3,則循環(huán)k-1、k-2和k-3層;其中每一層k-q處理過程為:如果第k層和第k-q層都使用了塊block_same,則用k-q層寫block_same的位置和第k層讀block_same的位置作差,得到若干差值delay3,delay4…;
19、步驟3.3:沖突冗余消除:找到[delay1?delay2?delay3?delay4…]中最大值delay_max,如果delay_max+1為正,則第k層到第layer_num層對應的read_pos_buffer(k)和write_pos_buffer(k)的值均加delay_max+1;如果delay_max+1為負,則第k層到第layer_num層對應的read_pos_buffer(k)和write_pos_buffer(k)的值均減|delay_max+1|;如果delay_max+1為0,則第k層到第layer_num層對應的read_pos_buffer(k)和write_pos_buffer(k)的值不變。
20、進一步的,所述步驟4包括:
21、從第二層到第layer_num層順序循環(huán),其中第k層處理過程為:
22、步驟4.1:對當前循環(huán)層即第k層,使用倒數(shù)第二個塊到第一個塊順序循環(huán),稱當前循環(huán)塊order_buffer(k)(p)為block_current,稱后一個塊order_buffer(k)(p+1)為block_after;
23、步驟4.2:如果k為第2層,則只循環(huán)k-1,如果k為第3層,則只循環(huán)k-1和k-2,如果k大于3,則循環(huán)k-1、k-2和k-3層,其中每一層k-q的處理過程為:
24、檢測第k-q層是否使用block_after,如果是且第k層對block_after讀的時刻與第k-q層對block_after寫的時刻作差為1,則返回步驟4.1循環(huán)下一個塊;如果循環(huán)完k-1、k-2和k-3層均不存在上述做差為1的情況則執(zhí)行下一步驟;
25、步驟4.3:如果k為第2層,則只循環(huán)k-1,如果k為第3層,則只循環(huán)k-1和k-2,如果k大于3,則循環(huán)k-1、k-2和k-3層,其中每一層k-m的處理過程為:
26、檢測第k-m層是否使用block_current,如果有且第k層對block_current讀的時刻與第k-m層對block_current寫的時刻作差為1,則執(zhí)行下一步驟;如果循環(huán)完k-1、k-2和k-3層均不存在上述做差為1的情況則返回步驟4.1循環(huán)下一個塊;
27、步驟4.4:交換block_current和block_after在order_buffer(k)中的位置,返回步驟4.1循環(huán)下一個塊。
28、進一步的,所述步驟5包括:
29、從第二層到第layer_num層順序循環(huán),每一層的處理過程為:
30、步驟5.1:對當前循環(huán)層k層使用的第二個塊到最后一個塊順序循環(huán),稱當前循環(huán)塊order_buffer(k)(p)為block_current,稱前一個塊order_buffer(k)(p-1)為block_before;
31、步驟5.2:循環(huán)k-1、k-2和k-3層,每一層k-q層的處理為;檢測k-q層是否使用block_current,如果有且第k層對block_current讀的時刻與第k-q層對block_current寫的時刻作差為1,則返回步驟5.1循環(huán)下一個塊;如果循環(huán)完k-1、k-2和k-3層均不存在做差為1的情況執(zhí)行下一步驟;
32、步驟5.3:循環(huán)k+1、k+2和k+3層,每一層k+m層的處理為;檢測k+m層是否使用block_before,如果有且k+m層對block_before讀的時刻與第k層對block_before寫的時刻作差為1,則返回步驟5.1循環(huán)下一個塊;如果循環(huán)完k+1、k+2和k+3層均不存在做差為1的情況執(zhí)行下一步驟;
33、步驟5.4:循環(huán)k+1、k+2和k+3層,每一層k+n層的處理為;檢測k+n層是否使用block_current,如果沒有,或者有但第k+n層對block_current讀的時刻與第k層對block_current寫的時刻作差不為1,則返回步驟5.1循環(huán)下一個塊,否則執(zhí)行下一步驟;
34、步驟5.5:交換block_current和block_before在order_buffer(k)中的位置,返回步驟5.1循環(huán)下一個塊。
35、本發(fā)明相比現(xiàn)有技術的優(yōu)點為:
36、1.本發(fā)明可以自動輸出讀寫同序的ldpc塊并行譯碼讀寫順序。
37、2.本發(fā)明譯碼時不改變層的順序,避免讀寫沖突的同時,大幅降低了譯碼所需延遲。
38、3.本發(fā)明適用于各種不同的bg。