專利名稱:一種軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及無線通信技術領域,特別涉及在軟件無線電系統(tǒng)中,基于SMD處理器的并行Turbo譯碼方法及系統(tǒng)。
背景技術:
近年來,軟件無線電技術的出現(xiàn)備受關注。它突破傳統(tǒng)通信平臺擴展性差、功能單一、開發(fā)成本高的局限性,它把硬件作為無線通信的基本平臺,盡可能多得用軟件實現(xiàn)無線通信功能。軟件無線電的主要優(yōu)點是它的靈活性。在軟件無線電中,諸如信道帶寬、調(diào)制以及編碼等可以動態(tài)調(diào)整,以適應不同的標準和環(huán)境、網(wǎng)絡通信負荷以及用戶需求的變化。軟件無線電中主要組成部分為射頻單元和基帶處理部分,以及連接它們的接口。基帶處理部分由軟件實現(xiàn)運行在處理器上。由于無線通信系統(tǒng)支持的數(shù)據(jù)速率和對時延的要求越來越高,因此基帶處理算法如何在處理器上高效地實現(xiàn)就顯得至關重要,尤其是復雜度相對較高的Turbo譯碼算法。目前主流的CPU都支持單指令多數(shù)據(jù)(Single Instruction Multiple Data, SIMD)擴展。SIMD表示單個指令并行地完成對多個數(shù)據(jù)條目的操作,比如加減乘等算術運算、邏輯運算、移位運算等操作。SIMD通過在單個指令內(nèi)同時完成多個操作而顯著提高了執(zhí)行速度,因此成為基帶處理算法在處理器上高效實現(xiàn)的重要手段。典型的SMD指令集包括 Intel 的流 SMD 擴展(Streaming SIMD Extensions, SSE)系列(包括 SSE、SSE2、SSE3、 SSE4)和高級矢量擴展(Advanced Vector Extensions, AVX)指令集,以及 ARM 的 NEON 指令集。例如,SSE2/3/4系列指令集使用128位的SMD寄存器,支持2路并行雙精度浮點運算、4路并行單精度浮點運算、4路并行32位整數(shù)運算、8路并行16位整數(shù)運算以及16路并行8位整數(shù)運算。Turbo碼是一種并行級聯(lián)卷積碼,將兩個簡單的分量碼通過隨機交織器并行級聯(lián)從而構(gòu)造出近似隨機的長碼。分量碼一般選擇為遞歸系統(tǒng)卷積碼(RSC)。由于其糾錯性能遠遠超過了分組碼、卷積碼等傳統(tǒng)的信道編碼方式,因此在無線通信領域得到了廣泛的應用。UMTS、LTE等移動通信標準中均采用了 Turbo碼。一個典型的Turbo譯碼過程是多次迭代的過程,其中每一次迭代按順序包括四個步驟第一個分量碼進行軟輸入軟輸出(Soft Input Soft Output, SIS0)譯碼、對第一個分量碼譯碼輸出的外信息進行交織操作并將交織結(jié)果作為第二個分量碼的先驗信息輸入、 第二個分量碼進行SISO譯碼、對第二個分量碼譯碼輸出的外信息進行解交織操作并將交織結(jié)果作為第一個分量碼的先驗信息輸入。主要的Turbo碼分量碼譯碼算法包括最大后驗概率(MAP)譯碼算法及其對數(shù)域形式的Log-MAP譯碼算法、在Log-MAP基礎上簡化的 Max-Log-MAP譯碼算法、軟輸出維特比譯碼算法(SOVA)等。其中Max-Log-MAP算法復雜度較低,同時相比Log-MAP算法性能損失不大,因此得到了廣泛的應用。為了滿足寬帶無線通信系統(tǒng)對高數(shù)據(jù)率的要求,需要設計出Turbo譯碼在SMD處理器上的高效優(yōu)化實現(xiàn)方法,而這是一項充滿挑戰(zhàn)性和技巧性的任務。具體來自于以下幾
DMax-Log-MAP算法本身分為前向狀態(tài)遞推、后向狀態(tài)遞推以及外信息計算三部分。為了充分利用SIMD指令提供的指令級并行度,需要在系統(tǒng)允許的譯碼性能損失的前提下仔細設計算法的并行化方法,并合理地安排數(shù)據(jù)存儲方式,以方便SMD指令的操作。2)為了獲得好的譯碼性能,Turbo碼所采用的交織器往往經(jīng)過了精心的設計,因此交織表的生成方法也相應地具有較高的計算復雜度(比如WCDMA和LTE所采用的交織表設計方法)。而迭代譯碼過程中需要多次進行交織和解交織操作。為了提高譯碼速率,需要設計出高效的生成交織地址的方法。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術問題是在軟件無線電系統(tǒng)中實現(xiàn)高速的Turbo譯碼,以滿足UMTS、LTE等寬帶無線通信系統(tǒng)對高數(shù)據(jù)率的要求。為此,本發(fā)明的一個目的在于提出一種軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法。本發(fā)明的另一目的在于提出一種軟件無線電系統(tǒng)中的高速并行Turbo譯碼系統(tǒng)。為了實現(xiàn)上述目的,本發(fā)明第一方面的實施例提出了一種軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,所述方法包括以下步驟將待譯碼數(shù)據(jù)分為M段并進行重排,使M 個分段中對應相同位置的數(shù)據(jù)連續(xù)存儲,其中,所述M為正整數(shù);對重排后的待譯碼數(shù)據(jù)進行迭代譯碼,包括對M個分段的數(shù)據(jù)進行并行的分量碼譯碼,并對分量碼之間互相交換的外信息進行交織和解交織,其中交織和解交織互為逆過程;迭代譯碼停止后,將譯碼結(jié)果進行重排,使其恢復自然順序。另外,根據(jù)本發(fā)明上述實施例的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法還可以具有如下附加的技術特征根據(jù)本發(fā)明的一個實施例,將待譯碼數(shù)據(jù)分為M段時,前M-I段數(shù)據(jù)長度相同,最后一段數(shù)據(jù)長度小于等于前M-I段數(shù)據(jù)的單段長度。根據(jù)本發(fā)明的一個實施例,將分段后的待譯碼數(shù)據(jù)進行重排的過程進一步包括 將M段數(shù)據(jù)按行順序分別寫入一個P行L1列的矩陣中連續(xù)的M行,若有未填滿的部分可用 O或其他值填充,其中所述P為大于等于M的正整數(shù),所述L1為正整數(shù),表示第I段數(shù)據(jù)的長度;將所述矩陣中的數(shù)據(jù)按列順序讀出。根據(jù)本發(fā)明的一個實施例,對M個分段的數(shù)據(jù)進行并行的分量碼譯碼的過程進一步包括M個分段并行后向狀態(tài)遞推的訓練階段,為后向狀態(tài)遞推的計算階段提供初始值, 共包括Tb次遞推,對第i個分段而言,以時刻α-ι)*ι^+ ;作為起始時刻,以時刻α-ι)Α 作為結(jié)束時刻,其中所述Tb為小于等于最后一段數(shù)據(jù)分段長度的自然數(shù),i = 1,2,. . .,Μ, L1為正整數(shù),表示第I段數(shù)據(jù)的長度;M個分段并行后向狀態(tài)遞推的計算階段,共包括L1-I次遞推,對第i個分段而言, 以時刻WL1作為起始時刻,以時刻(i-DA+l作為結(jié)束時刻;M個分段并行前向狀態(tài)遞推的訓練階段,為前向狀態(tài)遞推的計算階段提供初始值, 共包括Ta次遞推,對第i個分段而言,以時刻WL1-Ta作為起始時刻,以時刻WL1作為結(jié)束時刻,其中所述Ta為小于等于L1的自然數(shù);
M個分段并行前向狀態(tài)遞推的計算階段,共包括L1-I次遞推,對第i個分段而言, 以時刻α-υΑ作為起始時刻,以時刻^l1-I作為結(jié)束時刻;M個分段并行計算系統(tǒng)比特外信息;其中前向狀態(tài)遞推和后向狀態(tài)遞推過程中,對應于M個分段分別在(i-DA+ka =1,2,...,Μ)時刻、同一狀態(tài)的狀態(tài)度量值存儲位置是連續(xù)的,其中所述k為小于等于L1 的自然數(shù)。根據(jù)本發(fā)明的一個實施例,所述后向狀態(tài)遞推的計算階段,需將M個分段分別在時刻(i-lhLi+Tba = 1,2,... ,Μ)的各個狀態(tài)的后向遞推狀態(tài)度量值存儲下來,作為下一次迭代時同一分量碼執(zhí)行后向狀態(tài)遞推訓練階段的后向遞推狀態(tài)度量初始值;前向狀態(tài)遞推的計算階段,需將M個分段分別在時刻WL1-TaQ = 1,2,. . .,Μ)的各個狀態(tài)的前向遞推狀態(tài)度量值存儲下來,作為下一次迭代時同一分量碼執(zhí)行前向狀態(tài)遞推訓練階段的前向遞推狀態(tài)度量初始值。根據(jù)本發(fā)明的一個實施例,所述并行前向狀態(tài)遞推的計算階段和并行計算系統(tǒng)比特外信息兩個步驟可以合并進行,每進行一次M個分段并行的前向狀態(tài)遞推得到一組前向遞推狀態(tài)度量值后,則緊接著進行一次M個分段并行的外信息計算,這樣只需存儲當前時刻的前向遞推狀態(tài)度量值,而不必存儲所有時刻的前向遞推狀態(tài)度量值。根據(jù)本發(fā)明的一個實施例,所述每一步前向狀態(tài)遞推和后向狀態(tài)遞推均包括多組 M個分段并行執(zhí)行的蝶形運算以及M個分段并行執(zhí)行的對狀態(tài)度量值的防溢出控制運算。根據(jù)本發(fā)明的一個實施例,對外信息進行交織的過程進一步包括步驟一,矩陣解交織;步驟二,使用Turbo碼交織表對矩陣解交織結(jié)果中的前N個數(shù)據(jù)進行交織,其中所述 N為正整數(shù),表示Turbo碼信息比特長度;步驟三,矩陣交織;其中矩陣解交織和矩陣交織互為逆過程,三個步驟的串行級聯(lián)可以等效成一次單獨的交織過程,事先計算好執(zhí)行步驟一之前與執(zhí)行步驟三之后同一元素位置的對應關系,作為一個新的交織表存儲起來,每次迭代過程中進行交織和解交織步驟時調(diào)用該交織表。根據(jù)本發(fā)明的一個實施例,所述矩陣交織的過程進一步包括將所述數(shù)據(jù)按行順序?qū)懭胍粋€P行L1列的矩陣中,其中所述P為大于等于M的正整數(shù),所述L1為正整數(shù),表示第I段數(shù)據(jù)的長度;將所述矩陣中的數(shù)據(jù)按列順序讀出。本發(fā)明第二方面的實施例提出了一種軟件無線電系統(tǒng)中的高速并行Turbo譯碼系統(tǒng),包括第一部件,用于將待譯碼數(shù)據(jù)分為M段并進行重排,使M個分段中對應相同位置的數(shù)據(jù)連續(xù)存儲,其中,所述M為正整數(shù);第二部件,用于對重排后的待譯碼數(shù)據(jù)進行迭代譯碼,包括對M個分段的數(shù)據(jù)進行并行的分量碼譯碼,并對分量碼之間互相交換的外信息進行交織和解交織,其中交織和解交織互為逆過程; 第三部件,用于迭代譯碼停止后,將譯碼結(jié)果進行重排,使其恢復自然順序。根據(jù)本發(fā)明實施例的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法及系統(tǒng),通過將待譯碼數(shù)據(jù)進行分段并重排,并采用一種有效的數(shù)據(jù)組織方式對譯碼過程的內(nèi)部數(shù)據(jù)進行存儲,從而便于對多段數(shù)據(jù)的并行譯碼,大大減少了譯碼時間,提高了譯碼吞吐率;并通過事先計算好交織表并存儲起來以便正式譯碼時直接調(diào)用的方式,省去了在線計算交織表的時間;并將串行的多次交織過程等效為一個單獨的交織過程,減少了數(shù)據(jù)在內(nèi)存中的搬移次數(shù)。該譯碼方法具有高的靈活性,實用性強。
本發(fā)明的上述和/或附加的方面和優(yōu)點從結(jié)合下面附圖對實施例的描述中將變得明顯和容易理解,其中圖I為本發(fā)明實施例的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法的流程圖;圖2為本發(fā)明實施例采用的UMTS標準中的Turbo碼分量碼的網(wǎng)格圖;圖3a為本發(fā)明實施例的待譯碼數(shù)據(jù)分段的示意圖;圖3b為本發(fā)明實施例的待譯碼數(shù)據(jù)重排的示意圖;圖4為使用SIMD指令對重排后的待譯碼數(shù)據(jù)進行迭代譯碼過程的流程圖;圖5為Turbo碼分量碼Max-Log-MAP譯碼算法的基本流程圖;圖6a為分量碼譯碼中M個分段并行的后向狀態(tài)遞推示意圖;圖6b為分量碼譯碼中M個分段并行的前向狀態(tài)遞推示意圖;圖7a為分量碼譯碼中單步后向狀態(tài)遞推的具體結(jié)構(gòu)示意圖;圖7b為分量碼譯碼中單步前向狀態(tài)遞推的具體結(jié)構(gòu)示意圖;圖8為單步后向(前向)狀態(tài)遞推中單獨一組SMD指令執(zhí)行蝶形運算的具體結(jié)構(gòu)示意圖;圖9a為對后向狀態(tài)遞推正式計算階段狀態(tài)度量初始值的存儲位置進行重排的示意圖;圖9b為對前向狀態(tài)遞推正式計算階段狀態(tài)度量初始值的存儲位置進行重排的示意圖;圖10為M個分段并行的系統(tǒng)比特外信息計算的具體運算結(jié)構(gòu)示意圖;以及圖11為迭代譯碼過程中對第一分量碼的輸出進行交織的流程圖。圖12為本發(fā)明實施例的軟件無線電系統(tǒng)中的高速并行Turbo譯碼系統(tǒng)的結(jié)構(gòu)圖。
具體實施例方式下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。在本發(fā)明的描述中,需要理解的是,術語“縱向”、“橫向”、“上”、“下”、“前”、“后”、 “左”、“右”、“豎直”、“水平”、“頂”、“底” “內(nèi)”、“外”等指示的方位或位置關系為基于附圖所示的方位或位置關系,僅是為了便于描述本發(fā)明和簡化描述,而不是指示或暗示所指的裝置或元件必須具有特定的方位、以特定的方位構(gòu)造和操作,因此不能理解為對本發(fā)明的限制。此外,術語“第一”、“第二”僅用于描述目的,而不能理解為指示或暗示相對重要性。在本發(fā)明的描述中,除非另有規(guī)定和限定,需要說明的是,術語“安裝”、“相連”、 “連接”應做廣義理解,例如,可以是機械連接或電連接,也可以是兩個元件內(nèi)部的連通,可以是直接相連,也可以通過中間媒介間接相連,對于本領域的普通技術人員而言,可以根據(jù)具體情況理解上述術語的具體含義。以下結(jié)合附圖描述根據(jù)本發(fā)明實施例的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法。參考圖1,本發(fā)明實施例的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,包括如下步驟步驟S101,接收已經(jīng)過解速率匹配處理的待譯碼數(shù)據(jù)。待譯碼數(shù)據(jù)包含系統(tǒng)比特信息序列X1、第一分量碼校驗比特信息序列Z1和第二分量碼校驗比特信息序列Z2三個序列。這三個序列分別存儲在內(nèi)存中的指定位置。步驟S102,將待譯碼數(shù)據(jù)分為M段,并進行重排,使M個分段中對應相同位置的數(shù)據(jù)位于連續(xù)的存儲單元,便于讀入SIMD寄存器。步驟S103,使用SMD指令對重排后的待譯碼數(shù)據(jù)進行迭代并行譯碼。其中SMD 指令并行操作的多個操作數(shù)分別對應多個分段。步驟S104,計算系統(tǒng)比特的對數(shù)似然值并進行符號判決,將判決后的譯碼比特序列進行重排恢復自然順序后輸出。為了對本發(fā)明上述實施例有更深入的理解,以下結(jié)合具體例子對本發(fā)明的原理進行詳細描述。本發(fā)明實施例采用UMTS標準中的Turbo碼作為具體例子進行說明。圖2示出了該Turbo碼的分量碼的網(wǎng)格圖。Turbo譯碼過程中對兩個分量碼的譯碼將基于該網(wǎng)格圖進行。對于系統(tǒng)信息比特長度為N的Turbo碼,網(wǎng)格圖包含N+1個時刻,每個時刻包含8個狀態(tài),分別記為狀態(tài)O至狀態(tài)7。網(wǎng)格圖說明了不同狀態(tài)間的轉(zhuǎn)移關系。每兩個狀態(tài)間的轉(zhuǎn)移關系都對應一種特定的輸入比特和輸出比特的組合,這些組合共有四種,即輸入O輸出O、 輸入O輸出I、輸入I輸出O、輸入I輸出I。以下說明中均假設N = 2557。下面對步驟S102進行詳細說明。首先,根據(jù)Turbo碼塊長度N以及SIMD指令所能支持的并行操作數(shù)個數(shù)(以下簡稱SIMD并行度)P,按照預先設定的規(guī)則分別將序列X1^1和Z2分為M段,其中M為大于等于I且小于等于P的整數(shù);前^1段數(shù)據(jù)長度相同,記為L1,最后一段數(shù)據(jù)長度小于等于前 M-I段數(shù)據(jù)的長度,記為L2,即L2彡Lp由N和P導出M、L1和L2的具體方法可以由本領域技術人員依據(jù)實際測試或研究確定,本發(fā)明并不對此加以限定。本實施例中,P = M = 8, L1 = 320,L2 = 317。數(shù)據(jù)分段的示意圖如圖3a所示,圖中方格內(nèi)的數(shù)字表示序列X1 (或Z1 或Z2)中各元素的序號。然后,使用相同的重排方法將系統(tǒng)比特信息序列X1、第一分量碼校驗比特信息序列z1、第二分量碼校驗比特信息序列Z2分別進行重排。該重排方法可用矩陣交織的形式進行描述,如圖3b所示。具體為將序列X1 (或Z1或Z2)中的第I段數(shù)據(jù)從左至右順序?qū)懭胍粋€P行L1列的矩陣的第I行;將序列X1 (或Z1或Z2)中的第2段數(shù)據(jù)從左至右順序?qū)懭朐摼仃嚨牡?行;以此類推直至第M段數(shù)據(jù)。若第M段數(shù)據(jù)長度小于前幾段數(shù)據(jù),則第M行不能填滿,剩下未填滿的部分可用O或其他值填充;若M小于P,則矩陣中剩下的P-M行也可用O或其他值填充。然后將矩陣中第I列的P個數(shù)據(jù)從上至下順序讀出并連續(xù)存儲在內(nèi)存空間中;將矩陣中第2列的P個數(shù)據(jù)從上至下順序讀出并連續(xù)存儲在內(nèi)存空間中第I列數(shù)據(jù)的存儲位置之后;以此類推直至第L1列。通過重排后,序列X1 (或Z1或Z2)中對應于M 個分段中相同位置的數(shù)據(jù),比如X1k ,X1L1Mxl2I^knxUlhLflc,現(xiàn)在處于內(nèi)存中連續(xù)的位置, 從而便于SMD處理器從內(nèi)存中一次性讀取M個分段的數(shù)據(jù)并加載到SMD寄存器中,使用 SMD指令進行并行譯碼。具體來說,SMD處理器根據(jù)數(shù)據(jù)的起始地址從內(nèi)存中一次性讀入連續(xù)的P個數(shù)據(jù)并加載到SIMD寄存器中,若M = P,則P個數(shù)據(jù)均為有效數(shù)據(jù),對應于M 個分段;若M < P,則前M個數(shù)據(jù)為有效數(shù)據(jù),對應于M個分段,剩下的P-M個數(shù)據(jù)為無效數(shù)據(jù)。下面對步驟S103進行詳細說明。使用SMD指令對重排后的待譯碼數(shù)據(jù)進行迭代譯碼的過程如圖4所示,進一步包括步驟S401,迭代前的初始化操作,包括對步驟S102中重排后的序列X1進行交織操作,交織方法與以下步驟S403中的交織操作方法相同,將交織后的序列記為X2并作為第二個分量碼譯碼的輸入;利用待譯碼數(shù)據(jù)中兩個分量碼的尾比特(tail bits)信息分別計算出兩個分量碼在第N時刻8個狀態(tài)的后向遞推狀態(tài)度量值,通常也稱為beta度量值,用于步驟S402和步驟S404分別對兩個分量碼并行譯碼過程中第M個分段后向遞推的起始狀態(tài)進行初始化;以及其他必要的初始化操作。然后迭代開始。每一次迭代包括步驟S402,使用SIMD指令對第一個分量碼的M個分段的數(shù)據(jù)進行并行譯碼并輸出外信息序列Lel。步驟S403,對序列Lel進行交織,并將交織結(jié)果作為第二個分量碼譯碼的輸入先驗信息序列Lp2。步驟S404,使用SIMD指令對第二個分量碼的M個分段的數(shù)據(jù)進行并行譯碼并輸出
外信息序列Le2。步驟S405,對序列Le2進行解交織,并將解交織結(jié)果作為第一個分量碼譯碼的輸入先驗信息序列Lpl。步驟S406,判斷是否達到預設迭代次數(shù),若沒有達到,則繼續(xù)進行下一次迭代,重復執(zhí)行步驟S402至S405,否則停止迭代。需要說明的是,以上迭代過程的預設迭代次數(shù)可以由本領域技術人員根據(jù)具體通信系統(tǒng)對Turbo譯碼誤碼性能以及對譯碼吞吐量的要求進行實際測試或研究后確定,本發(fā)明對此并沒有限制。迭代譯碼停止除了采用以上迭代固定次數(shù)后停止的方式,還可以采用迭代提前截止的方式,具體為每一次迭代中,分別在步驟S402和步驟S405之后根據(jù)預設的提前截止準則進行判定,如滿足提前截止要求則終止迭代過程,否則繼續(xù)執(zhí)行當前步驟之后的步驟。 提前截止的準則和方法可以由本領域技術人員研究確定,本發(fā)明的實施例對此并沒有限制。步驟S402和S404采用的是相同的方法和流程,下面對此進行詳細說明。分量碼 Max-Log-MAP譯碼過程的基本流程如圖5所示。輸入包括先驗信息序列Lp (對步驟S402來說為上一次迭代過程中步驟S405的輸出Lpl,對步驟S404來說為本次迭代過程中步驟S403 的輸出Lp2)、系統(tǒng)比特信息序列x(對步驟S402來說為上述序列X1,對步驟S404來說為上述序列X2)以及校驗比特信息序列z (對步驟S402來說為上述序列z1,對步驟S404來說為
9上述序列Z2)。譯碼過程包括以下步驟步驟S501,后向狀態(tài)遞推(也稱beta遞推)的訓練階段。為beta遞推的正式計算階段提供初始值。步驟S502,后向狀態(tài)遞推(也稱beta遞推)的正式計算階段。步驟S511,前向狀態(tài)遞推(也稱alpha遞推)的訓練階段。為alpha遞推的正式計算階段提供初始值。步驟S512,前向狀態(tài)遞推(也稱alpha遞推)的正式計算階段。步驟S521,計算并輸出系統(tǒng)比特外信息ΙΛ以上步驟S501和步驟S502的基本原理相同,每一步遞推可用下式表示β k (sk) = max { β k+1 (sk+1) + y k (sk, sk+1), β k+1 (s' k+1) + Y k (sk, s' k+1)}。(I)上式中假設時刻k的狀態(tài)Sk與時刻k+Ι的狀態(tài)sk+1和s’ k+1在圖2所示網(wǎng)格圖上存在狀態(tài)轉(zhuǎn)移關系,Pk(Sk)表示網(wǎng)格圖上時刻k、狀態(tài)Sk的后向遞推狀態(tài)度量值(beta度量值),Y k(sk,sk+1)表示在網(wǎng)格圖上從時刻k的狀態(tài)Sk轉(zhuǎn)移到時刻k+Ι的狀態(tài)sk+1所對應的路徑度量值,該路徑度量值有四種取值,對應系統(tǒng)比特和校驗比特的四種組合{00,01, 10,11},分別表示為O〗1,#,#。計算方法如下式所示γ =(l-i)-Lpk +(l-2i)-xk+(l-2j)·zk, i = O, I ; j = O, I0 (2)步驟S501進行的是M個分段并行的beta遞推訓練階段,如圖6a所示。共包括 Tb次遞推,對第i(i = 1,2,... ,Μ)個分段而言,以時刻(i-1) *1^+1;作為起始時刻,以時刻 (i-l)*Li作為結(jié)束時刻。其中Tb為大于等于O且小于等于L2的整數(shù),Tb的具體取值可以由本領域技術人員依據(jù)實際測試或研究確定,本發(fā)明并不對此加以限定。起始時刻
的8個狀態(tài)的beta度量值初始化為上一次迭代過程中同一個分量碼進行步驟S502所述 beta遞推正式計算階段時,時刻(i-1) *L!+Tb的8個狀態(tài)相應的beta度量值。因此在進行步驟S502時,需將M個分段分別在時刻(i-1) ^+Tb (i = 1,2,... ,Μ)的8個beta度量值 Pvm⑷,3 = 0,1,...,7存儲下來,以便下一次迭代時使用。每一步beta遞推的具體結(jié)構(gòu)如圖7a所示。具體包括4組SMD指令執(zhí)行的蝶形運算以及beta度量值的防溢出控制。每一組SMD指令執(zhí)行的蝶形運算并行完成對應M個分段的相鄰時刻間的遞推運算,其中對應第i個分段為(i-lhu+k+l時刻的2個狀態(tài)到(i-lhu+k時刻的2個狀態(tài)的遞推蝶形運算。圖中Beta[k][s]表示內(nèi)存空間中連續(xù)的P個存儲單元,其中前M個連續(xù)的存儲單元存儲著對應M個分段的beta度量值β k(s),. . .,Pk+k {s),P{M_x)Lx+k ( ) ; Gamma_ ij [k] (i = 0,1 ; j = 0,1)表示內(nèi)存空間中連續(xù)的P個存儲單元,其中前M個連續(xù)的存儲單元存儲著對應M個分段的路徑度量值[s]和Gamma_ij[k]的存儲方式便于SMD處理器從內(nèi)存中一次性讀出對應M個分段的數(shù)據(jù)并載入SMD寄存器進行運算。單獨一組SIMD指令執(zhí)行蝶形運算的具體結(jié)構(gòu)如圖8所示。圖中GammaJ)[k]和 Gamma_l [k]表示存儲M個分段的路徑度量值的存儲單元。SMD處理器從內(nèi)存中讀取路徑度量值以及Beta [k+1] [Si]和Beta [k+1] [s2]并加載到SIMD寄存器,然后執(zhí)行四條SIMD 加法指令和兩條SMD求最大值指令,并將結(jié)果存儲到內(nèi)存空間的Beta[k] [s3]和Beta[k][s4]。SIMD指令執(zhí)行蝶形運算的一種偽代碼實施例如下(I)LOAD xmmO, Beta[k+1] [si];將 Beta[k+1] [si]載入 SIMD 寄存器 xmmO(2)LOAD xmml, Beta[k+1] [s2];將 Beta[k+1] [s2]載入 SIMD 寄存器 xmml(3) LOAD xmm2,Gamma—I [k] ;將 Gamma—I [k]載入 SIMD 寄存器 xmm2(4) LOAD xmm3,Gamma—0 [k] ;將 Gamma—0 [k]載入 SIMD 寄存器 xmm3(5) VECADD xmmO, xmm2;SIMD 加法,并行執(zhí)行 P 組加法(6) VECADD xmml, xmm3;SIMD 加法,并行執(zhí)行 P 組加法(7) VECMAX xmmO,xmml;SIMD求最大值,并行執(zhí)行P組兩個數(shù)求最大值(8) STORE Beta[k] [s3],xmmO ;將最大值存儲到內(nèi)存中的 Beta[k] [s3](9) LOAD xmmO, Beta[k+1] [si];將 Beta[k+1] [si]載入 SIMD 寄存器 xmmO(10) LOAD xmml,Beta [k+1] [s2];將 Beta [k+1] [s2]載入 SIMD 寄存器 xmml(ll)VECADD xmmO, xmm3;SIMD 加法,并行執(zhí)行 P 組加法(12) VECADD xmml, xmm2;SIMD 加法,并行執(zhí)行 P 組加法(13) VECMAX xmmO,xmml;SIMD求最大值,并行執(zhí)行P組兩個數(shù)求最大值(14) STORE Beta[k] [s4],xmmO ;將最大值存儲到內(nèi)存中的 Beta[k] [s4]以上偽代碼中LOAD指令執(zhí)行將內(nèi)存空間中P個連續(xù)的存儲單元中的內(nèi)容加載到 SIMD寄存器的操作;ST0RE指令執(zhí)行將SMD寄存器中的內(nèi)容存儲到內(nèi)存空間中P個連續(xù)的 存儲單元中的操作;VECADD指令并行執(zhí)行P組加法操作;VECMAX指令并行執(zhí)行P組求兩個 數(shù)中最大值的操作。圖7a中的防溢出控制目的在于保證隨著遞推過程的進行,每個時刻對應8個狀態(tài) 的beta度量值不會超出存儲這些度量值使用的數(shù)據(jù)類型所支持的數(shù)值范圍,比如釆用8比 特有符號整數(shù)的數(shù)據(jù)類型存儲度量值,則數(shù)值范圍為-128 127。一種防止溢出的方式是 對每次遞推計算出時刻k的8個beta度量值后,求出這8個值的最大值,并將8個度量值分 別減去這個最大值。具體實現(xiàn)時,使用SIMD指令對M個分段并行執(zhí)行該防溢出控制操作, 一種偽代碼實施例如下(I) LOAD xmmO, Beta[k] [O];將 Beta[k] [O]載入 SIMD 寄存器 xmmO(2)LOAD xmml,Beta[k] [I];將 Beta[k] [I]載入 SIMD 寄存器 xmml(3) VECMAX xmmO, xmml;求86七8[10
和 Beta[k][l]的最大值(4) LOAD xmml,Beta [k] [2];將 Beta [k] [2]載入 SIMD 寄存器 xmml(5) LOAD xmm2, Beta[k] [3];將 Beta[k] [3]載入 SIMD 寄存器 x_2(6) VECMAX xmml, xmm2[2]和 Beta[k] [3]的最大值(7) LOAD xmm2, Beta[k] [4];將 Beta[k] [4]載入 SIMD 寄存器 x_2(8) LOAD xmm3, Beta[k] [5];將 Beta[k] [5]載入 SIMD 寄存器 x_3(9) VECMAX xmm2, xmm3 ;求86七8[10[4]和 Beta[k][5]的最大值(10) LOAD xmm3, Beta[k] [6];將 Beta[k] [6]載入 SIMD 寄存器 x_3(11) LOAD xmm4, Beta[k] [7] d*Beta[k][7]載入 SIMD 寄存器 xmm4(12) VECMAX xmm3, xmm4 ;求86七&[10[6]和 Beta [k] [7]的最大值(13) VECMAX xmmO, xmml(14) VECMAX xmm2, xmm3
(15) VECMAX xmmO, xmm2 ;M個分段、每分段8個beta度量值的最大值存儲在 SIMD寄存器xmmO中(16)LOAD xmml, Beta[k] [O] ;Beta[k]
減去最大值(17)VECSUB xmml, xmmO(18) STORE Beta [k]
, xmml(19)LOAD xmml, Beta[k] [I] ;Beta[k] [I]減去最大值(20)VECSUB xmml, xmmO(21) STORE Beta[k] [I], xmml(22)......(23)LOAD xmml, Beta[k] [7] ;Beta[k] [7]減去最大值(24)VECSUB xmml, xmmO(25) STORE Beta [k] [7],xmml以上偽代碼中,VECSUB指令并行執(zhí)行P組減法操作,其他指令含義與上文所述相同。由于步驟501的目的是計算Beta
[s] (s = 0,1, . . .,7),因此執(zhí)行過程中間的 Beta[k] [s] (k > O)的值不必要都存儲下來,以節(jié)省內(nèi)存空間的占用。步驟501執(zhí)行完成后,得到了 Beta [O] [s] (s = 0,1,· · ·,7),其中前M個值為M個分段在弟(i_l) 5^L1 (i = 1,2,· · · ,Μ)時刻的 beta 度星值 β。(s),· · ·,Pii(O,s = 0,1,...,7。其中第i個分段的beta度量值爲作為第i_l個分段進行步驟502beta 遞推的正式計算階段時的初始值。因此需要對Ptl(S), ...,A1⑷,Λμ—% 的存儲位置進行重排,將(O移動到對應于第i-Ι個分段的位置,第M個分段的beta度量值的初始值則使用步驟S401中利用尾比特遞推得到的值PN(s),具體如圖9a所示。該操作可使用SMD重排或移位指令實現(xiàn)。步驟S502進行的是M個分段并行的beta遞推正式計算階段,如圖6a所示。共包括1^-1次遞推,對第i個分段而言,以時刻WL1作為起始時刻,以時刻(i-DA+l作為結(jié)束時刻。起始時刻i*u的8個狀態(tài)的beta度量值初始化為步驟501執(zhí)行結(jié)果經(jīng)過圖9a所示重排后的值。每一次遞推的具體操作與以上步驟S501所述相同,此處不再贅述。每一次遞推的計算結(jié)果Beta[k][s]均需存儲在內(nèi)存空間中,用于后續(xù)的步驟S521。在進行步驟S502時,若第M個分段的數(shù)據(jù)長度L2小于前M_1段的數(shù)據(jù)長度L1,則當遞推計算得到Beta[L2] [s]后,第M段的后向遞推才真正開始,因此需要將Beta[L2] [s] 中對應第M段的beta度量值用i3N(s)替代,以使第M個分段的后向遞推獲得正確的狀態(tài)初始值。在進行步驟S502時,需將M個分段分別在時刻(i-1) ^+Tb (i = 1,2,···,M)的8 個beta度量值即Beta[Tb] [s] (s = O, I, . . . ,7)存儲下來,以便下一次迭代時作為同一分量碼執(zhí)行步驟501時的初始值。圖5中步驟S511和步驟S512的基本原理相同,每一步遞推可用下式表示Ct k+1 (sk+1) — max { ct k (Sk) + Yk (Sk,),ct k (s k) + Y k (s k, sk+1)}。(3)上式中假設時刻k的狀態(tài)Sk和s’k與時刻k+Ι的狀態(tài)sk+1在圖2所示網(wǎng)格圖上存在狀態(tài)轉(zhuǎn)移關系,ak(sk)表示網(wǎng)格圖上時刻k、狀態(tài)Sk的前向遞推狀態(tài)度量值(alpha度量值),Y k(sk,sk+1)表示在網(wǎng)格圖上從時刻k的狀態(tài)Sk轉(zhuǎn)移到時刻k+Ι的狀態(tài)sk+1所對應的路徑度量值,該路徑度量值有四種取值,分別表示為,%1,計算方法與上述beta 遞推中路徑度量計算方法相同。步驟S511進行的是M個分段并行的alpha遞推訓練階段,如圖6b所示。共包括 Ta次遞推,對第i(i = 1,2,... ,Μ)個分段而言,以時刻WL1-Ta作為起始時刻,以時刻WL1 作為結(jié)束時刻。其中Ta為大于等于O且小于等于L1的整數(shù),Ta的具體取值可以由本領域技術人員依據(jù)實際測試或研究確定,本發(fā)明并不對此加以限定。此處Ta的取值也可與上述步驟S501中Tb的取值不同,本發(fā)明并不對此加以限定。起始時刻^L1-Ta的8個狀態(tài)的alpha 度量值初始化為上一次迭代過程中同一個分量碼進行步驟S512所述alpha遞推正式計算階段時,時刻^L1-Ta的8個狀態(tài)相應的alpha度量值。因此在進行步驟S512時,需將M個分段分別在時刻WL1-TaQ = 1,2,…,M)的8個alpha度量值s = 0,1, ... ,7 存儲下來,以便下一次迭代時使用。每一步alpha遞推的具體結(jié)構(gòu)與beta遞推類似,如圖7b所示。包括4組SIMD指令執(zhí)行的蝶形運算以及alpha度量值的防溢出控制。每一組SIMD指令執(zhí)行的蝶形運算并行完成對應M個分段的相鄰時刻間的遞推運算,其中對應第i個分段為(i-DA+k時刻的2個狀態(tài)到(i-Dh+k+l時刻的2個狀態(tài)的遞推蝶形運算。圖中Alpha[k] [s]表示內(nèi)存空間中連續(xù)的P個存儲單元,其中前M個連續(xù)的存儲單元存儲著對應M個分段的alpha度量值a k(s),. . .,OC^k {s),a{M_l)Li+k (s) ; Gamma_ ij [k] (i = 0,1 ; j = 0,1)表示內(nèi)存空間中連續(xù)的P個存儲單元,其中前M個連續(xù)的存儲單元存儲著對應M個分段的路徑度量值%,7^,···,義-%^A1Pha[k] [s]和Gamma_ij[k] 的存儲方式便于SMD處理器從內(nèi)存中一次性讀出對應M個分段的數(shù)據(jù)并載入SMD寄存器進行運算。單獨一組SMD指令執(zhí)行蝶形運算的具體結(jié)構(gòu)如圖8所示,與beta遞推的蝶形運算基本相同。SMD處理器從內(nèi)存中讀取路徑度量值以及Alpha[k] [si]和Alpha[k] [s2]并加載到SIMD寄存器,然后執(zhí)行四條SIMD加法指令和兩條SIMD求最大值指令,并將結(jié)果存儲到內(nèi)存空間的Alpha[k+1] [s3]和Alpha[k+1] [s4]。SIMD指令執(zhí)行蝶形運算的一種偽代碼實施例可參考上述beta遞推時的偽代碼實施例,此處不再贅述。圖7b中的防溢出控制目的與beta遞推中的相同,即保證隨著遞推過程的進行,每個時刻對應8個狀態(tài)的alpha度量值不會超出存儲這些度量值使用的數(shù)據(jù)類型所支持的數(shù)值范圍。一種防止溢出的方式是對每次遞推計算出時刻k+Ι的8個alpha度量值后,求出這8個值的最大值,并將8個度量值分別減去這個最大值。具體實現(xiàn)時,使用SIMD指令對 M個分段并行執(zhí)行該防溢出控制操作,一種偽代碼實施例可參考上述beta遞推時的偽代碼實施例,此處不再贅述。由于步驟511的目的是計算Alpha[L1] [s] (s = 0,1,. . .,7),因此執(zhí)行過程中間的 Alpha[k] [s] (k < L1)的值不必要都存儲下來,以節(jié)省內(nèi)存空間的占用。步驟511執(zhí)行完成后,得到了 Alpha[L1] [s] (s = 0,1,· · ·,7),其中前M個值為M 個分段在弟 i*Li (i = I,2,· · ·,M)時刻的 alpha 度星值 a、(i),Qf2Z1 (O,·''5( , s = 0,I, ... ,7.其中第i個分段的alpha度量值(O作為第i+Ι個分段進行步驟512alpha 遞推的正式計算階段時的初始值。因此需要對的存儲位置進行重排,將&⑷移動到對應于第i+Ι個分段的位置,第I個分段的alpha度量值的初始值直接賦為ct JO) = O, a 0(s) = - s ^ 0(實際實現(xiàn)時,負無窮值可用一個較大的負數(shù)代替),具體如圖%所示。該操作可使用SMD重排或移位指令實現(xiàn)。步驟S512進行的是M個分段并行的alpha遞推正式計算階段,如圖6b所示。共包括L1-I次遞推,對第i個分段而言,以時刻作為起始時刻,以時刻WL1-I作為結(jié)束時刻。起始時刻(i-1) 的8個狀態(tài)的alpha度量值初始化為步驟511執(zhí)行結(jié)果經(jīng)過圖9b所示重排后的值。每一次遞推的具體操作與以上步驟S511所述相同,此處不再贅述。 每一次遞推的計算結(jié)果Alpha[k] [s]均需存儲在內(nèi)存空間中,用于后續(xù)的步驟S521。在進行步驟S512時,需將M個分段分別在時刻WL1-TaQ = 1,2,...,M)的8個 alpha度量值,即AlphaIX1-Ta] [s] (s = O, I,. . . , 7)存儲下來,以便下一次迭代時作為同一分量碼執(zhí)行步驟511時的初始值。下面對圖5中步驟S521計算并輸出系統(tǒng)比特外信息Le進行詳細說明。計算系統(tǒng)比特外信息的基本原理如下式所示
權利要求
1.一種軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,其特征在于,包括以下步驟 將待譯碼數(shù)據(jù)分為M段并進行重排,使M個分段中對應相同位置的數(shù)據(jù)連續(xù)存儲,其中,所述M為正整數(shù);對重排后的待譯碼數(shù)據(jù)進行迭代譯碼,包括對M個分段的數(shù)據(jù)進行并行的分量碼譯碼,并對分量碼之間互相交換的外信息進行交織和解交織,其中交織和解交織互為逆過迭代譯碼停止后,將譯碼結(jié)果進行重排,使其恢復自然順序。
2.如權利要求I所述的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,其特征在于,將待譯碼數(shù)據(jù)分為M段時,前M-I段數(shù)據(jù)長度相同,最后一段數(shù)據(jù)長度小于等于前M-I段數(shù)據(jù)的單段長度。
3.如權利要求I所述的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,其特征在于,將分段后的待譯碼數(shù)據(jù)進行重排的過程進一步包括將M段數(shù)據(jù)按行順序分別寫入一個P行L1列的矩陣中連續(xù)的M行,若有未填滿的部分可用O或其他值填充,其中所述P為大于等于M的正整數(shù),所述L1為正整數(shù),表示第I段數(shù)據(jù)的長度;將所述矩陣中的數(shù)據(jù)按列順序讀出。
4.如權利要求I所述的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,其特征在于,對 M個分段的數(shù)據(jù)進行并行的分量碼譯碼的過程進一步包括M個分段并行后向狀態(tài)遞推的訓練階段,為后向狀態(tài)遞推的計算階段提供初始值,共包括Tb次遞推,對第i個分段而言,以時刻作為起始時刻,以時刻作為結(jié)束時刻,其中所述Tb為小于等于最后一段數(shù)據(jù)分段長度的自然數(shù),i = 1,2,. . .,M,L1為正整數(shù),表示第I段數(shù)據(jù)的長度;M個分段并行后向狀態(tài)遞推的計算階段,共包括L1-I次遞推,對第i個分段而言,以時刻i*U作為起始時刻,以時刻α_1)*Ι^+1作為結(jié)束時刻;M個分段并行前向狀態(tài)遞推的訓練階段,為前向狀態(tài)遞推的計算階段提供初始值,共包括Ta次遞推,對第i個分段而言,以時刻WL1-Ta作為起始時刻,以時刻WL1作為結(jié)束時刻, 其中所述Ta為小于等于L1的自然數(shù);M個分段并行前向狀態(tài)遞推的計算階段,共包括L1-I次遞推,對第i個分段而言,以時刻作為起始時刻,以時刻WL1-I作為結(jié)束時刻;M個分段并行計算系統(tǒng)比特外信息;其中前向狀態(tài)遞推和后向狀態(tài)遞推過程中,對應于M個分段分別在(i-D^+k時亥IJ、 同一狀態(tài)的狀態(tài)度量值存儲位置是連續(xù)的,其中所述k為小于等于L1的自然數(shù)。
5.如權利要求4所述的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,其特征在于,其中,后向狀態(tài)遞推的計算階段,需將M個分段分別在時刻(i-DA+Tb的各個狀態(tài)的后向遞推狀態(tài)度量值存儲下來,作為下一次迭代時同一分量碼執(zhí)行后向狀態(tài)遞推訓練階段的后向遞推狀態(tài)度量初始值;前向狀態(tài)遞推的計算階段,需將M個分段分別在時刻^L1-Ta的各個狀態(tài)的前向遞推狀態(tài)度量值存儲下來,作為下一次迭代時同一分量碼執(zhí)行前向狀態(tài)遞推訓練階段的前向遞推狀態(tài)度量初始值。
6.如權利要求4所述的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,其特征在于,其中并行前向狀態(tài)遞推的計算階段和并行計算系統(tǒng)比特外信息兩個步驟可以合并進行,每進行一次M個分段并行的前向狀態(tài)遞推得到一組前向遞推狀態(tài)度量值后,則緊接著進行一次 M個分段的外信息的并行計算,這樣只需存儲當前時刻的前向遞推狀態(tài)度量值,而不必存儲所有時刻的前向遞推狀態(tài)度量值。
7.如權利要求4所述的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,其特征在于,每一步前向狀態(tài)遞推和后向狀態(tài)遞推均包括多組M個分段并行執(zhí)行的蝶形運算以及M個分段并行執(zhí)行的對狀態(tài)度量值的防溢出控制運算。
8.如權利要求I所述的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,其特征在于,對外信息進行交織的過程進一步包括步驟一,矩陣解交織;步驟二,使用Turbo碼交織表對矩陣解交織結(jié)果中的前N個數(shù)據(jù)進行交織,其中所述N 為正整數(shù),表示Turbo碼信息比特長度;步驟三,矩陣交織;其中矩陣解交織和矩陣交織互為逆過程,三個步驟的串行級聯(lián)可以等效成一次單獨的交織過程,事先計算好執(zhí)行步驟一之前與執(zhí)行步驟三之后同一元素位置的對應關系,作為一個新的交織表存儲起來,每次迭代過程中進行交織和解交織步驟時調(diào)用該交織表。
9.如權利要求8所述的軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法,其特征在于,其中矩陣交織的過程進一步包括將所述數(shù)據(jù)按行順序?qū)懭胍粋€PRL1列的矩陣中,其中所述P為大于等于M的正整數(shù), 所述L1為正整數(shù),表示第I段數(shù)據(jù)的長度;將所述矩陣中的數(shù)據(jù)按列順序讀出。
10.一種軟件無線電系統(tǒng)中的高速并行Turbo譯碼系統(tǒng),其特征在于,包括第一部件,用于將待譯碼數(shù)據(jù)分為M段并進行重排,使M個分段中對應相同位置的數(shù)據(jù)連續(xù)存儲,其中,所述M為正整數(shù);第二部件,用于對重排后的待譯碼數(shù)據(jù)進行迭代譯碼,包括對M個分段的數(shù)據(jù)進行并行的分量碼譯碼,并對分量碼之間互相交換的外信息進行交織和解交織,其中交織和解交織互為逆過程;第三部件,用于迭代譯碼停止后,將譯碼結(jié)果進行重排,使其恢復自然順序。
全文摘要
本發(fā)明提出了一種軟件無線電系統(tǒng)中的高速并行Turbo譯碼方法及系統(tǒng)。該方法包括如下步驟將待譯碼數(shù)據(jù)分為M段,并進行重排,使M個分段中對應相同位置的數(shù)據(jù)連續(xù)存儲;對重排后的待譯碼數(shù)據(jù)進行迭代譯碼,包括對M個分段的數(shù)據(jù)進行并行的分量碼譯碼,以及使用事先計算好的交織表對兩個分量碼之間互相交換的外信息進行交織和解交織;計算系統(tǒng)比特的對數(shù)似然值并進行符號判決,將判決后的譯碼比特序列進行重排恢復自然順序。本發(fā)明的實施例實現(xiàn)了軟件無線電系統(tǒng)中的高速并行Turbo譯碼,大大減少了譯碼時間,提高了譯碼吞吐率。
文檔編號H04L1/00GK102594507SQ20121004325
公開日2012年7月18日 申請日期2012年2月24日 優(yōu)先權日2012年2月24日
發(fā)明者繆蔚, 趙明, 齊心 申請人:繆蔚, 趙明, 齊心