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