本發(fā)明屬于通信技術領域,特別涉及一種極化碼中基于SCL譯碼算法的改進算法——PR-SCL(Path Reused-SCL)。
背景技術:
極化碼(Polar Codes)是2008年由E.Arikan提出的一種新型信道編碼。極化碼具有極化現(xiàn)象:當組合信道的數(shù)量趨于無窮大的時候,一部分信道趨向于完美的信道,而一部分信道則趨向于純噪聲信道。此外,極化碼也是唯一一種能夠通過嚴格的數(shù)學方法證明達到信道容量的信道編碼方案。在Polar Code提出之初,串行抵消SC(Success Cancellation)譯碼也隨之被提出。SC譯碼具有復雜度低、譯碼結(jié)構(gòu)簡單的特點,并且在理論上可以證明在碼長足夠大時能夠達到Shannon極限。但SC譯碼算法存在缺點,即在碼長為有限長的配置下,糾錯性能不理想。此外,應用置信度傳播(BP)等譯碼算法時性能亦不理想。為了提高性能,提出串行抵消列表(Successive Cancellation List,SCL)譯碼。SCL譯碼算法基于SC譯碼算法,其通過增加候選譯碼路徑的條數(shù)來提高譯碼正確率,并用CRC輔助檢驗。CRC輔助的SCL譯碼算法有著比Turbo碼與LDPC碼更好的譯碼性能。但隨著L的增大,譯碼復雜度也線性增加。針對此問題,改進后的AD-SCL算法能通過自適應的控制L增長,來降低譯碼過程中L的平均值,減少譯碼復雜度。
SCL譯碼結(jié)構(gòu)可以看作在一棵譯碼樹上選取路徑度量值最大的L條候選譯碼路徑的過程。選取的L越大,譯碼成功率越高,同時復雜度也隨之增加。改進的AD-SCL則是在上一次的候選路徑未通過CRC校驗后,通過增加L的值重新進行SCL譯碼,來進一步提高譯碼成功率。然而,在下一次譯碼過程中,存在本次譯碼路徑與上一次譯碼路徑重疊的現(xiàn)象,即存在公共子路徑。當譯碼碼字較長時,該現(xiàn)象會更加明顯。所以,譯碼路徑重復將增加不必要的計算過程,在增加L值的下一次重新譯碼時,將花費額外開銷,增加整體譯碼的復雜度。
為了解決此問題,在保證譯碼正確率的情況下減少計算量、降低譯碼復雜度,本發(fā)明專利提出了一種定位特殊結(jié)點,尋找重復路徑,并進行路徑復用的算法,即PR-SCL(Path Reuse SCL)算法,通過在譯碼過程中對重復路徑定位,進行多次復用,從而能夠有效降低譯碼復雜度。
技術實現(xiàn)要素:
本發(fā)明提出了一種基于SCL譯碼算法的PR-SCL譯碼算法,在保證譯碼性能不變的情況下降低譯碼算法的復雜度。
路徑度量值(PM)作為L的保留依據(jù),定義為對下一譯碼碼字對數(shù)似然比的處理,其實質(zhì)是對數(shù)似然比(LLR)的判決。而對數(shù)似然比則定義為在信宿接收到y(tǒng)i的條件下,發(fā)送端發(fā)送0的概率和發(fā)送1的概率的比值的對數(shù)。當LLR值大于零時,表示發(fā)送端發(fā)送零的概率大;當LLR值小于零時,表示發(fā)送端發(fā)送1的概率大;而當LLR值的絕對值接近零時,說明信道條件較差,這時候容易產(chǎn)生錯誤判決。在SCL算法中,當前碼字的似然值由前面碼字的似然值按遞推公式給出。設置PM初始值為0,當計算出的LLR值大于零,則對取零的支路不作處理,對取1的支路累加LLR值,并作為新的路徑度量值;當計算出的LLR值小于零,則對取1的支路不作處理,對取0的支路累加LLR值,并作為新的路徑度量值;當選擇為錯誤的固定碼字時,度量值直接設置為無窮。因此,度量值越小越可靠。
在譯碼樹進行擴展譯碼時,根據(jù)對數(shù)似然比的概率意義,同一層的路徑度量值在譯碼條件較差時的差異性將減小。基于以上原理,在本發(fā)明的算法中我們對譯碼樹每一層的L個路徑度量值進行取方差處理,如果方差小于某個固定閾值,說明取值的不確定性很大,信道條件較差,則判定該層的譯碼碼字不可靠,即該層在整個譯碼過程中出錯的概率較大。所以,將該層結(jié)點標記為要存儲的特殊結(jié)點,以此作為尋找重復路徑的依據(jù)。在實際譯碼過程中,當?shù)谝淮蜸CL校驗失敗后,本算法將定位特殊結(jié)點,在本層的特殊結(jié)點處按要求直接進行2L的擴展,繼續(xù)執(zhí)行SCL算法,并不斷的利用路徑復用技術進行譯碼,直到譯出的碼序列通過CRC校驗。需要注意的是,本算法要求重復路徑具有較高的正確譯碼率,因此SNR應為中等或更高條件。最后,在SNR滿足要求的條件下,在碼序列較長的情況下,PR-SCL算法能夠在保證正確率的情況下,通過特殊點定位和路徑復用技術極大地降低譯碼復雜度,提高譯碼效率。
在PR-SCL譯碼過程中,適用以下步驟:
步驟1,創(chuàng)建兩個集合R和S,R={(Li,Pi)}存儲候選譯碼路徑的序號Li和對應的路徑度量值Pi;S={(Nn,Dn)}存儲路徑度量值的方差和對應的層號。初始化R={(Li,0)},即對應路徑度量值初始化為0;S={(1,0)},即S初始化為根結(jié)點,方差為0;
步驟2,通過添加譯碼碼字vi=0或vi=1對集合R內(nèi)的所有路徑進行路徑擴展,當譯碼經(jīng)過第n層時,擴展得到的候選路徑為Li,同時計算每條候選路徑的度量值Pi和該層路徑度量值的方差Dn,更新集合R和S;
步驟3,多次重復步驟2,直到集合R內(nèi)候選路徑的條數(shù)大于L,則保留具有最大路徑度量值的L條路徑,從R中刪除其他路徑;
步驟4,對候選路徑進行CRC校驗,若通過,則譯碼結(jié)束;否則,進入下一步驟;
步驟5,從集合S中找出方差小于設定閾值的層號,若有多個層號,則選取層號最大的Ni;從第Ni層找出走過的譯碼路徑,對其進行2L級路徑擴展,繼續(xù)執(zhí)行SCL算法,同時從S中刪除對應層號;
步驟6,對2L條候選路徑進行CRC校驗,若通過,則結(jié)束譯碼;否則,繼續(xù)執(zhí)行步驟5,直到S中只剩一個層進入下一步驟;
步驟7,若方差小于閾值的層號只有Ni=0,此時Di=0,則執(zhí)行AD-SCL算法,直到候選路徑通過CRC校驗,結(jié)束譯碼過程。
其中,步驟2中計算的方差Dn是整個層路徑度量值的統(tǒng)計方差;步驟3中在擴展路徑之后,對各路徑度量值進行由小到大的排序,以便于選擇候選路徑;步驟4中通過CRC校驗對候選譯碼路徑進行最終判決,若CRC校驗結(jié)果為0,則選擇該碼字序列,否則校驗失??;步驟5中固定閾值的選取由實際信道環(huán)境得出,可由實驗估計并調(diào)整或在SNR中等時一般取最大度量值的15%到25%之間,且選取層號最大的一層是基于對方差進行閾值篩選之后;步驟6中若當前層重新譯碼后未通過CRC校驗,則按要求以2L或2L的整數(shù)倍對層號次小的一層重新進行擴展;步驟7執(zhí)行說明信道條件太差未達到算法要求,則直接進行AD-SCL算法;步驟1-7的執(zhí)行條件為SNR的值為中等或更好,否則本算法無法提高效率。
有益效果
本發(fā)明對比已有技術具有以下創(chuàng)新點:
應用路徑度量值的概率意義,對其進行統(tǒng)計分析,計算方差值。在譯碼樹中,通過計算某一層的所有路徑度量值的方差,可以看出哪一層的度量值差異性小,進一步說明對碼字選擇的不確定性大,在判決的時候該層也就更容易出錯。通過該創(chuàng)新點,在SNR滿足條件的情況下,能夠探測路徑競爭中的特殊分叉點。
在一定的SNR條件下,在找到概率最大的路徑失誤點后,我們可以認為下一次的SCL算法在該點以上的度量值計算是重復的,即產(chǎn)生公共子路徑。所以,可以利用路徑復用技術,存儲上一次的計算結(jié)果,直接從該層進行路徑擴展,從而在保證譯碼正確率的情況下,降低了譯碼的復雜度。
附圖說明
圖1為路徑復用示意圖
具體實施方式
下面將結(jié)合附圖1和實施例對本發(fā)明做進一步的描述。
基于SCL譯碼算法,兩棵譯碼樹中我們分別設定L=2和L=4,如圖1中的(a)、(b)所示。對于這兩種譯碼結(jié)構(gòu),在(a)中L=2時,未通過CRC校驗,根據(jù)自適應的算法,L將變?yōu)樵瓉淼膬杀?,即L=4。接下來,算法將重新從譯碼樹根部執(zhí)行L=4的譯碼過程,如(b)中所示。對比(a)和(b)可以發(fā)現(xiàn),在未通過的L=2的譯碼路徑和擴展的L=4的譯碼路徑之間存在重疊路徑,我們稱之為公共子路徑。事實上,當L=4時走過的公共子路徑,對于整個譯碼過程而言,是一種重復性計算,這將導致算法復雜度的增加。而且,當碼序列長度增加時,公共子路徑的長度也隨之增加,譯碼復雜度也將快速上升。為了解決這個問題,我們提出了路徑復用的思想。在(c)中,當L=2的譯碼失敗時,我們在譯碼樹的第三層中直接對候選路徑進行L=4的路徑擴展,該效果與重新進行L=4的SCL譯碼的正確度是一樣的,但其優(yōu)點是避免了重復計算,降低了算法復雜度。在實際的譯碼中,碼長會更長,公共子路徑會更長,復雜度也會降低更多。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不限于此,任何熟悉本技術領域的技術人員在本發(fā)明提出的技術范圍內(nèi),可輕易想到的變化或者替換,都應該涵蓋在本發(fā)明的保護范圍之內(nèi)。