臧志斌,夏傳福,吳小鷗,馬 軍,傅 寧
(國網思極神往位置服務(北京)有限公司,北京 102211)
北斗三號衛星較之前兩代衛星區別不僅在于衛星組網從區域走向全球,而且在載荷、星間鏈路、激光通信等方面也有進步。另外,北斗三號系統在頻點上也做了一些調整,能夠和GPS的民用頻點兼容使用[5]。B2a是目前空間接口控制文件公開的播發民用信號之一,其調制方式兼容GPS L5。對于B2a信號的研究,不僅有利于北斗三號的推廣使用,提高定位精度,還對未來與GPS良好互操作性打下基礎[6]。
根據文獻[7],B2a信號結構如表1,包含導頻分量和數據分量雙通道調制,并且采用QPSK(10)調制方式調制在1 176.45 MHz頻點上。
B2a信號采用主碼和子碼的分層碼結構,由主碼和子碼相異或構成,子碼的碼元寬度和主碼的周期相同,子碼碼元起始時刻與主碼第一個碼元的起始時刻嚴格對齊,時序對應關系如圖1所示。

表1 B2a信號結構

圖1 主碼、子碼時序關系示意圖
B2a信號主碼的碼速率為10.23 Mcps,碼長為10 230,由兩個13級線性反饋移位寄存器通過移位和模二加生成的Gold碼擴展得到。B2a數據分量主碼、導頻分量主碼的生成多項式分別如式(1)、(2)所示:
(1)
(2)
對于不同衛星,B2a數據分量的子碼相同,采用固定的5位碼序列作為子碼,子碼序列為00010,高位先傳;B2a導頻分量的子碼碼長為100,由長度為1 021的Weil碼通過截斷得到。
由于B2a數據分量和導頻分量的主碼發生器結構類似,因此本文主要分析B2a數據分量的主碼發生器,導頻分量的主碼發生器可參考數據分量的主碼發生器。根據式(1)可以得到B2a數據分量的主碼發生器如圖2所示。與原B1I、B2I的Gold發生器不同的是[8],B2a數據分量主碼采用13級非線性移位寄存器。寄存器1的初始值與B1I、B2I的一樣,所有衛星采用相同的初始值,但是B2a寄存器的初始值與之不同,其初始值全為1;寄存器2的初始值根據不同衛星的PRN號采用不同的數值,對應的寄存器2初始值表在接口文件中給出。
B2a數據分量的子碼采用固定的5位碼序列(00010),在實現方式上可以利用在基帶中捕獲到的信號,設置歷元時,在每逢4的整數個主碼周期將主碼碼片取反(即與1異或),其他主碼周期輸出主碼碼片值不變。
“紡紗工藝設計與質量控制”課程是一門在大學三年級第六學期開設的課程,學生經過紡紗學和新型紡紗學的學習后,有了一定分析和解決問題的能力,這時候學生離畢業還有1年時間,他們考慮畢業后將要從事的工作,因此很重視自己能力的培養,學習的積極性和主動性有所提高,此時, “紡紗工藝設計與質量控制”課程采用案例教學法,可以激發學生的潛能,能夠培養學生獨立思考和動手能力,提高創新能力和工程實踐能力,培養綜合能力,進一步鍛煉學生分析和解決生產實踐過程中出現的問題[5-6]。
B2a導頻分量的子碼是采用長度為1 021的Weil碼通過截斷得到。Weil碼是一種性能優良的碼片,它的相關性能非常好,且具有相對靈活的可選序列長度[9]。Weil碼的產生是基于有限長的偽隨機序列——勒讓德序列。它的長度為質數。式(3)定義的是長度為N的勒讓德序列,對于固定長度的N,有且僅有一個勒讓德序列[10],B2a中的N代表1 021。
(3)

圖2 B2a數據分量的主碼發生器
其中,mod表示模除運算。
因此,長度為N的Weil碼序列定義如式(4)所示:
W(k;w)=L(k)⊕L((k+w)modN),k=0,1,2,…,N-1
(4)
其中,w表示兩個勒讓德序列之間的相位差。
B2a導頻分量子碼的截取方式為循環截取,即截斷序列如式(5)所示:
c(n;w;p)=W((n+p-1)mod1 021;w),n=0,…,99
(5)
其中,p為截取點,表示從Weil碼的第p位開始截取,取值范圍為1~1 021,w取值為1~510。
FPGA內有豐富的觸發器資源,非常適合移位操作。根據B2a數據分量主碼發生器框圖,可以得出g1和g2碼的實現過程,式(6)、式(7)分別表示的是g1、g2寄存器組的更新過程。
(6)
(7)
式中,C1、C2表示寄存器1、寄存器2的反饋值,c1,i、c2,i分別表示寄存器1、寄存器2第i位的內容。在主碼發生的起始時刻,寄存器1和寄存器2同步復位(寄存器1的初始值為1111111111111,寄存器2的初始值通過配置得到),而后在每一個時鐘上升沿來臨的時刻,第2~13位寄存器內容被前一位寄存器內容更新,第1位寄存器內容被反饋值更新。值得注意的是,寄存器1在8190碼片時發生截斷。
圖3所示是主碼發生器模塊的接口示意圖。為了節省FPGA ROM的容量,寄存器2的初始值在FPGA內留有接口,通過外部寄存器配置寫入;而寄存器1初始值是固定的,可以固化于FPGA內。為了后續捕獲信號時能夠調整主碼相位,在FPGA內預留有碼相位偏移接口,以及三路碼片超前碼、即時碼和滯后碼;碼片捕獲精度為半個碼片,因此主碼產生時鐘為20.46 MHz。

圖3 主碼發生器模塊接口示意圖
根據B2a子碼的結構與編碼原理,不同PRN號的衛星,它的截取點p和相位差w設置不同,對應的Weil碼是相同的。因此導頻子碼的生成關鍵在于生成Weil碼。由于Weil碼生成過程包含有模除操作,勒讓德序列基于同余理論構建,無法用簡單的電路結構實時生成。在本文中,提出一種產生B2a導頻子碼的方案,先利用軟件生成Weil碼,定義一個長度為N的一維數組L[N]并且所有元素初始化為0,k從0~N-1遍歷,求出t=k2mod 1 021,數組L在t元素處置1。
接著,把生成好的Weil碼存儲于FPGA的ROM中,生成不同PRN衛星的導頻子碼時再根據子碼參數(截取點和相位差)實時從ROM中讀取,由于導頻子碼的長度是100,因此只需循環讀取ROM中的100個值即可。B2a導頻子碼的周期是100 ms,同樣地,歷元設置后,當歷元計數到100 ms的整數倍時,開始產生導頻子碼,再與B2a導頻主碼異或,即可產生B2a導頻組合碼,如圖4所示,在導頻子碼模塊中預留有子碼發生器使能時鐘接口(sub_code_enable),在歷元滿足上述條件時,可產生導頻子碼。

圖4 導頻子碼發生器模塊
本次仿真編碼工具采用的是Quartus II 13.1sp1版本,芯片選取的是Altera EP3C120F484C7,仿真軟件采用的是Modelsim 10.1c,主碼和子碼的仿真參數均選取為PRN號為1號星的參數。
圖5給出了主碼發生器模塊的仿真波形圖。其中,B2a數據分量、導頻分量的寄存器2初始值(pilot_reg,data_reg)均設置為1000000100101,即均設置為PRN號為1號星的主碼參數,并且設置碼偏移(chip_shift)為0。
圖5中,data_code_early、data_code_prompt、data_code_late分別表示數據分量主碼的超前碼、即時碼以及滯后碼;同樣地,pilot_code_early、pilot_code_prompt、pilot_code_late分別表示導頻分量主碼的超前碼、即時碼以及滯后碼。超前碼與即時碼、即時碼與滯后碼僅相差半個碼片的寬度,因此在此分析超前碼片。dump_1ms表示一主碼周期的結束,當dump_1ms下降沿來臨之時表示新的主碼周期開始產生,從圖中可看出產生的數據分量主碼和導頻分量主碼超前碼頭24碼片分別為(010 110 111 111 001 000 101 110)2 (或(26771056)8)、(010 110 111 111 010 100 011 101)2 (或(26772435)8),與控制接口文件中B2a數據分量、導頻分量主碼具體參數表對比,仿真結果正確。
圖6給出的是導頻子碼發生器模塊的仿真波形圖。其中,相位差w、截取點p分別設置為123、138,即仿真PRN號為1的衛星導頻分量子碼。
從圖6可以看出,當寫入截取點138時,由于在雙口ROM讀取時需要先打一拍之后才能出數據,因此在ROM地址值(address_a、address_b)有效之后的第二地址導頻子碼(sub_code)才有效,可以得到輸出導頻子碼頭24碼片為(011 010 000 110 011 000 101 000…)2(或(32063050…)8),與控制接口文件中B2a導頻分量子碼具體參數表對比,仿真結果正確。

圖6 導頻子碼發生器模塊仿真波形圖
本文根據北斗三號衛星B2a信號測距碼發生器的原理,利用Verilog語言,采用模塊化設計方法,給出了基于FPGA的B2a 主碼(Gold碼)以及導頻子碼(Weil碼)的設計方案,并提出了基于歷元計數的子碼解調方案。仿真結果表明,本設計可以實現北斗三號B2a本地復制偽碼的產生,并且提供了擴展性接口,為后續B2a信號捕獲奠定了基礎,對于北斗三號接收機研制具有重要意義。