Turbo碼是由法國人Berrou于1993年提出的一種性能優(yōu)越的信道編碼方案[1],其應(yīng)用已逐步推廣到衛(wèi)星通信、移動(dòng)通信和計(jì)算機(jī)通信等領(lǐng)域。交織器作為Turbo碼編碼器中的重要組成部分,在Turbo碼的性能中起著至關(guān)重要的作用,因此交織器的設(shè)計(jì)成了Turbo碼設(shè)計(jì)中的一個(gè)重要方面,交織器的好壞將直接關(guān)系到整個(gè)Turbo碼系統(tǒng)的優(yōu)劣。
本文分析了交織器在Turbo碼中的作用,以及分組交織器[2]存在的缺陷,提出一種改進(jìn)型的分組交織器,即交織深度和寬度可控的分組交織器的設(shè)計(jì)方法。該交織器可根據(jù)數(shù)字通信中信道的實(shí)際特性,做到交織矩陣深度和寬度可控,能夠更好的滿足不同幀長度數(shù)據(jù)傳輸?shù)囊?,從而達(dá)到最佳的抗突發(fā)連續(xù)錯(cuò)誤的目的。
交織器設(shè)計(jì)采用Altera公司生產(chǎn)的Cyclone系列FPGA芯片,利用其內(nèi)部嵌入式存儲(chǔ)資源,用雙端口存儲(chǔ)器實(shí)現(xiàn)。
1 傳統(tǒng)分組交織器的作用、原理及缺陷
1.1 交織器的作用
在傳統(tǒng)信道編碼中,交織器的作用是將信源序列打亂,將它們分散到不同的數(shù)據(jù)序列中,以消除相鄰碼元之間的相關(guān)性。這樣,當(dāng)信號(hào)經(jīng)歷衰落或突發(fā)干擾時(shí),鄰近碼元被噪聲淹沒的可能性會(huì)大大降低,從而增強(qiáng)了抵御長時(shí)間突發(fā)噪聲的能力,同時(shí)也有利于接收端的譯碼接收。
另外,交織器作為Turbo碼編碼器中的重要組成部分,對(duì)提高Turbo碼的性能起著至關(guān)重要的作用。文獻(xiàn)[3]指出,Turbo碼作為線性碼,其糾錯(cuò)譯碼性能主要由碼字的重量分布決定,而交織器實(shí)際上正是決定了Turbo碼的重量分布。所以,Turbo碼的性能很大程度上由交織器所決定。
1.2 分組交織器的原理
分組交織是一種簡單的交織方式,其原理是在發(fā)送端將待交織的輸入數(shù)據(jù)均勻分成m個(gè)碼組,每個(gè)碼組由n段數(shù)據(jù)組成,這樣便構(gòu)成一個(gè)n×m的交織矩陣,其中,m為交織深度,n為交織約束長度或?qū)挾?。待交織?shù)據(jù)以的順序進(jìn)入交織矩陣,再以的順序從交織矩陣中送出,這樣就完成了對(duì)輸入數(shù)據(jù)的分組交織。
1.3 分組交織器存在的缺陷
分組交織器雖然具有原理簡單,易于硬件實(shí)現(xiàn)的特點(diǎn)。但其存在的主要缺點(diǎn)是由于交織矩陣的深度和寬度固定,不能夠根據(jù)信道(特別是變參信道)中突發(fā)誤碼長度、糾錯(cuò)碼的約束長度、糾錯(cuò)能力做出調(diào)整,這樣,信息序列中出現(xiàn)的突發(fā)錯(cuò)誤就不能夠盡量隨機(jī)分布在數(shù)據(jù)幀內(nèi)。交織后,輸入至編碼器中的消息序列仍有很大的相關(guān)性。這就導(dǎo)致了Turbo碼譯碼器在相繼譯碼中不能正確的譯碼,會(huì)產(chǎn)生較高的譯碼錯(cuò)誤。
基于以上原因,希望設(shè)計(jì)出交織矩陣深度和寬度可控的分組交織器,以適應(yīng)不同數(shù)據(jù)幀長度的需要。從而更好的適應(yīng)通信系統(tǒng)的特性要求,提高系統(tǒng)克服突發(fā)差錯(cuò)的能力。
2 改進(jìn)分組交織器的FPGA設(shè)計(jì)與實(shí)現(xiàn)
2.1 FPGA選取及總體實(shí)現(xiàn)
交織器的設(shè)計(jì)采用Altera公司生產(chǎn)的Cyclone系列FPGA實(shí)現(xiàn)。根據(jù)系統(tǒng)的總體要求選用了一片EP1C3T100C8芯片,該系列芯片具有成本低、設(shè)計(jì)靈活、系統(tǒng)便于集成等優(yōu)點(diǎn)[4],因而在數(shù)字通信系統(tǒng)設(shè)計(jì)中得到了廣泛的應(yīng)用。此外,Cyclone系列芯片內(nèi)部具有嵌入式RAM存儲(chǔ)空間,可以實(shí)現(xiàn)較為復(fù)雜的邏輯功能,當(dāng)用作片內(nèi)存儲(chǔ)器時(shí),其存儲(chǔ)數(shù)據(jù)的寬度和深度可由設(shè)計(jì)人員設(shè)定。因而利用存儲(chǔ)器可以方便的設(shè)計(jì)出交織器,從而能夠大大減小電路的體積和復(fù)雜度。
FPGA實(shí)現(xiàn)交織器的原理框圖如圖1所示,從圖中可以看出交織器主要由讀、寫地址序列發(fā)生器,雙端口RAM以及讀寫使能控制幾部分組成。其中讀寫使能控制主要用來產(chǎn)生雙端口RAM的讀寫控制信號(hào),并決定讀、寫地址序列發(fā)生器何時(shí)啟動(dòng)工作。
2.2 讀地址序列產(chǎn)生算法及設(shè)計(jì)
2.2.1 交織器讀地址產(chǎn)生算法
交織器設(shè)計(jì)的關(guān)鍵部分在于“讀/寫地址”的產(chǎn)生。設(shè)交織器的交織矩陣為n m矩陣,根據(jù)分組交織原理,輸入數(shù)據(jù)以0,1,2…,mn-1的順序地址方式寫入存儲(chǔ)器,交織后輸出為:0,n,2n,…, (m-1)n,1,n+1,2n+1, …,(m-1)n+1,2,…,mn-1.
地址產(chǎn)生算法采用雙重循環(huán)的方式(算法流程如圖2所示),算法流程說明如下:
?、偈紫雀鶕?jù)信道實(shí)際情況及數(shù)據(jù)幀長,選定合適的交織
將計(jì)數(shù)變量i,j清零;
②對(duì)計(jì)數(shù)變量j進(jìn)行判斷:如果j<m,則j++;
如果j=m,則跳到第3步;
?、蹖?duì)計(jì)數(shù)變量i進(jìn)行判斷:如果i<n,則i++并將j清零之后跳回第2步;如果i=n,則跳回第1步,開始新一輪循環(huán)。
在整個(gè)循環(huán)過程中,讀地址變量add不斷輸出“亂序”的交織地址add=j n+i,以達(dá)到設(shè)計(jì)的要求。
通過上述分析可以看出,算法中運(yùn)用了加法、乘法、比較、計(jì)數(shù)等算術(shù)邏輯運(yùn)算,則地址生成的FPGA設(shè)計(jì)過程中,需要運(yùn)用加法器,乘法器,比較器,計(jì)數(shù)器等器件以實(shí)現(xiàn)相應(yīng)功能。在設(shè)計(jì)過程中,這些器件采用由QuartusⅡ軟件為設(shè)計(jì)人員提供的參數(shù)化宏單元模塊LPM(library of parameterized modules),使用它不僅可以簡化電路復(fù)雜度,而且大大提高了設(shè)計(jì)速度。
2.2.2 讀地址序列產(chǎn)生器設(shè)計(jì)
讀地址是整個(gè)交織器設(shè)計(jì)部分的關(guān)鍵,采用“亂序讀出”的方式。電路設(shè)計(jì)主要由加法、乘法器,計(jì)數(shù)器和比較器模塊構(gòu)成,其地址序列產(chǎn)生流程在算法分析中已作過詳細(xì)說明,這里只作簡單介紹:計(jì)數(shù)器Ⅰ相當(dāng)于變量j,首先在時(shí)間脈沖cp的驅(qū)動(dòng)下從初始狀態(tài)“00000000”開始遞增計(jì)數(shù),當(dāng)?shù)扔谠O(shè)定交織深度m時(shí),產(chǎn)生一個(gè)時(shí)鐘脈沖信號(hào)來驅(qū)動(dòng)計(jì)數(shù)器Ⅱ,此時(shí)計(jì)數(shù)器Ⅱ的計(jì)數(shù)加一,同時(shí)與另一設(shè)定數(shù)據(jù)n進(jìn)行比較,當(dāng)相等時(shí)計(jì)數(shù)器Ⅰ、Ⅱ同時(shí)清0,重新開始計(jì)數(shù)。
讀地址產(chǎn)生結(jié)果由數(shù)據(jù)n與計(jì)數(shù)器Ⅰ每次的輸出數(shù)據(jù)相乘,再與計(jì)數(shù)器Ⅱ的計(jì)數(shù)數(shù)據(jù)相加而得到。產(chǎn)生的序列依次為:0,n,2n,…,(m-1)n,1,n+1,2n+1,…,(m-1)n+1,2,…,mn-1.
2.3 寫地址序列產(chǎn)生器設(shè)計(jì)
交織器采用“順序?qū)懭?rdquo;的寫地址方式,即產(chǎn)生“0,1,2 …,mn-1”的順序地址序列。因此寫地址序列產(chǎn)生器的實(shí)現(xiàn)可由乘法器,比較器和計(jì)數(shù)器等宏單元模塊構(gòu)成(如圖4所示),寫地址具體產(chǎn)生說明如下:
首先8位計(jì)數(shù)器在時(shí)鐘脈沖cp的驅(qū)動(dòng)下由初始狀態(tài)“00000000”開始遞增計(jì)數(shù),產(chǎn)生的計(jì)數(shù)數(shù)據(jù)分成兩路:一路送到雙端口RAM的寫地址端,作為交織器的寫地址產(chǎn)生信號(hào);另一路則送到比較器的一個(gè)輸入端,同乘法器輸出的結(jié)果進(jìn)行比較:當(dāng)計(jì)數(shù)器累計(jì)計(jì)數(shù)值小于乘法器計(jì)算結(jié)果時(shí),計(jì)數(shù)器繼續(xù)累加計(jì)數(shù);而當(dāng)計(jì)數(shù)值等于乘法器的計(jì)算結(jié)果時(shí),比較器產(chǎn)生中斷控制信號(hào)使得計(jì)數(shù)器清0,并重新開始計(jì)數(shù)。
2.4 讀寫使能控制設(shè)計(jì)
考慮到雙端口RAM對(duì)其內(nèi)部同一單元地址不能同時(shí)進(jìn)行讀寫操作,因此,整個(gè)交織器設(shè)計(jì)需用讀寫使能控制電路用來對(duì)雙端口RAM的地址讀寫進(jìn)行控制,并同時(shí)決定讀寫發(fā)生器何時(shí)開始工作。由于雙端口RAM的讀、寫實(shí)現(xiàn)都是從零地址開始的,因而RAM內(nèi)的每個(gè)存儲(chǔ)單元的讀操作都應(yīng)在寫操作之后,從而保證每個(gè)讀出數(shù)據(jù)的有效性。
讀寫使能控制電路如圖5所示,讀寫控制電路采用類似于分頻器原理[4]的工作方式,電路主要由計(jì)數(shù)器、比較器和D觸發(fā)器來實(shí)現(xiàn):計(jì)數(shù)器與n m比較的結(jié)果作為D觸發(fā)器的時(shí)鐘脈沖信號(hào),當(dāng)計(jì)數(shù)器的計(jì)數(shù)值等于n m時(shí),觸發(fā)器的輸出狀態(tài)進(jìn)行一次反轉(zhuǎn),即相當(dāng)于構(gòu)成了一個(gè)n m的分頻器電路。觸發(fā)器的輸出結(jié)果分成兩路:一路送到雙端口RAM的寫地址使能端;另一路經(jīng)過反相后送給讀地址使能端。這樣便可以使存儲(chǔ)器RAM在“n m”的地址空間范圍內(nèi)交替進(jìn)行“讀/寫”數(shù)據(jù)的操作。
2.5 設(shè)計(jì)中的遇到的問題及解決辦法
交織器的設(shè)計(jì)中包含的運(yùn)算有相乘和相加,相乘會(huì)造成字長的變化。這便會(huì)帶來數(shù)據(jù)位數(shù)匹配的問題,下面我們以讀地址電路(圖4)為例給出解決辦法:
進(jìn)入乘法器的兩路數(shù)據(jù)均為8位,經(jīng)過乘法運(yùn)算后,數(shù)據(jù)位數(shù)會(huì)增加到16位,同時(shí)需要與來自計(jì)數(shù)器Ⅱ的8位數(shù)據(jù)進(jìn)行加法運(yùn)算。通常情況下多采取舍入或截尾的方法,即將16位數(shù)據(jù)的高8位字節(jié)舍去,這種方法的不足是當(dāng)m、n的乘積大于256(11111111H)時(shí),數(shù)據(jù)的高8位不全為0,舍去會(huì)帶來輸出結(jié)果的錯(cuò)誤,因而可能造成交織器輸出碼字的錯(cuò)誤。因此,可采用“補(bǔ)位”的辦法,將輸入加法器的8位數(shù)據(jù)補(bǔ)成16位(在8位數(shù)據(jù)前補(bǔ)8位0),以增長位寬從而達(dá)到數(shù)位匹配的目的。
3 QuartusⅡ仿真結(jié)果及分析
交織器的仿真波形如圖6所示(其中“clk”為驅(qū)動(dòng)時(shí)鐘,“rden”、“wren”為讀、寫使能,“data”、“result”為輸入、輸出雙端口RAM的數(shù)據(jù)序列):
從QuartusⅡ波形仿真結(jié)果看到當(dāng)交織矩陣的m,n值為5和3時(shí),雙口RAM的輸出數(shù)據(jù)為“0、5、10、1、6…”;當(dāng)m,n調(diào)整為8和6后,雙口RAM的輸出為“0、8、16、24…”??梢钥闯?,在任意選取不同的m值和n值后,交織器能夠根據(jù)分組交織的原理將輸入RAM的數(shù)據(jù)字或比特位流進(jìn)行交織,輸出所需的數(shù)據(jù)序列,達(dá)到了交織矩陣深度和寬度可控的目的。
4 小結(jié)
本文介紹了可針對(duì)不同交織需要的改進(jìn)型分組交織器FPGA設(shè)計(jì),該交織器的主要特點(diǎn)是可根據(jù)信道中突發(fā)誤碼的長度、出現(xiàn)的頻率以及糾錯(cuò)碼的約束長度、糾錯(cuò)能力設(shè)定合適的交織深度和寬度(m,n),需要指出的是,m,n選得越大,信道編碼的約束長度越大,從而對(duì)付信道中長突發(fā)差錯(cuò)的能力也就越強(qiáng),但m,n選得越大,也就需要越大的存儲(chǔ)空間,同時(shí)會(huì)引入更長的延時(shí),所以應(yīng)根據(jù)數(shù)字通信系統(tǒng)的實(shí)際情況選擇合適的m值和n值。
本文作者創(chuàng)新點(diǎn):對(duì)傳統(tǒng)分組交織器進(jìn)行了改進(jìn),實(shí)現(xiàn)了分組交織器的交織矩陣深度和寬度可控,能夠很好的滿足不同數(shù)據(jù)幀傳輸?shù)囊?,具有更好的抗信道突發(fā)錯(cuò)誤的能力。
參考文獻(xiàn):
[1]BERROU C, GLAVIEUX A, THITIMAJSHIMA P. Near Shannon limit error-correcting coding and decoding: turbo-codes [A]. Proceedings of ICC’93 [C]. Geneva, Switzerland, May 1993. 1064—1070
[2]趙光玲 吳樂南.幾種用于Turbo碼的交織器分析[J].應(yīng)用科學(xué)學(xué)報(bào),2002,20(1):38—41
[3]崔曉峰.《Turbo碼交織器的應(yīng)用研究》。天津大學(xué)碩士論文,2003,25—31
[4]褚振勇 齊亮.FPGA設(shè)計(jì)及應(yīng)用(第二版). 西安:西安電子科技大學(xué)出版社,2006
[5]邱金剛 焦耀斌. Turbo編碼中交織器的設(shè)計(jì)應(yīng)用[J].微計(jì)算機(jī)信息,2004,20-12:138-139。
[6]高有堂.EDA技術(shù)及應(yīng)用實(shí)踐[M].北京:清華大學(xué)出版社,2006