專利名稱:一種用于Turbo碼的譯碼方法
技術領域:
本發(fā)明涉及移動通信系統(tǒng),具體涉及一種用于通信系統(tǒng)信道編碼中Turbo碼的譯碼方法。
二.
背景技術:
在第三代移動通信系統(tǒng)(WCDMA、CDMA2000和TD-SCDMA)中,對于BER要求在10-3至10-6的接收系統(tǒng),采用Turbo碼。圖1是TD-SCDMA移動通信系統(tǒng)中所采用的Turbo碼編碼原理圖。圖中,基于RSC的Turbo碼只需發(fā)送一個輸入信息序列mk,直接輸入RSCI(02)進行編碼,生成RSCI(02)的信息序列c1ks和校驗序列c2ks,同時經(jīng)交織器(01)后,輸入RSCII(03),產生另一個的信息序列c2ks和校驗序列c2kp,并按要求經(jīng)復用打孔后得到輸出序列。實際上,RSCI(02)和RSCII(03)由同一數(shù)據(jù)源驅動,鑒于RSCI(02)的系統(tǒng)輸出已在信道中傳輸,所以RSCII(03)的系統(tǒng)輸出完全是冗余的,不用傳輸,因此整個碼率為1/3。其中RSCI(02)和RSCII(03)的結構相同,其生成多項式可表示為G(D)=[1,gi(D)g0(D)]]]>其中逆向反饋多項式g0(D)=1+D2+D3前向反饋多項式g1(D)=1+D+D33GPP所采用的收尾方式是強迫兩個RSC編碼器(02、03)歸于零狀態(tài)。參見圖1,到達數(shù)據(jù)幀末尾時,兩個開關向下切換,兩個編碼器分別通過其移位寄存器的反饋信息進行網(wǎng)格圖的收尾,即RSCI和RSCII(11、31)獨立產生各自的尾比特。前六個尾比特用于RSCI(11)的收尾,后六個比特用于RSCII(31)的收尾。收尾時的傳輸比特為c1(L+1)s,c1(L+1)p,c1(L+2)s,c1(L+2)p,c1(L+3)s,c1(L+3)p,]]>c2(L+1)s,c2(L+1)p,c2(L+2)s,c2(L+2)p,c2(L+3)s,c2(L+3)p.]]>這種方法導致兩個子編碼器(11、31)的信息輸出序列不完全相同,而推導Turbo迭代譯碼算法的基礎是兩個子編碼器(11、31)的信息輸出相同(只是次序不同),因此這種方法對Turbo性能有一定影響。
圖2是Turbo譯碼算法結構圖。對兩個RSC碼進行最優(yōu)譯碼,以迭代的方式使兩者分享共同的信息,并利用反饋環(huán)路來改善譯碼模塊的譯碼性能。為了不阻礙各譯碼模塊進一步采用軟判決譯碼,它們均以數(shù)據(jù)比特的后驗概率(APP)的形式產生軟輸出。在第一次迭代結束時,SISO譯碼模塊二的軟輸出信息反饋回SISO譯碼模塊一,作為下一次迭代的先驗信息。譯碼以迭代的形式繼續(xù)下去,直至得到期望的性能,隨后進行硬判決,輸出譯碼信息。
設1)m=(m1,Λ,mk,Λ,mL)為信息序列,mk∈(0,1);2)--cs=(c1s,Λ,cks,Λ,cLs)=(m1,Λ,mk,Λ,mL)]]>為RSC編碼器輸出的系統(tǒng)信息序列,cp=(c1p,Λ,ckp,Λ,cLp)]]>為RSC編碼器輸出的校驗元序列,cks,ckp∈(0,1);]]>3)X=(x1,Λ,xk,Λ,xL)為調制后的序列,其中xk=(xks,xkp);]]>4)z=(z1,Λ,zk,Λ,zL)為先驗信息序列;5)對于網(wǎng)格圖來說,sk為編碼器在k時刻的狀態(tài),而sk→sk+1表示在k+1時刻sk到sk+1的狀態(tài)轉移,如果sk和sk+1沒有連接,則其轉移概率為0。
6)--Y=Y1L=(y1,Λ,yk,Λ,yL),Yab=(ya,ya+1,Λ,yb)]]>為經(jīng)過噪聲信道的接收數(shù)據(jù),其中,yk=(yks,ykp)]]>為xk=(xks,xkp)]]>受擾后的數(shù)據(jù),定義為yks=aks·xks+nks=aks·Es·(2cks-1)+nks]]>ykp=akp·xkp+nkp=akp·Es·(2ckp-1)+nkp]]>
式中aks和akp為信道衰減因子,對于AWGN信道,aks=akp=1;]]>nks和nkp為兩個獨立同分布的高斯噪聲樣值,它們的均值為0,方差σ2=N0/2;xki=Es·(2cki-1)]]>為BPSK調制符號(cki∈{0,1},]]>i為s或p),Es是單個調制符號的能量。
兩個SISO譯碼模塊的信息比特mk的后驗對數(shù)似然比(LLR)均定義為Λk=lnP[mk=1|Y]P[mk=0|Y]]]>=max*s1[α′(sk)+γ′(sk→sk+1)+β′(sk+1)]-maxs0*[α′(sk)+γ′(sk→sk+1)+β′(sk+1)]]]>其中S1={sk→sk+1∶mk=1},表示所有mk=1的狀態(tài)轉移的集合,以及S0={sk→sk+1∶mk=0},表示所有mk=0的狀態(tài)轉移的集合。
從Λk可以判定 α′、β′和γ′的分別如下α′(sk)=max*[α′(sk-1,bs1)+γ′(sk-1→sk,bs1),α′(sk-1,bs2)+γ′(sk-1→sk,bs2)]β′(sk)=max*[β′(sk+1,bs1)+γ′(sk→sk+1,bs1),β′(sk+1,bs2)+γ′(sk→sk+1,bs2)γ′(sk→sk+1)=mk·zk+Lc·yks·mk+Lc·ykp·ckp]]>目前Turbo碼采用的譯碼算法主要是MAP類算法,其可達到每個碼元的譯碼錯誤概率最小,但即使是復雜度較低的Log-MAP算法,由于算法本身的結構和運算問題,其譯碼復雜度依然很高。又因為Turbo碼采用譯碼算法是以迭代的方式進行,導致譯碼時延較大。
在MAP類算法中,前/后向路徑度量由于其本身的計算特點,會隨著遞歸的不斷進行無邊界地增加下去,這樣勢必會導致溢出,導致整個算法不穩(wěn)定,因此必須對它們進行歸一化,常用的方法就是負向歸一化,就是在計算網(wǎng)格圖中每個k時刻的所有狀態(tài)的路徑度量時,都減上此刻的度量最大值,但這種方法的運算量較大,帶來更大復雜度和時延。另一方面,為了計算最后的輸出完全信息,需要大量的存儲空間來存儲前/后向路徑度量。
三.
發(fā)明內容
本發(fā)明的目的是提供一種運算簡單,延時小,節(jié)約存儲空間的用于Turbo碼的譯碼方法。
為達上述目的,本發(fā)明包括改進的Log-Map算法、糾正函數(shù)擬合、抑制溢出方法、尾比特處理及滑動窗等措施。
改進的Log-Map算法是將SISO譯碼模塊二(31)的輸入變?yōu)?0,y2kp,z2k),這相當于turbo編碼模塊RSC2被看作1/1碼率,RSC2的碼字只是一個校驗位,原來的輸入系統(tǒng)信息y2ks被加到先驗信息z2k中,省去了譯碼模塊二(31)中信息數(shù)據(jù)的交織。
本發(fā)明所述的Turbo譯碼方法采用了特殊的尾比特處理方法,處理方法是將SISO譯碼模塊一和二(11、31)的尾部外信息均進行特殊處理,對譯碼模塊一(11)的尾部外信息l_tail1和譯碼模塊二(31)的尾部外信息l_tail2賦初值
;A.每次迭代過程中,它們的值將隨著譯碼模塊一和二(11、31)的外信息的最后三位而變化,即l_tail1=l1k(L+1∶L+3)l_tail2=l2k(L+1∶L+3);B.因此每次迭代過程中,譯碼模塊一和二(11、31)的輸入先驗信息的尾比特分別為z1k(L+1∶L+3)=l_tail1z2k(L+1:L+3)=l_tail2+yks(L+1:L+3).]]>本發(fā)明基于Log-Map譯碼算法,糾正函數(shù)擬合是其主要包括外信息lk、前向路徑度量α′和后向路徑度量β′的計算,而在計算lk、α′和β′時均需要反復調用函數(shù)max*(x,y)=max(x,y)+fc(|y-x|),其中非線性的糾正函數(shù)為fc(x)=ln(1+e-x)x≥0。因此糾正函數(shù)的實現(xiàn)尤為重要,本發(fā)明采用數(shù)值分析的方法對糾正函數(shù)進行簡化求得該函數(shù)的最佳擬合函數(shù)fc′(x)=-0.25*min(x,2.4544/Lc)來代替它進行譯碼,這樣,糾正函數(shù)就由一個最小值運算和右移兩位操作完成。
滑動窗方法是過在一些相互交疊30位的256位長的存儲跨度內分別執(zhí)行改進的Log-MAP譯碼算法,然后綜合起來,刪除重復部分,即可在每隔一段延時就可處理一塊數(shù)據(jù),并輸出一段連續(xù)的軟輸出概率分布放入總的外信息lk,直到最后一塊數(shù)據(jù)計算完,一個SISO譯碼過程結束。
抑制溢出方法是前/后向路徑度量α′和β′隨著遞歸的進行可能會產生溢出,本發(fā)明采用一種負向在任意k時刻,每一個α′和β′均由它們減去該時刻零狀態(tài)的α′和β′來代替,即α′(sk,bs)⇐α′(sk,bs)-α′(sk,0),β′(sk,bs)⇐β′(sk,bs)-β′(sk,0)]]>其中bs表示每個狀態(tài);本發(fā)明的有益效果是極大程度地簡化了糾正函數(shù),在運算量和性能之間取得最佳結合點。對算法結構進行優(yōu)化,大大減少了算法復雜度,提供了具體實現(xiàn)的有效方法;在很大程度上減少了所需的存儲空間,并有效地解決了特殊收尾模式對譯碼性能的影響問題;有效地防止了溢出問題,保持算法穩(wěn)定。本發(fā)明可以廣泛地應用于WCDMA、CDMA2000和TD-SCDMA等移動通信系統(tǒng)中下面結合附圖對本發(fā)明作進一步的說明。
四.
圖1是TD-SCDMA移動通信系統(tǒng)中所采用的Turbo碼編碼原理圖;圖2是Turbo譯碼算法結構圖;圖3是糾正函數(shù)及其擬合曲線比較圖;圖4是滑動窗原理圖;圖5是編碼存儲長度為3的SISO譯碼過程中α′度量的轉移過程圖;圖6是采用改進的Log-MAP算法的Turbo譯碼結構圖;
五.
具體實施例方式
參見圖6。在本發(fā)明提出的改進算法中,對于譯碼模塊一(11),輸入為(yks,y1kp,z1k);而對于譯碼模塊二(31),輸入為(0,y2kp,z2k)。這相當于Turbo編碼器的RSCI(02)被看作1/2碼率,RSCII(03)被看作1/1碼率,RSCII(03)的碼字只是一個校驗位,原來的輸入系統(tǒng)信息y2ks被加到先驗信息z2k中。則在本改進算法中,分支度量變?yōu)?因此對于譯碼模塊二(31)信息數(shù)據(jù)的交織就省去了。
傳統(tǒng)算法中,完全信息Λk=zk+Lc·yks+lk,]]>其中zk和Lc·yks都是已知的輸入。
本算法設置新外信息lk′=Lc·yks+lk,]]>因此Λk=zk+lk′。上述式中外信息可表示為lk=maxs1*[α′(sk)+Lc·ykp·ckp+β′(sk+1)]-maxs0*[α′(sk)+Lc·ykp·ckp+β′(sk+1)].]]>由于yks不被包含在譯碼模塊二(31)的輸入中,所以yks應包含在譯碼模塊一(11)的外信息中,并作為先驗信息的一部分輸入譯碼模塊二(31),因此譯碼模塊一(11)的新外信息l1k′為l1k′=l1k+Lc·yks]]>其中l(wèi)1k為譯碼模塊一(11)直接輸出的外信息。
由于譯碼模塊一(11)的新外信息經(jīng)交織器(21)后輸入到譯碼模塊二(31)作為其先驗信息,因此對于譯碼模塊二(31)有z2k=(l1k′)interleaver=(z2k)old+(Lc·yks)interleaver]]>即包含了譯碼模塊二(31)的以前的系統(tǒng)信息。
又由于譯碼模塊二(31)輸入的系統(tǒng)信息數(shù)據(jù)變?yōu)?,因此譯碼模塊二(31)的輸出似然比為Λ2k=z2k+l2k=z2k+l2k′
其中并未包含系統(tǒng)信息,因此可以直接經(jīng)解交織(22)后輸入到譯碼模塊一(11)中。在迭代完成后需要對輸出對數(shù)似然比Λ2k進行解交織(41),然后硬判決(51),因此輸出Λ2k=l2k′+z2k。
改進算法中,SISO譯碼模塊一和二(11、31)的新外信息為 由于本發(fā)明采用了特殊的收尾方式,在譯碼時就針對兩個譯碼模塊的尾部外信息進行了單獨處理。
特處理方法是將SISO譯碼模塊一和二(11、31)的尾部外信息均進行特殊處理,對譯碼模塊一(11)的尾部外信息l_tail1和譯碼模塊二(31)的尾部外信息l_tail2賦初值
;(3)每次迭代過程中,它們的值將隨著譯碼模塊一和二(11、31)的外信息的最后三位而變化,即l_tail1=l1k(L+1∶L+3)l_tail2=l2k(L+1∶L+3);(4)因此每次迭代過程中,譯碼模塊一和二(11、31)的輸入先驗信息的尾比特分別為z1k(L+1∶L+3)=l_tail1z2k(L+1:L+3)=l_tail2+yks(L+1:L+3).]]>因此譯碼模塊一和二(11、31)的輸入先驗信息分別為 另一方面,上面的外信息lk、前/后向路徑度量α′和β′計算均需要反復調用函數(shù)max*(x,y)=max(x,y)+fc(|y-x|),其中非線性的糾正函數(shù)為fc(x)=ln(1+e-x)。由于該函數(shù)是一個非線性函數(shù)。
本算法對函數(shù)y=fc(x)=ln(1+e-x)從0開始、以0.2622為跨度取10個點進行多項式擬合,得到擬合函數(shù)fc(x)=0.6136-0.25*min(x,2.4544),擬合曲線與原糾正函數(shù)曲線的比較曲線參見圖3。由于接收數(shù)據(jù)yki(i為s或p)都被乘了一個信道可靠系數(shù)Lc,而fc(·)是整個譯碼結構中唯一的非線性函數(shù),因此用fc′(x)代替fc(x)作為糾正函數(shù),則Lc·yki也可由yki代替作為輸入fc′(x)=0.6136/Lc-0.25*min(x,2.4544/Lc)。
由于max*(·)函數(shù)有性質max*(x,y,z,t)=max*(max*(x,y),max*(z,t)),而對于整個SISO譯碼模塊的輸出對數(shù)似然比LLR來說,常數(shù)0.6136/Lc會被最后抵消掉,對最后的輸出沒有影響,因此可以將fc(x)進一步簡化為fc′(x)=-0.25*min(x,2.4544/Lc)由此可以看出,非線性糾正函數(shù)可由一個最小值運算和右移兩位操作實現(xiàn)。
參見圖4。通過在一些相互交疊的固定長度的存儲跨度內分別執(zhí)行軟輸入軟輸出譯碼算法,然后綜合起來,刪除重復部分,即可在每隔一段延時就可處理一小塊數(shù)據(jù),并輸出一段連續(xù)的軟輸出概率分布,這樣每次只需要存儲本塊數(shù)據(jù)所需的路徑度量,因此節(jié)省了很大的存儲空間。
對于SISO譯碼器中的前向路徑度量α′(sk),第一塊時可按照零狀態(tài)賦初值,而以后的每塊可以在上一塊中按相應位置取對應的值,這個值并沒有發(fā)生改變,也不會引起差錯。對于后向路徑度量β′(sk),由于最后一塊數(shù)據(jù)包含收尾處理,可以按照收尾狀態(tài)賦初值;其它各塊數(shù)據(jù)并沒有進行收尾處理,可以按照未知狀態(tài)賦初值。本算法經(jīng)過最佳的性能和開銷折中,考慮采用每塊數(shù)據(jù)256位,交迭30位的滑動窗算法。
在實現(xiàn)中,如果變量產生溢出,就會導致算法不穩(wěn)定。對于遞歸變量α′(sk)和β′(sk)來說,它們將會隨著遞歸的進行不斷無邊界地增加下去,勢必會導致溢出,得到錯誤的結果。本發(fā)明所提供的負向歸一化方法。參見圖5。從0時刻初始化起,經(jīng)過mt個時間間隔后,所有k時刻的α′(sk)的值都將會大致相等,因此在任意k時刻,每一個α′均由其減去該時刻零狀態(tài)的α′來代替,即α′(sk,bs)⇐α′(sk,bs)-α′(sk,0)]]>同理,從L時刻初始化起,往回遞歸mt個時間間隔后,所有k時刻的β′(sk)的值都將會大致相等,因此在任意k時刻,因此在任意k時刻,每一個β′均由其減去該時刻零狀態(tài)的β′來代替,即β′(sk,bs)⇐β′(sk,bs)-β′(sk,0)]]>其中bs=0,1,K,7。該方法不需要很多操作,而有效地抑制了溢出問題。
參見圖6。本發(fā)明的實施方法具體描述如下1.將接收數(shù)據(jù)(yks,y1kp,y2kp)分解成(yks,y1kp)和(0,y2kp),分別作為碼字信息送到譯碼模塊一(11)和譯碼模塊二(31)中;2.迭代開始,對于譯碼模塊一(11),z1k=0,k=1,Λ,L+3;3.對于譯碼模塊一(11),根據(jù)滑動窗方法對每塊數(shù)據(jù)進行處理,其中每塊數(shù)據(jù)長度取256,兩塊數(shù)據(jù)之間交疊長度為30(1)第一塊數(shù)據(jù)α′(sk)的初值為零狀態(tài)初值,β′(sk)的初值為未知狀態(tài)初值;(2)由公式α′(sk)=max*[α′(sk-1,bs1)+γ′(sk-1→sk,bs1),α′(sk-1,bs2)+γ′(sk-1→sk,bs2)]和β′(sk)=max*[β′(sk+1,bs1)+γ′(sk→sk+1,bs1),β′(sk+1,bs2)+γ′(sk→sk+1,bs2)]計算前/后向路徑度量α′(sk)和β′(sk),其中分支度量可根據(jù)公式γ′(sk→sk+1)=mk·z1k+yks·mk+y1kp·c1kp]]>得到,函數(shù)max*(·)則由擬合以后的函數(shù)代替max*(x,y)=max(x,y)-min(|y-x|,2.4544/Lc)/4;
(3)當每個k時刻的所有狀態(tài)的α′和β′均求出時,根據(jù)下列公式對它們進行負向歸一化的溢出處理α′(sk,bs)⇐α′(sk,bs)-α′(sk,0)]]>和β′(sk,bs)⇐β′(sk,bs)-β′(sk,0);]]>(4)保留α′(s227)作為下一塊數(shù)據(jù)的α′(sk)的初值;(5)根據(jù)公式lk=ln{Σs1exp[α′(sk)+y1kp·c1kp+β′(sk+1)]Σs0exp[α′(sk)+y1kp·c1kp+β′(sk+1)]}]]>計算當前數(shù)據(jù)塊的外信息,并將每塊數(shù)據(jù)中前226個有效的軟輸出外信息放入總的外信息l1k;(6)當前數(shù)據(jù)塊如果是最后一塊,則本SISO譯碼模塊結束,否則,繼續(xù)執(zhí)行下一數(shù)據(jù)塊,進入第(7)步;(7)如果是最后一個數(shù)據(jù)塊,則β′(sk)的初值為零狀態(tài)初值,否則β′(sk)的初值為未知狀態(tài)初值,然后返回第(2)步;4.將SISO譯碼模塊一(11)的尾部三位外信息存儲在變量l_tail1中,并根據(jù)公式 由外信息l1k、系統(tǒng)數(shù)據(jù)yks及l(fā)_tail2經(jīng)交織器(21)得到譯碼器二(31)的先驗信息z2k,送入譯碼模塊二(31)中,其中第一次迭代時l_tail2的初值為
;5.對于 譯碼模塊二(31),可根據(jù)與SISO譯碼模塊一(11)同樣的方法得到外信息l2k,然后(1)如果未達到最大迭代次數(shù),則將SISO譯碼模塊二(31)的尾部三位外信息存儲在變量l_tail2中,并根據(jù)公式
由前L位外信息l2k和l_tail1經(jīng)解交織(22)得到譯碼模塊一(11)的先驗信息z1k,送入譯碼模塊一(11)中,然后返回執(zhí)行第3步以進行下一次迭代;(2)如果達到最大迭代次數(shù),則根據(jù)公式Λ2k=l1k+z2k計算總信息Λ2k,然后將其解交織(41)得到LLR,進行硬判決(51),即可得到當前幀的譯碼數(shù)據(jù) 本幀數(shù)據(jù)的譯碼過程結束。
權利要求
1.一種用于Turbo碼的譯碼方法,其特征在于包括改進的Log-Map算法、糾正函數(shù)擬合、抑制溢出方法、尾比特處理及滑動窗等措施;所述Log-Map算法是將SISO譯碼模塊二(31)的輸入變?yōu)?0,y2kp,z2k),使turbo編碼模塊RSCII(03)被看作1/1碼率,RSCII(03)的碼字只是一個校驗位,原來的輸入系統(tǒng)信息y2ks被加到先驗信息z2k中,省去了譯碼模塊二(31)中信息數(shù)據(jù)的交織;糾正函數(shù)擬合是在turbo碼譯碼算法中,包括外信息lk、前向路徑度量α′和后向路徑度量β′的計算,而在計算lk、α′和β′時均需要反復調用函數(shù)max*(x,y)=max(x,y)+fc(|y-x|),其中非線性的糾正函數(shù)為fc(x)=ln(1+e-x)x≥0,采用數(shù)值分析的方法對糾正函數(shù)進行簡化求得該函數(shù)的最佳擬合函數(shù)fc′(x)=-0.25*min(x,2.4544/Lc)來代替它進行譯碼,糾正函數(shù)就由一個最小值運算和右移兩位操作完成;滑動窗方法是通過在一些相互交疊30位的256位長的存儲跨度內分別執(zhí)行改進的Log-MAP譯碼算法,刪除重復部分,即可在每隔一段延時就可處理一塊數(shù)據(jù),并輸出一段連續(xù)的軟輸出概率分布放入總的外信息lk,直到最后一塊數(shù)據(jù)計算完,一個SISO譯碼過程結束;抑制溢出方法是針對前/后向路徑度量α′和β′隨著遞歸的進行可能會產生溢出,采用一種負向在任意k時刻,每一個α′和β′均由它們減去該時刻零狀態(tài)的α′和β′來代替,即α′(sk,bs)⇐α′(sk,bs)-α′(sk,0),β′(sk,bs)⇐β′(sk,bs)-β′(sk,0)]]>其中bs表示每個狀態(tài);
2.如權利要求1中所述的譯碼方法,其特征在于尾比特處理方法是將SISO譯碼模塊一和二(11、31)的尾部外信息均進行特殊處理,對譯碼模塊一(11)的尾部外信息l_tail1和譯碼模塊二(31)的尾部外信息l_tail2賦初值
;(1)每次迭代過程中,它們的值將隨著譯碼模塊一和二(11、31)的外信息的最后三位而變化,即l_tail1=l1k(L+1∶L+3)l_tail2=l2k(L+1∶L+3);(2)因此每次迭代過程中,譯碼模塊一和二(11、31)的輸入先驗信息的尾比特分別為z1k(L+1∶L+3)=l_tail1z2k(L+1:L+3)=l_tail2+yks(L+1:L+3).]]>
全文摘要
本發(fā)明公開了一種用于Turbo碼的譯碼方法,首先將接收信息比特y
文檔編號H03M13/00GK1490956SQ0213393
公開日2004年4月21日 申請日期2002年10月18日 優(yōu)先權日2002年10月18日
發(fā)明者冉靜, 鄭建宏, 申敏, 靜 冉 申請人:重慶重郵信科股份有限公司