《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > RTCM數據采集及解碼器設計與實現
RTCM數據采集及解碼器設計與實現
胡 輝,葉鑫華
華東交通大學 信息工程學院,江西 南昌 330013
摘要: 基于華測X60 RTK接收機,針對Windows開發(fā)環(huán)境廣泛使用,采用VC++的MSCOMM控件開發(fā)了RTCM數據采集及解碼器。本軟件能夠動態(tài)顯示RTCM導航電文1、2、3、9等各相關參數,動態(tài)存儲RTCM二進制原始語句及其解碼結果文件,為下一步研制差分基準站、DGPS接收機提供了數據源和基礎。
Abstract:
Key words :

摘 要:基于華測X60 RTK接收機,針對Windows開發(fā)環(huán)境廣泛使用,采用VC++的MSCOMM控件開發(fā)了RTCM數據采集解碼器。本軟件能夠動態(tài)顯示RTCM導航電文1、2、3、9等各相關參數,動態(tài)存儲RTCM二進制原始語句及其解碼結果文件,為下一步研制差分基準站、DGPS接收機提供了數據源和基礎。
關鍵詞:GPS;RTCM;數據采集;解碼

  GPS是美國國防部的第2代衛(wèi)星導航系統(tǒng)。該系統(tǒng)由GPS衛(wèi)星星座、地面監(jiān)控系統(tǒng)和GPS信號接收機3部分組成,能提供全球覆蓋、全天候、全天時連續(xù)定位、導航和授時服務。我國雖有多個科研院所從事GPS相關產品的開發(fā),但其研究對象主要集中在動態(tài)較低的民用領域,而且精度一般不高,在17 m左右[1]。
 美國政府于2000年5月1日取消了SA干擾,此后電離層誤差成為GPS最主要的定位誤差源[2],對GPS數據進行差分處理是提高GPS處理精度的有效途徑,差分GPS接收機是消除電離層誤差的有效手段,這是本文的研究背景。
  本文基于X60 RTK接收機,采用VC開發(fā)環(huán)境,開發(fā)了RTCM解碼軟件,為下一步進行高精度差分定位解算算法研究和DGPS接收機研制工作提供基礎。
1 RTCM SC-104導航電文簡介
  RTCM SC-104是商用DGPS接收機的通用數據格式,該格式與ICD-GPS-200規(guī)定的GPS導航電文的字格式、奇偶校驗規(guī)則相同,不同在于GPS電文中各子幀長度是固定的,而RTCM SC-104電文長度是可變的。RTCM電文結構包括2個字頭,后接n個數據字,每字長為30 bit,具體格式參見文獻[3]。RTCM SC-104共包括21類63種電文。偽距差分電文主要有1、2、3,有時也用到電文9。
1.1電文1
  電文1是RTCM電文中最基本的電文,向用戶提供偽距改正數及其變化率,其內容格式如表1所示。

  其中,S為比例因子,是標識偽距改正數PRC和偽距改正數變化率RRC的比例尺度;U表示用戶測距誤差,有4種編碼,每種編碼代表不同的用戶測距誤差;衛(wèi)星ID 號指衛(wèi)星的編號;PRC指偽距改正數;RRC指偽距改正數變化率,都是用來修正誤差的,具體含義參見文獻[4-5]。
  IOD是改正數的數據齡期,與GPS中IOD意義相同。如RTCM電文IOD與GPS星歷中IOD不相匹配,則不能直接使用該組改正數,因此IOD是保證差分定位的關鍵,以確保用戶使用的導航電文與基準站使用的導航電文相同。
1.2 電文2
  電文2的格式和電文1完全相同, 包含了衛(wèi)星導航參數的變化所導致的偽距變率及偽距變率的改變量。如果用戶站未能解譯出新的星歷,而此時基準站已采用了新的星歷,則兩站所用的星歷不一樣,此時基準站必須同時播發(fā)電文1和電文 2,防止定位結果產生較大誤差。
1.3 電文3
  電文3是GPS參考站參數,用于發(fā)送基準站在 WGS-84 坐標系中的坐標信息 ( ECEFX, ECEFY, ECEFZ),各占32 bit,給定的坐標精度至少到cm級。該項電文由 32×3/ 24 = 4 個字組成, 按順序發(fā)送基準站坐標的3個參數,每個字最后6位是奇偶校驗位。
  電文9用于GPS部分衛(wèi)星組差分改正,其格式與電文1完全相同。
2  RTCM電文解碼方案設計
2.1 VC++平臺簡介
  本軟件主要基于VC++平臺實現,電文的接收用到了VC++中的MSCOMM控件。MSCOMM控件提供了2種處理通信的方式:事件驅動方式和查詢方式。事件驅動方式相當于一般程序設計中的中斷方式。當串口發(fā)生事件或錯誤時,MSCOMM控件會產生OnComm事件,用戶程序可以捕獲該事件進行相應處理。本文的例子均采用該方式。
2.2 RTCM電文解碼方案[6]
  根據RTCM的編碼規(guī)則設計解碼方案,解碼過程可利用電文字頭中的先導字01100110進行同步,主要有如下5個步驟。
   (1)字節(jié)掃描。傳輸數據時,通常采用“6/8”格式的方式。每8 bit數據中僅低6 bit是有效位,第7位為標志位“1”,第8位為空格“0”。接收到的數據必須先取低6位,然后判斷這低6位是不是在64和127之間,如果不是則丟棄這個數據。
  (2)字節(jié)滾動。由于GPS設備多數采用美國國家標準化研究所制定的ANSI X3.16和X3.15型標準接口,故連接到計算機標準串口RS-232上的時候需要進行“字節(jié)滾動”。
  (3)取補碼。當前一個碼字最后一個比特D30*為1時,必須對當前這個字碼的前4個字節(jié)取補碼;如果D30*為0,則保持不變。奇偶校驗位則不必取補碼。
  (4)找引導字。尋找RTCM通用電文引導字(01100110或10011001),進行奇偶校驗,通過同步完成,否則繼續(xù)找引導字。
  (5)電文解碼。根據幀長度,按相應電文格式解碼,主要包括比例因子、用戶測距誤差、衛(wèi)星號、PRC等參數。
  具體解碼流程圖如圖1所示。

3 RTCM數據采集及解碼器實現
3.1 RTCM數據采集及解碼器介紹
  本系統(tǒng)基于Windows操作系統(tǒng),利用VC++編程實現RTCM導航電文解碼,它既能從差分基準站接收數據,又能從數據文件讀取數據,原始數據和解碼結果將被顯示及存儲,解碼結果包括各顆衛(wèi)星所包含的參數。
3.2 RTCM數據采集及解碼器實現
  圖2為數據解調子界面,主要有接收回顯窗和解碼顯示窗2部分,其中接收回顯窗顯示各模塊原始數據,解碼顯示窗顯示解碼結果。

3.3 關鍵代碼介紹
  程序的關鍵在于對接收到的差分數據解碼,根據2.2節(jié)的解碼方案設計,以電文1為例,程序關鍵代碼如下:
   for( i=0;i<N-10;i++)                //找引導字
    { 
       int dxj=b[i]*4+(b[i+1]-bitshift2(b[i+1],4))/16;
       if(dxj==102||pow(2,8)-1-dxj==102) //找到引導字
         {  type=getbit(b[i+1],1,4)*4+getbit(b[i+2],5,6);                //電文類型
       if(bitshift2(b[i+4],1)==1)
                   //如D30*等于1,則對后面4個字節(jié)取補碼
       {…….}               
             else {i=i+5;}
                              //如果D30*不等于1,則不做任何處理
  zt=(b[i]*pow(2,7)+b[i+1]*2+(b[i+2]-bitshift2(b[i+2],5))/32)*0.6;            // z計數
      xuhao=getbit(b[i+2],3,5);          //序號
            changdu=getbit(b[i+2],1,2)*8+getbit(b[i+3],4,6);   //幀長
            health=getbit(b[i+3],1,3);                      //健康度
               int d1=i+5;
              if(type==1||type==62)            //如果是電文1
              {   int cc=0;
                  while(1)                    
                                                         //計算電文1除頭碼之外的長度cc
                           { … }                                     
              while(i+5<10+cc-1)                 //5個字碼(3顆衛(wèi)星所有參數)循環(huán)一次
              {  
              ……      //判斷是否取補碼,解比例因子、用戶測距誤差、衛(wèi)星號、PRC
               k=k+3;       //每解完3顆衛(wèi)星的信息便循環(huán)一次
                            } 
               }                                           //if type=1
    }                         //if  找到引導字
   if (d2==1)  break;              // 如果到了電文結尾,則結束
   }                                                //for
4 結果分析
  整個軟件測試工作是在華東交通大學信息工程學院的2樓信息技術研究所進行,時間為2008年4月14號10:22:32。實驗平臺基于X60差分GPS接收機進行,接收天線安裝在信息學院樓頂。解碼結果如表2~表4所示。

  將以上誤差數據對自行研制接收機輸出結果進行修正,結果如圖3所示。

  由圖3中結果可看出,其海拔高度的定位誤差在1 m內,經度、緯度定位誤差分別在10-6度和10-7度,比單頻偽距GPS接收機的定位精度好。通過利用基準站進行差分數據傳送進行的定位結果可以達到1 m左右定位精度,結果進一步證明了解碼方法及結果的正確性。
  本文基于X60試驗平臺,開發(fā)了RTCM SC-104導航電文數據采集及解碼器。本軟件再加上其他相關軟件可進行差分基站設計,可充分利用PC編程資源進行開發(fā)工作。該算法在自行研制的GPS接收機上運行,已獲得了較好的定位精度,為下一步進行實時DGPS接收機研制提供了基礎。
參考文獻
[1] 胡輝.高動態(tài)數字化GPS接收機的研制[R]. 哈爾濱:哈爾濱工業(yè)大學,2002.
[2] 高山,陳武,胡叢偉,等.高精度GPS定位的精密電離層模型[J].Transactions of Nanjing University of Aeronautics & Astronautics,2005,22(2):107-113.
[3] KAPLAN E D, HEGARTY C J. GPS原理與應用(第2版)[M].  寇艷紅,譯.北京:電子工業(yè)出版社,2007.
[4] 何怡,李揚繼.淺析差分GPS的算法及數據格式[J].電訊技術, 2004,(3):111-115.
[5] 李良,張小超,趙化平.GPS差分RTCM數據實時編碼解碼算法及實現[J].計算機工程與應用,2006,(11):209-211.
[6] 史峰.基于虛擬參考站技術和PDA平臺的GPS移動定位系統(tǒng)[D].上海:同濟大學, 2007.
 

此內容為AET網站原創(chuàng),未經授權禁止轉載。