黃海生, 李龍龍
( 西安郵電大學(xué) 電子工程學(xué)院, 陜西 西安 710121)
北斗信號捕獲相位相干算法的設(shè)計與實現(xiàn)
黃海生, 李龍龍
( 西安郵電大學(xué) 電子工程學(xué)院, 陜西 西安 710121)
針對北斗二號衛(wèi)星導(dǎo)航系統(tǒng)信號捕獲運(yùn)算量大的問題,提出一種利用相位相干算法搜索起始碼相位的方法,并給出基于現(xiàn)場可編程門陣列(FPGA)的相位相干算法的具體實現(xiàn)方案,算法中關(guān)于旋轉(zhuǎn)因子運(yùn)算的問題主要借助坐標(biāo)旋轉(zhuǎn)數(shù)字計算方法和查找表方法得以解決。編譯綜合及仿真結(jié)果皆表明,與傳統(tǒng)快速傅里葉變化(FFT)算法相比,新方法只需用到復(fù)數(shù)加法,運(yùn)算量小,且能正確捕獲信號。
相位相干算法;旋轉(zhuǎn)因子;現(xiàn)場可編程門陣列(FPGA);坐標(biāo)旋轉(zhuǎn)數(shù)字計算方法(CORDIC)
北斗衛(wèi)星導(dǎo)航系統(tǒng)是我國正在實施自主研發(fā)和獨立運(yùn)行的全球衛(wèi)星導(dǎo)航系統(tǒng),它在亞太地區(qū)已經(jīng)初步形成了導(dǎo)航、授時和精密定位能力,應(yīng)用服務(wù)已經(jīng)擴(kuò)展到交通運(yùn)輸、測繪、氣象等相關(guān)領(lǐng)域。 傳統(tǒng)的北斗信號捕獲廣泛采用快速傅里葉變化(Fast Fourier Transform,F(xiàn)FT)獲得信號的初始碼相位,但隨著科技技術(shù)的快速發(fā)展,對于北斗信號的快速捕獲提出了更高標(biāo)準(zhǔn)的要求,傳統(tǒng)捕獲方法運(yùn)算量相對較大, 而且捕獲時間受限制, 為了適應(yīng)工作在高動態(tài)環(huán)境下的要求, 有人提出了相位相干捕獲算法[1]。該算法在搜索偽隨機(jī)碼的相關(guān)峰值上比傳統(tǒng)的FFT算法運(yùn)算量更少,當(dāng)序列長度變大時,其優(yōu)越性更加明顯。
本文擬基于現(xiàn)場可編程門陣列(Field-Programmable Gate Array,F(xiàn)PGA)芯片,利用硬件描述語言實現(xiàn)相位相干算法的設(shè)計,根據(jù)算法的設(shè)計流程,對定點數(shù)位數(shù)調(diào)整來更好地達(dá)到設(shè)計精度要求。利用存儲器對數(shù)據(jù)中間值的存儲,最終獲得碼起始相位值。
1.1 相位相干算法
相位相干算法的設(shè)計流程主要包括序列分割、相位相干和多層相位相干3部分。序列分割是將長度均為N=RC的本地序列L和接收序列R,皆分割成長度為C的R個子序列。相位相干將R個子序列轉(zhuǎn)換成R個幅度值和R個角度值的過程,其值用于序列所在行和列的計算。多層相位相干是根據(jù)運(yùn)算的需求以及子序列長度的滿足,對相位相干計算中得到的行值m所對應(yīng)長度為C的子序列再次進(jìn)行序列分割和相位相干的計算,最終根據(jù)行和列的值得到接收序列的起始相位值。
1.2 實現(xiàn)方式及運(yùn)算精度
采用定點數(shù)實現(xiàn)算法的運(yùn)算[2]。
由于考慮到運(yùn)算過程中誤差值的累積和中間值的變化,為達(dá)到設(shè)計中運(yùn)算精度的要求,所以將數(shù)值保留到小數(shù)點后4位。在設(shè)計中將相位角比特位設(shè)置為27位,其中1位符號位,9位整數(shù)位,17位小數(shù)位。幅度比特位設(shè)置為22位,其中1位符號位,6位整數(shù)位,15位小數(shù)位。借助Matlab內(nèi)部自帶的函數(shù)fi對數(shù)據(jù)進(jìn)行量化并編碼。fi函數(shù)表達(dá)式為fi(a,b,c,d),其中a代表需要量化的數(shù)據(jù),b代表符號位位數(shù)(默認(rèn)取值為1),c代表數(shù)據(jù)的總位數(shù),d代表小數(shù)位數(shù)。
根據(jù)偽隨機(jī)碼的產(chǎn)生原理[3],利用FPGA生成北斗衛(wèi)星B1頻點的普通測距碼(C碼)作為本地序列L,并將序列L進(jìn)行相應(yīng)的移位作為輸入序列S,然后通過相位相干算法對兩組輸入的序列進(jìn)行相應(yīng)處理,對于過程中的指數(shù)運(yùn)算均采用坐標(biāo)旋轉(zhuǎn)數(shù)字算法(Coordinate Rotation Digital Computer,CORDIC)來實現(xiàn)[4],運(yùn)算過程中的中間結(jié)果利用隨機(jī)存取存儲器(Random Access Memory, RAM)來存儲[5],通過各模塊的層層運(yùn)算,最終得出輸入序列的碼起始相位值。總體設(shè)計如圖1所示。

圖1 基于FPGA的算法總體設(shè)計
2.1 北斗衛(wèi)星C碼產(chǎn)生器
B1頻點C碼產(chǎn)生器是由兩個長度為11位的反饋移位寄存器G1和G2構(gòu)成的,經(jīng)模2產(chǎn)生平衡Gold碼,再截斷1碼片,生成碼長為2046 chips,速率為2.046 MHz,周期為1 ms的普通測距碼。反饋電路由模2加法器實現(xiàn),G1對應(yīng)于特征多項式
1+x+x7+x8+x9+x10+x11,
G2對應(yīng)于特征多項式
1+x+x2+x3+x4+x5+x8+x9+x11。
兩者皆在同一個時鐘頻率2.046 MHz下工作,兩個移位寄存器的初值均為“01010101010”,且被預(yù)先置入寄存器。
通過對產(chǎn)生G2序列的移位寄存器不同抽頭的模2和可以實現(xiàn)G2序列相位的不同偏移,同G1序列模2后生成不同衛(wèi)星的測距碼。衛(wèi)星ID的確定是通過G2寄存器的兩個輸出位置來決定的。
B1頻點C碼產(chǎn)生器原理圖如圖2所示。

圖2 B1頻點C碼產(chǎn)生器原理
2.2 序列分割模塊
根據(jù)輸入序列進(jìn)行相應(yīng)分割。考慮到B1頻點中C碼的序列長度N=2046,故取R=33和C=62對序列進(jìn)行分割。
在系統(tǒng)時鐘的節(jié)拍下,先進(jìn)行列輸入,當(dāng)計數(shù)器值為32時,進(jìn)行清零,并進(jìn)入下一列,直到將2046個碼片分割完。最終產(chǎn)生兩組存儲深度均為33的62位本地存儲器L和接收存儲器R。
2.3 初始化只讀內(nèi)存模塊

WC=exp( 2jπ/C),
而旋轉(zhuǎn)因子指數(shù)p的取值范圍為0~C-1。
由于C已知,所以利用Matlab生成旋轉(zhuǎn)因子的實部real和虛部imag的浮點值[7],利用函數(shù)fi(a,1,22,15)(其中a取實部或虛部的浮點值)進(jìn)行量化并編碼為22 bits的定點數(shù),最終初始化為相應(yīng)的ROM表,模塊輸出寬度均為22位的re[n]和im[n](n=0,1,…,33)。
2.4 判決及疊加模塊
由于C碼產(chǎn)生器輸出的有一定周期取值是0和1的離散碼序列,通過判決L和R中每個數(shù)據(jù)比特位的值對相應(yīng)的re[n]和im[n]值進(jìn)行加減。部分Verilog相關(guān)代碼如下。
if(L[m][n]==1)
begin
L_re[m]<=L_re[m]+re[n];
L_im[m]<=L_im[m]+im[n];
end
else
begin
L_re[m]<=L_re[m]-re[n];
L_im[m]<=L_im[m]-im[n];
end
2.5 CORDIC算法向量模式
CORDIC算法向量模式流水線結(jié)構(gòu)主要由寄存器、移位器和加減法器構(gòu)成[2],結(jié)構(gòu)如圖3所示。

圖3 CORDIC算法向量模式流水線結(jié)構(gòu)
將所輸入的實部和虛部數(shù)據(jù)從直角坐標(biāo)轉(zhuǎn)換為極坐標(biāo),即可得到相應(yīng)的相位幅度和相位角。部分Verilog實現(xiàn)代碼如下。
if(y_in[21]~^x_in[21]==0)
begin
x_out<=x_in-(y_in>>>N);
y_out<=y_in+(x_in>>>N);
z_out<=z_in-SITA;
end
else
begin
x_out<=x_in+(y_in>>>N);
y_out<=y_in-(x_in>>>N);
z_out<=z_in+SITA;
end
最終所得到的z_out為相位解真值, 而x_out是將相位幅度真值放大Kn(畸變因子)倍后的值。在計算中,取迭代次數(shù)N=16可得畸變因子
如果計算中需要真實相位幅度,就需對x_out進(jìn)行除Kn校正。最后,根據(jù)輸入的實部和虛部的符號位,對相位角進(jìn)行相應(yīng)的處理,將角度范圍調(diào)整為[-π,π]。圖4是在x_in和y_in的輸入值均為-0.707 1的情況下,輸出結(jié)果的仿真圖。

圖4 相位和幅度輸出結(jié)果仿真
2.6 復(fù)數(shù)相位計算模塊
復(fù)數(shù)相位計算模塊實際上就是一個減法器,根據(jù)所在行值y∈(0,32)的不同,當(dāng)0≤i≤32-y時,計算
L_phase[i]-R_phase[i+y],
當(dāng)33-y≤i≤32時,計算
L_phase[i]-R_phase[i+y]-(360/62),
最終可以得到33×33=1 089個相位角值。
2.7 CORDIC算法旋轉(zhuǎn)模式
CORDIC算法旋轉(zhuǎn)模式結(jié)構(gòu)與向量模式一樣。不同點在于將所輸入的相位角度轉(zhuǎn)化為角度正弦和角度余弦。首先,對所輸入的相位角進(jìn)行象限標(biāo)記;其次將其修正在[0,π/2]范圍之內(nèi)。最后,根據(jù)象限標(biāo)記對正弦值和余弦值進(jìn)行相應(yīng)的修正。圖5是相位角為225°時輸出結(jié)果仿真圖。

圖5 正弦和余弦的輸出結(jié)果仿真
2.8 累加模塊
累加模塊的主要功能是將產(chǎn)生的1 089對C_real和C_imag,經(jīng)過累加產(chǎn)生33對sum_real和sum_imag。
2.9 判決及C碼起始相位計算模塊
該模塊首先對所得到的R個相位幅度進(jìn)行判決,如果存在其值等于R,從而得到該值所在的行d,那么說明搜索成功,反之亦然。當(dāng)搜索成功時,C/A碼起始相位計算模塊根據(jù)該相位幅度所對應(yīng)的相位角計算出所在的列c。最后,根據(jù)
out=C×R+d
計算出C/A碼的起始相位值。
2.10 設(shè)計結(jié)果仿真與結(jié)果分析
根據(jù)N=2 046,故而R和C分別取值為33和62。產(chǎn)生一個本地序列L,將本地序列進(jìn)行隨機(jī)循環(huán)移位后作為輸入序列S,利用Modelsim進(jìn)行相關(guān)仿真。移位0位和左移1 022位后搜索到最大幅度值max_mag及其所對應(yīng)的相位值max_mag_phase的仿真結(jié)果分別如圖6和圖7所示。由結(jié)果可知,設(shè)計模塊搜索到正確峰值(由于設(shè)計中d值是從0開始的,所以對結(jié)果進(jìn)行了加1修正)。

圖6 零移位Modelsim仿真結(jié)果

圖7 左移1 022位Modelsim仿真結(jié)果
通過選用Altera公司生產(chǎn)的cyclone II系列的 EP2C35F672C6芯片,在Quartus II 9.0的開發(fā)環(huán)境下對代碼進(jìn)行編譯綜合,使用資源情況報告如圖8所示。

圖8 資源使用報告
實現(xiàn)了對碼相位相干算法的FPGA設(shè)計,采用CORDIC算法,并應(yīng)用定點數(shù)以滿足算法的設(shè)計要求。仿真驗證結(jié)果表明,設(shè)計達(dá)到預(yù)期目的,此設(shè)計可用于北斗衛(wèi)星信號偽隨機(jī)碼的捕獲。
[1] Chang Chieh-Fu, Hsieh Wan-Hsin, Kao Ming-Seng. A Novel Computationally Efficient Code Phase Acquisition Method[C]//Proceedings of the 24th International Technical Meeting of the Satellite Division of the Institute of navigation. Portland,Oregon, USA: ION GNSS 2011, 2011:2114-2116.
[2] 田耘,許文波,張延偉.無線通信FPGA設(shè)計[M].北京:電子工業(yè)出版社,2007:81-137.
[3] 崔保延. GPS軟件接收機(jī)基礎(chǔ)[M]. 2版. 陳軍,潘高峰,譯.北京:電子工業(yè)出版社,2007:63-87.
[4] 楊宏,李國輝,劉立新.基于FPGA的CORDIC算法的實現(xiàn)[J].西安郵電學(xué)院學(xué)報,2008,13(1):75-77.
[5] 夏雨聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].2版.北京:北京航天大學(xué)出版社,2008:27-115.
[6] 高西全,丁玉美.數(shù)字信號處理[M].3版.西安:西安電子科技大學(xué)出版社,2008:110-120.
[7] 劉衛(wèi)國.MATLAB程序設(shè)計與應(yīng)用[M].2版.北京:高等教育出版社,2006:17-80.
[責(zé)任編輯:王輝]
Design and implement of Beidou signal acquisition phase coherence algorithm
HUANG Haisheng, LI Longlong
(School of Electronic Engineering, Xi’an University of Posts and Telecommunications, Xi’an 710121, China)
A method using Phase Coherence Algorithm to search initial code phase is proposed for the large signal acquisition and computation on BeiDou II Navigation Satellite System. A specific implementation scheme based on Field-Programmable Gate Array (FPGA) of Phase Coherence Algorithm is given accordingly. It mainly use Coordinate Rotation Digital Computer (CORDIC) algorithm and look-up table method to solve the twiddle factor operation problems in the algorithm. This method is validated on the cyclone II series FPGA of Altera. Simulation results show that compared to the traditional Fast Fourier Transform (FFT) algorithm, this method can greatly reduce computation and can correctly acquire signal by only using the complex addition.
phase coherence algorithms, twiddle factor, field-programmable gate array(FPGA), coordinate rotation digital computer(CORDIC)
10.13682/j.issn.2095-6533.2014.01.005
2013-09-27
陜西省科技統(tǒng)籌創(chuàng)新工程計劃戰(zhàn)略基金資助項目(2012KTCQ01-06);陜西省教育廳服務(wù)地方專項基金資助項目(2013JC10)
黃海生(1964-),男,教授,從事專用集成電路設(shè)計研究。E-mail: hhs@xupt.edu.cn 李龍龍(1988-),男,碩士研究生,研究方向為專用集成電路設(shè)計。E-mail: 363732023@qq.com
TN492
A
2095-6533(2014)01-0026-05