宋英杰
(中國(guó)電子科技集團(tuán)公司第二十研究所,西安 710068)
文章[1]提出了一種高速Turbo編譯碼方法,本文圍繞這種譯碼方法介紹碼率可配置Turbo譯碼器的具體設(shè)計(jì)與實(shí)現(xiàn)。譯碼器支持固定迭代次數(shù)譯碼和動(dòng)態(tài)停止迭代譯碼,并可靈活支持1/3、1/6、1/10三種碼率。圖1為設(shè)計(jì)的Turbo譯碼器的總體結(jié)構(gòu)框圖。它主要包含輸入緩存模塊、譯碼邏輯控制模塊、SISO譯碼模塊、交織/解交織模塊、停止迭代判決模塊、硬判決模塊和輸出緩存模塊。
譯碼器需要存儲(chǔ)整塊譯碼數(shù)據(jù)供給譯碼過程使用,所以需要輸入緩存模塊。此緩存器采用四個(gè)雙口RAM分別供給SISO譯碼器A1、A2、B1、B2使用。此處Turbo譯碼采用(6,2)量化方式,每個(gè)雙口RAM深度為256,數(shù)據(jù)位寬為60bit,(對(duì)于1/3碼率來(lái)說,每個(gè)地址中的數(shù)據(jù)包含3個(gè)編碼符號(hào)即低18bit有效對(duì)于1/6碼率來(lái)說,每個(gè)地址中的數(shù)據(jù)包含6個(gè)編碼符號(hào)即低36bit有效;對(duì)于1/10碼率來(lái)說,每個(gè)地址中的數(shù)據(jù)包含10個(gè)編碼符號(hào)即60bit有效)。這樣設(shè)計(jì)保證了1/3、1/6、1/10三種碼率數(shù)據(jù)存儲(chǔ)深度相同,方便譯碼邏輯控制模塊對(duì)整個(gè)譯碼流程的控制。
圖1 Turbo譯碼器的總體結(jié)構(gòu)框圖
采用子塊整體法進(jìn)行譯碼[3],其基本思想是將接收到的子塊數(shù)據(jù)序列作為一個(gè)整體進(jìn)行譯碼。子塊整體法的具體步驟如下:
(1)順序讀取譯碼輸入信息,計(jì)算前向遞歸Alpha和分支度量Gamma并存儲(chǔ)。
(2)當(dāng)整個(gè)子塊的Alpha和Gamma計(jì)算完成后,逆序讀取Gamma,計(jì)算后向遞歸Bata,同時(shí)逆序讀取Alpha,繼而計(jì)算對(duì)數(shù)似然比和外信息。
Gamma計(jì)算模塊的功能是計(jì)算譯碼中每一時(shí)刻的分支度量值,計(jì)算出來(lái)的Gamma值將用于計(jì)算前向狀態(tài)度量Alpha和后向狀態(tài)度量Bata。對(duì)于三種碼率的可配置功能可通過選擇器實(shí)現(xiàn)。編碼輸出不同每種碼率的Gamma計(jì)算也不同,根據(jù)譯碼類型選擇對(duì)應(yīng)的接收數(shù)據(jù)進(jìn)入相應(yīng)Gamma計(jì)算部分。例如譯碼類型為1/3碼率,則選擇接收數(shù)據(jù)y1、y2和y3進(jìn)入1/3碼率Gamma計(jì)算部分。實(shí)現(xiàn)框圖如圖3所示。
為了兼容三種碼率和考慮到實(shí)現(xiàn)的穩(wěn)定性,每一時(shí)刻Gamma值計(jì)算需要4個(gè)時(shí)鐘周期。Gamma時(shí)刻1的值單獨(dú)計(jì)算,Gamma時(shí)刻2至256的值和Alpha時(shí)刻1至255的值同時(shí)計(jì)算以節(jié)約時(shí)間。
圖3 Gamma計(jì)算模塊實(shí)現(xiàn)框圖
此模塊的功能是在給定一個(gè)初始值的情況下,利用Gamma計(jì)算模塊所計(jì)算出來(lái)的分支度量Gamma值做連續(xù)遞推得出每一個(gè)時(shí)刻的前向狀態(tài)度量。計(jì)算后一時(shí)刻Alpha值需要前一時(shí)刻計(jì)算出來(lái)的Alpha值,所以Alpha計(jì)算模塊要進(jìn)行的是一種遞推運(yùn)算,而在連續(xù)遞推的過程中,可能會(huì)導(dǎo)致定點(diǎn)數(shù)的溢出,所以在特定的時(shí)刻對(duì)計(jì)算出來(lái)的Alpha值進(jìn)行歸一化來(lái)防止溢出。
本次實(shí)現(xiàn)的Turbo碼有16個(gè)狀態(tài),在任一時(shí)刻需要計(jì)算所有狀態(tài)的前向狀態(tài)度量值,在此設(shè)計(jì)中任一時(shí)刻需要計(jì)算16個(gè)前向度量值即16個(gè)Alpha值。假設(shè)每一個(gè)前向度量值稱為一個(gè)節(jié)點(diǎn),任一時(shí)刻需要計(jì)算16個(gè)節(jié)點(diǎn)的Alpha值。任一節(jié)點(diǎn)的計(jì)算都需要求出4個(gè)求和項(xiàng)的最大值,所有碼率采用相同的狀態(tài)轉(zhuǎn)移圖,所以Alpha計(jì)算模塊可共用。以任一節(jié)點(diǎn)的計(jì)算為例來(lái)說明Alpha值的計(jì)算過程,如圖4所示。
命題2.4 設(shè)偽BCI-代數(shù)X的猶豫模糊集,則為X的猶豫模糊反群濾子當(dāng)且僅當(dāng)對(duì)任意γ ∈ P([0,1]), 要么 ?, 要么為X的反群濾子.
圖4 Alpha計(jì)算模塊實(shí)現(xiàn)框圖
gamma00、gamma01、gamma10、gamma11 是4個(gè)分支度量的輸入,alpha00、alpha01、alpha10、alpha11是4個(gè)前向度量值的輸入,對(duì)輸入按下式進(jìn)行相加運(yùn)算:
然后比較器對(duì)sum1~sum4做比較選出2個(gè)極大值max1和max2,再經(jīng)過一次比較器選出max1和max2的最大值max,這個(gè)max也就是sum1~sum4的最大值。將max進(jìn)行歸一化,歸一化后的值作為此節(jié)點(diǎn)的前向狀態(tài)度量值輸出,并且反饋到下一時(shí)刻作為輸入端前向度量值。為了節(jié)約譯碼時(shí)間,系統(tǒng)在運(yùn)算時(shí)采用同一時(shí)刻16個(gè)節(jié)點(diǎn)同時(shí)進(jìn)行的方式。
每一時(shí)刻Alpha值計(jì)算需要4個(gè)時(shí)鐘周期,故256時(shí)刻共用1024個(gè)時(shí)鐘周期。
Bata計(jì)算模塊實(shí)現(xiàn)方法和Alpha計(jì)算模塊類似,此處不再贅述。需要說明的是Bata計(jì)算與對(duì)數(shù)似然比和外信息計(jì)算同時(shí)進(jìn)行。
此模塊的功能是計(jì)算下一分量譯碼所需要的外信息和用于硬判決所需要的對(duì)數(shù)似然比。此模塊的運(yùn)算過程[2]首先是計(jì)算系統(tǒng)比特對(duì)“00”、“01”、“10”、“11”的對(duì)數(shù)似然比 llr00、llr01、llr10、llr11,利用這4個(gè)值和先驗(yàn)信息la1、la2求出每個(gè)比特的對(duì)數(shù)似然比和外信息。之后將對(duì)數(shù)似然比和經(jīng)限幅后外信息輸出。所有碼率采用相同的狀態(tài)轉(zhuǎn)移圖,所以對(duì)數(shù)似然比和外信息計(jì)算模塊可共用。圖5是此模塊的結(jié)構(gòu)示意圖。
圖5 對(duì)數(shù)似然比和外信息計(jì)算模塊結(jié)構(gòu)示意圖
由上圖可以看出此計(jì)算模塊主要由alpha、bata、gamma相加運(yùn)算、Max1_16、對(duì)數(shù)似然比計(jì)算和外信息計(jì)算組成。相加運(yùn)算是求出16個(gè)alpha+bata+gamma的求和項(xiàng);Max1_16是求出這16個(gè)求和項(xiàng)的最大值;對(duì)數(shù)似然比計(jì)算是由llr00、llr01、llr10、llr11計(jì)算出信息比特對(duì)中每個(gè)信息比特的對(duì)數(shù)似然比llr1和llr2;外信息le1和le2計(jì)算是由llr1、llr2、la1和la2計(jì)算出外信息,然后將外信息乘以一個(gè)比例因子,限幅處理后輸出。
Max1_16模塊的功能是求出 16個(gè)alpha+bata+gamma的求和項(xiàng)的最大值。這個(gè)模塊分為第一級(jí)比較、第二級(jí)比較、第三級(jí)比較和第四級(jí)比較。
每一時(shí)刻對(duì)數(shù)似然比和外信息計(jì)算需要11個(gè)時(shí)鐘周期,共用1027個(gè)時(shí)鐘周期,詳細(xì)計(jì)算時(shí)間如圖7所示。
圖6 Max1_16內(nèi)部結(jié)構(gòu)示意圖
圖7 詳細(xì)計(jì)算時(shí)間示意圖
Alpha存儲(chǔ)模塊是由16個(gè)雙口RAM(AlphaStoreMem)組成。每個(gè)AlphaStoreMem的數(shù)據(jù)寬度為每個(gè)Alpha數(shù)據(jù)的寬度18bit,深度為256,用于存儲(chǔ)每個(gè)時(shí)刻計(jì)算出來(lái)Alpha值。
Gamma存儲(chǔ)模塊由64個(gè)雙口RAM(Gamma StoreMem)組成。每個(gè)GammaStoreMem的數(shù)據(jù)寬度為每個(gè)Gamma數(shù)據(jù)的寬度17bit,深度為256,用于存儲(chǔ)每個(gè)時(shí)刻計(jì)算出來(lái)的Gamma值。存儲(chǔ)的每一個(gè)子塊的Gamma值會(huì)被逆序讀出用于計(jì)算后向狀態(tài)度量Bata、對(duì)數(shù)似然比和外信息。
初始值存儲(chǔ)模塊的功能是將本次迭代譯碼分塊邊界處計(jì)算所得的前向狀態(tài)度量Alpha和后向狀態(tài)度量Bata的值保存起來(lái),也就是說將Alpha計(jì)算模塊最后一次(256次)迭代計(jì)算出的16個(gè)Alpha值和Bata計(jì)算模塊最后一次迭代計(jì)算出的16個(gè)Bata值用寄存器保存起來(lái),用作下次譯碼迭代Bata和Alpha遞歸計(jì)算的初始值。保存Alpha和Bata的初始值的寄存器在第一次加載之前都需要初始化。因初始和結(jié)束狀態(tài)未知所以每個(gè)子塊Alpha初始值都置為0,Bata初始值也置為0。
譯碼邏輯控制模塊在譯碼流程中對(duì)各個(gè)模塊起控制作用,為各個(gè)模塊提供相應(yīng)的配置信息。
交織/解交織模塊主要用于產(chǎn)生交織或者解交織過程所用到的交織地址。交織/解交織是根據(jù)SISO譯碼的需要完成外信息和對(duì)數(shù)似然比的交織/解交織處理。
由于要支持動(dòng)態(tài)停止迭代譯碼機(jī)制,因此引入了停止迭代判決模塊。當(dāng)?shù)蟮淖g碼結(jié)果滿足停止迭代判決條件時(shí),就產(chǎn)生停止迭代信號(hào)。
硬判決模塊實(shí)際上就是在停止迭代后,根據(jù)B分量譯碼器輸出的對(duì)數(shù)似然比符號(hào)硬判決成信息比特1或0。
輸出緩存模塊將硬判決后的譯碼結(jié)果經(jīng)過串并轉(zhuǎn)換成8bit后存入雙口RAM中。雙口RAM數(shù)據(jù)位寬8bit,深度為128。
圖8 1024比特吞吐量波形
在ISE Design Suit 14.4下碼率可配置Turbo譯碼器的資源占用情況如下表所示。選用Xilinx公司的XC7K325T-2FFG900I器件,譯碼器占用寄存器單元61242個(gè),LUT單元98824個(gè),RAM塊64個(gè)。
對(duì)幀長(zhǎng)1024比特的待譯碼數(shù)據(jù)的仿真波形如圖8所示。
表1 譯碼器資源消耗
圖8中,第一條線是譯碼開始時(shí)刻,第二條線是譯碼結(jié)束時(shí)刻。則兩條線之間的時(shí)鐘周期個(gè)數(shù)就是譯一幀所用的時(shí)鐘周期,為2215個(gè)clk,工作時(shí)鐘頻率為128MHz,周期為0.0078125us,則迭代一次時(shí),譯碼器吞吐量為:
本文提出了碼率可配置Turbo譯碼器硬件實(shí)現(xiàn)方案,詳細(xì)介紹了硬件實(shí)現(xiàn)方案中的核心模塊SISO譯碼模塊的實(shí)現(xiàn)過程。最后給出譯碼器硬件資源消耗情況,并給出里譯碼器的吞吐量。
[1]宋英杰.Turbo高速編譯碼技術(shù)研究[J].現(xiàn)代導(dǎo)航,2015(1).47-52
[2]張婷.無(wú)線信道可配置Turbo譯碼組件技術(shù)研究[D].西安電子科技大學(xué)碩士學(xué)位論文,2009.
[3]郗莉.LTE系統(tǒng)Turbo高速譯碼算法研究[D].西安電子科技大學(xué)碩士學(xué)位論文,2010.