史小雨,程鵬飛,蔡艷輝,李為喬
(1.廣州中海達(dá)衛(wèi)星導(dǎo)航技術(shù)股份有限公司,廣東廣州511400;2.中國(guó)測(cè)繪科學(xué)研究院,北京100830;3.北京奧騰巖石科技有限公司,北京100176)
差分GPS數(shù)據(jù)通信格式RTCM 3.1及其解碼算法的實(shí)現(xiàn)
史小雨1,程鵬飛2,蔡艷輝2,李為喬3
(1.廣州中海達(dá)衛(wèi)星導(dǎo)航技術(shù)股份有限公司,廣東廣州511400;2.中國(guó)測(cè)繪科學(xué)研究院,北京100830;3.北京奧騰巖石科技有限公司,北京100176)
目前差分GPS作為提高定位精度與可靠性的一種重要手段而受到越來(lái)越多的關(guān)注,該技術(shù)在數(shù)據(jù)傳輸時(shí)通常使用國(guó)際通用的RTCM SC-104協(xié)議。簡(jiǎn)要介紹RTCM 3.1版本的數(shù)據(jù)格式,針對(duì)該版本設(shè)計(jì)解碼算法并編程實(shí)現(xiàn),最后通過(guò)對(duì)Trimble實(shí)測(cè)數(shù)據(jù)的解析與驗(yàn)證,證明解碼算法的正確性和程序的可靠性。
差分GPS;RTCM 3.1;數(shù)據(jù)解碼;數(shù)據(jù)通信
隨著社會(huì)的發(fā)展,人們對(duì)定位的要求也在不斷的提高,為了提高定位的精度和可靠性,差分GPS (DGPS)越來(lái)越受到人們的歡迎。利用這種技術(shù),用戶可以使用一臺(tái)單頻接收機(jī)實(shí)時(shí)地獲得米級(jí)(測(cè)碼偽距差分)或者厘米級(jí)(測(cè)相偽距差分)的定位精度。在基準(zhǔn)站與流動(dòng)站數(shù)據(jù)傳輸時(shí)通常使用國(guó)際通用的RTCM SC-104協(xié)議,該協(xié)議由國(guó)際海運(yùn)事業(yè)無(wú)線電委員會(huì)提出。在發(fā)布了2.x版本后,該委員會(huì)意識(shí)到這個(gè)版本有如下缺點(diǎn):① 每24位數(shù)據(jù)之后都跟著6位奇偶檢校碼,這是對(duì)帶寬的一種浪費(fèi);②字與字之間的奇偶檢校碼彼此之間不獨(dú)立;③雖然用了多個(gè)位進(jìn)行奇偶檢校,信息的完整性還是不能得到很好的保證;④30位的字處理起來(lái)相當(dāng)麻煩。因此,在作了適當(dāng)修改之后,新版本的RTCM 3.0于2004年推出。查閱相關(guān)文獻(xiàn)后,筆者發(fā)現(xiàn)介紹和解碼新版本電文的材料比較少,所以本文主要介紹RTCM SC-104新發(fā)布的3.1電文及其解碼算法[1]。
RTCM 3.1標(biāo)準(zhǔn)是對(duì)2.x版本的一次升級(jí),可以支持單基準(zhǔn)站或網(wǎng)絡(luò)基準(zhǔn)站的GPS與GLONASS信息操作,同時(shí)可以直接支持正在開(kāi)發(fā)的新系統(tǒng)(如Galileo),或是對(duì)現(xiàn)有系統(tǒng)的改進(jìn)(如新的L2C和L5波段)。此外,新的標(biāo)準(zhǔn)還可以支持增強(qiáng)系統(tǒng)。作為版本3的新標(biāo)準(zhǔn),3.1標(biāo)準(zhǔn)中包含GPS網(wǎng)絡(luò)差分改正數(shù),可以支持大區(qū)域內(nèi)的移動(dòng)接收機(jī)獲取精確的RTK信息。新的GPS和GLONASS信息提供了衛(wèi)星軌道參數(shù)以輔助快速捕獲,為了傳輸純文本數(shù)據(jù)也提供了一種Unicode文本信息,同時(shí)預(yù)留了一部分消息讓用戶自己定義,用戶可以方便地向電文中加入自己定義的信息。具體的內(nèi)容如表1所示。
表1 RTCM 3.1電文類型[1]
續(xù)表1
RTCM 3.1以數(shù)據(jù)庫(kù)的形式來(lái)設(shè)計(jì),與NMEA 2000有些相像。不同的是NMEA 2000是為了不同電子單元的網(wǎng)絡(luò)化而設(shè)計(jì)的,而版本3的差分GNSS標(biāo)準(zhǔn)則是為集中發(fā)布數(shù)據(jù)而設(shè)計(jì)的。對(duì)于版本3的廣播信息而言,每個(gè)位都可能包含經(jīng)常重復(fù)的信息,因此當(dāng)限制了字節(jié)隊(duì)列的長(zhǎng)度時(shí),強(qiáng)制要求每個(gè)數(shù)據(jù)區(qū)都占用幾個(gè)整字節(jié)是不太現(xiàn)實(shí)的。此外,在NMEA 2000數(shù)據(jù)庫(kù)中數(shù)據(jù)字典和數(shù)據(jù)域有很大的差別,而在RTCM 3.1中二者的差別就變得很小。所以,與其同時(shí)用數(shù)據(jù)字典和數(shù)據(jù)域表,不如把二者統(tǒng)一為一個(gè)數(shù)據(jù)域定義更合適[1]。
表1中,分別定義了GPS和GLONASS的RTK消息,這樣就避免了向消息中附加標(biāo)記信息,因?yàn)檫@樣做改變了消息中數(shù)據(jù)元素的長(zhǎng)度或意義。但是還有一些可變性的數(shù)據(jù)元素是無(wú)法避免的,這是因?yàn)樾l(wèi)星的數(shù)目不能確定。不過(guò)由于衛(wèi)星數(shù)是唯一的變化量,所以傳輸層定義的消息長(zhǎng)度使通過(guò)消息長(zhǎng)度確定衛(wèi)星數(shù)目成為可能。對(duì)于長(zhǎng)度不超過(guò)限定的消息來(lái)說(shuō),數(shù)據(jù)發(fā)布者需要將最后沒(méi)有用完的字節(jié)位補(bǔ)0。
針對(duì)新版本數(shù)據(jù)格式的特點(diǎn),設(shè)計(jì)相應(yīng)的解碼算法,主要由以下幾個(gè)部分組成。
1.數(shù)據(jù)管理
從接收機(jī)獲取的是字節(jié)流,必須要對(duì)接收到的數(shù)據(jù)進(jìn)行有效的管理才能進(jìn)行解碼工作。數(shù)據(jù)管理主要包括:數(shù)據(jù)的接收、存儲(chǔ)、刪除等操作。由于消息的處理實(shí)行先進(jìn)先出的原則,所以用隊(duì)列管理接收到的數(shù)據(jù)比較有效。接收到數(shù)據(jù)后,把數(shù)據(jù)放到隊(duì)列里,當(dāng)判斷收到的數(shù)據(jù)足夠解碼一條消息時(shí),就將有效部分取出并交給解碼部分進(jìn)行解碼操作,解碼成功就將該部分?jǐn)?shù)據(jù)從隊(duì)列中刪除。
隊(duì)列的設(shè)計(jì)可以有兩種選擇方案:循環(huán)隊(duì)列和一般順序隊(duì)。循環(huán)隊(duì)列的操作比較方便,可以有效地進(jìn)行數(shù)據(jù)存儲(chǔ)和刪除等操作,并且不浪費(fèi)內(nèi)存。但循環(huán)隊(duì)列的容量在定義的時(shí)候已經(jīng)確定,不能進(jìn)行擴(kuò)充,如果遇到網(wǎng)絡(luò)狀態(tài)不好時(shí),大量擁堵信息同時(shí)到達(dá)會(huì)使隊(duì)列直接崩潰,如果把隊(duì)列的容量直接開(kāi)得很大又會(huì)加大系統(tǒng)的開(kāi)銷,所以本次程序的設(shè)計(jì)使用的是一般的順序隊(duì)。一般順序隊(duì)在使用時(shí)存在數(shù)據(jù)“假溢出”的現(xiàn)象,為了解決這個(gè)問(wèn)題設(shè)計(jì)一種動(dòng)態(tài)隊(duì)列來(lái)存儲(chǔ)實(shí)時(shí)收到的數(shù)據(jù)。這種設(shè)計(jì)既可以最大限度地節(jié)省內(nèi)存,也可以應(yīng)對(duì)數(shù)據(jù)擁堵的問(wèn)題[2]。
2.CRC檢校
與2.x版不同的是,新的版本使用高通CRC (cyclical redundancy check)算法,該算法的24位奇偶位可以有效地探測(cè)信息缺失和一些隨機(jī)誤差。CRC又稱循環(huán)冗余碼校驗(yàn),是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯(cuò)校驗(yàn)碼,它是利用除法及余數(shù)的原理來(lái)作錯(cuò)誤偵測(cè)的。在RTCM3.1版中,這部分工作由如下多項(xiàng)式產(chǎn)生的碼完成
這種碼被稱為CRC-24Q(Q表示高通公司)。這種碼的生成多項(xiàng)式形式如下(利用二進(jìn)制多項(xiàng)式算法)
p(X)是簡(jiǎn)單的不可被約分的多項(xiàng)式
用戶接到消息之后,既可以利用產(chǎn)生多項(xiàng)式生成校驗(yàn)碼與已有的進(jìn)行比對(duì),也可以將消息序列左移24位加上接收到的校驗(yàn)碼,然后與事先定義好的多項(xiàng)式進(jìn)行二進(jìn)制除法,如果余數(shù)為0,則表明信息是完整的[1]。
3.解碼設(shè)計(jì)
由于在新的版本中省去了字節(jié)掃描、字節(jié)滾動(dòng)和字節(jié)取補(bǔ)碼這些操作,所以解碼部分的難度相比原版本有所減少。根據(jù)文獻(xiàn)[1]的描述,一條完整消息包括一個(gè)固定的引導(dǎo)字、消息的長(zhǎng)度信息、消息體和24位的CRC檢校碼。在判斷消息的完整性后,就可以進(jìn)行解碼工作了。首先判斷消息的類型,然后將不同的類型交給不同的函數(shù)進(jìn)行解碼,再將解碼出來(lái)的數(shù)據(jù)存入事先定義好的數(shù)據(jù)塊中[4]。具體解碼過(guò)程如圖1所示。
圖1 解碼算法流程圖
根據(jù)上述算法,利用C++語(yǔ)言編程實(shí)現(xiàn)了該算法。在程序中設(shè)計(jì)了3個(gè)類:CBuffer、CMessage和CRTCM31。
1)CBuffer類主要負(fù)責(zé)數(shù)據(jù)的管理,包括接收、存儲(chǔ)和刪除。當(dāng)接收到數(shù)據(jù)后,就將其存入CBuffer類中的成員變量中,該變量是一個(gè)動(dòng)態(tài)數(shù)組,可以存儲(chǔ)任意字節(jié)的數(shù)據(jù)。當(dāng)判斷接收數(shù)據(jù)有效且夠一條消息時(shí),就將有用信息提取出來(lái),并將其從數(shù)組中刪除,以節(jié)省內(nèi)存空間。
2)CMessage類包括了3.1版本中所有消息的解碼工作,以及結(jié)果的輸出,并且可以隨著版本的修改而作出相應(yīng)的擴(kuò)充。當(dāng)接收到有效信息后,就根據(jù)不同的消息類型交給不同的解碼函數(shù)進(jìn)行相應(yīng)的解碼工作,并可以按用戶需求輸出不同的解碼結(jié)果。
3)CRTCM31類則是對(duì)前兩個(gè)類的封裝,負(fù)責(zé)整個(gè)解碼工作的完成,它包含了對(duì)接收數(shù)據(jù)的有效性和完整性檢查,消息數(shù)據(jù)的提取等。當(dāng)判斷接收的數(shù)據(jù)有效就將數(shù)據(jù)提取出來(lái)交給CMessage類進(jìn)行解碼,否則繼續(xù)接收數(shù)據(jù),直到?jīng)]有消息再進(jìn)來(lái)為止。
使用Trimble接收機(jī)產(chǎn)生的RTCM數(shù)據(jù)進(jìn)行了驗(yàn)證。由于電文信息是已知的,所以可對(duì)解碼的結(jié)果進(jìn)行驗(yàn)證。電文與信息如圖2、表2所示。
圖2 原始電文
表2 電文數(shù)據(jù)信息
解碼結(jié)果如圖3所示,與表2基本一致。由于RTCM 3.1版中對(duì)載波相位數(shù)據(jù)進(jìn)行了數(shù)學(xué)上的處理,在不破壞其整數(shù)特性的同時(shí)減少數(shù)據(jù)傳輸?shù)淖止?jié)數(shù),所以載波相位值會(huì)與原始值有所不同,但不影響數(shù)據(jù)處理。
本文介紹了GPS差分?jǐn)?shù)據(jù)通信中常用的RTCM SC-104協(xié)議的3.1版本,該版本新增了部分電文信息,補(bǔ)充了2.x版的不足,確保了GPS差分?jǐn)?shù)據(jù)準(zhǔn)確實(shí)時(shí)的傳輸,提高了數(shù)據(jù)的安全可靠性。分析了GPS差分?jǐn)?shù)據(jù)格式,并設(shè)計(jì)其解碼算法流程,利用VC++編程實(shí)現(xiàn)其算法。通過(guò)對(duì)實(shí)測(cè)的Trimble數(shù)據(jù)進(jìn)行解碼,并檢驗(yàn)其解碼結(jié)果,符合標(biāo)準(zhǔn),驗(yàn)證了解析RTCM數(shù)據(jù)算法的正確性和程序的可靠性。
[1] RTCM Special Committee No.104.RTCM Standard 10403.1 for Differential GNSS[S].Arlington:Radio Technical Commission for Maritime Services,2006.
[2] 劉振鵬,張曉莉,郝杰.數(shù)據(jù)結(jié)構(gòu)[M].北京:中國(guó)鐵道出版社,2003.
[3] 王華,程鵬飛,蔡艷輝.基于Internet的GPS RTK數(shù)據(jù)傳輸?shù)挠行苑治觯跩].測(cè)繪科學(xué),2006,31(1): 67-68.
[4] 李思超,葉甜春,徐建華.DGPS RTCM數(shù)據(jù)格式簡(jiǎn)介及其解碼算法實(shí)現(xiàn)[J].電子測(cè)量技術(shù),2008,31(12): 11-14.
[5] 郭洪濤,任超.差分GPS數(shù)據(jù)通訊格式RTCM 3.0及應(yīng)用發(fā)展[J].全球定位系統(tǒng),2010,35(3):63-65.
[6] 嚴(yán)新生,過(guò)靜珺,朱小冬,等.RTCM SC-104差分電文解碼[J].工程勘察,2007(6):61-65.
DGPS Data Communication Format RTCM 3.1 and Its Decoding Arithmetic Realization
SHI Xiaoyu,CHENG Pengfei,CAI Yanhui,LI Weiqiao
0494-0911(2012)06-0004-03
P228.4
B
2011-06-01
國(guó)家自然科學(xué)基金(40974008)
史小雨(1988—),男,河南南陽(yáng)人,碩士生,主要研究方向?yàn)樾l(wèi)星定位與導(dǎo)航。