湖南信息學(xué)院 易晨暉 何 蓉
北斗電文編碼與解碼的研究
湖南信息學(xué)院 易晨暉 何 蓉
差分定位是提高北斗導(dǎo)航定位精度與可靠性的一種重要手段,該技術(shù)在數(shù)據(jù)傳輸時(shí)使用國(guó)際通用的RTCM SC-104標(biāo)準(zhǔn)。RTCM SC-104標(biāo)準(zhǔn)由國(guó)際海運(yùn)事業(yè)無(wú)線電技術(shù)委員會(huì)(RTCM)1983年11月推出,從1983年到2016年已經(jīng)經(jīng)過(guò)了多個(gè)版本的發(fā)展。推出RTCM SC-104標(biāo)準(zhǔn)的目的在于論證用于提供GPS業(yè)務(wù)的各種方法,并制定各種數(shù)據(jù)格式標(biāo)準(zhǔn)。經(jīng)過(guò)多個(gè)版本的更新,差分改正數(shù)的抗差性能和實(shí)時(shí)動(dòng)態(tài)差分定位(Real-Time Kinematic,RTK)性能在不斷地提高,可用信息量不斷增加。而RTCM 3.2的制定和修訂不僅彌補(bǔ)了之前版本中結(jié)構(gòu)設(shè)計(jì)上存在的明顯缺陷,還增加和擴(kuò)展了多種網(wǎng)絡(luò)RTK信息,尤其值得強(qiáng)調(diào)的是MSM電文組可以對(duì)北斗系統(tǒng)提供支持,這對(duì)北斗高精度差分定位服務(wù)有著重要的意義。但是由于RTCM3.2標(biāo)準(zhǔn)公布的時(shí)間較短,支持此標(biāo)準(zhǔn)的接收機(jī)較少,對(duì)編碼、解碼流程研究少。因此本文基于RTCM 3.2對(duì)北斗電文的編碼與解碼展開(kāi)研究與實(shí)現(xiàn),主要分析了《RTCM STANDARD 10403.2》的電文結(jié)構(gòu)和數(shù)據(jù)類型,提出了一種關(guān)于北斗電文編碼和解碼的方法,實(shí)現(xiàn)了北斗電文編碼和解碼程序流程設(shè)計(jì),并基于VC++平臺(tái)實(shí)現(xiàn)了RTCM 3.2電文的編寫(xiě)、基于VC#軟件開(kāi)發(fā)平臺(tái)上實(shí)現(xiàn)了解碼操作,同時(shí)進(jìn)行循環(huán)冗余校驗(yàn)以保證數(shù)據(jù)解析的正確性。通過(guò)電文數(shù)據(jù)的解析與實(shí)驗(yàn)程序結(jié)果驗(yàn)證,證明了編碼和解碼算法的正確性和程序的可靠性。
RTCM 3.2;北斗電文;編碼;解碼
我國(guó)自主研發(fā)的北斗衛(wèi)星導(dǎo)航定位系統(tǒng)(BeiDou Navigation Satellite System,BDS)可以和目前世界上其他幾大衛(wèi)星導(dǎo)航定位系統(tǒng)實(shí)現(xiàn)兼容與互操作,它具有三大基本功能,分別是快速定位、雙向通信和精密授時(shí),目前已被廣泛應(yīng)用于我國(guó)交通運(yùn)輸、海洋漁業(yè)、水文監(jiān)測(cè)、氣象預(yù)報(bào)、測(cè)繪地理信息、森林防火、通信時(shí)統(tǒng)、電力調(diào)度、救災(zāi)減災(zāi)、應(yīng)急搜救等各個(gè)領(lǐng)域[1]。北斗衛(wèi)星導(dǎo)航系統(tǒng)的建設(shè)與發(fā)展對(duì)國(guó)家安全,經(jīng)濟(jì)建設(shè)、科技發(fā)展和社會(huì)進(jìn)步等方面有重大意義。隨著我國(guó)北斗衛(wèi)星導(dǎo)航定位系統(tǒng)及產(chǎn)業(yè)的蓬勃發(fā)展,人們對(duì)北斗導(dǎo)航中定位的精度和可靠性有著越來(lái)越高的要求。為了滿足衛(wèi)星導(dǎo)航定位系統(tǒng)的高精度差分定位以及增強(qiáng)服務(wù)的要求,RTCM委員會(huì)2013年又推出了RTCM 3.2(RTCM standard 10403.2 differential GNSS Services-Version 2)[5]。RTCM 3.2的制定和修訂,不僅彌補(bǔ)了之前版本中結(jié)構(gòu)設(shè)計(jì)上存在的明顯缺陷,還增加和擴(kuò)展了多種網(wǎng)絡(luò)RTK(實(shí)時(shí)動(dòng)態(tài)測(cè)量技術(shù))信息,定義了包含GPS、GLONASS、GALILEO和BDS的多信號(hào)信息組(Multiple Signal Message,MSM)[6],拓寬了RTCM的應(yīng)用領(lǐng)域。尤其值得強(qiáng)調(diào)的是MSM電文組可以對(duì)北斗系統(tǒng)提供支持,這對(duì)北斗高精度差分定位服務(wù)有著重要的意義[2]。但是由于RTCM3.2標(biāo)準(zhǔn)公布的時(shí)間較短,支持此標(biāo)準(zhǔn)的接收機(jī)較少,對(duì)編碼、解碼流程研究少,因此本文基于RTCM 3.2對(duì)北斗電文的編碼與解碼展開(kāi)研究與實(shí)現(xiàn)。
差分定位的精度與差分改正信息的更新速率以及數(shù)據(jù)傳輸?shù)臏?zhǔn)確性密切相關(guān),因此,數(shù)據(jù)傳輸格式是數(shù)據(jù)通訊鏈的重要環(huán)節(jié),只有兼容性強(qiáng)和規(guī)范性強(qiáng)的數(shù)據(jù)格式標(biāo)準(zhǔn)才能保證在導(dǎo)航與定位中數(shù)據(jù)傳輸?shù)目焖佟?zhǔn)確和可靠。
RTCM 3.2版本采用了OSI(Open System Interconnection)標(biāo)準(zhǔn)參考模型,在RTCM 3.2標(biāo)準(zhǔn)中包含應(yīng)用層、表示層、傳輸層、數(shù)據(jù)鏈層和物理層。應(yīng)用層為導(dǎo)航和定位應(yīng)用程序定義了創(chuàng)建和應(yīng)用數(shù)據(jù)的指令;表示層則具體規(guī)定了消息、數(shù)據(jù)要素和數(shù)據(jù)定義;傳輸層定義用于發(fā)送或接收消息的幀結(jié)構(gòu)、可變長(zhǎng)消息的實(shí)現(xiàn)方法以及數(shù)據(jù)的循環(huán)校驗(yàn)方法等;數(shù)據(jù)鏈路層定義了消息數(shù)據(jù)流如何在物理層上編碼;物理層定義了消息數(shù)據(jù)電氣和機(jī)械水平,使用時(shí)取決于用戶。其中,對(duì)于編碼、解碼最重要的是表示層和傳輸層[3]。最新的RTCM 3.2標(biāo)準(zhǔn)格式,是一種更高效、簡(jiǎn)潔且容易適用于新環(huán)境的數(shù)據(jù)格式,可以應(yīng)用于網(wǎng)絡(luò)RTK環(huán)境中,主要包括消息幀結(jié)構(gòu)、消息類型、數(shù)據(jù)字段、數(shù)據(jù)類型等。
RTCM 3.2標(biāo)準(zhǔn)格式的幀結(jié)構(gòu)與RTCM 3.1標(biāo)準(zhǔn)格式相同[4],每幀數(shù)據(jù)的結(jié)構(gòu)如表1所示。
消息類型規(guī)定了每幀數(shù)據(jù)可變長(zhǎng)度的數(shù)據(jù)消息,是RTCM 3.2協(xié)議傳輸各種消息的載體。消息類型根據(jù)用途被劃分為不同的消息組,為有效實(shí)現(xiàn)特定服務(wù),服務(wù)商需要發(fā)送組中的幾種消息類型。每組中不同的消息類型可包含相似的內(nèi)容,在某些情況下短消息只包含提供服務(wù)所需的最少最必要的信息,而長(zhǎng)消息類型則包含增強(qiáng)服務(wù)的額外信息。例如,1001消息類型是只包含消息觀測(cè)值的最短版本,對(duì)于一個(gè)吞吐量有限的廣播鏈路,使用1001消息類型可能是合適的。而1002消息類型包含增強(qiáng)服務(wù)的額外信息,如果吞吐量并未受限并需要額外信息,推薦使用長(zhǎng)版本的1002消息類型。與之相類似的1003消息類型只提供了應(yīng)用層/表示層操作所需的最少數(shù)據(jù),而1004消息類型提供了完整的數(shù)據(jù)內(nèi)容。較短的觀測(cè)值消息可節(jié)約吞吐量,但只包含較少的信息;而包含附加信息的長(zhǎng)消息不會(huì)經(jīng)常改變,發(fā)送次數(shù)也少。
表1 RTCM 3.2標(biāo)準(zhǔn)格式的幀結(jié)構(gòu)
RTCM 3.2標(biāo)準(zhǔn)格式中已定義消息組包括觀測(cè)數(shù)據(jù)、測(cè)站坐標(biāo)、天線描述、網(wǎng)絡(luò)RTK改正、輔助觀測(cè)信息和專有信息,BDS多信號(hào)消息(MSM)等。RTCM3.2版本通過(guò)定義新消息類型,能夠支持20種服務(wù),同時(shí)還實(shí)現(xiàn)3種狀態(tài)空間差分(SSR)服務(wù),服務(wù)商可以按照需求提供基本或者完整的服務(wù)[6]。
數(shù)據(jù)字段是消息的重要組成部分,每條消息是由若干數(shù)據(jù)字段按一定格式排列而成,數(shù)據(jù)字段規(guī)定數(shù)據(jù)字段的范圍、分辨率和數(shù)據(jù)類型。RTCM3.2定義了427個(gè)數(shù)據(jù)字段,其中新定義數(shù)據(jù)字段主要用于表示坐標(biāo)轉(zhuǎn)換、網(wǎng)絡(luò)RTK殘差、狀態(tài)空間差分、GLONASS網(wǎng)絡(luò)RTK改正、FKP網(wǎng)絡(luò)RTK改正、MSM消息和GLONASS偏差消息等。
數(shù)據(jù)類型規(guī)定數(shù)據(jù)的范圍,包括位字段、八位字符、補(bǔ)碼整數(shù)、無(wú)符號(hào)整數(shù)、帶符號(hào)數(shù)值整數(shù)和UTF-8編碼共六種形式的數(shù)據(jù)類型。RTCM 3.2定義了55種數(shù)據(jù)類型,數(shù)據(jù)類型有bit(n)、char8(n)、int、uint、intS、utf8(n)等,其具體描述見(jiàn)表2所示。需要注意的是數(shù)據(jù)字段范圍有可能會(huì)小于數(shù)據(jù)類型所允許的最大可能范圍(DF Range),RTCM 3.2中有詳細(xì)的標(biāo)明。有些數(shù)據(jù)計(jì)算出來(lái)不一定是整數(shù)數(shù)據(jù),這個(gè)時(shí)候需要來(lái)乘以分辨率(DF Resolution)再通過(guò)解碼和數(shù)據(jù)類型轉(zhuǎn)換得到整數(shù)結(jié)果。
表2 數(shù)據(jù)類型說(shuō)明
如果有幾個(gè)衛(wèi)星提供信息,每個(gè)消息都包含一組特定的數(shù)據(jù)字段集,其中有時(shí)會(huì)有重復(fù)。這些數(shù)據(jù)字段將在廣播中順序列出,并將最重要的多字節(jié)信息最先傳送而不那么重要的字節(jié)消息后傳送。RTCM 3.2中新定義的消息類型多,其中MSM消息是為不同衛(wèi)星系統(tǒng)觀測(cè)數(shù)據(jù)提供通用傳輸格式而定義的,可以分解成壓縮消息和完整消息(類似于消息類型1003和1004)[6]。各種導(dǎo)航定位系統(tǒng)的MSM消息具有相同的結(jié)構(gòu),內(nèi)部模塊排序也基本相同。
RTCM 3.2電文編碼的實(shí)現(xiàn)需要了解并熟悉《RTCM STANDARD 10403.2》標(biāo)準(zhǔn)內(nèi)容,根據(jù)服務(wù)類型來(lái)選擇消息類型,了解電文的整體結(jié)構(gòu),熟悉電文的數(shù)據(jù)字段存儲(chǔ)的內(nèi)容以及占用的位數(shù),其中有些數(shù)據(jù)字段涉及計(jì)算;同時(shí)也需要了解C++程序的結(jié)構(gòu),各種結(jié)構(gòu)體以及各類消息的編寫(xiě)流程等。
本文選擇VC++開(kāi)發(fā)平臺(tái)來(lái)實(shí)現(xiàn)RTCM 3.2電文編碼。VC++開(kāi)發(fā)平臺(tái)是面向?qū)ο蟮目梢暬删幊滔到y(tǒng),它不但具有程序框架自動(dòng)生成、靈活方便的類管理、代碼編寫(xiě)和界面設(shè)計(jì)集成交互操作、可開(kāi)發(fā)多種程序等優(yōu)點(diǎn),而且通過(guò)簡(jiǎn)單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫(kù)接口、OLE2、WinSock網(wǎng)絡(luò)、3D控制界面。它允許用戶進(jìn)行遠(yuǎn)程調(diào)試,單步執(zhí)行,在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動(dòng)正在調(diào)試的程序。在系統(tǒng)設(shè)置及程序編譯中,預(yù)編譯頭文件、最小重建功能及累加連結(jié)等這些特征明顯縮短程序編輯、編譯及鏈接所花費(fèi)的時(shí)間,在大型軟件上效果尤其顯著。
RTCM 3.2電文編碼實(shí)現(xiàn)過(guò)程中,為了達(dá)到較高的傳輸完整率,一條標(biāo)準(zhǔn)的電文采用消息幀結(jié)構(gòu),具體的消息幀結(jié)構(gòu)如表1所示。在RTCM 3.2中,不是每條電文都是按整字節(jié)編寫(xiě)的,所以在編碼的過(guò)程中我們需要對(duì)不是整字節(jié)的電文進(jìn)行補(bǔ)碼。同時(shí),進(jìn)行循環(huán)冗余校驗(yàn)以保證數(shù)據(jù)解析的正確性。循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯(cuò)算法,對(duì)數(shù)據(jù)進(jìn)行多項(xiàng)式的計(jì)算,并將算出的結(jié)果附在電文的后面,用來(lái)保證數(shù)據(jù)傳輸?shù)恼_性和完整性。消息幀的接收方用一個(gè)二進(jìn)制因子(生成多項(xiàng)式)除以消息幀的內(nèi)容計(jì)算出余數(shù),并將所計(jì)算出的余數(shù)與發(fā)送方存儲(chǔ)在消息幀中的檢驗(yàn)碼進(jìn)行比較。本文編碼中采用按字節(jié)計(jì)算CRC,并把8位二進(jìn)制序列數(shù)的CRC全部計(jì)算出來(lái),如放一個(gè)表里,采用查表法,大大提高了計(jì)算速度。通過(guò)實(shí)測(cè)數(shù)據(jù)驗(yàn)證解析結(jié)果的正確性。
基于VC++開(kāi)發(fā)平臺(tái)的RTCM 3.2電文編碼流程如下圖所示:
圖3-1 編碼流程圖
具體流程說(shuō)明:①所選擇的消息號(hào)是否含有消息頭。如果有,先添加消息頭內(nèi)容;如果沒(méi)有,直接添加電文消息內(nèi)容。②將編碼完的消息號(hào)轉(zhuǎn)為二進(jìn)制輸出;③在數(shù)據(jù)前面添加引導(dǎo)字“11010011”和保留字“000000”;④在這條電文后面添加24位CRC校驗(yàn)碼。⑤得到完整的電文。
以上是對(duì)一條完整的電文數(shù)據(jù)詳細(xì)進(jìn)行的編碼過(guò)程,不同系統(tǒng)之間的編碼流程是一致的,所有信息類型的編碼過(guò)程與上述思想大致相同。
圖3-2 編碼文件導(dǎo)入
圖3-3 編碼內(nèi)容展示
圖3-4 基于VC++的RTCM 3.2電文編碼實(shí)現(xiàn)界面
程序界面簡(jiǎn)潔易懂,實(shí)用性好,通過(guò)實(shí)測(cè)數(shù)據(jù)驗(yàn)證了編碼結(jié)果的正確性。
本文選擇VC#開(kāi)發(fā)平臺(tái)來(lái)實(shí)現(xiàn)RTCM 3.2電文解碼。VC#是由C和C++衍生出來(lái)的面向?qū)ο蟮木幊陶Z(yǔ)言,擁有簡(jiǎn)單的可視化操作、高運(yùn)行效率和Microsoft.net提供的最大程度地開(kāi)發(fā)利用計(jì)算與通訊領(lǐng)域的一系列工具和服務(wù)。VC#開(kāi)發(fā)應(yīng)用軟件可以大大縮短開(kāi)發(fā)周期,同時(shí)可以嵌入用戶C++代碼。
基于VC#開(kāi)發(fā)平臺(tái)的RTCM 3.2電文解碼流程如下圖所示:
圖4-1 解碼程序流程圖
具體流程說(shuō)明:①讀取RTCM 3.2電文數(shù)據(jù);②從末尾位置開(kāi)始往上提取 24 位得到完整的 CRC ;③進(jìn)行CRC 24校驗(yàn),若校驗(yàn)通過(guò),則進(jìn)行下一步;④從前24位開(kāi)始提取12位電文消息號(hào),代表信息類型。⑤選擇電文消息號(hào),通過(guò)該電文在 RTCM 3.2 文檔中的具體要求進(jìn)行解碼。⑥輸出解碼后的數(shù)據(jù)。
以上是對(duì)一條完整的電文數(shù)據(jù)詳細(xì)進(jìn)行解碼的過(guò)程,不同系統(tǒng)之間的解碼流程是一致的,所有信息類型的解碼過(guò)程與上述思想大致相同。
在VC#開(kāi)發(fā)平臺(tái)上實(shí)現(xiàn)RTCM 3.2電文解碼,實(shí)現(xiàn)過(guò)程中界面如下圖所示:
圖4-2 解碼文件導(dǎo)入
圖4-3 解碼電文解析
進(jìn)行解碼后的電文數(shù)據(jù)能夠?qū)崿F(xiàn)自動(dòng)保存在自定義的路徑中:
圖4-4 電文解碼實(shí)現(xiàn)界面
對(duì)實(shí)測(cè)數(shù)據(jù)進(jìn)行解碼后得到的數(shù)據(jù)信息,將解碼的數(shù)據(jù)與接收機(jī)保存的文件進(jìn)行了對(duì)比,得出了一致的結(jié)果,驗(yàn)證了算法的正確性。
本文基于RTCM 3.2對(duì)北斗電文的編碼與解碼展開(kāi)研究與實(shí)現(xiàn),基于VC++平臺(tái)實(shí)現(xiàn)了RTCM 3.2電文庫(kù)的編寫(xiě),基于VC#軟件開(kāi)發(fā)平臺(tái)上實(shí)現(xiàn)了解碼操作,同時(shí)進(jìn)行循環(huán)冗余校驗(yàn),實(shí)驗(yàn)結(jié)果驗(yàn)證了算法的正確性和可靠性。
RTCM 3.2標(biāo)準(zhǔn)格式正逐漸成為衛(wèi)星導(dǎo)航定位領(lǐng)域芯片制造商、板卡集成商、整機(jī)制造商、應(yīng)用服務(wù)提供商以及用戶等在設(shè)計(jì)研發(fā)、生產(chǎn)加工、應(yīng)用推廣等產(chǎn)業(yè)鏈中遵守的關(guān)鍵協(xié)議之一。目前,RTCM 3.2標(biāo)準(zhǔn)電文容量為4096條,已經(jīng)占用了1310條電文(含保留電文1112條),但僅在多頻率多信號(hào)電文組(MSM)中為北斗制訂了10條電文,在四大全球衛(wèi)星導(dǎo)航系統(tǒng)中北斗電文數(shù)量最少。BDS在RTCM 3.2電文業(yè)務(wù)的發(fā)展仍需不斷努力,才能在國(guó)內(nèi)外GNSS高精度差分定位領(lǐng)域有進(jìn)一步突破,從而能提供更完整、獨(dú)立、兼容的服務(wù)。
[1]中華人民共和國(guó)國(guó)務(wù)院新聞辦公室.《中國(guó)北斗衛(wèi)星導(dǎo)航系統(tǒng)》白皮書(shū).[EB/OL].http://news.xinhuanet.com/tech/2016-06/16/c_1119053495. html.2016,6.
[2]吳海玲,李作虎,劉暉.關(guān)于北斗加入RTCM國(guó)際標(biāo)準(zhǔn)的總體研究[J].全球定位系統(tǒng),2014,39(1):27-33.
[3]朱靜然,潘樹(shù)國(guó),孔麗珍.DGPS數(shù)據(jù)格式RTCM3.2介紹及編解碼方法[C].第四屆中國(guó)衛(wèi)星導(dǎo)航學(xué)術(shù)年會(huì)論文集-S1 北斗/GNSS導(dǎo)航應(yīng)用,2013.
[4]陳振,王權(quán),秘金鐘,谷守周,方書(shū)山,向常淦.新一代國(guó)際標(biāo)準(zhǔn)RTCM V3.2及其應(yīng)用[J].導(dǎo)航定位學(xué)報(bào),2014,2(4):87-93.
[5]RTCM special committee no.104. RTCM-standard 10403.2 for Differential GNSS[S]. Arlington:Radio Technical Commission for Maritime Services, 2013.
[6]RTCM special committee no.104. Amendment 1 To RTCM-standard 10403.2 for Differential GNSS[S]. Arlington:Radio Technical Commission for Maritime Services, 2013.
易晨暉,女,碩士研究生,湖南信息學(xué)院講師,主要從事計(jì)算機(jī)應(yīng)用、人工智能、北斗導(dǎo)航等研究。