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