突發(fā)通信中Turbo碼的FPGA實(shí)現

發(fā)布時(shí)間:2010-11-9 11:51    發(fā)布者:techshare
關(guān)鍵詞: FPGA , turbo , 通信
Turbo碼是一種低信噪比條件下也能達到優(yōu)異糾錯性能的信道編碼。早期為了強調Turbo碼接近香農限的優(yōu)異性能,研究的碼字長(cháng)度非常大,存在譯碼復雜度大、譯碼時(shí)延長(cháng)等問(wèn)題。突發(fā)數據通信以傳輸中小長(cháng)度的數據報文業(yè)務(wù)為主,所以突發(fā)通信中的Turbo碼的碼長(cháng)也是中等長(cháng)度以下的。本文面向突發(fā)數據通信中的信道編碼應用,研究了短幀長(cháng)Turbo碼編譯碼算法的FPGA實(shí)現。實(shí)現中采用了優(yōu)化的編譯碼算法,以降低譯碼復雜度和譯碼延時(shí)。最后仿真和測試了Turbo譯碼器的糾錯性能和吞吐量。

1 Turbo碼編碼器的FPGA實(shí)現

Turbo碼的編碼器是由兩個(gè)RSC(遞歸系統卷積碼)分量編碼器和一個(gè)交織器組成。RSC碼不僅具有系統碼的優(yōu)點(diǎn),而且對于一個(gè)RSC碼,總存在一個(gè)具有完全相同柵格結構的NSC碼(非系統卷積碼)。本系統中使用兩個(gè)相同的RSC編碼器,生成的多項式都是G=[1,15/13],系統編碼率為1/3。

交織器的功能是利用隨機化的思想將兩個(gè)相互獨立的短碼組合成一個(gè)長(cháng)的隨機碼。本課題中Turbo碼交織器的實(shí)現是構造一個(gè)交織地址發(fā)生器,并根據輸入的幀長(cháng)信息,實(shí)時(shí)地產(chǎn)生交織地址序列。

圖1為編碼器的FPGA實(shí)現結構圖。編碼前,地址發(fā)生器獲取幀長(cháng)信息,完成交織地址生成的準備過(guò)程。編碼時(shí),信息序列被依次寫(xiě)入雙口RAM,待寫(xiě)完一幀數據后,地址產(chǎn)生器開(kāi)始生成順序地址和交織地址。雙口RAM按兩個(gè)地址讀取信息序列X和交織后的信息序列X’進(jìn)行RSC編碼;最后編碼器輸出系統位X和校驗位P0和P1。





2 Turbo碼譯碼器的FPGA實(shí)現

Turbo碼譯碼器比較復雜,下面從譯碼器的接口、內部結構、內部的時(shí)序控制、分量譯碼MAX-Log-MAP算法和SISO模塊的實(shí)現五個(gè)方面來(lái)詳細闡述譯碼器的FPGA實(shí)現。

2.1 譯碼器的接口

Turbo碼譯碼器頂層模塊的接口管腳如表1所示。




2.2 譯碼器的內部結構

Turbo碼譯碼器由兩個(gè)軟輸入/軟輸出分量譯碼器、交織器以及相應的解交織器構成。譯碼是信息在兩個(gè)分量譯碼器之間迭代運算的過(guò)程。在迭代運算中,上一次運算得到uk的外信息Λe(uk)作為下一次運算uk的先驗信息Λa(uk)。Turbo碼分量譯碼器譯碼算法主要有MAP類(lèi)(最大后驗概率譯碼算法)和SOVA類(lèi)(軟判決Viterbi譯碼算法)。本文采用運算復雜度和性能都適中的MAX-Log-MAP算法。Turbo碼譯碼器FPGA實(shí)現的內部結構如圖2所示。





地址發(fā)生器與編碼器相同,用于數據的交織和解交織。輸入數據存儲器用于存儲輸入的接收數據,包括系統信息序列存儲器以及各個(gè)校驗序列存儲器。外信息存儲器用于存儲迭代譯碼產(chǎn)生的外信息。由于外信息要作為下一次譯碼的先驗信息,所以這里的外信息存儲器有兩塊,交替存儲兩個(gè)分量譯碼器的外信息。SISO模塊即為軟輸入、軟輸出分量譯碼器。整個(gè)Turbo碼譯碼器有兩個(gè)SISO分量譯碼模塊。但為了節省資源,本方案只設計了一個(gè)SISO模塊,將時(shí)分復用作為兩個(gè)分量譯碼器。圖2中,表示接收碼字中的系統位,表示接收碼字中的校驗位。

2.3 譯碼器內部的時(shí)序控制

Turbo碼譯碼器內部的時(shí)序控制由狀態(tài)機完成。整個(gè)譯碼過(guò)程分為初始化、接收數據存儲、迭代譯碼及硬判決輸出四個(gè)過(guò)程,且對應于狀態(tài)機的INIT、STORAGE、SISO和OUT四個(gè)狀態(tài)。譯碼器的內部狀態(tài)轉移如圖3所示。初始狀態(tài)INIT完成幀長(cháng)設定等初始化工作,并完成交織地址生成的準備過(guò)程,一旦指示第一個(gè)數據輸入的fd信號有效(高有效)時(shí),則進(jìn)入STORAGE狀態(tài);狀態(tài)STORAGE完成將接收數據序列存入單口RAM中,待一幀數據寫(xiě)完后,指示存儲完畢的rdyStr信號置高,進(jìn)入SISO狀態(tài);在狀態(tài)SISO下,SISO分量譯碼器根據設定的迭代次數對接收數據進(jìn)行迭代譯碼。當迭代完成時(shí),rdySiso置高,進(jìn)入OUT狀態(tài);對數據硬判決輸出并計數,此時(shí)輸出有效信號ready置高,待全部判決完畢后返回INIT狀態(tài)。




2.4 分量譯碼算法——MAX-Log-MAP算法

MAP算法需要大量的乘法運算和指數運算以及大量的存儲,運算十分復雜。Log-MAP算法則將MAP算法中的乘法運算轉換為對數域中的加法運算(不需要對數運算),適合工程實(shí)現。因此在工程實(shí)現時(shí),可以將原來(lái)在對數域內的加法運算轉換為取兩個(gè)數的較大者加上一個(gè)修正項的運算。如果將修正項的運算也省略,則Log-MAP算法可簡(jiǎn)化為MAX-Log-MAP算法。MAX-Log-MAP算法的主要計算步驟如下[4~5]:

(1)計算Turbo碼編碼網(wǎng)格圖上分支的路徑度量值:





由于Lc值對譯碼性能影響不大,為了方便定點(diǎn)實(shí)現,本文中簡(jiǎn)化為L(cháng)c=1。

2.5 SISO模塊的實(shí)現

分量譯碼器的FPGA實(shí)現的SISO模塊采用模塊化設計,主要包括前向度量計算模塊、反向度量計算及對數似然比計算模塊、前向度量存儲器以及歸一化度量存儲器。由于前向度量計算和反向度量計算均需要計算分支度量,因此可以預先計算并存儲分支度量。但在本方案中,為了節省存儲空間,并沒(méi)有對分支度量進(jìn)行存儲,而是在前向與反向度量計算時(shí)均計算一次,而且在反向度量計算收斂后同時(shí)計算對數似然比。

用FPGA對算法進(jìn)行定點(diǎn)實(shí)現時(shí),需要考慮到溢出的問(wèn)題。為防止計算過(guò)程中出現溢出,對前向度量和反向度量計算過(guò)程進(jìn)行歸一化處理。若某時(shí)刻的歸一化度量值選擇當前時(shí)刻前向度量中的最大值,則歸一化便是前向度量和反向度量減去此最大值。歸一化后的前向度量和反向度量計算公式如下:




SISO模塊內部處理流程分為初始化、前向度量計算和存儲、反向度量計算和對數似然值計算三個(gè)部分,且對應于狀態(tài)機的三個(gè)狀態(tài)INIT、FSM和RSM。SISO模塊的內部時(shí)序如圖4所示。INIT狀態(tài)完成內部寄存器的初始化設置,當外部輸入信號Siso_start有效時(shí),啟動(dòng)SISO模塊,進(jìn)入FSM狀態(tài);FSM狀態(tài)中,每8個(gè)時(shí)鐘周期內,用式(1)和式(2)計算出一個(gè)時(shí)刻對應的8個(gè)前向度量值,并選擇出其中的最大前向度量值作為歸一化度量值,用式(8)計算歸一化后的前向度量值。啟動(dòng)一次前向度量寫(xiě)信號,存儲當前計算得到的8個(gè)前向度量值和當前歸一化度量值。當所有前向度量計算完畢時(shí),啟動(dòng)Fsmrdy信號,進(jìn)入RSM狀態(tài);每10個(gè)時(shí)鐘周期內,用式(1)和式(2)計算出一個(gè)時(shí)刻對應的8個(gè)反向度量值,用式(9)計算歸一化后的反向度量值,用式(4)和式(5)計算出相應時(shí)刻的對數似然比和外信息對數似然比,并將外信息對數似然比存儲起來(lái)。當所有計算都完成時(shí),啟動(dòng)Rsmrdy信號,進(jìn)入INIT狀態(tài)。





由于本方案中SISO模塊將時(shí)分復用作為兩個(gè)分量譯碼器,對應于一次譯碼迭代的兩個(gè)半迭代過(guò)程。因此圖4中的Decoder_num為低時(shí),SISO模塊作為第一個(gè)分量譯碼器,進(jìn)行第一個(gè)半迭代運算;Decoder_num為高時(shí),SISO模塊作為第二個(gè)分量譯碼器,進(jìn)行第二個(gè)半迭代運算。每次半迭代產(chǎn)生的對數似然比信息作為下次半迭代的先驗信息。用兩塊RAM存儲兩次半迭代產(chǎn)生的外信息對數似然比。第一個(gè)半迭代時(shí),從第二個(gè)外信息存儲器中讀取上一次半迭代產(chǎn)生的外信息對數似然比作為先驗信息,計算得到外信息對數似然比后存儲到第一個(gè)外信息存儲器中;第二個(gè)半迭代時(shí),從第一個(gè)外信息存儲器中讀取上一次半迭代產(chǎn)生的外信息對數似然比作為先驗信息,計算得到外信息對數似然比后存儲到第二個(gè)外信息存儲器中。每幀數據譯碼的第一次迭代中的第一個(gè)半迭代的先驗信息設為0。

迭代滿(mǎn)足迭代終止準則后,譯碼器停止迭代,由信息的對數似然比值硬判決輸出譯碼結果。工程中常用的迭代終止準則是設置最大迭代次數。最大迭代次數的設定需要綜合考慮誤碼率性能和系統吞吐量性能。

3 Turbo碼編譯碼器的性能

基于以上提出的Turbo碼編譯碼器的FPGA實(shí)現方案,本文在Xilinx公司的Virtex2系列的XC2V500-6fg256 FPGA芯片上,實(shí)現了幀長(cháng)在64~1 024范圍之間可變的Turbo編譯碼器。輸入數據4bit量化,內部數據位寬選擇12bit,編碼器模塊和譯碼器模塊在同一塊FPGA芯片上實(shí)現。綜合后時(shí)鐘最小周期為7.188ns ,對應最高時(shí)鐘頻率為139.121MHz,所占的資源如表2所示。





延遲與吞吐量是衡量譯碼器性能的兩個(gè)主要指標。延遲定義為從第一個(gè)數據輸入到第一個(gè)數據輸出間的時(shí)間差。吞吐量定義為平均每秒能處理的數據量。在幀長(cháng)為1 024、迭代次數為5的條件下,譯碼器延時(shí)約為1.4ms,吞吐量約為0.72Mbps。

最后,對幀長(cháng)為128、256、512和1 024四種條件的Turbo碼譯碼器進(jìn)行了誤碼率性能測試。測試系統中加入高斯白噪聲,數據采用 BPSK調制,譯碼器5次迭代。測試結果的性能曲線(xiàn)如圖5所示。測試結果表明,在信噪比低于4dB的條件下,跳頻數傳通信系統采用Turbo編譯碼方案,誤碼率小于10-5,達到了數據傳輸可靠性的要求。由于譯碼器的幀長(cháng)在64~1 024范圍內可變,因此非常適合應用在突發(fā)數據通信中的差錯控制中。


本文地址:http://selenalain.com/thread-37629-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页