《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > TD_SCDMA系統(tǒng)中TFCI譯碼在ZSP500 DSP內(nèi)核上的實現(xiàn)

TD_SCDMA系統(tǒng)中TFCI譯碼在ZSP500 DSP內(nèi)核上的實現(xiàn)

《電子技術(shù)應(yīng)用》2007年第1期
2007-10-30
作者:文 虹,申 敏,趙靜娟

摘 要: 介紹一種由快速哈達(dá)碼變換與超碼譯碼結(jié)合實現(xiàn)的譯碼算法" title="譯碼算法">譯碼算法,該算法能降低TFCI的誤碼率,是一種簡單有效的方法。在分析此譯碼算法的基礎(chǔ)上,詳細(xì)闡述了基于ZSP500 DSP內(nèi)核的實現(xiàn)方法,并給出了程序?qū)崿F(xiàn)的具體步驟。
關(guān)鍵詞: TFCI? ZSP500? 快速哈達(dá)碼變換

在TD_SCDMA系統(tǒng)中,傳輸格式組合指示TFCI(Transport Format Combination Indicatorl)描述了當(dāng)前的傳輸格式組合。一個特定的TFCI值與一種特定的傳輸格式組合具有一一對應(yīng)的關(guān)系。一旦檢測到TFCI,就可知道各個傳輸信道的傳輸格式,包括傳輸塊大小、編碼類型等信息。因此TFCI是信道譯碼過程中非常重要的參數(shù),保證了TFCI譯碼的正確性,才能保證信道譯碼的正確。
ZSP500 DSP內(nèi)核是一種可編程的高性能處理器,不僅適用于數(shù)字信號處理,而且在圖像處理、語音處理、通信等領(lǐng)域都得到了廣泛應(yīng)用。具有低成本、低功耗、高性能的處理能力,因此以其作為核心的智能控制器是智能化制造技術(shù)的發(fā)展方向。它的出現(xiàn)也使TFCI譯碼的實現(xiàn)變得更為方便。
1 TFCI譯碼算法設(shè)計
1.1 TFCI譯碼分析
TFCI在各自物理信道的數(shù)據(jù)部分發(fā)送。編碼后的TFCI符號在子幀內(nèi)和數(shù)據(jù)塊內(nèi)均勻分布。已編碼的TFCI符號平均地分配到兩個子幀中相應(yīng)的數(shù)據(jù)部分,緊挨著Midamble發(fā)送。所在位置如圖1所示。

?


在3GPP標(biāo)準(zhǔn)中規(guī)定了三種不同的編碼方案:極短TFCI(1~2位),較短TFCI(3~5位),較長TFCI(6~10位)。
最優(yōu)的TFCI譯碼算法是窮舉法,即將所有碼字進(jìn)行編碼,與譯碼輸出端的數(shù)據(jù)相比較,找出最相似的一個作為譯碼結(jié)果。該方法存在兩大問題,一是在實際環(huán)境中,譯碼端輸入的是經(jīng)傳輸信道的數(shù)據(jù),即加干擾后的數(shù)據(jù),該數(shù)據(jù)與原始碼字編碼后的數(shù)據(jù)比較勢必存在較大誤碼率;二是對較長TFCI,其所有碼字的可能組合為210=1024,也就是說采用窮舉法譯碼時,需存儲1024個數(shù)據(jù),這不僅影響運算速度,而且耗費存儲空間。
對于較短TFCI采用一階RM(Reed-Muller)編碼,因此可采用FHT(快速哈達(dá)瑪變換)直接譯碼[1]。關(guān)于RM的定義見參考文獻(xiàn)[1]。較長TFCI采用了加掩碼的一階RM編碼,是一種超碼,即以一階RM碼為基礎(chǔ)碼集的陪集串。本文討論的正是這種較長TFCI的譯碼算法,包括對雙極性" title="雙極性">雙極性序列的變換、基礎(chǔ)碼集的譯碼以及去除掩碼的處理過程。
1.2 TFCI譯碼
較長TFCI是采用基礎(chǔ)碼集加陪集串的編碼方式構(gòu)成的超碼。其編碼生成矩陣就是以一階RM(1,6)為基礎(chǔ)碼集,加上16個掩碼(包括全零向量)為陪集的編碼方式。相應(yīng)地,較長TFCI可采用超碼譯碼法[2]。超碼譯碼原理:第一步,在接收的雙" title="的雙">的雙極性碼字中依次乘雙極性化后的掩碼集,以此消除掩碼;第二步,對消除掩碼的碼字采用基礎(chǔ)碼集的譯碼算法,在此即為一階RM碼的FHT;第三步,譯出碼字和相應(yīng)的陪集表示,確定出最后的譯碼信息。所以較長TFCI譯碼主要分為消除掩碼和基礎(chǔ)碼集譯碼兩部分。其譯碼結(jié)構(gòu)如圖2所示。

?


1.2.1 消除掩碼
陪集是編碼生成矩陣的后四列組成的四維空間,即16個掩碼(包括全零向量)為陪集所表示的陪集串序列。研究分析得知,對較長TFCI譯碼,首先要進(jìn)行數(shù)據(jù)調(diào)整,即譯碼輸入的原第31個數(shù)據(jù)調(diào)整為現(xiàn)第1個數(shù)據(jù),原第32個數(shù)據(jù)調(diào)整為現(xiàn)第17個數(shù)據(jù),原第l~l5個數(shù)據(jù)調(diào)整為現(xiàn)第2~16個數(shù)據(jù),原第l6~30個數(shù)據(jù)調(diào)整為現(xiàn)第18~32個數(shù)據(jù)。然后對調(diào)整后的數(shù)據(jù)(即雙極性序列r)進(jìn)行去除掩碼的處理。在去除掩碼過程中,首先根據(jù)生成矩陣的后4列(基本掩碼序列)的線性組合得出整個掩碼集,然后將掩碼集雙極性化,最后用接收的雙極性碼字依次乘前面雙極性化后的掩碼集。這樣,就完成了去除掩碼的處理。
1.2.2 基礎(chǔ)碼集譯碼
由參考文獻(xiàn)[2]可得出,TFCI編碼的生成矩陣的前6列就是RM′(1,6)的變形。其變形順序是將RM′(1,6)的倒數(shù)第二列放到第一列,倒數(shù)第一列放到第16列。所以,譯碼時必須變化輸入序列,以適應(yīng)譯碼矩陣。變換后得到的數(shù)據(jù)即雙極性序列,需要進(jìn)行FHT變換,然后再通過存儲與比較進(jìn)行譯碼,才能得到二進(jìn)制信息序列m。
具體的軟判決步驟如下:
(1)將譯碼輸入端的雙極性信息與雙極性MASKi序列相乘,進(jìn)行消掩處理,得到序列c(雙極性形式);較短TFCI相當(dāng)于MASKi為0。
(2)對序列c進(jìn)行FHT變換,得到矩陣G;較短TFCI得到一個1*N的矩陣。
(3)在得到的矩陣G中尋找y的最大絕對值,得到最大值的行號" title="行號">行號p和列號q。
(4)較短TFCI譯碼結(jié)果為最大值的列號q的二進(jìn)制形式。較長TFCI譯碼還要進(jìn)行下列步驟:譯碼原信息的第一位根據(jù)y的正負(fù)進(jìn)行判斷。當(dāng)y為正時,原信息的首位為0;當(dāng)y為負(fù)時,原信息的首位為1。
(5)譯碼原信息的第2~6位為最大值列號q的二進(jìn)制形式。
(6)譯碼原信息的第7~10位即最大值行號p的二進(jìn)制形式。
2 TFCI譯碼實現(xiàn)流程設(shè)計
ZSP500內(nèi)核以獨有的高效面積、極低功耗、一流代碼密度、實現(xiàn)四MAC的性能等優(yōu)點成為高帶寬3G頻帶處理和豐富多媒體應(yīng)用的理想選擇。其處理單元主要包括預(yù)取單元(PFU)、指令單元(ISU)、管線控制單元(PCU)、算術(shù)邏輯單元(ALU)等。結(jié)構(gòu)框圖如圖3所示。

?


ZSP500強(qiáng)大而簡練的指令集減少了開發(fā)時間,運行頻率為250MHz。一個基于ZSP500的設(shè)備的處理能力可達(dá)1 000MIPS。ZSP500具有兩個專有的地址生成單元(AGU),可以驅(qū)動各自專有的裝載/存儲端口,可在每個周期內(nèi)完成兩次裝載兩次存儲,或一次裝載一次存儲。每個數(shù)據(jù)端口都是32位寬,因此每個周期內(nèi)一共可以完成64位(4個字)的數(shù)據(jù)傳輸。另外PFU中還有一個跳轉(zhuǎn)預(yù)測邏輯,能夠提供zero-overhead循環(huán),產(chǎn)生高效的跳轉(zhuǎn)和調(diào)用。使用靜態(tài)分組規(guī)則決定每個時鐘周期" title="時鐘周期">時鐘周期執(zhí)行的指令條數(shù),在程序員邏輯上正確編寫代碼可保證多條指令并行執(zhí)行,提高了效率。
較長TFCI譯碼實現(xiàn)時,可以從兩方面簡化和提高執(zhí)行效率。
(1)采用FHT算法減少運算量
理論上,F(xiàn)HT將Hadamard矩陣分解為稀疏矩陣的乘積[3]。具體實現(xiàn)與FFT類似,采用蝶形變換,只是沒有乘法運算。Hadamard變換是一個線性變換,其主要優(yōu)點是所需空間小、運算速度快。在用ZSP實現(xiàn)時,只需存儲一個一階Hadamard矩陣,并且還可采用FHT算法減少運算量。由此看出,采用Hadamard變換對TFCI進(jìn)行譯碼具有可行性。
FHT算法與FFT算法類似,采用蝶形變換。但是在ZSP500中沒有提供類似TI C55xDSP中的ADDSUB指令,用一個機(jī)器時鐘同時對兩個寄存器進(jìn)行加減。所以只能按下列代碼分別執(zhí)行,對執(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中有兩個16位的算術(shù)邏輯單元ALU,一個32位的乘累加單元MAU。在指令操作中先使用ALU,再使用MAU便可實現(xiàn)并行處理。另需注意,根據(jù)實際調(diào)試經(jīng)驗,發(fā)現(xiàn)sub、add兩條指令是否能同時在一個時鐘周期中執(zhí)行,與調(diào)用順序有關(guān)。若先調(diào)用sub就可以,反之則不行??紤]了以上因素,使指令開銷大為節(jié)省。
(2)消除掩碼的簡化過程
較長TFCI譯碼需要消除掩碼和尋找最大值行號與列號等步驟。消除掩碼首先要列出所有可能的掩碼輸入,再讓輸入序列b與之相乘,即可消除掩碼。根據(jù)此方法需要用到大量的乘法和加法運算,而且掩碼矩陣固定不變。所以應(yīng)事先做好一張消掩表,通過查表來完成。這樣可以節(jié)省大量的時間和資源。
做一張消掩的矩陣表M(16×32);輸入序列b中每個元素均需查表,看是否要取反(0表示要取反)。這樣就完成了c=b×M運算。
ZSP500 的相鄰?fù)ㄓ眉拇嫫骺梢赃B到一起,形成32位的寄存器,而且可以一次性讀取32位。在讀取掩碼矩陣M時,利用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
本文從以下幾個方面對ZSP程序進(jìn)行了優(yōu)化: 第一,ZSP500是雙40位ALU結(jié)構(gòu), 一個時鐘周期內(nèi)可以完成4次16位加法;第二,總線寬32位,一次可以讀取或保存兩個16位操作數(shù); 第三,ZSP500具有數(shù)據(jù)處理和數(shù)據(jù)存取的并行處理能力。一條并行指令包括一次ALU/MAC操作和兩次輔助操作;第四,合理安排執(zhí)行順序,盡量減小循環(huán)體內(nèi)的指令數(shù)。
本文重點分析了TFCI譯碼的算法原理,并給出了ZSP的實現(xiàn)過程以及優(yōu)化方法。TFCI是信道譯碼過程中非常重要的參數(shù),只有在TFCI譯碼正確的前提下,才能保證信道譯碼的正確,因此本文對于實際的信道譯碼過程具有一定的實用價值。
參考文獻(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.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。