<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > LTE系統(tǒng)中Turbo編碼的研究與DSP實現(xiàn)

          LTE系統(tǒng)中Turbo編碼的研究與DSP實現(xiàn)

          作者: 時間:2011-10-31 來源:網(wǎng)絡 收藏
          通過對常用編碼原理的研究分析,提出了一種簡單有效的編碼實現(xiàn)方案,該方案已經在TMS320C64× DSP中實現(xiàn)。將編碼程序在CCS3.3中運行,驗證了方案的可行性、高效性。該方案已應用于-TDD無線綜合測試儀表的開發(fā)中。
          信道編碼是消除或降低信息傳輸錯誤概率的有效手段之一。根據(jù)Shannon有噪信道編碼定理,在信道傳輸速率R不超過信道容量C的前提下,只有在碼組長度無限的碼集合中隨機地選擇編碼碼字并且在接收端采用最大似然譯碼算法時,才能使誤碼率接近為零。Turbo編碼[1]巧妙地將卷積碼和隨機交織器結合在一起,獲得了接近Shannon理論極限的譯碼性能。
          Turbo碼又稱并行級聯(lián)卷積碼PCCC(Parallel Concatenated Convolutional Code),它將卷積碼和隨機交織器結合,實現(xiàn)了隨機編碼的思想,在實現(xiàn)隨機編碼思想的同時,通過交織器實現(xiàn)了由短碼構造長碼的方法。Turbo碼由分量碼經由交織器級聯(lián)而成。分量碼和交織器設計的好壞是決定Turbo碼性能的關鍵因素。Turbo碼的提出,不僅提供了一個性能優(yōu)越的編碼方法,還更新了編碼理論研究中的一些概念和方法。由于Turbo碼具有接近Shannon理論極限的性能[2],尤其是低信噪比下的優(yōu)異性能,使Turbo碼成為第三代移動通信高質量、高速率信道中的首選編碼方法。
          1 系統(tǒng)中的Turbo編碼
          作為準4 G技術,以正交頻分復用OFDM和多輸入多輸出MIMO技術為基礎,下行采用正交頻分多址(OFDM)技術,上行采用單載波頻分多址(SC-FDMA)技術,在20 MHz頻譜帶寬下能夠提供下行100 Mb/s與上行50 Mb/s的峰值速率。
          在LTE系統(tǒng)中,Turbo編碼主要應用于上行共享信道、下行共享信道、尋呼信道和多播信道的信道編碼[3]處理。由MAC層傳來的數(shù)據(jù)和控制信息比特流經過添加CRC以及碼塊分割后進入編碼單元,編碼完成后進行速率匹配[3-4]。
          0。為了讓編碼器從0狀態(tài)開始且編碼之后回到0狀態(tài),編碼后的輸出比特數(shù)為D=K+4,最后的4個比特被稱為柵格停止尾比特。Turbo編碼器結構如圖1 所示。

          本文引用地址:http://www.ex-cimer.com/article/257819.htm

          2 Turbo編碼算法分析
          Turbo編碼原理相對簡單,主要由兩個子編碼器和內交織器組成。每次輸入一個碼塊數(shù)據(jù)流,兩個子編碼器結構一樣,可以并行處理,其中輸入在進入第二個編碼器之前要先進入一個交織單元,經交織后作為輸入比特序列,然后進入第二個編碼器處理[2]。輸出三路數(shù)據(jù),分別為信息比特流、校驗比特流1、校驗比特流2。本文提出采用來實現(xiàn)Turbo編碼的算法。
          具體算法描述如下:
          (1)碼塊分割完后可能出現(xiàn)不同碼塊大小(K+,K-),算法采用每個碼塊單獨處理。所以需要定義一個標識來查表當前碼塊需要交織時的參數(shù)。
          (2)Turbo編碼時有反饋的影響,即每個輸入比特與反饋值做了“異或”后才能作為移位寄存器的下一個狀態(tài),故在實際過程中使用了逐位比特處理的方式。
          (3)由于Turbo編碼器上下兩部分處理方法一樣,所以在處理上半部分編碼器時同時并行處理下半部分,而下半部分輸入是經過交織之后的輸出比特序列。
          (4)根據(jù)不同的f1和f2可以有不同的結果。f1和f2一共有188種配對,規(guī)律性低,本文只能采用一比特一比特按照公式計算出對應位置,然后進行交織。
          (5)采用查表的方式,每輸入一個比特加上現(xiàn)在寄存器里面的3個比特作為一個狀態(tài)(一共4個比特16種狀態(tài),輸入比特作為最低位),可以查出一個輸出比特和下一個寄存器狀態(tài)。
          (6)在尾比特的處理上,每一路的最后3位尾比特與輸入無關,只與現(xiàn)在寄存器的狀態(tài)有關(3 bit 一共8種狀態(tài))。本文全部列出了8種狀態(tài)下可能出現(xiàn)的結果。在功能時直接判斷現(xiàn)在的寄存器處于哪種狀態(tài),然后利用查表可以得出3個尾比特。
          (7)最后對四路輸出的尾比特(3×4=12 bit)按標準做一個賦值處理,然后移位接到之前的比特序列中去就可以得到最終的三路輸出比特序列。
          3 Turbo編碼算法的
          3.1 硬件

          TMS320C6000系列DSP是TI公司推向市場的高性能DSP,綜合了目前性價比高、功耗低等優(yōu)點。TMS320C64系列在TMS320C6000×DSP芯片中處于領先水平,它不但提高了時鐘頻率,而且在體系結構上采用了VelociTI 甚長指令集VLIW(Very Long Instruction Word)結構[5],芯片內有8個獨立功能單元的內核,每個周期可以并行執(zhí)行8條32 bit指令,最大峰值速度為4 800 MIPS,2組共64個32 bit通用寄存器,32 bit尋址范圍,支持8/16/32/40 bit的數(shù)據(jù)訪問,芯片內集成大容量SRAM,最大可達8 Mbit。由于其出色的運算能力、高效的指令集、大范圍的尋址能力,使其特別適用于無線基站、測試儀表等對運算能力和存儲量要求高的應用場合。


          3.2 Turbo編碼的DSP實現(xiàn)
          由于碼塊分割完之后可能出現(xiàn)不同碼塊大?。↘+,K-),所以本模塊按每個碼塊單獨處理。Turbo編碼是作為一個子函數(shù)模塊,因此,本方案定義輸入輸出變量及其調用格式如表1所示。

          調用格式:Turbo_Code(int*,int,int,char*,int*),其中int分別表示TxSegOutTurboIn為輸入序列的首地址、TxTurboCodeBitLen;int*分別表示TxSegOutTurboInOffset、TxTurboInterMatrixRows;char*表示TxTurboDataOut為輸出序列首地址。
          具體實現(xiàn)流程描述如下:Turbo編碼時有反饋的影響,即每個輸入比特與反饋值做了“異或”后才能作為移位寄存器的下一個狀態(tài),故在實際DSP實現(xiàn)過程中使用了逐位比特處理的方式。C語言編寫主函數(shù)main( ),使用匯編編寫Turbo編碼的實現(xiàn)函數(shù)。因為DSP C6455可以直接存取處理32bit,在具體實現(xiàn)中,輸入編碼比特序列、輸入序列比特長度K、用于計算交織查表的指數(shù)可以作為函數(shù)的輸入。在內存中定義了三段長度為碼塊K+4的Xk、Zk、Zkp作為暫時存放輸出序列的內存空間,并且建立了4張查找表,分別為:(1)交織表格TxInterleaver,交織表格TxInterleaver占用內存空間為188 B,每個字有32 bit,碼塊長度K、f1、f2各自所占比特為13、9、10;(2)寄存器狀態(tài)和輸出比特表格turbo_coding,一共4個比特16種狀態(tài),占用16個字;(3)尾比特狀態(tài)和輸出比特表格1turbo_Xk_tail,一共3個比特8種狀態(tài),占用4個字;(4)尾比特狀態(tài)和輸出比特表格2turbo_Zk_tail,一共3個比特8種狀態(tài),占用4個字。
          定義一個標識來查表當前碼塊需要交織時的參數(shù),這樣不僅減少任務繁瑣,而且減少了系統(tǒng)的代碼量,更給代碼測試和維護降低了難度。在匯編函數(shù)中,利用32作為內循環(huán)次數(shù),可以處理完一字(32 bit)就存放在寄存器中。外循環(huán)次數(shù)使用輸入比特所占的雙字個數(shù)N-1來控制,而可能出現(xiàn)的多出的比特數(shù)則需要另作一次(N-32×N)的循環(huán),得到編碼結果。
          外循環(huán)中,在每次內循環(huán)之前從輸入比特序列中取出32 bit輸入比特放入一個寄存器作為一個內循環(huán)的輸入,這次內循環(huán)結束后,取出下一個32 bit輸入比特更新這個寄存器,為下一次內循環(huán)做準備。每次內循環(huán)結束之后,將編碼好的32 bit做好存放處理,同時控制外循環(huán)次數(shù)的寄存器減1,直到循環(huán)結束。
          內循環(huán)中,編碼過程采用查表的方式,每輸入一個比特加上現(xiàn)在寄存器里面的3個比特作為一個狀態(tài),一共4個比特16種狀態(tài),輸入比特作為最低位,可以查出一個輸出比特和下一個寄存器狀態(tài)。需要注意的是,考慮到下面的速率匹配中需要加入null bit而1 bit的信息不能表示出null bit,所以輸出1 bit的信息就用8 bit的內存空間來存放??紤]到Turbo編碼器上下兩部分處理方法一樣,所以在處理上半部分編碼器時同時并行處理下半部分,而下半部分輸入是經過交織之后的輸出比特序列。圖2給出了Turbo編碼實現(xiàn)編碼流程圖。

          值得注意的是,交織器是Turbo編碼的重要部分,Turbo編碼交織器采用二次多項式(QPP)交織器,其位置對應關系如下:π(x)=(f1x+f2x) mod K

          所以可以得出:在DSP中實現(xiàn)時可以不使用乘法和除法取得對應位置,代替使用比較、加法和移位來獲得相應的對應位置。
          具體做法如下:
          (1)根據(jù)不同的f1、f2可以有不同的結果,f1、f2一共有188種配對,規(guī)律性低,本文只能采用一比特一比特按照公式計算出對應位置,然后進行交織。
          (2)輸入比特序列作為交織塊的輸入,其長度K用來控制交織的循環(huán)次數(shù)。因為在DSP C6455中寄存器的大小為32 bit,這里32也作為一個循環(huán)次數(shù),控制以整雙字處理完之后的存取。
          (3)進入循環(huán)之后,首先判斷π(x)和g(x)的值是否大于或等于輸入比特序列長度K,如果≥K,應該減去K之后再次判斷,直到K之后,進入下一階段。因為在DSP中存取比特都只能在32 bit之內處理,所以還要判斷π(x)的值是否小于32,如果不是,則需要減去32,同時在控制雙字偏移的寄存器需要加1,使取值指針指向下一個雙字,以達到從下一個雙字中取值的目的。此時需要繼續(xù)做判斷直到π(x)32為止。
          (4)得到了控制雙字偏移的值和比特偏移的值π(x)之后,便可以從內存中輸入的比特序列中取出一個比特作為交織之后的輸出比特。通過“異或”移位,完成32次循環(huán)之后,寄存器32 bit可以剛好存放下32 bit交織輸出比特,然后存放進內存。注意每做一次交織比特,控制輸入總長度的寄存器應該減1直到為0時,跳出交織循環(huán),存放輸出數(shù)據(jù),完成交織。
          4 性能分析與總結
          在DSP軟件實現(xiàn)中,通過指令并行,盡量優(yōu)化程序循環(huán)體,減少或消除程序中的’NOP’指令[6]。對于不同大小的碼塊長度,根據(jù)所用的環(huán)境,通過程序仿真運行,可以得到統(tǒng)計結果如表2所示。

          表2數(shù)據(jù)長度僅為個別舉例,但不失一般性。從表中可以看出,雖然的運算量較大,但是當運用TMS320C64× DSP芯片實現(xiàn)時,由于處理器的超高主頻一般為1 GHz,一個指令周期耗時為1 ns,其運算速率也非???,完全可以忽略它的計算量。因此,本實現(xiàn)方案采用不僅簡化了程序實現(xiàn)方法,還減少了模塊程序代碼,節(jié)約了系統(tǒng)存儲空間。
          本文從理論分析出發(fā),根據(jù)TD-LTE系統(tǒng)特性,提出了一種簡單有效的Turbo編碼實現(xiàn)算法,詳細介紹了該算法在DSP的實現(xiàn)方法,并在TMS320C64×芯片上加以實現(xiàn)。程序運行結果表明,該算法能夠滿足TD-LTE系統(tǒng)的需求,具有可行性和高效性,并已應用于LTE-TDD無線綜合測試儀表的開發(fā)中。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();