陳建華,潘樹國(guó),才宇彤,任立冰
(1.南京郵電大學(xué)自動(dòng)化學(xué)院,江蘇 南京 210046;2.東南大學(xué)儀器科學(xué)與工程學(xué)院,江蘇 南京 210096;3.中國(guó)移動(dòng)通信集團(tuán)福建有限公司福州分公司,福建 福州 350000;4.中國(guó)聯(lián)合網(wǎng)絡(luò)通信有限公司樺甸分公司,吉林 樺甸 132416)
隨著電子技術(shù)的發(fā)展及高性能嵌入式芯片的出現(xiàn),使傳統(tǒng)的基于硬件的GPS接收機(jī)導(dǎo)航解算軟件化成為可能[1]。而嵌入式設(shè)備的廣泛采用,也促使嵌入式導(dǎo)航軟件的產(chǎn)生。本文GPS導(dǎo)航解算對(duì)跟蹤環(huán)路輸出的導(dǎo)航數(shù)據(jù)進(jìn)行電文解碼和數(shù)據(jù)處理,對(duì)大于等于4顆衛(wèi)星的情況使用接收機(jī)位置信息,并在ARM嵌入式Linux平臺(tái)上實(shí)現(xiàn)。
GPS接收機(jī)對(duì)GPS信號(hào)的基帶信號(hào)處理后,后續(xù)的工作即對(duì)導(dǎo)航數(shù)據(jù)的解碼,以得到用戶的準(zhǔn)確位置信息。導(dǎo)航數(shù)據(jù)處理包括導(dǎo)航電文解碼和定位解算。導(dǎo)航解算對(duì)跟蹤環(huán)路輸出的導(dǎo)航數(shù)據(jù)進(jìn)行解調(diào)和數(shù)據(jù)處理,得到星歷等信息。在跟蹤環(huán)路提供準(zhǔn)確的碼起始點(diǎn)基礎(chǔ)上,配合星歷,求得衛(wèi)星的位置坐標(biāo)和偽距值,最后計(jì)算得到最終的接收機(jī)位置等信息。
導(dǎo)航數(shù)據(jù)位的檢測(cè)是導(dǎo)航解算定位的前提,獲得正確的導(dǎo)航數(shù)據(jù)的傳輸開始時(shí)間是正確解碼的首要工作。導(dǎo)航數(shù)據(jù)的比特率為50 bit/s,即20 ms傳輸1個(gè)導(dǎo)航數(shù)據(jù)位。理論上只要找到任意一個(gè)導(dǎo)航數(shù)據(jù)的起始位置,每隔20 ms即可確定所有導(dǎo)航數(shù)據(jù)的傳輸結(jié)果。
導(dǎo)航解碼中的首要問題是找到導(dǎo)航電文中子幀的起始位置。該位置由格式為10001011的8 bit長(zhǎng)的前同步位校驗(yàn)位。由于跟蹤環(huán)路使用的是對(duì)相位不敏感的Costas環(huán),導(dǎo)航數(shù)據(jù)中的前同步位會(huì)以01110100反轉(zhuǎn)的形式出現(xiàn)。相位反轉(zhuǎn)的前同步位會(huì)出現(xiàn)在接收數(shù)據(jù)的任何位置,因此必須執(zhí)行前同步位的額外檢查。對(duì)子幀起始位置的前同步位的檢測(cè)時(shí)間間隔以1個(gè)子幀的時(shí)間長(zhǎng)度6 s為單位檢測(cè)。
導(dǎo)航電文子幀起始位置的檢測(cè)是由前同步位與導(dǎo)航電文相關(guān)完成的。相關(guān)函數(shù)的第1個(gè)輸入?yún)?shù)是接收到的跟蹤環(huán)路得到的導(dǎo)航數(shù)據(jù)位通過過零檢測(cè)二值化為±1表示的比特序列,第2個(gè)參數(shù)即為以-1替代矩形序列的0值的8位前同步校驗(yàn)位,相關(guān)函數(shù)的結(jié)果為8,前同步位反轉(zhuǎn)時(shí),相關(guān)的輸出為-8。因此可以通過找到相關(guān)絕對(duì)值為8的位置,找到子幀的起始位置。
GPS導(dǎo)航數(shù)據(jù)1個(gè)主幀包含5個(gè)子幀,理論上,30 s的導(dǎo)航數(shù)據(jù)相關(guān)絕對(duì)值為8的結(jié)果有5個(gè),相關(guān)最大值時(shí)間延遲為6 s,只要滿足奇偶校驗(yàn),即可確定子幀的起始位置。
由于多普勒效應(yīng)的影響,導(dǎo)航數(shù)據(jù)位的長(zhǎng)度可能偏離20 ms。即使小小的偏移經(jīng)過長(zhǎng)時(shí)間的積累,也會(huì)造成較大的誤差。因此通常采用基帶跟蹤環(huán)路輸出的原始的1000 bit/s的導(dǎo)航數(shù)據(jù),與每位離散擴(kuò)展為20位的校驗(yàn)位相關(guān),相關(guān)最大值也由8變?yōu)?60。使用該方法,會(huì)增加前同步位校驗(yàn)的計(jì)算開銷,但可以更加準(zhǔn)確地確定比特轉(zhuǎn)換和導(dǎo)航數(shù)據(jù)電文中子幀起始位置。
我們知道,空間兩點(diǎn)確定一條直線,不在一直線上的三點(diǎn)確定一個(gè)平面,而要確定一個(gè)三維空間至少需要不在同一平面上的四點(diǎn)。因此,要確定一個(gè)空間位置的準(zhǔn)確坐標(biāo),至少需要4顆衛(wèi)星。在偽距和導(dǎo)航衛(wèi)星位置坐標(biāo)都知道的前提下,即可計(jì)算出接收機(jī)的位置坐標(biāo)[2]。
理論上輸入衛(wèi)星的位置和偽距,由式(1)可以求解出位置坐標(biāo),
式中:ρi為偽距;(xi,yi,zi)為衛(wèi)星坐標(biāo),i=1,2,3,4;(xu,yu,zu)為接收機(jī)坐標(biāo);but為用戶時(shí)鐘誤差;c為光速。
式(1)為非線性聯(lián)立方程組,實(shí)際計(jì)算很難求解。通常解決的辦法是將各方程線性化。令距離表示的時(shí)鐘偏差bu=cbut,則方程微分為
式中:i=1 ~4;?xu,?yu,?zu和 ?bu為未知數(shù),方程轉(zhuǎn)變?yōu)榫€性方程。矩陣表示為
變換為式(3)后,為了求得位置解,需要進(jìn)行迭代。為得到我們需要的(xu,yu,zu)和bu,首先設(shè)置一組初值,得到新的?xu,?yu,?zu和?bu值后對(duì)(xu,yu,zu)和bu進(jìn)行修正。重復(fù)操作,通過迭代直到 ?v=值小于預(yù)設(shè)的值,結(jié)束迭代。
實(shí)際接收機(jī)捕獲到的衛(wèi)星數(shù)量常常大于4顆。當(dāng)多于4顆時(shí),需要決定如何優(yōu)選衛(wèi)星的算法,一個(gè)行之有效的算法是使用最小二乘法[3]。
最小二乘法問題的數(shù)學(xué)描述為給出了一個(gè)無解的系統(tǒng)Ax=b,其中A有m行n列,m >n。觀測(cè)值b的維數(shù)大于變量x的維數(shù)。設(shè)x^為該系統(tǒng)的最優(yōu)解,使誤差向量e^=b-A x^的模最小,則誤差向量的求解為‖e‖2=(b-Ax)T(b-Ax),將求解的二次方程最小化得到常規(guī)方程
位置坐標(biāo)求解方程數(shù)m >4顆衛(wèi)星表示為
令 ?ρ= [?ρ1?ρ2… ?ρm]T,?ρ= [?xu?yu?zu?bu]T,A即為m行4列的α矩陣,則使用最小二乘法的最小化公式有
從方程(6)中即可求出?x的值,由于最小二乘法采用了更多的衛(wèi)星數(shù)據(jù),比僅使用4顆衛(wèi)星的位置解更好。按照前面介紹的迭代方法,即可得到更為準(zhǔn)確的接收機(jī)位置解。
GPS導(dǎo)航解算軟件硬件平臺(tái)采用核心工作頻率為203 MHz的ARM9作為開發(fā)平臺(tái),包含64M Nand Flash,64M SDRAM,12 MHz外部系統(tǒng)時(shí)鐘源,32.768 kHz的RTC時(shí)鐘源,以及URAT、USB、以太網(wǎng)等接口資源。嵌入式操作系統(tǒng)采用2.6.15版本的Linux Kernel,并通過自編譯移植。
嵌入式Linux開發(fā)平臺(tái),宿主機(jī)交叉編譯環(huán)境采用3.4.3版本的GNU GCC,修改/etc/.bashrc文件,在文件末尾添加:
export PATH=$PATH:/編譯器目錄/3.4.3/bin
export PATH。
內(nèi)核編譯配置,執(zhí)行“make menuconfig”,選擇所需的系統(tǒng)組件和驅(qū)動(dòng)進(jìn)行,經(jīng)編譯得到Linux內(nèi)核壓縮映像文件。
采用支持ARM和MIPS體系架構(gòu)的u-Boot作為BootLoader,完成操作系統(tǒng)內(nèi)核運(yùn)行之前硬件初始化、建立內(nèi)存空間的映射圖等工作。
串口設(shè)置如圖1所示,采用了USB轉(zhuǎn)串口工具,串口設(shè)備類型為/dev/ttyUSB0,波特率設(shè)為115200,數(shù)據(jù)位8 bit,停止位1,無奇偶校驗(yàn)。
圖1 minicom串口參數(shù)設(shè)置Fig.1 Serial port parameter settings
配置ARM9的u-Boot的開發(fā)板自身IP,Tftp服務(wù)器IP,內(nèi)核啟動(dòng)參數(shù),Bootcmd啟動(dòng)命令。在u-Boot的命令提示符下,使用setenv設(shè)置參數(shù),saveenv保存參數(shù)。設(shè)置如下:
這里的ipaddr為開發(fā)板的IP地址,serverip為主機(jī)的IP,實(shí)際設(shè)置的IP地址只須保證在同一網(wǎng)段即可。Linux_ arg是 Linux內(nèi)核的啟動(dòng)參數(shù),bootcmd是引導(dǎo)命令。
下載固化內(nèi)核映像文件,連接開發(fā)板的串口、網(wǎng)口,在u-Boot提示符下輸入tftp 30008000 zImage,下載內(nèi)核映像文件,執(zhí)行固化內(nèi)核命令nandw c 14000030008000。內(nèi)存的起始?jí)K號(hào)是c,8~b塊是存放環(huán)境變量的空間,然后使用boot命令啟動(dòng)內(nèi)核,內(nèi)核移植完畢。
宿主機(jī)采用的Ubuntu需安裝NFS(網(wǎng)絡(luò)文件系統(tǒng))服務(wù)程序。修改/etc/exports文件,在文件末尾添加:
/armsys2410/root*(rw,sync,no_root_squash)。
最后更新配置文件,重啟NFS服務(wù)即可開啟網(wǎng)絡(luò)文件服務(wù)。對(duì)開發(fā)板進(jìn)行復(fù)位,重啟后開發(fā)板將執(zhí)行硬件初始化最后直接連接到宿主機(jī)上建立的網(wǎng)絡(luò)文件系統(tǒng)。采用NFS方式操作過程都通過宿主機(jī)進(jìn)行,可方便地對(duì)應(yīng)用程序快速調(diào)試和測(cè)試。
嵌入式Linux系統(tǒng)的搭建為嵌入式導(dǎo)航解算軟件提供系統(tǒng)平臺(tái),完成嵌入式系統(tǒng)的搭建后,即為對(duì)嵌入式導(dǎo)航解算軟件的開發(fā)了。
嵌入式導(dǎo)航解算軟件開發(fā)使用了交叉編譯工具鏈,以及與之相關(guān)的開發(fā)工具。GPS導(dǎo)航解算軟件采用C/C++ANSI標(biāo)準(zhǔn)庫(kù)函數(shù)作為主開發(fā)庫(kù),使用支持多平臺(tái)的功能函數(shù)庫(kù)輔助開發(fā),保證跨平臺(tái)特性和軟件兼容性。
嵌入式導(dǎo)航解算軟件開發(fā)采用漸進(jìn)設(shè)計(jì)方案,從算法仿真開始,PC平臺(tái)導(dǎo)航解算軟件的開發(fā),至最后的嵌入式Linux平臺(tái)軟件的修改和移植的開發(fā)流程。并采用模塊化設(shè)計(jì),方便軟件的修改和維護(hù)。根據(jù)GPS導(dǎo)航解算的各主要部分的功能劃分,軟件主要分為以下幾個(gè)功能模塊[4]:導(dǎo)航數(shù)據(jù)前同步位和奇偶校驗(yàn)?zāi)K;星歷解算模塊;衛(wèi)星位置計(jì)算模塊;偽距計(jì)算模塊;用戶位置定位模塊;坐標(biāo)經(jīng)緯度轉(zhuǎn)換模塊。以上模塊共同組成了嵌入式導(dǎo)航解算軟件。嵌入式GPS導(dǎo)航解算程序的完整軟件流程圖如圖2所示。
圖2 衛(wèi)星導(dǎo)航解算軟件流程Fig.2 Satellite navigation software flowchart
針對(duì)GPS接收機(jī)導(dǎo)航解算原理[5-6],對(duì)導(dǎo)航解算進(jìn)行算法仿真和結(jié)果測(cè)試。仿真測(cè)試使用采樣頻率為16.367667 MHz,信號(hào)帶寬為3 MHz,數(shù)字中頻為 4.123968 MHz,2 bit采樣的東方聯(lián)星NewStar210A中頻信號(hào)采樣器,對(duì)GPS真實(shí)信號(hào)采集。使用Matlab 2008a仿真平臺(tái),PC平臺(tái)為1.73 GHz的酷睿T2250,1G內(nèi)存。GPS中頻數(shù)據(jù)于空曠場(chǎng)地靜態(tài)采集,經(jīng)基帶信號(hào)處理捕獲、跟蹤得到的導(dǎo)航數(shù)據(jù)如圖3所示。
圖3 衛(wèi)星導(dǎo)航解算數(shù)據(jù)圖Fig.3 Satellite navigation data
衛(wèi)星信號(hào)在30 s的時(shí)間內(nèi)信號(hào)未失鎖,被準(zhǔn)確跟蹤??梢宰鳛閷?dǎo)航解算的初始導(dǎo)航數(shù)據(jù),供衛(wèi)星子幀的前同步位查找使用。
圖4以2號(hào)衛(wèi)星為例,衛(wèi)星可以找到至少5個(gè)相關(guān)峰,間隔6000個(gè)序列值 (即6 s的時(shí)間)出現(xiàn)的相關(guān)峰作為子幀起始位置,通過奇偶校驗(yàn)即可確定每顆衛(wèi)星子幀的起始位置。
圖4 衛(wèi)星子幀前同步位查找圖Fig.4 Front synchronization bit searching of a satellite sub-frame
圖5以500 ms的時(shí)間間隔輸出一UTM經(jīng)緯度坐標(biāo),在圖中以*表示,將經(jīng)緯度坐標(biāo)映射到平面上的點(diǎn)坐標(biāo)分布,其中五角星表示33 s數(shù)據(jù)得到的經(jīng)緯度的平均值。
GPS嵌入式導(dǎo)航解算程序首先在宿主機(jī)Linux平臺(tái)下使用GNU編譯工具,編譯測(cè)試,讀取跟蹤環(huán)路輸出的導(dǎo)航數(shù)據(jù)成功解算出用戶位置等相關(guān)信息。結(jié)果如圖6所示。
導(dǎo)航解算程序的嵌入式平臺(tái)移植,需針對(duì)嵌入式Linux平臺(tái)進(jìn)行修改。嵌入式平臺(tái)資源有限,而導(dǎo)航解算要占用較多的內(nèi)存資源,因此,需要優(yōu)化內(nèi)存占用。對(duì)程序進(jìn)一步優(yōu)化,提高其在嵌入式平臺(tái)下的處理速度。經(jīng)過反復(fù)的測(cè)試,ARM9嵌入式Linux平臺(tái)最后的軟件運(yùn)行結(jié)果如圖7所示。
圖7 ARM9/Linux平臺(tái)導(dǎo)航解算軟件運(yùn)行結(jié)果Fig.7 Result of navigation software on ARM9/Linux
測(cè)試基于ARM的GPS軟件接收機(jī)的定位精度,將其與東南大學(xué)伽利略中心定位精度達(dá)毫米級(jí)的測(cè)量型接收機(jī)S6532A作比較。
在2008年7月21日下午4點(diǎn)至4點(diǎn)30分之間,將東方聯(lián)星NewStar210A中頻信號(hào)采樣器與S6532A接收機(jī)一起靜置于東南大學(xué)四牌樓東區(qū)足球場(chǎng)北角的地方,同時(shí)采集GPS衛(wèi)星信號(hào)。東方聯(lián)星采集的數(shù)據(jù)解算得到的經(jīng)緯度坐標(biāo)為北緯32°3'14.9575″和東經(jīng) 118°47'38.8164″;S6532A 接收機(jī)得到的接收機(jī)經(jīng)緯度坐標(biāo)為北緯32°3'14.9721″和東經(jīng)118°47'38.7764″。
將得到的解算結(jié)果輸入Google Earth,兩點(diǎn)的平面位置坐標(biāo)相差在5 m左右。導(dǎo)航解算仿真得到的單點(diǎn)定位結(jié)果,在無其他方式數(shù)據(jù)補(bǔ)償和未使用導(dǎo)航解算精度補(bǔ)償方法的情況下,與厘米級(jí)精度的雙頻S6532A接收機(jī)相比定位誤差在5 m左右,定位精度達(dá)到預(yù)期要求。
本文通過理論分析和嵌入式平臺(tái)實(shí)現(xiàn)給出了嵌入式導(dǎo)航解算軟件的工程實(shí)現(xiàn)。首先從理論角度介紹了從基帶處理輸出信號(hào)中通過數(shù)據(jù)同步和查找導(dǎo)航數(shù)據(jù)起始位置,對(duì)多于4顆衛(wèi)星使用最小二乘法求解接收機(jī)位置方法,經(jīng)理論仿真算法符合設(shè)計(jì)要求。移植到ARM9嵌入式Linux平臺(tái),實(shí)現(xiàn)了GPS導(dǎo)航解算軟件的嵌入式實(shí)現(xiàn)。
[1]羅顯志,楊滕,魏海濤,等.基于MATLAB的衛(wèi)星導(dǎo)航信號(hào)仿真和驗(yàn)證平臺(tái)[J].系統(tǒng)仿真學(xué)報(bào),2009,21(18):5692-5703.LUO Xian-zhi,YANG Teng,WEI Hai-tao,et al.Satellite navigation signal simulation and validation platform based on MATLAB software[J].Journal of System Simulation,2009,21(18):5692 -5703.
[2]黃丁發(fā),熊永良,袁林果.全球定位系統(tǒng)(GPS)—理論與應(yīng)用[M].成都:西南交通大學(xué)出版社,2006.207-208.HUANG Ding-fa, XIONG Yong-liang,YUAN Lin-guo.Global positioning system(GPS)—theory and practice[M].Chengdu:Southwest Jiaotong University Press,2006.207-208.
[3]LEDVINA B M,PSIAKI M L,POWELL S P.A real time software receiver for the GPS and Galileo L1 signals[C].ION GNSS 2006.Fort Worth:2006.2321 -2333.
[4]ENGEL F,HEISER G,MUMFORD P,et al.An open GNSS receiver platform architecture[C].The 2004 International Symposium on GNSS/GPS.Sydney,Australia:2004.
[5]ZENG Qing-xi,WANG Qing,WANG Hao-wei,et al.Research and realization of key technology for software GPS receiver base on DSP[J].Chinese Journal of Scientific Instrument,2009,30(6):1251 -1255.
[6]PSIAKI M L.Realtime-time generation of bit-wise parallel representations of over-sampled PRN codes[J].IEEE Transactions on Wireless Communications,2006,5(3):487-491.