一種適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法
【專利摘要】本發(fā)明公開(kāi)了一種適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法。該方法采用以校驗(yàn)節(jié)點(diǎn)為譯碼順序的串行BP譯碼算法,譯碼復(fù)雜度相比普通的BP譯碼算法減半,也更早的啟動(dòng)譯碼,并在后面的譯碼中利用前面譯碼的結(jié)果,非常適合無(wú)速率碼的流屬性。此外,該譯碼方法還對(duì)BP譯碼過(guò)程中線性運(yùn)算采用基于SSE指令集優(yōu)化的函數(shù)并行執(zhí)行,并開(kāi)啟多個(gè)線程對(duì)不同的編碼數(shù)據(jù)進(jìn)行譯碼,充分利用了CPU的并行計(jì)算能力。還有對(duì)復(fù)雜的非線性函數(shù)計(jì)算采用查表法計(jì)算,進(jìn)一步減少了譯碼運(yùn)算的復(fù)雜度,從而最小化的降低了無(wú)速率碼的譯碼時(shí)延。
【專利說(shuō)明】一種適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域的無(wú)速率譯碼技術(shù),尤其涉及一種適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法。
【背景技術(shù)】
[0002]一般的信道編碼在設(shè)計(jì)時(shí),通常先根據(jù)信道狀態(tài)信息估計(jì)信道參數(shù),根據(jù)信道參數(shù)設(shè)計(jì)一個(gè)碼率固定為R的信道糾錯(cuò)編碼(由k個(gè)輸入符號(hào)得到η個(gè)輸出符號(hào),則碼率為R=k/n)。當(dāng)估計(jì)的信道參數(shù)大于實(shí)際的信道參數(shù)時(shí),雖然可以實(shí)現(xiàn)可靠傳輸,但是造成了傳輸?shù)睦速M(fèi),因?yàn)榇藭r(shí)可以使用更高碼率的信道糾錯(cuò)編碼;當(dāng)估計(jì)的信道參數(shù)小于實(shí)際的信道參數(shù)時(shí),不能實(shí)現(xiàn)可靠傳輸,此時(shí)需要更低碼率的信道糾錯(cuò)編碼。而且很多時(shí)候,信道還是隨時(shí)變化或者無(wú)法提前判斷的,這個(gè)時(shí)候這些傳統(tǒng)的編碼就顯得難以應(yīng)付。于是出現(xiàn)了碼率可變的無(wú)速率碼。對(duì)于無(wú)速率碼,由原始數(shù)據(jù)產(chǎn)生的編碼數(shù)據(jù)包是隨著編碼過(guò)程而源源不斷產(chǎn)生的,根據(jù)譯碼的需要可多可少,只要保證能成功譯碼即可。實(shí)際傳輸?shù)拇a率取決于實(shí)際發(fā)送的編碼包數(shù)目,而需要發(fā)送的編碼包數(shù)目則取決于當(dāng)時(shí)的信道狀況。
[0003]無(wú)速率碼具有三個(gè)重要屬性:I)自適應(yīng)鏈路速率適配:其最終速率決定于信道特性,不需要在傳輸前估計(jì)信道特性而固定碼率,實(shí)際傳輸?shù)拇a率取決于當(dāng)時(shí)的信道狀況。2)無(wú)速率屬性(流屬性):發(fā)送端可以源源不斷的輸出編碼包,形成一個(gè)可以無(wú)限延續(xù)的編碼包流,而沒(méi)有任何速率約束;3)桶積水效應(yīng):接收端不斷收集編碼包,收集到足夠多的編碼包即能恢復(fù)出所有原始數(shù)據(jù)包。正是由于無(wú)速率碼的三個(gè)重要屬性,使其在廣播信道,認(rèn)知,網(wǎng)絡(luò)傳輸,反饋代價(jià)較大的通信場(chǎng)合等各個(gè)方面具有廣泛的應(yīng)用前景。
[0004]無(wú)速率碼常用的譯碼算法有邊消除法和BP (置信息)譯碼算法。由于邊消除法只適用于除刪信道,一般采用的是BP譯碼算法。對(duì)常用的BP譯碼算法,一次迭代的過(guò)程是為,先對(duì)所有的邊,更新從變量節(jié)點(diǎn)傳遞給校驗(yàn)節(jié)點(diǎn)的置信息;然后對(duì)所有的邊,更新從校驗(yàn)節(jié)點(diǎn)到變量的節(jié)點(diǎn)的置信息;然后計(jì)算所有的變量節(jié)點(diǎn)的置信息之和,并對(duì)變量節(jié)點(diǎn)進(jìn)行硬判決;判斷硬判決后的變量節(jié)點(diǎn)是否滿足校驗(yàn)關(guān)系,如果滿足或者超過(guò)最大迭代次數(shù),則結(jié)束譯碼,否則繼續(xù)進(jìn)行下一輪迭代。由于在更新校驗(yàn)節(jié)點(diǎn)傳遞給變量節(jié)點(diǎn)的置信息時(shí),會(huì)涉及到比較復(fù)雜的乘除運(yùn)算,所以BP譯碼算法的復(fù)雜度相對(duì)較高。通常BP譯碼都是通過(guò)硬件完成。后來(lái)有人提出了新的串行BP譯碼算法。串行BP譯碼算法是以變量節(jié)點(diǎn)或者校驗(yàn)節(jié)點(diǎn)為順序更新置信息的。相比于普通的BP譯碼算法,串行BP譯碼算法在每輪迭代復(fù)雜度相同的情況下,迭代次數(shù)要減少一半。
[0005]目前無(wú)速率碼在實(shí)際的應(yīng)用中,如果譯碼是通過(guò)CPU運(yùn)算執(zhí)行的,即使采用了串行BP譯碼算法,仍然存在譯碼時(shí)延稱為系統(tǒng)吞吐率的瓶頸。特別較低的信噪比下,由于BP譯碼的迭代次數(shù)較多,加上在迭代的過(guò)程中存在復(fù)雜的非線性運(yùn)算,導(dǎo)致譯碼時(shí)延非常大,嚴(yán)重限制了系統(tǒng)的吞吐率效率。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)的不足,提供一種適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法。
[0007]本發(fā)明的目的是通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn)的:一種適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法,采用了串行BP譯碼、漸進(jìn)譯碼、基于SSE指令集優(yōu)化的函數(shù)并行處理、查表法和多線程處理技術(shù),該發(fā)明采用的無(wú)速率碼為Raptor碼,設(shè)Vi表示第i個(gè)變量節(jié)點(diǎn),Cj表示第j個(gè)校驗(yàn)節(jié)點(diǎn);Ω (Cj)表示與Cj相連的所有變量節(jié)點(diǎn),Cj\i表示除去Vi之外其他與Cj相連的變量節(jié)點(diǎn)的集合;Ω (Vi)表示與Vi相連的所有校驗(yàn)節(jié)點(diǎn),用Ldl(Vi)表示Vi的來(lái)自于信道的初始LLR信息,定義變量節(jié)點(diǎn)Vi向校驗(yàn)節(jié)點(diǎn)Cj傳遞的LLR信息為Uqij),校驗(yàn)節(jié)點(diǎn)Cj向變量節(jié)點(diǎn)Vi傳遞的LLR信息為L(zhǎng)(I^i),一次迭代結(jié)束后變量節(jié)點(diǎn)Vi的LLR信息之和為Qp設(shè)NThread表示開(kāi)啟的線程數(shù)目,則適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法具體如下:
[0008]I)接收端不斷接收新的編碼包,若當(dāng)前的碼率低于信道容量,則繼續(xù)等待接收新的編碼包,否則,進(jìn)入步驟2);
[0009]2)若譯碼線程還沒(méi)有啟動(dòng)或者已經(jīng)結(jié)束,則啟動(dòng)Nltoead個(gè)串行BP譯碼線程,對(duì)第一次加入譯碼的變量節(jié)點(diǎn)的LLR信息之和Qi進(jìn)行初始化如下:
? O, 對(duì)于LDPC碼部分的變量節(jié)點(diǎn)[麵]Q1-對(duì)扣碼部分的 變量節(jié)點(diǎn)。將當(dāng)前的迭代次數(shù)置O,將譯碼
Tanner圖生長(zhǎng)到當(dāng)前收到的編碼包對(duì)應(yīng)的大小,進(jìn)入3);
[0011]3)每一個(gè)譯碼線程,對(duì)不同的編碼數(shù)據(jù)執(zhí)行串行BP譯碼算法譯碼,譯碼過(guò)程如下:
[0012]a)判斷當(dāng)前的迭代次數(shù)是否達(dá)到最大迭代次數(shù);若是,則譯碼結(jié)束;否則進(jìn)入b);
[0013]b)按校驗(yàn)節(jié)點(diǎn)順序,從第一個(gè)校驗(yàn)節(jié)點(diǎn)到最后一個(gè)校驗(yàn)節(jié)點(diǎn)按步驟c)和d)依次更新LLR信息,然后進(jìn)入e);
[0014]c)對(duì)第j個(gè)校驗(yàn)節(jié)點(diǎn)Cj,更新與Cj相連的所有的變量節(jié)點(diǎn)在該輪迭代中傳遞給Cj的 LLR 信息{L(qij)}:
[0015]對(duì)所有的Vi e Ω (Cj)計(jì)算,L(Qij)=Q1-LCrji), Qi=Q1-LCrji)。進(jìn)入 d);
[0016]d)更新校驗(yàn)節(jié)點(diǎn)Cj傳遞給與之相連的所有的變量節(jié)點(diǎn)的LLR信息ILCrjiM和變量節(jié)點(diǎn)LLR之和{QJ:
[0017]對(duì)所有的Vi e Ω (Cj) ’ L(rJ)= Π aVj-^ Σ 列爲(wèi),))’ Q =Q +L(r );
J1; ft ?v"eC;.\tJ
[0018]其中a fsign [Uqij)], sign [Uqij)]表示 Uqij)的符號(hào),β ^-= | L (q^.) | ,供(λ.) = ,這里$⑺的值是通過(guò)查表法計(jì)算,Π表示連乘,vr表示集合Cj\i中的任一個(gè)變量節(jié)點(diǎn)。
fl if O < O
[0019]e)對(duì)LDPC碼部分所有的變量節(jié)點(diǎn)進(jìn)行硬判決:?= Λ 々,進(jìn)入f); ?表
[O e/.veV1-
示變量節(jié)點(diǎn)的硬判決值;
[0020]f)判斷判決結(jié)果是否滿足校驗(yàn)和為O。若滿足校驗(yàn)關(guān)系,則譯碼結(jié)束,結(jié)束譯碼線程;否則,迭代次數(shù)加1,返回a)。
[0021]進(jìn)一步地,步驟3)里面的步驟d),φ[Χ)的計(jì)算是通過(guò)對(duì)每一路數(shù)據(jù)進(jìn)行查表計(jì)算。由于函數(shù)隨著X的增加而迅速遞減,將X最大值取到6即可;本發(fā)明設(shè)計(jì)的供(X)函數(shù)表格按步徑為0.01,計(jì)算了 [0,6]范圍的值,并歸一化為100倍,X超過(guò)6的供U)函數(shù)值取O。因此迭代的LLR信息值也都?xì)w一化為100倍;另外由于舛())的實(shí)際值為無(wú)窮大,需要用一個(gè)較大的值表示;舛O)值的選取原則是防止{QJ溢出的前提下盡可能的大。本發(fā)明選取的舛())值為760。
[0022]進(jìn)一步地,步驟3)里面的步驟c)和步驟d)的加減運(yùn)算都是通過(guò)使用基于SSE指令集優(yōu)化的函數(shù)并行處理。
[0023]本發(fā)明的有益效果是:本發(fā)明使用串行BP譯碼算法、漸進(jìn)譯碼方法、多線程處理、查表法和基于SSE指令集優(yōu)化的函數(shù)并行處理方法,不僅可以很好的適應(yīng)無(wú)速率碼的傳輸方法,而且具有較低的譯碼時(shí)延。
【專利附圖】
【附圖說(shuō)明】
[0024]圖1是Raptor碼的Tanner圖不意圖;
【具體實(shí)施方式】
[0025]以下結(jié)合附圖進(jìn)一步說(shuō)明本發(fā)明。
[0026]本發(fā)明一種適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法,采用了串行BP譯碼、漸進(jìn)譯碼、基于SSE指令集優(yōu)化的函數(shù)并行處理、查表法和多線程處理技術(shù),該發(fā)明采用的無(wú)速率碼為Raptor碼,設(shè)Vi表示第i個(gè)變量節(jié)點(diǎn),Cj表示第j個(gè)校驗(yàn)節(jié)點(diǎn);Ω (Cj)表示與Cj相連的所有變量節(jié)點(diǎn),Cj\i表示除去Vi之外其他與Cj相連的變量節(jié)點(diǎn)的集合;Ω (Vi)表示與Vi相連的所有校驗(yàn)節(jié)點(diǎn),用Ldl(Vi)表示Vi的來(lái)自于信道的初始LLR信息,定義變量節(jié)點(diǎn)Vi向校驗(yàn)節(jié)點(diǎn)Cj傳遞的LLR信息為L(zhǎng) (Qij),校驗(yàn)節(jié)點(diǎn)Cj向變量節(jié)點(diǎn)Vi傳遞的LLR信息為L(zhǎng) (rji),一次迭代結(jié)束后變量節(jié)點(diǎn)Vi的LLR信息之和為Qi。設(shè)Nltoad表示開(kāi)啟的線程數(shù)目,則適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法具體如下:
[0027]I)接收端不斷接收新的編碼包,若當(dāng)前的碼率低于信道容量,則繼續(xù)等待接收新的編碼包,否則,進(jìn)入步驟2);
[0028]2)若譯碼線程還沒(méi)有啟動(dòng)或者已經(jīng)結(jié)束,則啟動(dòng)Nltoead個(gè)串行BP譯碼線程,對(duì)第一次加入譯碼的變量節(jié)點(diǎn)的LLR信息之和Qi進(jìn)行初始化如下:
【權(quán)利要求】
1.一種適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法,其特征在于,該方法采用了串行BP譯碼、漸進(jìn)譯碼、基于SSE指令集優(yōu)化的函數(shù)并行處理、查表法和多線程處理技術(shù),該發(fā)明采用的無(wú)速率碼為Raptor碼,設(shè)Vi表示第i個(gè)變量節(jié)點(diǎn),Cj表示第j個(gè)校驗(yàn)節(jié)點(diǎn);Ω (Cj)表示與h相連的所有變量節(jié)點(diǎn),q\i表示除去Vi之外其他與&相連的變量節(jié)點(diǎn)的集合;Ω (Vi)表示與Vi相連的所有校驗(yàn)節(jié)點(diǎn),用Ldl(Vi)表示Vi的來(lái)自于信道的初始LLR信息,定義變量節(jié)點(diǎn)Vi向校驗(yàn)節(jié)點(diǎn)Cj傳遞的LLR信息為Uqij),校驗(yàn)節(jié)點(diǎn)Cj向變量節(jié)點(diǎn)Vi傳遞的LLR信息為L(zhǎng) (rji),一次迭代結(jié)束后變量節(jié)點(diǎn)Vi的LLR信息之和為Qi,設(shè)Nniread表示開(kāi)啟的線程數(shù)目,則適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法具體如下: 1)接收端不斷接收新的編碼包,若當(dāng)前的碼率低于信道容量,則繼續(xù)等待接收新的編碼包,否則,進(jìn)入步驟2); 2)若譯碼線程還沒(méi)有啟動(dòng)或者已經(jīng)結(jié)束,則啟動(dòng)Nniread個(gè)串行BP譯碼線程,對(duì)第一次加入譯碼的變量節(jié)點(diǎn)的LLR信息之和Qi進(jìn)行初始化如下:
2.根據(jù)權(quán)利要求1所述的一種適合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法,其特征在于步驟3)里面的步驟d),爐(X)的計(jì)算是通過(guò)對(duì)每一路數(shù)據(jù)進(jìn)行查表計(jì)算,由于舛為函數(shù)隨著X的增加而迅速遞減,將X最大值取到6即可;本發(fā)明設(shè)計(jì)的P(X)函數(shù)表格按步徑為0.01,計(jì)算了 [0,6]范圍的值,并歸一化為100倍,X超過(guò)6的舛X)函數(shù)值取0,因此迭代的LLR信息值也都?xì)w一化為100倍;另外由于舛O)的實(shí)際值為無(wú)窮大,需要用一個(gè)較大的值表示;供(O)值的選取原則是防止{QJ溢出的前提下盡可能的大,本發(fā)明選取的舛O)值為760。
3.根據(jù)權(quán)利要求1所述的一種適 合無(wú)速率碼的低時(shí)延漸進(jìn)譯碼方法,其特征在于步驟3)里面的步驟c)和步驟d)的加減運(yùn)算都是通過(guò)使用基于SSE指令集優(yōu)化的函數(shù)并行處理。
【文檔編號(hào)】H04L1/00GK103944673SQ201410135606
【公開(kāi)日】2014年7月23日 申請(qǐng)日期:2014年4月4日 優(yōu)先權(quán)日:2014年4月4日
【發(fā)明者】張朝陽(yáng), 屠坤, 姚創(chuàng)沐, 張婧, 余啟聯(lián), 楊瀟翔, 付攀玉 申請(qǐng)人:浙江大學(xué)