摘 要: 介紹一種由快速哈達(dá)碼變換與超碼譯碼結(jié)合實(shí)現(xiàn)的譯碼算法" title="譯碼算法">譯碼算法,該算法能降低TFCI的誤碼率,是一種簡(jiǎn)單有效的方法。在分析此譯碼算法的基礎(chǔ)上,詳細(xì)闡述了基于ZSP500 DSP內(nèi)核的實(shí)現(xiàn)方法,并給出了程序?qū)崿F(xiàn)的具體步驟。
關(guān)鍵詞: TFCI? ZSP500? 快速哈達(dá)碼變換
在TD_SCDMA系統(tǒng)中,傳輸格式組合指示TFCI(Transport Format Combination Indicatorl)描述了當(dāng)前的傳輸格式組合。一個(gè)特定的TFCI值與一種特定的傳輸格式組合具有一一對(duì)應(yīng)的關(guān)系。一旦檢測(cè)到TFCI,就可知道各個(gè)傳輸信道的傳輸格式,包括傳輸塊大小、編碼類(lèi)型等信息。因此TFCI是信道譯碼過(guò)程中非常重要的參數(shù),保證了TFCI譯碼的正確性,才能保證信道譯碼的正確。
ZSP500 DSP內(nèi)核是一種可編程的高性能處理器,不僅適用于數(shù)字信號(hào)處理,而且在圖像處理、語(yǔ)音處理、通信等領(lǐng)域都得到了廣泛應(yīng)用。具有低成本、低功耗、高性能的處理能力,因此以其作為核心的智能控制器是智能化制造技術(shù)的發(fā)展方向。它的出現(xiàn)也使TFCI譯碼的實(shí)現(xiàn)變得更為方便。
1 TFCI譯碼算法設(shè)計(jì)
1.1 TFCI譯碼分析
TFCI在各自物理信道的數(shù)據(jù)部分發(fā)送。編碼后的TFCI符號(hào)在子幀內(nèi)和數(shù)據(jù)塊內(nèi)均勻分布。已編碼的TFCI符號(hào)平均地分配到兩個(gè)子幀中相應(yīng)的數(shù)據(jù)部分,緊挨著Midamble發(fā)送。所在位置如圖1所示。
?
在3GPP標(biāo)準(zhǔn)中規(guī)定了三種不同的編碼方案:極短TFCI(1~2位),較短TFCI(3~5位),較長(zhǎng)TFCI(6~10位)。
最優(yōu)的TFCI譯碼算法是窮舉法,即將所有碼字進(jìn)行編碼,與譯碼輸出端的數(shù)據(jù)相比較,找出最相似的一個(gè)作為譯碼結(jié)果。該方法存在兩大問(wèn)題,一是在實(shí)際環(huán)境中,譯碼端輸入的是經(jīng)傳輸信道的數(shù)據(jù),即加干擾后的數(shù)據(jù),該數(shù)據(jù)與原始碼字編碼后的數(shù)據(jù)比較勢(shì)必存在較大誤碼率;二是對(duì)較長(zhǎng)TFCI,其所有碼字的可能組合為210=1024,也就是說(shuō)采用窮舉法譯碼時(shí),需存儲(chǔ)1024個(gè)數(shù)據(jù),這不僅影響運(yùn)算速度,而且耗費(fèi)存儲(chǔ)空間。
對(duì)于較短TFCI采用一階RM(Reed-Muller)編碼,因此可采用FHT(快速哈達(dá)瑪變換)直接譯碼[1]。關(guān)于RM的定義見(jiàn)參考文獻(xiàn)[1]。較長(zhǎng)TFCI采用了加掩碼的一階RM編碼,是一種超碼,即以一階RM碼為基礎(chǔ)碼集的陪集串。本文討論的正是這種較長(zhǎng)TFCI的譯碼算法,包括對(duì)雙極性" title="雙極性">雙極性序列的變換、基礎(chǔ)碼集的譯碼以及去除掩碼的處理過(guò)程。
1.2 TFCI譯碼
較長(zhǎng)TFCI是采用基礎(chǔ)碼集加陪集串的編碼方式構(gòu)成的超碼。其編碼生成矩陣就是以一階RM(1,6)為基礎(chǔ)碼集,加上16個(gè)掩碼(包括全零向量)為陪集的編碼方式。相應(yīng)地,較長(zhǎng)TFCI可采用超碼譯碼法[2]。超碼譯碼原理:第一步,在接收的雙" title="的雙">的雙極性碼字中依次乘雙極性化后的掩碼集,以此消除掩碼;第二步,對(duì)消除掩碼的碼字采用基礎(chǔ)碼集的譯碼算法,在此即為一階RM碼的FHT;第三步,譯出碼字和相應(yīng)的陪集表示,確定出最后的譯碼信息。所以較長(zhǎng)TFCI譯碼主要分為消除掩碼和基礎(chǔ)碼集譯碼兩部分。其譯碼結(jié)構(gòu)如圖2所示。
?
1.2.1 消除掩碼
陪集是編碼生成矩陣的后四列組成的四維空間,即16個(gè)掩碼(包括全零向量)為陪集所表示的陪集串序列。研究分析得知,對(duì)較長(zhǎng)TFCI譯碼,首先要進(jìn)行數(shù)據(jù)調(diào)整,即譯碼輸入的原第31個(gè)數(shù)據(jù)調(diào)整為現(xiàn)第1個(gè)數(shù)據(jù),原第32個(gè)數(shù)據(jù)調(diào)整為現(xiàn)第17個(gè)數(shù)據(jù),原第l~l5個(gè)數(shù)據(jù)調(diào)整為現(xiàn)第2~16個(gè)數(shù)據(jù),原第l6~30個(gè)數(shù)據(jù)調(diào)整為現(xiàn)第18~32個(gè)數(shù)據(jù)。然后對(duì)調(diào)整后的數(shù)據(jù)(即雙極性序列r)進(jìn)行去除掩碼的處理。在去除掩碼過(guò)程中,首先根據(jù)生成矩陣的后4列(基本掩碼序列)的線(xiàn)性組合得出整個(gè)掩碼集,然后將掩碼集雙極性化,最后用接收的雙極性碼字依次乘前面雙極性化后的掩碼集。這樣,就完成了去除掩碼的處理。
1.2.2 基礎(chǔ)碼集譯碼
由參考文獻(xiàn)[2]可得出,TFCI編碼的生成矩陣的前6列就是RM′(1,6)的變形。其變形順序是將RM′(1,6)的倒數(shù)第二列放到第一列,倒數(shù)第一列放到第16列。所以,譯碼時(shí)必須變化輸入序列,以適應(yīng)譯碼矩陣。變換后得到的數(shù)據(jù)即雙極性序列,需要進(jìn)行FHT變換,然后再通過(guò)存儲(chǔ)與比較進(jìn)行譯碼,才能得到二進(jìn)制信息序列m。
具體的軟判決步驟如下:
(1)將譯碼輸入端的雙極性信息與雙極性MASKi序列相乘,進(jìn)行消掩處理,得到序列c(雙極性形式);較短TFCI相當(dāng)于MASKi為0。
(2)對(duì)序列c進(jìn)行FHT變換,得到矩陣G;較短TFCI得到一個(gè)1*N的矩陣。
(3)在得到的矩陣G中尋找y的最大絕對(duì)值,得到最大值的行號(hào)" title="行號(hào)">行號(hào)p和列號(hào)q。
(4)較短TFCI譯碼結(jié)果為最大值的列號(hào)q的二進(jìn)制形式。較長(zhǎng)TFCI譯碼還要進(jìn)行下列步驟:譯碼原信息的第一位根據(jù)y的正負(fù)進(jìn)行判斷。當(dāng)y為正時(shí),原信息的首位為0;當(dāng)y為負(fù)時(shí),原信息的首位為1。
(5)譯碼原信息的第2~6位為最大值列號(hào)q的二進(jìn)制形式。
(6)譯碼原信息的第7~10位即最大值行號(hào)p的二進(jìn)制形式。
2 TFCI譯碼實(shí)現(xiàn)流程設(shè)計(jì)
ZSP500內(nèi)核以獨(dú)有的高效面積、極低功耗、一流代碼密度、實(shí)現(xiàn)四MAC的性能等優(yōu)點(diǎn)成為高帶寬3G頻帶處理和豐富多媒體應(yīng)用的理想選擇。其處理單元主要包括預(yù)取單元(PFU)、指令單元(ISU)、管線(xiàn)控制單元(PCU)、算術(shù)邏輯單元(ALU)等。結(jié)構(gòu)框圖如圖3所示。
?
ZSP500強(qiáng)大而簡(jiǎn)練的指令集減少了開(kāi)發(fā)時(shí)間,運(yùn)行頻率為250MHz。一個(gè)基于ZSP500的設(shè)備的處理能力可達(dá)1 000MIPS。ZSP500具有兩個(gè)專(zhuān)有的地址生成單元(AGU),可以驅(qū)動(dòng)各自專(zhuān)有的裝載/存儲(chǔ)端口,可在每個(gè)周期內(nèi)完成兩次裝載兩次存儲(chǔ),或一次裝載一次存儲(chǔ)。每個(gè)數(shù)據(jù)端口都是32位寬,因此每個(gè)周期內(nèi)一共可以完成64位(4個(gè)字)的數(shù)據(jù)傳輸。另外PFU中還有一個(gè)跳轉(zhuǎn)預(yù)測(cè)邏輯,能夠提供zero-overhead循環(huán),產(chǎn)生高效的跳轉(zhuǎn)和調(diào)用。使用靜態(tài)分組規(guī)則決定每個(gè)時(shí)鐘周期" title="時(shí)鐘周期">時(shí)鐘周期執(zhí)行的指令條數(shù),在程序員邏輯上正確編寫(xiě)代碼可保證多條指令并行執(zhí)行,提高了效率。
較長(zhǎng)TFCI譯碼實(shí)現(xiàn)時(shí),可以從兩方面簡(jiǎn)化和提高執(zhí)行效率。
(1)采用FHT算法減少運(yùn)算量
理論上,F(xiàn)HT將Hadamard矩陣分解為稀疏矩陣的乘積[3]。具體實(shí)現(xiàn)與FFT類(lèi)似,采用蝶形變換,只是沒(méi)有乘法運(yùn)算。Hadamard變換是一個(gè)線(xiàn)性變換,其主要優(yōu)點(diǎn)是所需空間小、運(yùn)算速度快。在用ZSP實(shí)現(xiàn)時(shí),只需存儲(chǔ)一個(gè)一階Hadamard矩陣,并且還可采用FHT算法減少運(yùn)算量。由此看出,采用Hadamard變換對(duì)TFCI進(jìn)行譯碼具有可行性。
FHT算法與FFT算法類(lèi)似,采用蝶形變換。但是在ZSP500中沒(méi)有提供類(lèi)似TI C55xDSP中的ADDSUB指令,用一個(gè)機(jī)器時(shí)鐘同時(shí)對(duì)兩個(gè)寄存器進(jìn)行加減。所以只能按下列代碼分別執(zhí)行,對(duì)執(zhí)行效率有所影響。
FHT的關(guān)鍵代碼:
ld ?r4,a0
ldu??r5,a1,r8??!a1+r8
sub??r7,r4,r5
add??r6,r4,r5
stu??r6,a0,1??!r6=add result
stu??r7,a1,1??!r7=sub result
ZSP500中有兩個(gè)16位的算術(shù)邏輯單元ALU,一個(gè)32位的乘累加單元MAU。在指令操作中先使用ALU,再使用MAU便可實(shí)現(xiàn)并行處理。另需注意,根據(jù)實(shí)際調(diào)試經(jīng)驗(yàn),發(fā)現(xiàn)sub、add兩條指令是否能同時(shí)在一個(gè)時(shí)鐘周期中執(zhí)行,與調(diào)用順序有關(guān)。若先調(diào)用sub就可以,反之則不行??紤]了以上因素,使指令開(kāi)銷(xiāo)大為節(jié)省。
(2)消除掩碼的簡(jiǎn)化過(guò)程
較長(zhǎng)TFCI譯碼需要消除掩碼和尋找最大值行號(hào)與列號(hào)等步驟。消除掩碼首先要列出所有可能的掩碼輸入,再讓輸入序列b與之相乘,即可消除掩碼。根據(jù)此方法需要用到大量的乘法和加法運(yùn)算,而且掩碼矩陣固定不變。所以應(yīng)事先做好一張消掩表,通過(guò)查表來(lái)完成。這樣可以節(jié)省大量的時(shí)間和資源。
做一張消掩的矩陣表M(16×32);輸入序列b中每個(gè)元素均需查表,看是否要取反(0表示要取反)。這樣就完成了c=b×M運(yùn)算。
ZSP500 的相鄰?fù)ㄓ眉拇嫫骺梢赃B到一起,形成32位的寄存器,而且可以一次性讀取32位。在讀取掩碼矩陣M時(shí),利用ldd指令,可以提高處理效率。
消除掩碼的關(guān)鍵代碼:
ldu??? r0,a0,1?!r0=input
lddu??? r2,a1,2?!r3r2=M_tab element
bitt r3,15??!if M_tab =0, this input bit must neg
cexe (z,nu)
{
? neg? r0,r0
}
stu??? r0,a1,1
shll.e?? r2,1??!next M_tab element according next input bit
本文從以下幾個(gè)方面對(duì)ZSP程序進(jìn)行了優(yōu)化: 第一,ZSP500是雙40位ALU結(jié)構(gòu), 一個(gè)時(shí)鐘周期內(nèi)可以完成4次16位加法;第二,總線(xiàn)寬32位,一次可以讀取或保存兩個(gè)16位操作數(shù); 第三,ZSP500具有數(shù)據(jù)處理和數(shù)據(jù)存取的并行處理能力。一條并行指令包括一次ALU/MAC操作和兩次輔助操作;第四,合理安排執(zhí)行順序,盡量減小循環(huán)體內(nèi)的指令數(shù)。
本文重點(diǎn)分析了TFCI譯碼的算法原理,并給出了ZSP的實(shí)現(xiàn)過(guò)程以及優(yōu)化方法。TFCI是信道譯碼過(guò)程中非常重要的參數(shù),只有在TFCI譯碼正確的前提下,才能保證信道譯碼的正確,因此本文對(duì)于實(shí)際的信道譯碼過(guò)程具有一定的實(shí)用價(jià)值。
參考文獻(xiàn)
[1] COOKE B.Reed_Muller error correcting codes.MIT Undergraduate journal of mathematics.1999,1(6):21-26.
[2] 3GPP TS 25.222:Multiplexing and channel coding (TDD).Release 5,2004.
[3] ALEXANDER J.G,Richard D.van Nee.Efficient maximumlikelihood decodingof-ary modulated Reed-Muller codes? [J].IEEE Communications letters,1998,2(5):134.136.
[4] ZSP500 Digital signal processor Core.LSI 公司,2003.



