史小雨,程鵬飛,蔡艷輝,李為喬
(1.廣州中海達衛星導航技術股份有限公司,廣東廣州511400;2.中國測繪科學研究院,北京100830;3.北京奧騰巖石科技有限公司,北京100176)
差分GPS數據通信格式RTCM 3.1及其解碼算法的實現
史小雨1,程鵬飛2,蔡艷輝2,李為喬3
(1.廣州中海達衛星導航技術股份有限公司,廣東廣州511400;2.中國測繪科學研究院,北京100830;3.北京奧騰巖石科技有限公司,北京100176)
目前差分GPS作為提高定位精度與可靠性的一種重要手段而受到越來越多的關注,該技術在數據傳輸時通常使用國際通用的RTCM SC-104協議。簡要介紹RTCM 3.1版本的數據格式,針對該版本設計解碼算法并編程實現,最后通過對Trimble實測數據的解析與驗證,證明解碼算法的正確性和程序的可靠性。
差分GPS;RTCM 3.1;數據解碼;數據通信
隨著社會的發展,人們對定位的要求也在不斷的提高,為了提高定位的精度和可靠性,差分GPS (DGPS)越來越受到人們的歡迎。利用這種技術,用戶可以使用一臺單頻接收機實時地獲得米級(測碼偽距差分)或者厘米級(測相偽距差分)的定位精度。在基準站與流動站數據傳輸時通常使用國際通用的RTCM SC-104協議,該協議由國際海運事業無線電委員會提出。在發布了2.x版本后,該委員會意識到這個版本有如下缺點:① 每24位數據之后都跟著6位奇偶檢校碼,這是對帶寬的一種浪費;②字與字之間的奇偶檢校碼彼此之間不獨立;③雖然用了多個位進行奇偶檢校,信息的完整性還是不能得到很好的保證;④30位的字處理起來相當麻煩。因此,在作了適當修改之后,新版本的RTCM 3.0于2004年推出。查閱相關文獻后,筆者發現介紹和解碼新版本電文的材料比較少,所以本文主要介紹RTCM SC-104新發布的3.1電文及其解碼算法[1]。
RTCM 3.1標準是對2.x版本的一次升級,可以支持單基準站或網絡基準站的GPS與GLONASS信息操作,同時可以直接支持正在開發的新系統(如Galileo),或是對現有系統的改進(如新的L2C和L5波段)。此外,新的標準還可以支持增強系統。作為版本3的新標準,3.1標準中包含GPS網絡差分改正數,可以支持大區域內的移動接收機獲取精確的RTK信息。新的GPS和GLONASS信息提供了衛星軌道參數以輔助快速捕獲,為了傳輸純文本數據也提供了一種Unicode文本信息,同時預留了一部分消息讓用戶自己定義,用戶可以方便地向電文中加入自己定義的信息。具體的內容如表1所示。

表1 RTCM 3.1電文類型[1]

續表1
RTCM 3.1以數據庫的形式來設計,與NMEA 2000有些相像。不同的是NMEA 2000是為了不同電子單元的網絡化而設計的,而版本3的差分GNSS標準則是為集中發布數據而設計的。對于版本3的廣播信息而言,每個位都可能包含經常重復的信息,因此當限制了字節隊列的長度時,強制要求每個數據區都占用幾個整字節是不太現實的。此外,在NMEA 2000數據庫中數據字典和數據域有很大的差別,而在RTCM 3.1中二者的差別就變得很小。所以,與其同時用數據字典和數據域表,不如把二者統一為一個數據域定義更合適[1]。
表1中,分別定義了GPS和GLONASS的RTK消息,這樣就避免了向消息中附加標記信息,因為這樣做改變了消息中數據元素的長度或意義。但是還有一些可變性的數據元素是無法避免的,這是因為衛星的數目不能確定。不過由于衛星數是唯一的變化量,所以傳輸層定義的消息長度使通過消息長度確定衛星數目成為可能。對于長度不超過限定的消息來說,數據發布者需要將最后沒有用完的字節位補0。
針對新版本數據格式的特點,設計相應的解碼算法,主要由以下幾個部分組成。
1.數據管理
從接收機獲取的是字節流,必須要對接收到的數據進行有效的管理才能進行解碼工作。數據管理主要包括:數據的接收、存儲、刪除等操作。由于消息的處理實行先進先出的原則,所以用隊列管理接收到的數據比較有效。接收到數據后,把數據放到隊列里,當判斷收到的數據足夠解碼一條消息時,就將有效部分取出并交給解碼部分進行解碼操作,解碼成功就將該部分數據從隊列中刪除。
隊列的設計可以有兩種選擇方案:循環隊列和一般順序隊。循環隊列的操作比較方便,可以有效地進行數據存儲和刪除等操作,并且不浪費內存。但循環隊列的容量在定義的時候已經確定,不能進行擴充,如果遇到網絡狀態不好時,大量擁堵信息同時到達會使隊列直接崩潰,如果把隊列的容量直接開得很大又會加大系統的開銷,所以本次程序的設計使用的是一般的順序隊。一般順序隊在使用時存在數據“假溢出”的現象,為了解決這個問題設計一種動態隊列來存儲實時收到的數據。這種設計既可以最大限度地節省內存,也可以應對數據擁堵的問題[2]。
2.CRC檢校
與2.x版不同的是,新的版本使用高通CRC (cyclical redundancy check)算法,該算法的24位奇偶位可以有效地探測信息缺失和一些隨機誤差。CRC又稱循環冗余碼校驗,是數據通信領域中最常用的一種差錯校驗碼,它是利用除法及余數的原理來作錯誤偵測的。在RTCM3.1版中,這部分工作由如下多項式產生的碼完成

這種碼被稱為CRC-24Q(Q表示高通公司)。這種碼的生成多項式形式如下(利用二進制多項式算法)

p(X)是簡單的不可被約分的多項式

用戶接到消息之后,既可以利用產生多項式生成校驗碼與已有的進行比對,也可以將消息序列左移24位加上接收到的校驗碼,然后與事先定義好的多項式進行二進制除法,如果余數為0,則表明信息是完整的[1]。
3.解碼設計
由于在新的版本中省去了字節掃描、字節滾動和字節取補碼這些操作,所以解碼部分的難度相比原版本有所減少。根據文獻[1]的描述,一條完整消息包括一個固定的引導字、消息的長度信息、消息體和24位的CRC檢校碼。在判斷消息的完整性后,就可以進行解碼工作了。首先判斷消息的類型,然后將不同的類型交給不同的函數進行解碼,再將解碼出來的數據存入事先定義好的數據塊中[4]。具體解碼過程如圖1所示。

圖1 解碼算法流程圖
根據上述算法,利用C++語言編程實現了該算法。在程序中設計了3個類:CBuffer、CMessage和CRTCM31。
1)CBuffer類主要負責數據的管理,包括接收、存儲和刪除。當接收到數據后,就將其存入CBuffer類中的成員變量中,該變量是一個動態數組,可以存儲任意字節的數據。當判斷接收數據有效且夠一條消息時,就將有用信息提取出來,并將其從數組中刪除,以節省內存空間。
2)CMessage類包括了3.1版本中所有消息的解碼工作,以及結果的輸出,并且可以隨著版本的修改而作出相應的擴充。當接收到有效信息后,就根據不同的消息類型交給不同的解碼函數進行相應的解碼工作,并可以按用戶需求輸出不同的解碼結果。
3)CRTCM31類則是對前兩個類的封裝,負責整個解碼工作的完成,它包含了對接收數據的有效性和完整性檢查,消息數據的提取等。當判斷接收的數據有效就將數據提取出來交給CMessage類進行解碼,否則繼續接收數據,直到沒有消息再進來為止。
使用Trimble接收機產生的RTCM數據進行了驗證。由于電文信息是已知的,所以可對解碼的結果進行驗證。電文與信息如圖2、表2所示。

圖2 原始電文

表2 電文數據信息
解碼結果如圖3所示,與表2基本一致。由于RTCM 3.1版中對載波相位數據進行了數學上的處理,在不破壞其整數特性的同時減少數據傳輸的字節數,所以載波相位值會與原始值有所不同,但不影響數據處理。
本文介紹了GPS差分數據通信中常用的RTCM SC-104協議的3.1版本,該版本新增了部分電文信息,補充了2.x版的不足,確保了GPS差分數據準確實時的傳輸,提高了數據的安全可靠性。分析了GPS差分數據格式,并設計其解碼算法流程,利用VC++編程實現其算法。通過對實測的Trimble數據進行解碼,并檢驗其解碼結果,符合標準,驗證了解析RTCM數據算法的正確性和程序的可靠性。
[1] RTCM Special Committee No.104.RTCM Standard 10403.1 for Differential GNSS[S].Arlington:Radio Technical Commission for Maritime Services,2006.
[2] 劉振鵬,張曉莉,郝杰.數據結構[M].北京:中國鐵道出版社,2003.
[3] 王華,程鵬飛,蔡艷輝.基于Internet的GPS RTK數據傳輸的有效性分析[J].測繪科學,2006,31(1): 67-68.
[4] 李思超,葉甜春,徐建華.DGPS RTCM數據格式簡介及其解碼算法實現[J].電子測量技術,2008,31(12): 11-14.
[5] 郭洪濤,任超.差分GPS數據通訊格式RTCM 3.0及應用發展[J].全球定位系統,2010,35(3):63-65.
[6] 嚴新生,過靜珺,朱小冬,等.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
國家自然科學基金(40974008)
史小雨(1988—),男,河南南陽人,碩士生,主要研究方向為衛星定位與導航。