本發(fā)明屬于無(wú)線通信領(lǐng)域,特別涉及一種針對(duì)極化碼的并行譯碼方法。
背景技術(shù):
:Polar碼是目前唯一能通過(guò)嚴(yán)格的數(shù)學(xué)方法證明可以達(dá)到信道容量的編碼方式,是5G標(biāo)準(zhǔn)的有力競(jìng)爭(zhēng)者。Arikan在2008年提出了信道極化(Channelpolarization:Amethodforconstructingcapacity-achievingcodes,ArikanE.,IEEEInternationalSymposiumonInformationTheory(ISIT),2008:1173-1177.)的理論之后,于2009年提出了SC(Successive-Cancellation)譯碼算法(Channelpolarization:Amethodforconstructingcapacity-achievingcodesforsymmetricbinary-inputmemorylesschannels,ArikanE.,IEEETrans.Inf.Theory,55(7),2009:3051-3073.),SC算法串行譯碼的性質(zhì)導(dǎo)致了其低吞吐率、高譯碼延遲的缺點(diǎn),因此對(duì)Polar碼并行譯碼的研究受到了越來(lái)越多的關(guān)注。Amin等學(xué)者于2011年提出了SSC(SimplifiedSuccessive-Cancellation)算法(ASimplifiedSuccessive-CancellationDecoderforPolarCodes,Amin,Alamdar-Yazdi,FrankR.Kschischang,IEEECommunicationsLetters,15(12),2011:1378-1380.),SSC算法中定義了RATE0和RATE1兩種節(jié)點(diǎn)。當(dāng)節(jié)點(diǎn)的葉子全為固定位時(shí),節(jié)點(diǎn)是RATE0節(jié)點(diǎn),全為信息位時(shí),節(jié)點(diǎn)是RATE1節(jié)點(diǎn)。這兩種節(jié)點(diǎn)可直接譯碼,不需要遍歷子樹(shù),SSC算法通過(guò)裁剪SC算法的譯碼樹(shù),減少了需要激活的節(jié)點(diǎn)數(shù)量,因此具有更高的吞吐率。在SSC算法的基礎(chǔ)上,GabiSarkis等學(xué)者于2013年提出了ML-SSC(MaxLikelihoodSimplifiedSuccessive-Cancellation)算法(IncreasingtheThroughputofPolarDecoders,GabiSarkis,WarrenJ.Gross.IEEECommunicationsLetters,17(4),2013:725-728.)。與SSC算法相比,ML-SSC算法增加了RATE0-RATE1節(jié)點(diǎn),通過(guò)尋找估計(jì)值與LLR(Log-LikelihoodRatio,對(duì)數(shù)似然比)的乘積和的最大值,來(lái)獲得該種節(jié)點(diǎn)的譯碼結(jié)果。激活節(jié)點(diǎn)數(shù)量的減少使ML-SSC算法具有更高的吞吐率,但相應(yīng)增加了ML-SSC算法的計(jì)算量。同樣在2013年,GabiSarkis等學(xué)者在SSC算法的基礎(chǔ)上又提出了Fast-SSC(FastSimplifiedSuccessive-Cancellation)算法(FastPolarDecoders:AlgorithmandImplementation,GabiSarkis,PascalGiard,AlexanderVardy,ClaudeThibeault,WarrenJ.Gross,IEEEjournalonSelectedAreasinCommunications,32(5),2014:946-957.),F(xiàn)ast-SSC算法在SSC基礎(chǔ)上增加了SPC和REP兩種節(jié)點(diǎn)。SPC節(jié)點(diǎn)只有第一位是固定位,其余位是信息位,REP節(jié)點(diǎn)只有最后一位是信息位,其余位是固定位。通過(guò)對(duì)SSC算法譯碼樹(shù)的裁剪,進(jìn)一步提高了譯碼器的吞吐率。SSC、ML-SSC和Fast-SSC雖然具有較高的吞吐率,但譯碼延遲較長(zhǎng)。LiBin等學(xué)者在2013年提出了Parallel-SC算法(ParallelDecodersofPolarCodes,BinLi,HuiShen,DavidTse,[2016-8-25],heep://arxiv.org/abs/1401.3753.),通過(guò)幾個(gè)SC譯碼器同時(shí)工作,可以有效的降低譯碼延遲,但采用的SC算法使譯碼器的吞吐率較低。技術(shù)實(shí)現(xiàn)要素:為了尋求一種譯碼延遲低、吞吐率較高的譯碼方法,本發(fā)明提出了一種并行的極化碼譯碼方法。本發(fā)明中所述極化碼(Polar碼)可由3個(gè)因素唯一的確定,碼長(zhǎng)N=2n,碼率R=K/N,位置信息序列A。序列A是一個(gè)長(zhǎng)度為N的(0,1)序列,0表示固定位,1表示信息位。一個(gè)長(zhǎng)為N的Polar碼字可以拆分成兩個(gè)長(zhǎng)為N/2的碼字,Polar碼可以表示成式(3)的形式,其相關(guān)性如式(4)所示。式(3)中x是一個(gè)長(zhǎng)度為N的Polar碼字,a和b是從x拆分出的兩個(gè)長(zhǎng)度為N/2的序列,v是由a和b合成x時(shí)的中間序列,n=log2N,表示F的(n-1)次克羅內(nèi)克積,B是反序重排序列,B的定義如下:對(duì)L1N進(jìn)行比特反序重排,得到序列S1N,即令Li=Sπ(i);比特反序函數(shù)π(i)定義如下:令i用二進(jìn)制表示為(b1,b2,…,bm);則π(i)的值對(duì)應(yīng)的二進(jìn)制表示為(bm,bm-1,…,b1);本發(fā)明中所提出的并行的極化碼譯碼方法具體步驟如下:步驟一、構(gòu)建譯碼樹(shù),將長(zhǎng)度為N的序列A按奇偶位拆分成兩個(gè)序列Aa和Ab,在Aa中0的位置放置固定位節(jié)點(diǎn),1的位置放置信息位節(jié)點(diǎn),以放置好的N/2個(gè)節(jié)點(diǎn)為葉子構(gòu)建一棵完全二叉樹(shù)Ta,在Ab中0的位置放置固定位節(jié)點(diǎn),1的位置放置信息位節(jié)點(diǎn),以放置好的N/2個(gè)節(jié)點(diǎn)為葉子構(gòu)建一棵完全二叉樹(shù)Tb;所構(gòu)建的兩棵二叉樹(shù)Ta和Tb分別是兩個(gè)并行快速譯碼器PFDa和PFDb的譯碼樹(shù);兩棵譯碼樹(shù)中的父節(jié)點(diǎn)根據(jù)孩子節(jié)點(diǎn)類型定義;在兩棵譯碼樹(shù)中,當(dāng)節(jié)點(diǎn)的葉子全為固定位時(shí),節(jié)點(diǎn)是RATE0節(jié)點(diǎn);當(dāng)節(jié)點(diǎn)的葉子全為信息位時(shí),節(jié)點(diǎn)是RATE1節(jié)點(diǎn);當(dāng)節(jié)點(diǎn)的葉子只有第一位是固定位,其余位是信息位時(shí),節(jié)點(diǎn)是SPC節(jié)點(diǎn);當(dāng)節(jié)點(diǎn)的葉子只有最后一位是信息位,其余位是固定位時(shí),節(jié)點(diǎn)是REP節(jié)點(diǎn)。當(dāng)節(jié)點(diǎn)的葉子一半是固定位,一半是信息位時(shí),節(jié)點(diǎn)是RATE0-RATE1節(jié)點(diǎn);除去上述5類節(jié)點(diǎn)及其子樹(shù),剩余的節(jié)點(diǎn)是OTHER型節(jié)點(diǎn)。步驟二、譯碼器接收一幀信道α數(shù)據(jù),所述信道α是一個(gè)序列,信道α的長(zhǎng)度和譯碼使用的Polar碼字的長(zhǎng)度相等,都為N,其取值為(α0,α1…αN-1)。步驟三、利用信道α的前一半(α0…αN/2-1)初始化譯碼樹(shù)Ta,利用后一半數(shù)據(jù)(αN/2…αN-1)初始化譯碼樹(shù)Tb,譯碼樹(shù)Ta用于并行快速譯碼器PFDa的譯碼,譯碼樹(shù)Tb用于并行快速譯碼器PFDb的譯碼。步驟四、譯碼器PFDa和PFDb由根節(jié)點(diǎn)開(kāi)始,按照深度優(yōu)先的順序同時(shí)激活兩棵譯碼樹(shù)的節(jié)點(diǎn);根節(jié)點(diǎn)的輸入是信道α,除根節(jié)點(diǎn)外其他節(jié)點(diǎn)的輸入是中間值α,中間值α由F運(yùn)算,如式(1)所示,或G運(yùn)算,如式(2)所示,獲得。中間值α是譯碼樹(shù)中每個(gè)節(jié)點(diǎn)進(jìn)行譯碼時(shí)的輸入值,中間值α是個(gè)序列中間值α的序列長(zhǎng)度和激活節(jié)點(diǎn)的序列長(zhǎng)度nv相等。式(1)和式(2)中,αv表示激活節(jié)點(diǎn)的α值,αl表示激活節(jié)點(diǎn)左孩子的中間值α,αr表示激活節(jié)點(diǎn)右孩子的中間值α。激活節(jié)點(diǎn)的輸出是該節(jié)點(diǎn)的子碼估值,即序列β,其長(zhǎng)度和該節(jié)點(diǎn)的序列長(zhǎng)度相等,該節(jié)點(diǎn)長(zhǎng)度等于該節(jié)點(diǎn)的葉子數(shù)。式(2)中,βl表示激活節(jié)點(diǎn)左孩子的子碼估值。當(dāng)兩棵譯碼樹(shù)中的RATE0、RATE1、REP或SPC節(jié)點(diǎn)被激活時(shí),根據(jù)兩棵譯碼樹(shù)中激活節(jié)點(diǎn)的類型,譯碼器選擇不同的譯碼方法計(jì)算節(jié)點(diǎn)的子碼估值β1)當(dāng)PFDa和PFDb中的激活節(jié)點(diǎn)同為RATE0節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為RATE0-P節(jié)點(diǎn);此時(shí),PFDa和PFDb中該節(jié)點(diǎn)的子碼估值β同時(shí)被判定為0,即式(10)所示。βa[i]=βb[i]=0,0≤i<nv(10)2)當(dāng)PFDa和PFDb中的激活節(jié)點(diǎn)同為RATE1節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為RATE1-P節(jié)點(diǎn);當(dāng)RATE1-P節(jié)點(diǎn)被激活,PFDa和PFDb根據(jù)式(11)進(jìn)行獨(dú)立譯碼,分別獲得兩個(gè)子碼估值βa和βb。3)當(dāng)PFDa中的激活節(jié)點(diǎn)為SPC節(jié)點(diǎn),PFDb中的激活節(jié)點(diǎn)為RATE1節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為RATE1B節(jié)點(diǎn),當(dāng)RATE1B節(jié)點(diǎn)被激活,首先根據(jù)式(12)組合兩個(gè)譯碼器中相應(yīng)激活節(jié)點(diǎn)的中間值α,之后對(duì)組合得到的中間值α進(jìn)行硬判決,如式(13)所示,判決結(jié)果用序列HD表示。由于硬判決只有0和1兩種結(jié)果,因此序列HD是一個(gè)只含0、1的序列。之后對(duì)判決結(jié)果進(jìn)行奇偶校驗(yàn),即檢測(cè)序列HD中1的個(gè)數(shù),如式(14)所示,校驗(yàn)結(jié)果用parity表示。如果HD中有偶數(shù)個(gè)1,即滿足奇偶校驗(yàn),則硬判決結(jié)果就是節(jié)點(diǎn)的子碼估值β,如果HD中有奇數(shù)個(gè)1,即不滿足奇偶校驗(yàn),則尋找絕對(duì)值最小的中間值α的判決結(jié)果,并對(duì)該判決結(jié)果進(jìn)行取反運(yùn)算,如果該判決結(jié)果是0,取反后變?yōu)?,如果該判決結(jié)果是1,取反后變?yōu)?。取反運(yùn)算后的HD序列為該節(jié)點(diǎn)的子碼估值β,如式(15)和式(16)所示,其中j表示絕對(duì)值最小的中間值α的標(biāo)號(hào)。α=[αaαb](12)j=argimin|α[i]|,0≤i<nv(15)4)當(dāng)PFDa和PFDb中的激活節(jié)點(diǎn)同為REP節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為REP-P節(jié)點(diǎn),當(dāng)REP-P節(jié)點(diǎn)被激活時(shí),PLDa和PLDb根據(jù)式(17)獨(dú)立譯碼,分別獲得兩個(gè)子碼估值βa和βb。5)當(dāng)PFDa中的激活節(jié)點(diǎn)為RATE0節(jié)點(diǎn),PFDb中的激活節(jié)點(diǎn)為REP節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為REPB節(jié)點(diǎn),兩個(gè)REPB節(jié)點(diǎn)的譯碼結(jié)果相同,是對(duì)兩個(gè)節(jié)點(diǎn)共2×nv個(gè)中間值α和的硬判決,根據(jù)式(18)和式(19),獲得兩個(gè)子碼估值βa和βb。6)當(dāng)PFDa和PFDb中的激活節(jié)點(diǎn)同為SPC節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為SPC-P節(jié)點(diǎn),。當(dāng)SPC-P節(jié)點(diǎn)被激活,PFDa和PFDb根據(jù)式(15)(16)(17)(18)(19)獨(dú)立譯碼,分別獲得兩個(gè)子碼估值βa和βb。7)當(dāng)PFDa中的激活節(jié)點(diǎn)為RATE0-RATE1節(jié)點(diǎn),PFDb中的激活節(jié)點(diǎn)為SPC節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為SPCB1節(jié)點(diǎn)。當(dāng)SPCB1節(jié)點(diǎn)被激活,PFDa將RATE0-RATE1節(jié)點(diǎn)的中間值α作為F運(yùn)算的輸入做一次F運(yùn)算,運(yùn)算結(jié)果用αa表示。PFDb將SPC節(jié)點(diǎn)的中間值α作為F運(yùn)算的輸入做一次F運(yùn)算,運(yùn)算結(jié)果用αb表示。將αa和αb作為公式(18)的輸入計(jì)算α,將α作為公式(19)的輸入,公式(19)的輸出βa用βa0表示,公式(19)的另一個(gè)輸出βb用βb0表示。之后PFDa將αa和βa0作為G運(yùn)算的輸入做一個(gè)G運(yùn)算,按照正數(shù)為0負(fù)數(shù)為1的規(guī)則,將G運(yùn)算的結(jié)果轉(zhuǎn)換成只含0、1的序列,用βa1表示,PFDb將αb和βb0作為G運(yùn)算的輸入做一個(gè)G運(yùn)算,同樣按照正數(shù)為0負(fù)數(shù)為1的規(guī)則將運(yùn)算結(jié)果轉(zhuǎn)換成只含0、1的序列,用βb1表示。將[βa0,βa1]作為公式(20)的輸入,公式(20)的輸出就是RATE0-RATE1節(jié)點(diǎn)的β值,將[βb0,βb1]作為公式(21)的輸入,公式(21)的輸出就是SPC節(jié)點(diǎn)的β值。8)當(dāng)PFDa中的激活節(jié)點(diǎn)為REP節(jié)點(diǎn),PFDb中的激活節(jié)點(diǎn)為SPC節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為SPCB2節(jié)點(diǎn)。當(dāng)SPCB2節(jié)點(diǎn)被激活,PFDa將REP節(jié)點(diǎn)的中間值α作為F運(yùn)算的輸入做一次F運(yùn)算,運(yùn)算結(jié)果用αa表示。PFDb將SPC節(jié)點(diǎn)的中間值α作為F運(yùn)算的輸入做一次F運(yùn)算,運(yùn)算結(jié)果用αb表示。將αa和αb作為公式(18)的輸入計(jì)算α,將α作為公式(19)的輸入,公式(19)的輸出βa用βa0表示,公式(19)的另一個(gè)輸出βb用βb0表示。之后PFDa將αa和βa0作為G運(yùn)算的輸入做一個(gè)G運(yùn)算,PFDb將αb和βb0作為G運(yùn)算的輸入做一個(gè)G運(yùn)算。將兩個(gè)G運(yùn)算的結(jié)果帶入公式(12),計(jì)算完公式(12)之后,再利用公式(13)(14)(15)(16)計(jì)算REP節(jié)點(diǎn)和SPC節(jié)點(diǎn)的β,分別用βa0和βb0表示。將βa0作為公式(20)的輸入,公式(20)的輸出就是REP節(jié)點(diǎn)的β值,將βb0作為公式(21)的輸入,公式(21)的輸出就是SPC節(jié)點(diǎn)的β值。當(dāng)OTHER型節(jié)點(diǎn)被激活時(shí),譯碼器計(jì)算下一個(gè)激活節(jié)點(diǎn)的中間值α,為譯碼下一個(gè)節(jié)點(diǎn)做準(zhǔn)備。步驟五、當(dāng)譯碼器PFDa和PFDb中的激活節(jié)點(diǎn)是RATE0、RATE1、REP、SPC時(shí),將該節(jié)點(diǎn)β值乘以生成矩陣G獲得局部碼字估值u,完成一個(gè)激活節(jié)點(diǎn)的譯碼;所述矩陣其中m=log2nv,表示F的m次克羅內(nèi)克積,B為反序重排序列。步驟六、譯碼器PFDa和PFDb更新激活節(jié)點(diǎn)號(hào),激活下一個(gè)節(jié)點(diǎn);步驟七、重復(fù)步驟四至步驟六,至兩棵譯碼樹(shù)中所有的節(jié)點(diǎn)被激活;步驟八、將譯碼器PFDa所有的局部碼字估值按獲得的順序拼接,就是譯碼器PFDa的碼字估值,將譯碼器PFDb所有的局部碼字估值按獲得的順序拼接,就是譯碼器PFDb的碼字估值。將譯碼器PFDa的碼字估值與譯碼器PFDb的碼字估值異或運(yùn)算,并替換譯碼器PFDa的碼字估值。步驟九、將譯碼器PFDa的碼字估值作為序列的前一半,即譯碼器PFDb的碼字估值作為序列的后一半,即合并兩個(gè)譯碼器的碼字估值,獲得序列即步驟十、輸出序列一幀信道α數(shù)據(jù)的譯碼結(jié)束。一種用于實(shí)現(xiàn)該譯碼方法的譯碼裝置,包括:信道α存儲(chǔ)器、中間值αa存儲(chǔ)器、中間值αb存儲(chǔ)器、子碼估值βa存儲(chǔ)器、子碼估值βb存儲(chǔ)器、Ga乘生成矩陣模塊、Gb乘生成矩陣模塊、組合模塊、控制器和并行的譯碼器PFDa和PFDb。信道α存儲(chǔ)器接收到的信道α分為兩部分分別送入中間值αa存儲(chǔ)器和中間值αb存儲(chǔ)器,中間值αa存儲(chǔ)器和中間值αb存儲(chǔ)器分別用于存儲(chǔ)計(jì)算過(guò)程中的中間值αa和中間值αb;子碼估值βa存儲(chǔ)器和子碼估值βa存儲(chǔ)器分別用于存儲(chǔ)計(jì)算過(guò)程中的子碼估值βa和子碼估值βa;Ga乘生成矩陣模塊和Gb乘生成矩陣模塊分別用于生成矩陣G并獲得矩陣G與子碼估值βa和子碼估值βa的乘積,即各自的局部碼字估值u;模塊將Ga乘生成矩陣模塊和Gb乘生成矩陣模塊獲得的局部碼字估值u合并,輸出序列并行的譯碼器PFDa和PFDb分別讀取中間值αa存儲(chǔ)器、中間值αb存儲(chǔ)器、子碼估值βa存儲(chǔ)器和子碼估值βa存儲(chǔ)器中的中間值αa、中間值αb存儲(chǔ)器、子碼估值βa和子碼估值βa,并將計(jì)算得到的激活節(jié)點(diǎn)中間值αa和中間值αb存入中間值αa存儲(chǔ)器和中間值αb存儲(chǔ)器,將子碼估值βa和子碼估值βa存入子碼估值βa存儲(chǔ)器和子碼估值βa存儲(chǔ)器;控制器用于控制其他各個(gè)模塊按照所述譯碼方法完成譯碼的過(guò)程。并行的譯碼器PFDa和PFDb中包含如下運(yùn)算架構(gòu):1)F運(yùn)算用來(lái)求激活節(jié)點(diǎn)左孩子的α值,其硬件架構(gòu)如圖2所示,選擇兩個(gè)相鄰α值的符號(hào)做異或運(yùn)算,作為輸出的符號(hào),選擇較小的絕對(duì)值作為輸出的數(shù)值位。2)G運(yùn)算用來(lái)獲得激活節(jié)點(diǎn)右孩子的α值,硬件架構(gòu)如圖3所示。G運(yùn)算有三個(gè)參數(shù),除了激活節(jié)點(diǎn)本身的兩個(gè)α值,還需要左孩子反饋的β值即βl。β值不同,對(duì)兩個(gè)α的運(yùn)算不同,當(dāng)β為0時(shí),兩個(gè)α相加,當(dāng)β為1時(shí),兩個(gè)α相減。3)C運(yùn)算將激活節(jié)點(diǎn)左孩子反饋來(lái)的βl和右孩子反饋來(lái)的βr計(jì)算自身的β值,硬件架構(gòu)如圖4所示,其中偶數(shù)位的β值是βl與βr的異或,奇數(shù)位的β值與βr相等。4)REP和REPB運(yùn)算分別用來(lái)計(jì)算REP節(jié)點(diǎn)和REPB節(jié)點(diǎn)的β值,兩個(gè)都是累加運(yùn)算,硬件架構(gòu)如圖5所示,根據(jù)REP節(jié)點(diǎn)和REPB節(jié)點(diǎn)的特殊結(jié)構(gòu),對(duì)激活節(jié)點(diǎn)的所有α值求和,對(duì)求和結(jié)果取符號(hào)位,便是激活節(jié)點(diǎn)的β值,其β值為全0或全1序列。5)SPC運(yùn)算和RATE1B運(yùn)算分別用來(lái)求SPC節(jié)點(diǎn)和RATE1B節(jié)點(diǎn)的β值,根據(jù)RATE1B節(jié)點(diǎn)的特殊結(jié)構(gòu),其實(shí)質(zhì)上是一個(gè)較長(zhǎng)的SPC節(jié)點(diǎn),因此具有和SPC運(yùn)算相同的硬件架構(gòu),如圖6所示。首先獲取輸入的符號(hào)位,并對(duì)其進(jìn)行奇偶校驗(yàn),若滿足校驗(yàn)則符號(hào)位便是激活節(jié)點(diǎn)的β值,若不滿足校驗(yàn),對(duì)絕對(duì)值最小的符號(hào)位進(jìn)去取反,取反后的結(jié)果作為激活節(jié)點(diǎn)的β值。6)SPCB1運(yùn)算用來(lái)計(jì)算SPCB1節(jié)點(diǎn)的β值,其硬件架構(gòu)如圖7所示,SPCB1節(jié)點(diǎn)的結(jié)構(gòu)比較復(fù)雜,首先需要將SPCB1節(jié)點(diǎn)拆成一個(gè)REP節(jié)點(diǎn),一個(gè)RATE1節(jié)點(diǎn),通過(guò)F和G運(yùn)算分別計(jì)算兩個(gè)節(jié)點(diǎn)的α值,再將REP運(yùn)算的結(jié)果和G運(yùn)算的符號(hào)位合并成最終的β值。7)SPCB2運(yùn)算用來(lái)計(jì)算SPCB2節(jié)點(diǎn)的β值,其硬件架構(gòu)如圖8所示,首先需要將一個(gè)SPCB2節(jié)點(diǎn)拆分成一個(gè)REP節(jié)點(diǎn)和一個(gè)SPC節(jié)點(diǎn),利用F運(yùn)算和G運(yùn)算分別計(jì)算兩個(gè)節(jié)點(diǎn)的α值,在根據(jù)REP運(yùn)算和SPC運(yùn)算計(jì)算兩個(gè)節(jié)點(diǎn)的β值,經(jīng)過(guò)合并最終獲得激活節(jié)點(diǎn)的β值。本發(fā)明的有益效果:本發(fā)明公開(kāi)的極化碼的譯碼方法,針對(duì)Fast-SSC算法高譯碼延遲的缺點(diǎn),提出了并行快速方法,由兩個(gè)并行的Fast-SSC譯碼器組成,有效降低了Fast-SSC算法的譯碼延遲。與Fast-SSC具有相同的誤碼率,但譯碼速度比Fast-SSC算法更快。當(dāng)兩個(gè)Fast-SSC譯碼器并行時(shí),并行度比Fast-SSC算法提高40%左右。附圖說(shuō)明圖1并行的極化碼譯碼裝置架構(gòu);圖2F運(yùn)算的硬件架構(gòu);圖3G運(yùn)算的硬件架構(gòu);圖4C運(yùn)算的硬件架構(gòu);圖5REP和REPB運(yùn)算的硬件架構(gòu);圖6SPC和RATE1B運(yùn)算的硬件架構(gòu);圖7SPCB1運(yùn)算的硬件架構(gòu);圖8SPCB2運(yùn)算的硬件架構(gòu);圖9并行的極化碼譯碼流程圖;圖10RATE0-P節(jié)點(diǎn)示意圖;圖11RATE1-P節(jié)點(diǎn)示意圖;圖12RATE1N節(jié)點(diǎn)示意圖;圖13REP-P節(jié)點(diǎn)示意圖;圖14REPN節(jié)點(diǎn)示意圖;圖15SPC節(jié)點(diǎn)示意圖;圖16SPCB1節(jié)點(diǎn)及譯碼方法示意圖;圖17SPCB2節(jié)點(diǎn)及譯碼方法示意圖;圖18誤比特率曲線;具體實(shí)施方式本實(shí)施例中以所提出的并行的極化碼譯碼方法,如圖9所示,具體步驟如下:本實(shí)施例碼長(zhǎng)N=1024,碼率R=0.5;位置信息A=[0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000100000000000101110001011101111111000000000000000000000000000000000000000000000000000000000000011100000000000000000000000100010111000000010001011100111111111111110000000000000001000000010001111100000011011111110111111111111111000101110111111101111111111111110111111111111111111111111111111100000000000000000000000000000000000000000000000100000001000101110000000000000001000000010111111100000111011111110111111111111111000000000000011100010111011111110001011101111111111111111111111100011111111111111111111111111111111111111111111111111111111111110000000100010111000101111111111100111111111111111111111111111111011111111111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111];步驟一、構(gòu)建譯碼樹(shù),將序列A按奇偶位拆分成兩個(gè)序列Aa=[00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010111000000000000000000000000000000010000000000000001000000010111111100000000000000110001011101111111000101110111111101111111111111110000000000000000000000000000000100000000000001110001011101111111000000010001011100010111111111110011111111111111111111111111111100000001000111110111111111111111011111111111111111111111111111110111111111111111111111111111111111111111111111111111111111111111];Ab=[00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010111000000000000000000000000000000010000000000000001000000010111111100000000000000110001011101111111000101110111111101111111111111110000000000000000000000000000000100000000000001110001011101111111000000010001011100010111111111110011111111111111111111111111111100000001000111110111111111111111011111111111111111111111111111110111111111111111111111111111111111111111111111111111111111111111];在Aa中0的位置放置固定位節(jié)點(diǎn),1的位置放置信息位節(jié)點(diǎn),以放置好的512個(gè)節(jié)點(diǎn)為葉子構(gòu)建一棵完全二叉樹(shù)Ta,在Ab中0的位置放置固定位節(jié)點(diǎn),1的位置放置信息位節(jié)點(diǎn),以放置好的512個(gè)節(jié)點(diǎn)為葉子構(gòu)建一棵完全二叉樹(shù)Tb;所構(gòu)建的兩棵二叉樹(shù)Ta和Tb分別是兩個(gè)并行快速譯碼器PFDa和PFDb的譯碼樹(shù);兩棵譯碼樹(shù)中的父節(jié)點(diǎn)根據(jù)孩子節(jié)點(diǎn)類型定義;在兩棵譯碼樹(shù)中,當(dāng)節(jié)點(diǎn)的葉子全為固定位時(shí),節(jié)點(diǎn)是RATE0節(jié)點(diǎn);當(dāng)節(jié)點(diǎn)的葉子全為信息位時(shí),節(jié)點(diǎn)是RATE1節(jié)點(diǎn);當(dāng)節(jié)點(diǎn)的葉子只有第一位是固定位,其余位是信息位時(shí),節(jié)點(diǎn)是SPC節(jié)點(diǎn);當(dāng)節(jié)點(diǎn)的葉子只有最后一位是信息位,其余位是固定位時(shí),節(jié)點(diǎn)是REP節(jié)點(diǎn)。當(dāng)節(jié)點(diǎn)的葉子一半是固定位,一半是信息位時(shí),節(jié)點(diǎn)是RATE0-RATE1節(jié)點(diǎn);除去上述5類節(jié)點(diǎn)及其子樹(shù),剩余的節(jié)點(diǎn)是OTHER型節(jié)點(diǎn)。Ta和Tb中的節(jié)點(diǎn)如表1所示。表1節(jié)點(diǎn)類型TaTbRATE0910RATE12224REP1413SPC1514RATE0-RATE120OTHER5960步驟二、譯碼器接收一幀信道α數(shù)據(jù),所述信道α是一個(gè)序列,信道α的長(zhǎng)度和譯碼使用的Polar碼字的長(zhǎng)度相等,都為1024,其取值為(α0,α1…α1023)。步驟三、利用信道α的前一半(α0…α511)初始化譯碼樹(shù)Ta,利用后一半數(shù)據(jù)(α512…α1023)初始化譯碼樹(shù)Tb,譯碼樹(shù)Ta用于并行快速譯碼器PFDa的譯碼,譯碼樹(shù)Tb用于并行快速譯碼器PFDb的譯碼。步驟四、譯碼器PFDa和PFDb由根節(jié)點(diǎn)開(kāi)始,按照深度優(yōu)先的順序同時(shí)激活兩棵譯碼樹(shù)的節(jié)點(diǎn);根節(jié)點(diǎn)的輸入是信道α,除根節(jié)點(diǎn)外其他節(jié)點(diǎn)的輸入是中間值α,中間值α由F運(yùn)算,如式(1)所示,或G運(yùn)算,如式(2)所示,獲得。中間值α是譯碼樹(shù)中每個(gè)節(jié)點(diǎn)進(jìn)行譯碼時(shí)的輸入值,中間值α是個(gè)序列,中間值α的序列長(zhǎng)度和激活節(jié)點(diǎn)的序列長(zhǎng)度nv相等。式(1)和式(2)中,αv表示激活節(jié)點(diǎn)的中間值α,αl表示激活節(jié)點(diǎn)左孩子的中間值α,αr表示激活節(jié)點(diǎn)右孩子的中間值α。激活節(jié)點(diǎn)的輸出是該節(jié)點(diǎn)的子碼估值,即序列β,其長(zhǎng)度和該節(jié)點(diǎn)的長(zhǎng)度相等,該節(jié)點(diǎn)長(zhǎng)度等于該節(jié)點(diǎn)的葉子數(shù)。式(2)中,βl表示激活節(jié)點(diǎn)左孩子的子碼估值。當(dāng)兩棵譯碼樹(shù)中的RATE0、RATE1、REP或SPC節(jié)點(diǎn)被激活時(shí),根據(jù)兩棵譯碼樹(shù)中激活節(jié)點(diǎn)的類型,譯碼器選擇不同的譯碼方法計(jì)算節(jié)點(diǎn)的子碼估值β:1)當(dāng)PFDa和PFDb中的激活節(jié)點(diǎn)同為RATE0節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為RATE0-P節(jié)點(diǎn);此時(shí),PFDa和PFDb中該節(jié)點(diǎn)的子碼估值β同時(shí)被判定為0,即式(10)所示。βa[i]=βb[i]=0,0≤i<nv(10)2)當(dāng)PFDa和PFDb中的激活節(jié)點(diǎn)同為RATE1節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為RATE1-P節(jié)點(diǎn);當(dāng)RATE1-P節(jié)點(diǎn)被激活,PFDa和PFDb根據(jù)式(11)進(jìn)行獨(dú)立譯碼,分別獲得兩個(gè)子碼估值βa和βb。3)當(dāng)PFDa中的激活節(jié)點(diǎn)為SPC節(jié)點(diǎn),PFDb中的激活節(jié)點(diǎn)為RATE1節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為RATE1B節(jié)點(diǎn),當(dāng)RATE1B節(jié)點(diǎn)被激活,首先根據(jù)式(12)組合兩個(gè)譯碼器中相應(yīng)激活節(jié)點(diǎn)的中間值α,之后對(duì)組合得到的中間值α進(jìn)行硬判決,如式(13)所示,判決結(jié)果用序列HD表示。由于硬判決只有0和1兩種結(jié)果,因此序列HD是一個(gè)只含0、1的序列。之后對(duì)判決結(jié)果進(jìn)行奇偶校驗(yàn),即檢測(cè)序列HD中1的個(gè)數(shù),如式(14)所示,校驗(yàn)結(jié)果用parity表示。如果HD中有偶數(shù)個(gè)1,即滿足奇偶校驗(yàn),則硬判決結(jié)果就是節(jié)點(diǎn)的子碼估值β,如果HD中有奇數(shù)個(gè)1,即不滿足奇偶校驗(yàn),則尋找絕對(duì)值最小的中間值α的判決結(jié)果,并對(duì)該判決結(jié)果進(jìn)行取反運(yùn)算,如果該判決結(jié)果是0,取反后變?yōu)?,如果該判決結(jié)果是1,取反后變?yōu)?。取反運(yùn)算后的HD序列為該節(jié)點(diǎn)的子碼估值β,如式(15)和式(16)所示,其中j表示絕對(duì)值最小的中間值α的標(biāo)號(hào)。α=[αaαb](12)j=argimin|α[i]|,0≤i<nv(15)4)當(dāng)PFDa和PFDb中的激活節(jié)點(diǎn)同為REP節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為REP-P節(jié)點(diǎn),當(dāng)REP-P節(jié)點(diǎn)被激活時(shí),PLDa和PLDb根據(jù)式(17)獨(dú)立譯碼,分別獲得兩個(gè)子碼估值βa和βb。5)當(dāng)PFDa中的激活節(jié)點(diǎn)為RATE0節(jié)點(diǎn),PFDb中的激活節(jié)點(diǎn)為REP節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為REPB節(jié)點(diǎn),兩個(gè)REPB節(jié)點(diǎn)的譯碼結(jié)果相同,是對(duì)兩個(gè)節(jié)點(diǎn)共2×nv個(gè)中間值α和的硬判決,根據(jù)式(18)和式(19),獲得兩個(gè)子碼估值βa和βb。6)當(dāng)PFDa和PFDb中的激活節(jié)點(diǎn)同為SPC節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為SPC-P節(jié)點(diǎn),。當(dāng)SPC-P節(jié)點(diǎn)被激活,PFDa和PFDb根據(jù)式(15)(16)(17)(18)(19)獨(dú)立譯碼,分別獲得兩個(gè)子碼估值βa和βb。7)當(dāng)PFDa中的激活節(jié)點(diǎn)為RATE0-RATE1節(jié)點(diǎn),PFDb中的激活節(jié)點(diǎn)為SPC節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為SPCB1節(jié)點(diǎn)。當(dāng)SPCB1節(jié)點(diǎn)被激活,PFDa將RATE0-RATE1節(jié)點(diǎn)的中間值α作為F運(yùn)算的輸入做一次F運(yùn)算,運(yùn)算結(jié)果用αa表示。PFDb將SPC節(jié)點(diǎn)的中間值α作為F運(yùn)算的輸入做一次F運(yùn)算,運(yùn)算結(jié)果用αb表示。將αa和αb作為公式(18)的輸入計(jì)算α,將α作為公式(19)的輸入,公式(19)的輸出βa用βa0表示,公式(19)的另一個(gè)輸出βb用βb0表示。之后PFDa將αa和βa0作為G運(yùn)算的輸入做一個(gè)G運(yùn)算,按照正數(shù)為0負(fù)數(shù)為1的規(guī)則,將G運(yùn)算的結(jié)果轉(zhuǎn)換成只含0、1的序列,用βa1表示,PFDb將αb和βb0作為G運(yùn)算的輸入做一個(gè)G運(yùn)算,同樣按照正數(shù)為0負(fù)數(shù)為1的規(guī)則將運(yùn)算結(jié)果轉(zhuǎn)換成只含0、1的序列,用βb1表示。將[βa0,βa1]作為公式(20)的輸入,公式(20)的輸出就是RATE0-RATE1節(jié)點(diǎn)的β值,將[βb0,βb1]作為公式(21)的輸入,公式(21)的輸出就是SPC節(jié)點(diǎn)的β值。8)當(dāng)PFDa中的激活節(jié)點(diǎn)為REP節(jié)點(diǎn),PFDb中的激活節(jié)點(diǎn)為SPC節(jié)點(diǎn)時(shí),兩節(jié)點(diǎn)合稱為SPCB2節(jié)點(diǎn)。當(dāng)SPCB2節(jié)點(diǎn)被激活,PFDa將REP節(jié)點(diǎn)的中間值α作為F運(yùn)算的輸入做一次F運(yùn)算,運(yùn)算結(jié)果用αa表示。PFDb將SPC節(jié)點(diǎn)的中間值α作為F運(yùn)算的輸入做一次F運(yùn)算,運(yùn)算結(jié)果用αb表示。將αa和αb作為公式(18)的輸入計(jì)算α,將α作為公式(19)的輸入,公式(19)的輸出βa用βa0表示,公式(19)的另一個(gè)輸出βb用βb0表示。之后PFDa將αa和βa0作為G運(yùn)算的輸入做一個(gè)G運(yùn)算,PFDb將αb和βb0作為G運(yùn)算的輸入做一個(gè)G運(yùn)算。將兩個(gè)G運(yùn)算的結(jié)果帶入公式(12),計(jì)算完公式(12)之后,再利用公式(13)(14)(15)(16)計(jì)算REP節(jié)點(diǎn)和SPC節(jié)點(diǎn)的β,分別用βa0和βb0表示。將βa0作為公式(20)的輸入,公式(20)的輸出就是REP節(jié)點(diǎn)的β值,將βb0作為公式(21)的輸入,公式(21)的輸出就是SPC節(jié)點(diǎn)的β值。當(dāng)OTHER型節(jié)點(diǎn)被激活時(shí),譯碼器計(jì)算下一個(gè)激活節(jié)點(diǎn)的中間值α,為譯碼下一個(gè)節(jié)點(diǎn)做準(zhǔn)備。步驟五、當(dāng)PFDa和PFDb中的激活節(jié)點(diǎn)是RATE0、RATE1、REP、SPC時(shí),將該節(jié)點(diǎn)β值乘以生成矩陣G獲得局部碼字估值u,完成一個(gè)激活節(jié)點(diǎn)的譯碼;所述矩陣其中m=log2nv,表示F的m次克羅內(nèi)克積,B為反序重排序列。步驟六、譯碼器PFDa和PFDb更新激活節(jié)點(diǎn)號(hào),激活下一個(gè)節(jié)點(diǎn);步驟七、重復(fù)步驟四至步驟六,至兩棵譯碼樹(shù)中所有的節(jié)點(diǎn)被激活;步驟八、將譯碼器PFDa所有的局部碼字估值按獲得的順序拼接,就是譯碼器PFDa的碼字估值,將譯碼器PFDb所有的局部碼字估值按獲得的順序拼接,就是譯碼器PFDb的碼字估值。將PFDa的碼字估值與譯碼器PFDb的碼字估值異或運(yùn)算,并替換譯碼器PFDa的碼字估值。步驟九、將譯碼器PFDa的碼字估值作為序列的前一半譯碼器PFDb的碼字估值作為序列的后一半合并兩個(gè)譯碼器的碼字估值,獲得序列即步驟十、輸出序列一幀信道α數(shù)據(jù)的譯碼結(jié)束。本實(shí)施例中所采用的一種用于實(shí)現(xiàn)該譯碼方法的譯碼器的架構(gòu)如圖1所示,包括:信道α存儲(chǔ)器、中間值αa存儲(chǔ)器、中間值αb存儲(chǔ)器、子碼估值βa存儲(chǔ)器、子碼估值βb存儲(chǔ)器、Ga乘生成矩陣模塊、Gb乘生成矩陣模塊、組合模塊、控制器和并行的譯碼器PFDa和PFDb。信道α存儲(chǔ)器接收到的信道α分為兩部分分別送入中間值αa存儲(chǔ)器和中間值αb存儲(chǔ)器,中間值αa存儲(chǔ)器和中間值αb存儲(chǔ)器分別用于存儲(chǔ)計(jì)算過(guò)程中的中間值αa和中間值αb;子碼估值βa存儲(chǔ)器和子碼估值βa存儲(chǔ)器分別用于存儲(chǔ)計(jì)算過(guò)程中的子碼估值βa和子碼估值βa;Ga乘生成矩陣模塊和Gb乘生成矩陣模塊分別用于生成矩陣G并獲得矩陣G與子碼估值βa和子碼估值βa的乘積,即各自的局部碼字估值u;模塊將Ga乘生成矩陣模塊和Gb乘生成矩陣模塊獲得的局部碼字估值u合并,輸出序列并行的譯碼器PFDa和PFDb分別讀取中間值αa存儲(chǔ)器、中間值αb存儲(chǔ)器、子碼估值βa存儲(chǔ)器和子碼估值βa存儲(chǔ)器中的中間值αa、中間值αb存儲(chǔ)器、子碼估值βa和子碼估值βa,并將計(jì)算得到的激活節(jié)點(diǎn)中間值αa和中間值αb存入中間值αa存儲(chǔ)器和中間值αb存儲(chǔ)器,將子碼估值βa和子碼估值βa存入子碼估值βa存儲(chǔ)器和子碼估值βa存儲(chǔ)器;控制器用于控制其他各個(gè)模塊按照所述譯碼方法完成譯碼的過(guò)程。并行的譯碼器PFDa和PFDb中包含如下運(yùn)算架構(gòu):1)F運(yùn)算用來(lái)求激活節(jié)點(diǎn)左孩子的α值,其硬件架構(gòu)如圖2所示,選擇兩個(gè)相鄰α值的符號(hào)做異或運(yùn)算,作為輸出的符號(hào),選擇較小的絕對(duì)值作為輸出的數(shù)值位。2)G運(yùn)算用來(lái)獲得激活節(jié)點(diǎn)右孩子的α值,硬件架構(gòu)如圖3所示。G運(yùn)算有三個(gè)參數(shù),除了激活節(jié)點(diǎn)本身的兩個(gè)α值,還需要左孩子反饋的β值即βl。β值不同,對(duì)兩個(gè)α的運(yùn)算不同,當(dāng)β為0時(shí),兩個(gè)α相加,當(dāng)β為1時(shí),兩個(gè)α相減。3)C運(yùn)算將激活節(jié)點(diǎn)左孩子反饋來(lái)的βl和右孩子反饋來(lái)的βr計(jì)算自身的β值,硬件架構(gòu)如圖4所示,其中偶數(shù)位的β值是βl與βr的異或,奇數(shù)位的β值與βr相等。4)REP和REPB運(yùn)算分別用來(lái)計(jì)算REP節(jié)點(diǎn)和REPB節(jié)點(diǎn)的β值,兩個(gè)都是累加運(yùn)算,硬件架構(gòu)如圖5所示,根據(jù)REP節(jié)點(diǎn)和REPB節(jié)點(diǎn)的特殊結(jié)構(gòu),對(duì)激活節(jié)點(diǎn)的所有α值求和,對(duì)求和結(jié)果取符號(hào)位,便是激活節(jié)點(diǎn)的β值,其β值為全0或全1序列。5)SPC運(yùn)算和RATE1B運(yùn)算分別用來(lái)求SPC節(jié)點(diǎn)和RATE1B節(jié)點(diǎn)的β值,根據(jù)RATE1B節(jié)點(diǎn)的特殊結(jié)構(gòu),其實(shí)質(zhì)上是一個(gè)較長(zhǎng)的SPC節(jié)點(diǎn),因此具有和SPC運(yùn)算相同的硬件架構(gòu),如圖6所示。首先獲取輸入的符號(hào)位,并對(duì)其進(jìn)行奇偶校驗(yàn),若滿足校驗(yàn)則符號(hào)位便是激活節(jié)點(diǎn)的β值,若不滿足校驗(yàn),對(duì)絕對(duì)值最小的符號(hào)位進(jìn)去取反,取反后的結(jié)果作為激活節(jié)點(diǎn)的β值。6)SPCB1運(yùn)算用來(lái)計(jì)算SPCB1節(jié)點(diǎn)的β值,其硬件架構(gòu)如圖7所示,SPCB1節(jié)點(diǎn)的結(jié)構(gòu)比較復(fù)雜,首先需要將SPCB1節(jié)點(diǎn)拆成一個(gè)REP節(jié)點(diǎn),一個(gè)RATE1節(jié)點(diǎn),通過(guò)F和G運(yùn)算分別計(jì)算兩個(gè)節(jié)點(diǎn)的α值,再將REP運(yùn)算的結(jié)果和G運(yùn)算的符號(hào)位合并成最終的β值。7)SPCB2運(yùn)算用來(lái)計(jì)算SPCB2節(jié)點(diǎn)的β值,其硬件架構(gòu)如圖8所示,首先需要將一個(gè)SPCB2節(jié)點(diǎn)拆分成一個(gè)REP節(jié)點(diǎn)和一個(gè)SPC節(jié)點(diǎn),利用F運(yùn)算和G運(yùn)算分別計(jì)算兩個(gè)節(jié)點(diǎn)的α值,在根據(jù)REP運(yùn)算和SPC運(yùn)算計(jì)算兩個(gè)節(jié)點(diǎn)的β值,經(jīng)過(guò)合并最終獲得激活節(jié)點(diǎn)的β值。效果驗(yàn)證本發(fā)明方法的誤比特率與Fast-SSC算法和Parallel-SC算法接近,誤比特率曲線如圖18所示。本發(fā)明方法同時(shí)具有吞吐率高和延遲小的特點(diǎn)。定義并行的極化碼譯碼方法在譯碼并行度與Fast-SSC相比的增長(zhǎng)率T如式(22)所示,當(dāng)被拆分成2個(gè)譯碼器PFD時(shí)并行度增長(zhǎng)率如表2所示。表2當(dāng)前第1頁(yè)1 2 3