臧志斌,夏傳福,吳小鷗,馬 軍,傅 寧
(國網(wǎng)思極神往位置服務(wù)(北京)有限公司,北京 102211)
北斗三號衛(wèi)星較之前兩代衛(wèi)星區(qū)別不僅在于衛(wèi)星組網(wǎng)從區(qū)域走向全球,而且在載荷、星間鏈路、激光通信等方面也有進(jìn)步。另外,北斗三號系統(tǒng)在頻點上也做了一些調(diào)整,能夠和GPS的民用頻點兼容使用[5]。B2a是目前空間接口控制文件公開的播發(fā)民用信號之一,其調(diào)制方式兼容GPS L5。對于B2a信號的研究,不僅有利于北斗三號的推廣使用,提高定位精度,還對未來與GPS良好互操作性打下基礎(chǔ)[6]。
根據(jù)文獻(xiàn)[7],B2a信號結(jié)構(gòu)如表1,包含導(dǎo)頻分量和數(shù)據(jù)分量雙通道調(diào)制,并且采用QPSK(10)調(diào)制方式調(diào)制在1 176.45 MHz頻點上。
B2a信號采用主碼和子碼的分層碼結(jié)構(gòu),由主碼和子碼相異或構(gòu)成,子碼的碼元寬度和主碼的周期相同,子碼碼元起始時刻與主碼第一個碼元的起始時刻嚴(yán)格對齊,時序?qū)?yīng)關(guān)系如圖1所示。
表1 B2a信號結(jié)構(gòu)
圖1 主碼、子碼時序關(guān)系示意圖
B2a信號主碼的碼速率為10.23 Mcps,碼長為10 230,由兩個13級線性反饋移位寄存器通過移位和模二加生成的Gold碼擴展得到。B2a數(shù)據(jù)分量主碼、導(dǎo)頻分量主碼的生成多項式分別如式(1)、(2)所示:
(1)
(2)
對于不同衛(wèi)星,B2a數(shù)據(jù)分量的子碼相同,采用固定的5位碼序列作為子碼,子碼序列為00010,高位先傳;B2a導(dǎo)頻分量的子碼碼長為100,由長度為1 021的Weil碼通過截斷得到。
由于B2a數(shù)據(jù)分量和導(dǎo)頻分量的主碼發(fā)生器結(jié)構(gòu)類似,因此本文主要分析B2a數(shù)據(jù)分量的主碼發(fā)生器,導(dǎo)頻分量的主碼發(fā)生器可參考數(shù)據(jù)分量的主碼發(fā)生器。根據(jù)式(1)可以得到B2a數(shù)據(jù)分量的主碼發(fā)生器如圖2所示。與原B1I、B2I的Gold發(fā)生器不同的是[8],B2a數(shù)據(jù)分量主碼采用13級非線性移位寄存器。寄存器1的初始值與B1I、B2I的一樣,所有衛(wèi)星采用相同的初始值,但是B2a寄存器的初始值與之不同,其初始值全為1;寄存器2的初始值根據(jù)不同衛(wèi)星的PRN號采用不同的數(shù)值,對應(yīng)的寄存器2初始值表在接口文件中給出。
B2a數(shù)據(jù)分量的子碼采用固定的5位碼序列(00010),在實現(xiàn)方式上可以利用在基帶中捕獲到的信號,設(shè)置歷元時,在每逢4的整數(shù)個主碼周期將主碼碼片取反(即與1異或),其他主碼周期輸出主碼碼片值不變。
“紡紗工藝設(shè)計與質(zhì)量控制”課程是一門在大學(xué)三年級第六學(xué)期開設(shè)的課程,學(xué)生經(jīng)過紡紗學(xué)和新型紡紗學(xué)的學(xué)習(xí)后,有了一定分析和解決問題的能力,這時候?qū)W生離畢業(yè)還有1年時間,他們考慮畢業(yè)后將要從事的工作,因此很重視自己能力的培養(yǎng),學(xué)習(xí)的積極性和主動性有所提高,此時, “紡紗工藝設(shè)計與質(zhì)量控制”課程采用案例教學(xué)法,可以激發(fā)學(xué)生的潛能,能夠培養(yǎng)學(xué)生獨立思考和動手能力,提高創(chuàng)新能力和工程實踐能力,培養(yǎng)綜合能力,進(jìn)一步鍛煉學(xué)生分析和解決生產(chǎn)實踐過程中出現(xiàn)的問題[5-6]。
B2a導(dǎo)頻分量的子碼是采用長度為1 021的Weil碼通過截斷得到。Weil碼是一種性能優(yōu)良的碼片,它的相關(guān)性能非常好,且具有相對靈活的可選序列長度[9]。Weil碼的產(chǎn)生是基于有限長的偽隨機序列——勒讓德序列。它的長度為質(zhì)數(shù)。式(3)定義的是長度為N的勒讓德序列,對于固定長度的N,有且僅有一個勒讓德序列[10],B2a中的N代表1 021。
(3)
圖2 B2a數(shù)據(jù)分量的主碼發(fā)生器
其中,mod表示模除運算。
因此,長度為N的Weil碼序列定義如式(4)所示:
W(k;w)=L(k)⊕L((k+w)modN),k=0,1,2,…,N-1
(4)
其中,w表示兩個勒讓德序列之間的相位差。
B2a導(dǎo)頻分量子碼的截取方式為循環(huán)截取,即截斷序列如式(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內(nèi)有豐富的觸發(fā)器資源,非常適合移位操作。根據(jù)B2a數(shù)據(jù)分量主碼發(fā)生器框圖,可以得出g1和g2碼的實現(xiàn)過程,式(6)、式(7)分別表示的是g1、g2寄存器組的更新過程。
(6)
(7)
式中,C1、C2表示寄存器1、寄存器2的反饋值,c1,i、c2,i分別表示寄存器1、寄存器2第i位的內(nèi)容。在主碼發(fā)生的起始時刻,寄存器1和寄存器2同步復(fù)位(寄存器1的初始值為1111111111111,寄存器2的初始值通過配置得到),而后在每一個時鐘上升沿來臨的時刻,第2~13位寄存器內(nèi)容被前一位寄存器內(nèi)容更新,第1位寄存器內(nèi)容被反饋值更新。值得注意的是,寄存器1在8190碼片時發(fā)生截斷。
圖3所示是主碼發(fā)生器模塊的接口示意圖。為了節(jié)省FPGA ROM的容量,寄存器2的初始值在FPGA內(nèi)留有接口,通過外部寄存器配置寫入;而寄存器1初始值是固定的,可以固化于FPGA內(nèi)。為了后續(xù)捕獲信號時能夠調(diào)整主碼相位,在FPGA內(nèi)預(yù)留有碼相位偏移接口,以及三路碼片超前碼、即時碼和滯后碼;碼片捕獲精度為半個碼片,因此主碼產(chǎn)生時鐘為20.46 MHz。
圖3 主碼發(fā)生器模塊接口示意圖
根據(jù)B2a子碼的結(jié)構(gòu)與編碼原理,不同PRN號的衛(wèi)星,它的截取點p和相位差w設(shè)置不同,對應(yīng)的Weil碼是相同的。因此導(dǎo)頻子碼的生成關(guān)鍵在于生成Weil碼。由于Weil碼生成過程包含有模除操作,勒讓德序列基于同余理論構(gòu)建,無法用簡單的電路結(jié)構(gòu)實時生成。在本文中,提出一種產(chǎn)生B2a導(dǎo)頻子碼的方案,先利用軟件生成Weil碼,定義一個長度為N的一維數(shù)組L[N]并且所有元素初始化為0,k從0~N-1遍歷,求出t=k2mod 1 021,數(shù)組L在t元素處置1。
接著,把生成好的Weil碼存儲于FPGA的ROM中,生成不同PRN衛(wèi)星的導(dǎo)頻子碼時再根據(jù)子碼參數(shù)(截取點和相位差)實時從ROM中讀取,由于導(dǎo)頻子碼的長度是100,因此只需循環(huán)讀取ROM中的100個值即可。B2a導(dǎo)頻子碼的周期是100 ms,同樣地,歷元設(shè)置后,當(dāng)歷元計數(shù)到100 ms的整數(shù)倍時,開始產(chǎn)生導(dǎo)頻子碼,再與B2a導(dǎo)頻主碼異或,即可產(chǎn)生B2a導(dǎo)頻組合碼,如圖4所示,在導(dǎo)頻子碼模塊中預(yù)留有子碼發(fā)生器使能時鐘接口(sub_code_enable),在歷元滿足上述條件時,可產(chǎn)生導(dǎo)頻子碼。
圖4 導(dǎo)頻子碼發(fā)生器模塊
本次仿真編碼工具采用的是Quartus II 13.1sp1版本,芯片選取的是Altera EP3C120F484C7,仿真軟件采用的是Modelsim 10.1c,主碼和子碼的仿真參數(shù)均選取為PRN號為1號星的參數(shù)。
圖5給出了主碼發(fā)生器模塊的仿真波形圖。其中,B2a數(shù)據(jù)分量、導(dǎo)頻分量的寄存器2初始值(pilot_reg,data_reg)均設(shè)置為1000000100101,即均設(shè)置為PRN號為1號星的主碼參數(shù),并且設(shè)置碼偏移(chip_shift)為0。
圖5中,data_code_early、data_code_prompt、data_code_late分別表示數(shù)據(jù)分量主碼的超前碼、即時碼以及滯后碼;同樣地,pilot_code_early、pilot_code_prompt、pilot_code_late分別表示導(dǎo)頻分量主碼的超前碼、即時碼以及滯后碼。超前碼與即時碼、即時碼與滯后碼僅相差半個碼片的寬度,因此在此分析超前碼片。dump_1ms表示一主碼周期的結(jié)束,當(dāng)dump_1ms下降沿來臨之時表示新的主碼周期開始產(chǎn)生,從圖中可看出產(chǎn)生的數(shù)據(jù)分量主碼和導(dǎo)頻分量主碼超前碼頭24碼片分別為(010 110 111 111 001 000 101 110)2 (或(26771056)8)、(010 110 111 111 010 100 011 101)2 (或(26772435)8),與控制接口文件中B2a數(shù)據(jù)分量、導(dǎo)頻分量主碼具體參數(shù)表對比,仿真結(jié)果正確。
圖6給出的是導(dǎo)頻子碼發(fā)生器模塊的仿真波形圖。其中,相位差w、截取點p分別設(shè)置為123、138,即仿真PRN號為1的衛(wèi)星導(dǎo)頻分量子碼。
從圖6可以看出,當(dāng)寫入截取點138時,由于在雙口ROM讀取時需要先打一拍之后才能出數(shù)據(jù),因此在ROM地址值(address_a、address_b)有效之后的第二地址導(dǎo)頻子碼(sub_code)才有效,可以得到輸出導(dǎo)頻子碼頭24碼片為(011 010 000 110 011 000 101 000…)2(或(32063050…)8),與控制接口文件中B2a導(dǎo)頻分量子碼具體參數(shù)表對比,仿真結(jié)果正確。
圖6 導(dǎo)頻子碼發(fā)生器模塊仿真波形圖
本文根據(jù)北斗三號衛(wèi)星B2a信號測距碼發(fā)生器的原理,利用Verilog語言,采用模塊化設(shè)計方法,給出了基于FPGA的B2a 主碼(Gold碼)以及導(dǎo)頻子碼(Weil碼)的設(shè)計方案,并提出了基于歷元計數(shù)的子碼解調(diào)方案。仿真結(jié)果表明,本設(shè)計可以實現(xiàn)北斗三號B2a本地復(fù)制偽碼的產(chǎn)生,并且提供了擴展性接口,為后續(xù)B2a信號捕獲奠定了基礎(chǔ),對于北斗三號接收機研制具有重要意義。