周子富,朱吉勝
(1.武警工程大學 研究生大隊,陜西 西安 710086;2.武警工程大學 通信工程系,陜西 西安 710086)
GPS是目前世界上應用最為廣泛的衛星導航系統,其全球性、全能性和全天候性的導航定位、定時和測速優勢在諸多領域中得到越來越廣泛的應用。GPS已逐步演變為一種世界性的高新技術產業,越來越受到了人們的關注[1]。
在各種導航系統及大型監控系統中,為了提供歷史軌跡重放等功能,往往要存儲大量的定位數據,同時這些數據甚至還要通過無線通信傳送,所需費用高 而且傳送中會受到網絡帶寬的限制,很可能出現網絡延遲 這就大大影響了實時定位的效果。如何處理GPS數據對系統整體功能的實現極其重要。VC++憑借其在GPS通信及數據處理程序編寫方面的優勢,得到廣泛應用。
想要對GPS數據進行處理,首先需要了解GPS的數據格式。目前,大多數GPS都采用美國國家海洋電子協會(National Marine Electronics Association)制定的NMEA-0183通信標準,這種通信標準輸出的數據采用ASCII碼,其內容包含了緯度、經度、高度、速度、日期、時間、航向以及衛星狀況等信息,規定的語句有 6種,包括 GGA、GLL、GSA、GSV、RMC和VTG[2]。對于不同的用途,選用的語句記錄也不同,對于大多數的普通使用者只關心其日期和時間、經緯度、地面速度信息等,而RMC語句就包含了以上信息,所以本文只討論RMC語句。一條RMC語句包括了以下記錄:語句標識頭、世界時間、定位狀態、緯度、緯度方位、經度、經度方位、地面速度、地面路線、日期、磁偏角、校驗和和結束標記[3],其結構及各字段含義如下:
$GPRMC,<l>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<1l>*hh
<l>UTC 時間。 格式為 hhmmss.ss。
<2>狀態,A為數據有效,V為非有效。
<3>緯度。 格式為ddmm.mmmm (度、分&小數分)。
<4>標明南北半球,N為北半球、S為南半球。
<5>經度,格式為 dddmm.mmmm (度、分 &小數分)。
<6>標明東西半球,E為東半球、W為西半球。
<7>地面上的速度。范圍為 0.0到999.9。
<8>方位角,范圍為000.0到 359.9度。
<9>日期。 格式為 ddmmyy(日、月、年)。
<l0>地磁變化,從 000.0到 180.0度。
<ll>地磁變化方向,為E或W。
一般情況下,并不需要所有的定位數據而只需要其中的一部分,所以在存儲數據之前一般先要對數據預處理。
GPS數據的采集一般都是通過串口通信進行的,接收機都提供有串口接口,常用的GPS接收器一般遵循NMEA-0183協議且提供串行通信接口與計算機通信。VC++提供的串口通信編程方法有好幾種,其中利用MSComm控件實現串口通信是較為方便的一種,程序員不必去學習復雜的API函數,只需對串口進行簡單配置,這方面的例子相當普遍,這里不作詳細介紹。GPS接收機工作時會源源不斷地把接收到的GPS定位數據傳送到PC機中[4]。串口通訊代碼從串口接收數據并將其放置于緩存data中,等待下一步的處理。
在對GPS數據進行某種壓縮處理之前,應該先對其進行預處理。GPS數據預處理是一種最直接的處理方式,也是減小數據容量的一種比較直觀有效的方法。分析GPS數據,可以知道這些信息中,有很多屬于冗余信息。為了方便后續壓縮的進行,先對輸出的信號進行壓縮預處理[5],預處理之后只保留必須要的信息,步驟如下:
1)語句標識頭(ID):數據出自同一GPS接收機,每個語句的標識頭都一樣,所以該記錄段屬冗余信息,完全可以去除,在解壓縮時再在每個語句前加上該標識頭即可。
2)世界時間(UTC):該信息段以時、分、秒、毫秒的格式指示出當時世界時間。不進行預處理。
3)定位狀態(A/V):占用1個字節,不進行預處理。
4)緯度:占用9個字節,不進行預處理。
5)經度:占用10個字節,不進行預處理。
6)經度指示器(E/W):占一個字節,它指示東西經。只研究在東經的情況,所以它是冗余信息,可以去除。
7)緯度指示器(N/S):占一個字節。處理同上。
8)地面速度:占用4個字節,可以去除。
9)日期:占用6個字節,以日、月、年的格式顯示。因為該系統一天啟動一次,日期相同,是冗余信息。
10)地磁變化:可以去除。
11)校驗和、結束符:在完成對數據的校驗后,校驗和便可去除。結束符由回車、換行組成,由于語句長度已知所以也可以去除。
對一組數據:
$GPRMC,032510,A,2934.0467,N,10634.3591,E,000.0,000.0,191203,001.6,w*65則經過預處理后的 GPS數據格式為:032510,A,2934.0467,10634.3591,只剩下時間、狀態、緯度和經度,共29個字節。進一步處理,可以將逗號去掉,將新的 數 據 變 成 為 已 “A” 為 首 的 字 符 串A0325102934.046710634.3591,把A放在第一個字節是為了方便遍歷字符,此時,剩下26個字節,與原始數據的70個字節相比減小了62%。
利用VC++編程以上預處理時一般先通過對幀頭的判斷來進行數據的提取處理。由于幀內各數據段由逗號分割。因此在處理緩存數據時一般是通過搜尋ASCII碼“$”來判斷是否是幀頭。在對幀頭的類別進行識別后再通過對所經歷逗號個數的計數來判斷出當前正在處理的是哪一種定位導航參數[6]。下面是對緩存中的數據進行參數處理的部分代碼:

這樣就提取出了時間、狀態、經度和緯度,后續的處理只需在此基礎上再進行即可。
數據壓縮的方法很多,總的來說可以分為無損壓縮和有損壓縮兩大類。本文針對預處理過的GPS數據的格式特點,采用半字節的方法[7]進行編碼。可以看到,預處理過的數據為A0325102934.046710634.3591,即“A時間緯度經度”的格式。為了方便檢測數據的完整性和方便編程實現,這里我們在后面加入結束標識C,變成“A時間緯度經度C”的格式,則處理完的數據包括有0至9十個符號、小數點“.”以及字母“A”、“B”,共12個符號。事實上,四位二進制編碼就能區分16中狀態,所以用四位二進制編碼來表示12個符號已經足夠,而不必用八位。壓縮數據編碼表如下:

表1 編碼表Tab.1 Code table
這種編碼方式提供了16種狀態,而我們只用到了12種,還冗余4種,我們還可以根據需要,利用這4種狀態進行編碼實現其他功能,如用來實現糾錯功能等。圖1是進行數據壓縮的流程圖。

圖1 數據壓縮流程圖Fig.1 Flow chart of data compression
從壓縮編碼表可以看出,采取這種編碼方式可以直接使得數據壓縮了50%。對于“A0325102934.046710634.3591B”,壓縮編碼之后只需用108位編碼表示,和預處理前的數據(70個字節,560位)相比,雖然后面加了一個結束標識符B,但總的壓縮編碼壓縮比仍可達80%。
文中設計并實現了一種在數據預處理的基礎上進行的GPS數據壓縮算法,壓縮比可達到 80%以上。本算法前期的數據預處理之后GPS定位數據中只剩下12個符號表示,一方面去掉了很大一部分冗余信息,使數據量明顯減小,另一方面符號數目減少且已知,因此在編碼時只需根據ASCII碼值建立較小的數組。這種數據處理方式比較簡單,程序量小,壓縮比大,且易于實現,對解決GPS應用中數據量大而存儲器資源有限的問題以及數據傳輸帶寬等問題具有重要的實際意義。
[1]羅海英,李強,劉旭東.基于VC++的GPS狀態監控與數據采集軟件的設計與實現[J].測繪通報,2010(12):27-29.
LUO Hai-ying,LI Qiang,LIU Xu-dong. Desigen and implementation of GPS state monitoring and data acquisition soffware based on VC++[J].Surveying and Mapping,2010(12):27-29.
[2]馬飛,諸昌鈐.利用VC++實現GPS數據采集[J].計算機時代,2005(6):13-15.
MA Fei,ZHU Chang-qian.GPS data acquisition Using VC++[J].Computer Age,2005(6):13-15.
[3]趙曉煒.基于Huffman編碼的GPS定位數據壓縮算法及實現[D].內蒙古:內蒙古工業大學,2006.
[4]陳靜,許劼,邱國廷.用VC++6.0實現計算機與GPS通信[J].北京測繪,2004(3):25-29.
CHEN Jing,XU Jie,QIU Guo-ting.Using VC++6.0 to design the GPS-computer communication[J].Beijing Surveying and Mapping,2004(3):25-29.
[5]任華新.GPS定位數據壓縮算法的設計[J].長春工程學院學報,2008,9(3):74-76.
REN Hua-xin.The design of the data compression algorithm on GPS system[J].J.Changchun Inst.Tech,2008,9 (3):74-76.
[6]邱治國,王向武.VC++實現GPS全球定位系統定位數據的提取[J].科技信息,2007(3):20-21.
QIU Zhi-guo,WANG,Xiang-wu.Location data extraction of GPS globalpositioningsystem with VC++[J].Science Information,2007(3):20-21.
[7]楊宏業,張躍.GPS定位數據壓縮算法的設計與實現[J].電子技術應用,2002(12):29-32.
YANG Hong-ye,ZHANG Yue.GPS positioning data compression algorithm design and implementation[J].Electronic Technology,2002(12):29-32.
[8]馬蘭,袁衛.基于GPS的數據采集處理系統設計[J].現代電子技術,2010(15):171-172,176.
MA Lan,YUAN Wei.Design of data acquisition system based on GPS[J].Modern Electronic Technique,2010(15):171-172,176.