一種改進(jìn)Turbo碼譯碼器的FPGA設(shè)計(jì)與實(shí)現(xiàn)
Turbo碼又稱并行級(jí)聯(lián)卷積碼(PCCC),1993年由Berro等人在ICC國(guó)際會(huì)議上提出。由于其充分利用了Shannon信道編碼定理的隨機(jī)化編碼條件,因此獲得幾乎接近Shannon理論極限的譯碼性能[1]。
本文引用地址:http://butianyuan.cn/article/201706/349283.htmTurbo碼在低信噪比應(yīng)用環(huán)境下的優(yōu)異性能,使得其在很多通信系統(tǒng)中擁有非常好的應(yīng)用前景。第三、四代移動(dòng)通信系統(tǒng)的多種方案,都將Turbo碼作為信道編碼的方案之一。但是,Turbo碼存在著譯碼時(shí)延長(zhǎng)、硬件實(shí)現(xiàn)復(fù)雜度高的問(wèn)題,這使得其實(shí)現(xiàn)和應(yīng)用都受到了一定的局限。人們也推出了一些減小譯碼延時(shí)的譯碼方法,例如分塊并行、滑窗等方法。但是這些譯碼方法對(duì)應(yīng)的譯碼性能有損失,而且在硬件實(shí)現(xiàn)上控制時(shí)序也比較復(fù)雜。本文給出了一種更加有效減小譯碼延時(shí)方法,其譯碼性能沒(méi)有性能損失,硬件實(shí)現(xiàn)時(shí)的時(shí)序控制相對(duì)簡(jiǎn)單,存儲(chǔ)空間也有一定的減少。
1 改進(jìn)譯碼方法
成員譯碼器(DEC1,DEC2)首先根據(jù)輸入的外信息和接收到的信息序列進(jìn)行正向(按幀長(zhǎng)從前向后的順序)分支度量值計(jì)算和前向遞歸計(jì)算,同時(shí)進(jìn)行反向(按幀長(zhǎng)的逆序)分支度量值計(jì)算和后向遞歸計(jì)算。當(dāng)正向遞歸計(jì)算和反向遞歸計(jì)算到幀長(zhǎng)一半(N/2)時(shí),進(jìn)行正向?qū)?shù)似然比計(jì)算和反向?qū)?shù)似然比計(jì)算,同時(shí)計(jì)算出對(duì)應(yīng)的外信息經(jīng)過(guò)交織后作為另一個(gè)成員譯碼器的輸入先驗(yàn)信息。
這樣每半次迭代過(guò)程可分如下二個(gè)步驟進(jìn)行:
(1)第一步:DEC正向分支轉(zhuǎn)移度量γk計(jì)算和DEC前向遞歸αk計(jì)算[2][3],同時(shí)進(jìn)行反向分支轉(zhuǎn)移度量γj計(jì)算和DEC后向遞歸βj計(jì)算:
其中:s′為前一狀態(tài),s為后一狀態(tài),k為對(duì)應(yīng)的狀態(tài)數(shù),uk為編碼的信息位,xk,v為校驗(yàn)位,yk,l為接收到的信息位,yk,v為接收到校驗(yàn)位,Ak為一個(gè)常數(shù),Lc為信道可信度。同時(shí)進(jìn)行前向遞歸:
對(duì)于β的初始化,如果編碼在每幀編碼之后通過(guò)加入歸零比特使編碼狀態(tài)回到零狀態(tài)。則可初始為:
這里v為編碼成員碼中寄存器的個(gè)數(shù)。
(2)第二步:正向?qū)?shù)似然值計(jì)算和反向?qū)?shù)似然比
然后進(jìn)行交織:
其中π()為交織函數(shù)。
經(jīng)典譯碼和改進(jìn)譯碼方法的半次迭代(一個(gè)子譯碼的譯碼過(guò)程)對(duì)應(yīng)的時(shí)序圖如圖1所示。由圖1可知對(duì)應(yīng)半次迭代譯碼延時(shí)為T,圖中下半部分是改進(jìn)的譯碼時(shí)序,改進(jìn)的譯碼延時(shí)為T/2。這種新的譯碼方法能將譯碼延時(shí)縮短一半。由于在整個(gè)計(jì)算過(guò)程中沒(méi)有采用任何近似計(jì)算,所以譯碼性能沒(méi)有任何損失。在計(jì)算過(guò)程中,不需要對(duì)γk(s′,s)進(jìn)行存儲(chǔ),從而減少了在硬件實(shí)現(xiàn)時(shí)所需的存儲(chǔ)容量。
2 與其他譯碼方法的比較
為了減小譯碼延時(shí),人們推出了分塊并行譯碼算法、滑窗譯碼等方法。它們都采用了相應(yīng)的近似計(jì)算,從而在譯碼性能上或多或少有些損失,它們都是通過(guò)犧牲譯碼性能來(lái)?yè)Q取減小譯碼延時(shí)的,同時(shí)它們硬件實(shí)現(xiàn)時(shí)的時(shí)序控制也比較復(fù)雜。
分塊并行是將接收的整個(gè)碼字分成若干子塊[4][5],各子塊進(jìn)行并行處理,其中各子塊的前后向遞推公式的初始值由相鄰子塊的前一次迭代譯碼的邊界計(jì)算值傳遞,這樣就引入了近似計(jì)算,譯碼性能就有一定損失。設(shè)經(jīng)典半次迭代譯碼延時(shí)為T,分塊的塊數(shù)為M,則分塊并行譯碼方法的譯碼延時(shí)為T/M。但是,由于它的控制時(shí)序很復(fù)雜,因而硬件實(shí)現(xiàn)復(fù)雜度較高。
對(duì)于滑窗譯碼方法而言[6][7],它通過(guò)預(yù)先遞推一段后向遞歸量作為真正計(jì)算后向遞歸的初值,也采取了近似計(jì)算,因而譯碼性能也有一定的損失。設(shè)經(jīng)典半次迭代譯碼延時(shí)為T,則滑窗譯碼方法的半次迭代譯碼延時(shí)為:(T/2+T/(2×N/W)),因而其時(shí)序控制很復(fù)雜,但是這種方法能很大程度上節(jié)省存儲(chǔ)容量。
本文采用的譯碼方法的譯碼延時(shí)為T/2,譯碼延時(shí)能節(jié)省一半,更主要的是其譯碼性能沒(méi)有任何損失,而對(duì)應(yīng)的時(shí)序控制也相對(duì)簡(jiǎn)單,更有實(shí)際應(yīng)用價(jià)值。
3 幾種譯碼方法的仿真比較
對(duì)經(jīng)典譯碼方法、分塊并行方法分別做了仿真。仿真參數(shù):生成多項(xiàng)式為G=(15,13),交織采用3GPP隨機(jī)交織,譯碼算法為MAX-Log-MAP,碼率為1/3,迭代次數(shù)為4和6,調(diào)制采用BPSK,信道采用AWGN,幀長(zhǎng)為1 024,分塊并行方案中分4塊并行譯碼。仿真圖如圖2所示。
圖2中上面兩條分別是分塊并行和改進(jìn)譯碼算法迭代4次的誤碼率性能曲線,從圖中看出分塊并行譯碼算法有性能損失;下面兩條是分塊并行和改進(jìn)譯碼算法迭代6次的誤碼率性能曲線,對(duì)應(yīng)的分塊并行也有性能損失。但是隨著迭代次數(shù)的增加,兩種譯碼方法的性能差別逐漸減小。由圖2分析可知,本文采用的譯碼方法的譯碼性能與經(jīng)典的譯碼方法一樣,沒(méi)有性能上的損失,在譯碼性能上優(yōu)于分塊并行和滑窗譯碼方法,在減小譯碼延時(shí)優(yōu)于滑窗譯碼方法,但比分塊并行差。
4 硬件實(shí)現(xiàn)方案
分量譯碼器(DEC)內(nèi)部結(jié)構(gòu)圖如圖3所示。首先從存儲(chǔ)器中順序讀出系統(tǒng)信息序列Xk,校驗(yàn)序列Yk和先驗(yàn)信息Lak,進(jìn)行正向分支度量γk計(jì)算和前向遞歸αk計(jì)算并存儲(chǔ),如圖3中上半部分所示。同時(shí),從存儲(chǔ)器中逆序讀出系統(tǒng)信息序列Xj,校驗(yàn)序列Yj和先驗(yàn)信息Laj,進(jìn)行反向分支度量γj計(jì)算和后向遞歸βj計(jì)算并存儲(chǔ),如圖3中下半部分所示。另外還設(shè)置正向計(jì)算器和反向計(jì)算器,計(jì)數(shù)器對(duì)并行運(yùn)算長(zhǎng)度進(jìn)行計(jì)數(shù),并將計(jì)數(shù)結(jié)果作為地址來(lái)存儲(chǔ)計(jì)算結(jié)果。等計(jì)數(shù)值達(dá)幀長(zhǎng)的一半時(shí),對(duì)數(shù)似然比計(jì)算1模塊根據(jù)已經(jīng)計(jì)算出并存儲(chǔ)的后向遞歸βj,當(dāng)前計(jì)算出的分支度量γk和前向遞歸αk進(jìn)行對(duì)數(shù)似然比計(jì)算,并存儲(chǔ)計(jì)算結(jié)果。同時(shí)對(duì)數(shù)似然比計(jì)算2模塊根據(jù)已經(jīng)計(jì)算出并存儲(chǔ)的前向遞歸αk、當(dāng)前計(jì)算出的分支度量γj和前向遞歸βj進(jìn)行對(duì)數(shù)似然比計(jì)算,并存儲(chǔ)計(jì)算結(jié)果。這里采用雙口RAM實(shí)現(xiàn)對(duì)數(shù)似然比的存儲(chǔ),雙口RAM的兩個(gè)口可以在地址不沖突的情況下,進(jìn)行同時(shí)寫操作。在硬件實(shí)現(xiàn)的過(guò)程中,不用對(duì)分支度量進(jìn)行存儲(chǔ),從而節(jié)省了存儲(chǔ)單元。當(dāng)然由于多加了分支度量計(jì)算單元和對(duì)數(shù)似然比計(jì)算,增加了資源,但是從減小譯碼延時(shí)并且譯碼性能不損失角度考慮,這是非常值得的。
為了進(jìn)一步節(jié)省硬件資源,考慮到兩個(gè)分量譯碼器是分時(shí)工作的,這樣可以進(jìn)行分量譯碼器的復(fù)用。整個(gè)譯碼器實(shí)現(xiàn)結(jié)構(gòu)圖如圖4所示。當(dāng)然譯碼器的實(shí)現(xiàn)還需要對(duì)應(yīng)的控制子系統(tǒng),用于使各個(gè)子模塊協(xié)調(diào)有序地工作。這樣系統(tǒng)實(shí)現(xiàn)的硬件資源就大大減小,譯碼延時(shí)也大大縮小。從而達(dá)到高速數(shù)據(jù)通信的目的。
5 硬件實(shí)現(xiàn)
基于以上介紹的硬件實(shí)現(xiàn)結(jié)構(gòu),對(duì)Xilinx公司的Virtex2pro系列的FPGA芯片進(jìn)行了配置,采用的是幀長(zhǎng)為2 060、1/2碼率的Turbo碼;譯碼部分采用MAX-Log-MAP譯碼算法,其中輸入數(shù)據(jù)流采用8bit(其中1bit符號(hào)位,4bit整數(shù)位,3bit小數(shù)位4)量化;內(nèi)部計(jì)算采用12bit(其中1bit符號(hào)位,8bit整數(shù)位,3bit小數(shù)位4)量化;迭代6次譯碼。運(yùn)用XilinxISE8.2i對(duì)2vp30ff896-7進(jìn)行了綜合實(shí)現(xiàn),資源消耗如圖5的綜合報(bào)告所示,最大時(shí)鐘可達(dá)到112.331MHz。仿真工具采用Modelsim SE 6.0進(jìn)行仿真,布局布線后仿真波形圖如圖6。
為了在不損失譯碼性能的前提下減小譯碼延時(shí),本文提出了改進(jìn)的Turbo碼譯碼方法,通過(guò)前向遞歸和后向遞歸并行計(jì)算,等計(jì)算到幀長(zhǎng)一半時(shí),開(kāi)始同時(shí)進(jìn)行前向?qū)?shù)似然比計(jì)算和后向?qū)?shù)似然比計(jì)算的譯碼方法。該方案可以將譯碼延時(shí)縮短一半,譯碼性能沒(méi)有損失,能節(jié)省硬件實(shí)現(xiàn)所需的存儲(chǔ)單元,時(shí)序控制比較簡(jiǎn)單,更易于硬件實(shí)現(xiàn)。仿真結(jié)果表明:這種譯碼方法在性能上優(yōu)于分塊譯碼算法和雙滑窗譯碼算法。在減小譯碼延時(shí)上優(yōu)于雙滑窗譯碼算法。這個(gè)方案在中短幀長(zhǎng)、對(duì)譯碼延時(shí)、譯碼性能要求高的通信系統(tǒng)中有較高的實(shí)用價(jià)值。
評(píng)論