LS碼及其FPGA的實(shí)現(xiàn)
0 引 言
眾所周知,在二元域、有限域以及復(fù)數(shù)域都不存在理想的地址碼,如m序列、Gold序列以及Walsh碼的相關(guān)性都不理想,這使得采用傳統(tǒng)擴(kuò)頻碼的CDMA系統(tǒng)是一個(gè)自干擾系統(tǒng),需要采用聯(lián)合檢測技術(shù)、智能天線技術(shù)以及更復(fù)雜的功率控制技術(shù)來抵抗ISI(碼間干擾)、MAI(多址干擾)以及ACI(鄰小區(qū)干擾)。LS(Loose Synchronized)碼是由李道本教授發(fā)明的新型地址碼,它利用互補(bǔ)碼特性突破了Welch界的限制,構(gòu)造出了具有零相關(guān)特性的地址碼。只要“零相關(guān)窗”覆蓋了多徑時(shí)延,那么ISI和MAI都是不存在的。這樣就將一個(gè)傳統(tǒng)的通信系統(tǒng)從干擾受限轉(zhuǎn)換為噪聲受限系統(tǒng),也就是說,整個(gè)系統(tǒng)只受到噪聲的干擾,而且具有很高的頻譜效率和數(shù)據(jù)傳輸速率。無需聯(lián)合檢測技術(shù)和智能天線技術(shù),只需簡單的功率控制技術(shù),因此可以說,LS碼是一項(xiàng)突破性的技術(shù)。
今天,FPGA在消費(fèi)、汽車和工業(yè)領(lǐng)域的應(yīng)用經(jīng)歷了爆炸式的增長,F(xiàn)PGA可以用于軟件無線電、雷達(dá)、影像、片上系統(tǒng)(SoC)和其他數(shù)字信號(hào)處理領(lǐng)域。LS碼在FPGA中實(shí)現(xiàn)擴(kuò)頻和解擴(kuò)不僅具有很高的靈活性而且還有較好的數(shù)據(jù)傳輸可靠性,本文首先簡單介紹了LS碼的概念和構(gòu)造原理,然后詳細(xì)介紹了LS碼擴(kuò)頻和解擴(kuò)在工程上的實(shí)現(xiàn)。
1 LS碼的構(gòu)造和性質(zhì)
LS碼由C碼和S碼構(gòu)成,圖1是LS碼的樹形構(gòu)造法,除了樹形結(jié)構(gòu)生成方法外,還有多項(xiàng)式生成法、與聯(lián)合檢測相結(jié)合的組間零相關(guān)窗LS碼構(gòu)造法以及Kronecker內(nèi)積法等,這些方法所生成的LS碼都具有零相關(guān)窗的特性。
C碼和S碼各自的自相關(guān)值和互相關(guān)值在一定范圍內(nèi)大小相等、極性相反,因此它們的和在這個(gè)范圍內(nèi)為0,通常把相關(guān)值為零的范圍稱為“零相關(guān)窗”,在零相關(guān)窗內(nèi)各地址碼的自相關(guān)函數(shù)及互相關(guān)函數(shù)沒有副峰。
LS碼的自相關(guān)特性如圖2所示,從圖中可以看出,LS碼的自相關(guān)的副峰值除了原點(diǎn)外處處為0。由于LS碼的特性,任意兩個(gè)碼字之間的“零相關(guān)窗”長度并不相同。圖3是LS碼的互相關(guān)特性,可以看出,LS碼的互補(bǔ)互相關(guān)性在原點(diǎn)周圍的一定范圍內(nèi)為0,這個(gè)范圍也就是所謂的“零相關(guān)窗”,所選的兩個(gè)LS碼字的“零相關(guān)窗”長度為127。
2 LS碼在FPGA中的實(shí)現(xiàn)
和一般的FPGA開發(fā)過程一樣,LS碼在FPGA中的實(shí)現(xiàn)需要經(jīng)過可行性分析、算法驗(yàn)證、設(shè)計(jì)輸入、仿真和下載測試幾個(gè)過程。針對(duì)某個(gè)軟件無線電平臺(tái)的要求,可以合理地設(shè)計(jì)碼速率和碼長,擴(kuò)頻前的碼速率為64 Kb/s,C碼和S碼的長度都為16,擴(kuò)頻后的碼速率為1.024 Mb/s。
2.1 LS碼的實(shí)現(xiàn)算法
為了提高FPGA的處理效率,采用查找表的形式,首先生成了長度為16的C碼和S碼,生成碼的算法是基于圖1的樹形結(jié)構(gòu),C碼和S碼關(guān)系為:
式中:n為C碼和S碼每一位的位置編號(hào),N為碼長。表1是所生成的長度為16,個(gè)數(shù)也為16的C碼。S碼可以根據(jù)式(1)求得,限于篇幅,這里不再單獨(dú)列出,實(shí)驗(yàn)中只選取了表1中序號(hào)為1的一組C碼和相應(yīng)的S碼作為查找表使用。
2.2 設(shè)計(jì)輸入和仿真
FPGA的設(shè)計(jì)輸入有多種表達(dá)方式,最常用的是原理圖方式和HDL文本方式,這里采用的是混合輸入方式,首先采用Verilog HDL的文本輸入方式將算法做成模塊,然后再通過原理圖的方式定義連接和接口,這樣不僅使得邏輯描述性、可重用性和移植性強(qiáng),而且使得接口描述和連接關(guān)系清晰、直觀。圖4是所設(shè)計(jì)的原理圖結(jié)構(gòu),為了表示清楚,只截取了C碼的擴(kuò)頻和解擴(kuò)模塊,其中spread C_part是C碼的擴(kuò)頻模塊,Baud_parr和serial_out模塊的輸出分別為并行輸出和串行輸出,這樣做的目的是為了方便之后其他算法功能模塊的輸入,如果后面要加入例如調(diào)制、波形成型之類的模塊,就可以方便地選擇并行輸入或者串行輸入,提高了設(shè)計(jì)的靈活性。receiveC_parr為C碼的并行解擴(kuò)模塊,這里只考慮了對(duì)Baud_parr所輸出的并行數(shù)據(jù)進(jìn)行解擴(kuò),這樣能提高接收端的處理效率。輸入端口SCLK為32.768 MHz的時(shí)鐘,輸出端口SERIAL C為seri al_out模塊的串行輸出,Cout為receiveCparr模塊的解擴(kuò)輸出。
在設(shè)計(jì)中,spreadC_part模塊的擴(kuò)頻輸出速率并不是所需的碼速率,而是經(jīng)過Baud_parr和serial_out模塊后再構(gòu)成所需的碼速率。
當(dāng)完成設(shè)計(jì)輸入后,就需要對(duì)所設(shè)計(jì)的算法進(jìn)行時(shí)序仿真,驗(yàn)證算法的正確性。圖5的時(shí)序圖是采用ModelSim對(duì)C碼的擴(kuò)頻模塊spreadC_part、擴(kuò)頻的并行輸出模塊Baud_parr、串行輸出模塊serial_out以及并行解擴(kuò)模塊receiveC_parr所進(jìn)行的仿真時(shí)序。如圖5所示,Baud16x是一個(gè)1.024 MHz的時(shí)鐘,INDATA是速率為64 Kb/s的輸入碼元、D C(15:0)為spreadC_part模塊輸出的擴(kuò)頻數(shù)據(jù)。注意到此時(shí)的D_c(15:0)為總線結(jié)構(gòu)的16位數(shù)據(jù),速率為Baud16x/8=128 Kb/s,在空閑時(shí)刻輸出的都是0,這個(gè)數(shù)據(jù)輸入到Baud_parr模塊和seriaI_out模塊。SC(15:0)和SERIAL_C分別對(duì)應(yīng)這兩個(gè)模塊的并行輸出和串行輸出??梢钥闯鯯C(15:0)是16位總線數(shù)據(jù),速率為1.024 Mb/s,SERIAL_C的串行數(shù)據(jù)速率也為1.024.Mb/s。Cout為將SC(15:0)的并行數(shù)據(jù)解擴(kuò)后恢復(fù)出來的碼元,可以看出,Cout正確地恢復(fù)出了IN-DATA的碼元。
3 FPGA的下載測試
完成了設(shè)計(jì)輸入和仿真后,就可以進(jìn)行FPGA的下載測試,所針對(duì)的是基于Xilinx Spartan2S-300E的FPGA芯片的硬件環(huán)境。圖6~圖8是使用FLUKE199C型示波器觀測到的波形。其中,圖6是C碼和S碼分別擴(kuò)頻后的串行模塊serial_out輸出,圖中的每一虛線單元格對(duì)應(yīng)10 μs,可以粗略算出此時(shí)的串行速率大約為1 Mb/s,與所需1.024 Mb/s基本吻合。
圖7和圖8分別是C碼和S碼解擴(kuò)后的輸出與原始的數(shù)據(jù)碼元IN的比較,可以大致估算出Cout和Sout的數(shù)據(jù)速率大約為64 Kb/s,測試結(jié)果表明所設(shè)計(jì)正確,硬件平臺(tái)運(yùn)行穩(wěn)定。
4 結(jié) 語
本文通過對(duì)LS碼在FPGA中的實(shí)現(xiàn)進(jìn)行了研究,介紹了LS碼的構(gòu)造和相關(guān)性,主要介紹了LS碼構(gòu)造的算法驗(yàn)證,F(xiàn)PGA的設(shè)計(jì)輸入、仿真以及下載測試,仿真和測試的結(jié)果表明所設(shè)計(jì)的輸出正確,達(dá)到了預(yù)期的目的。今后的工作主要包括LS碼在FPGA中的調(diào)制、解調(diào)、同步等算法的實(shí)現(xiàn)。