張海平,孔昭龍,姜英明,周茂盛,高士民,徐陽
(1.山東省國土測繪院,山東 濟南 250102;2.山東科技大學 測繪科學與工程學院,山東 青島 266590)
GNSS數據后處理的基本過程為:數據預處理——基線解算——網平差,其中數據預處理過程是一項很重要的環節[1]。GNSS數據預處理的主要目的是對原始數據進行轉換、編輯、加工和整理,為數據解算做好準備[2]。數據預處理工作的完善與否,對隨后的基線解算和網平差結果的精度將會產生重要的影響[3]。
TEQC是一個功能強大的 GPS/GLONASS數據預處理軟件,由UNAVCO研制,用于GPS監測站的數據管理和預處理[4]。但TEQC的GPS觀測數據預處理功能仍存在諸多不足:如不能對大量數據進行批處理、操作相對復雜、配置參數不靈活等。而區域CORS參考站網具有站點相對固定、數據量大且時間跨度較長的特點,這就需要針對TEQC的不足進行二次開發以適應CORS參考站運營和維護的需要。
Python作為一種新型的解釋型腳本語言,近年來被廣泛運用于科學計算、機器學習、數據挖掘和系統運維等領域。其特點是語法簡潔、清晰,具有豐富強大的第三方工具庫,可以跨平臺使用等。Python語言簡單易學且功能強大,可適用于從大型項目到小型的一次性程序(稱為腳本)[5]。
本文利用Python語言及多線程等技術對TEQC進行二次開發,完善了TEQC的不足,實現了簡單易用、跨平臺(Windows、Linux)且高效可靠的批量GPS數據預處理。
GPS觀測數據的格式標準化和數據質量檢查是TEQC的重要功能[6]。
數據的格式標準化是將不同類型接收機的數據記錄格式、接收機類型、天線類型、天線相位中心偏移、概略坐標、衛星系統、觀測值類型和觀測數據采樣率等統一為一致的文件格式[7]。這些信息對于數據解算結果有非常重要的影響。然而,原始觀測數據中,由于數據來源、觀測人員疏忽或接收機設置等原因,這些信息經常會出現錯誤或缺失。如果在解算前不進行標準化預處理,將會導致解算結果精度偏低甚至解算無法進行。
通過對GPS偽距和載波相位觀測量進行線性組合,可以計算觀測量的多路徑效應、電離層延遲、電離層延遲的變化率以及接收機的鐘漂和周跳等,該過程通常被稱為數據的質量檢查或質量評價。
數據質量檢查主要的指標有信噪比(SNR)、多路徑效應(MP)、周跳比(O/SLPS)等[8-9]。各個指標通常使用的閾值[8,10]如表1所示。

表1 TEQC數據質量檢查閾值
Python語言具有非常強大的工具庫模塊,在本次二次開發過程中主要使用了PyYAML、glob、argparse和concurrent.futures等模塊。
YAML(YAMLAin't Markup Language)是一種數據序列化格式[11]。它語法清晰易讀,非常適合對數據類型進行編碼。YAML可以用作數據序列、配置文件、log文件、Internet信息和過濾等。PyYAML是為Python語言提供YAML格式編碼和解碼的模塊,為了使程序的使用和配置更靈活,本程序引入了PyYAML(office page)模塊來解碼配置文件[12]。YAML文檔以類似于大綱的縮進方式編寫,一個YAML格式的配置文件如圖1所示。
如圖1所示的配置文件中的各項的含義如表2所示。

表2 配置文件說明
glob是Python標準庫中的模塊,此模塊提供了類似于UNIX/Linux系統中的通配符的路徑名查找方式,可用于匹配符合用戶要求的文件。例如,使用“*”代表0個或多個字符,使用“?”代表任意一個字符,使用“[]”匹配指定范圍內的字符,如[0-9]匹配數字[13]。
argparse是Python標準庫提供的用于解析命令行參數的模塊,可以靈活地處理用戶輸入的參數選項,如文件輸入路徑、文件輸出路徑等[14]。
以上三個模塊的應用對于提高程序的靈活性和易用性具有立竿見影的效果。然而,隨著計算機硬件的發展,利用多核CPU的處理能力來提高數據處理的效率越來越受到社會的重視。利用Python標準庫提供的concurrent.futures模塊,可開發支持多任務并行的應用程序[15]。二次開發過程中也充分考慮了數據處理的效率,運用多線程技術將程序的數據處理能力提高了數倍。
基于TEQC軟件的數據編輯和質量檢查功能,通過Python的二次開發,彌補了TEQC的部分不足,所實現的unificate.py和qualitycheck.py程序具有以下功能或特性: 1) 封裝TEQC的數據編輯功能,提供可讀性高、容易編寫的配置文件接口(YAML格式); 2) 封裝TEQC的數據質量檢查功能,提取并輸出數據質量檢查結果的重要指標; 3) 通過通配符,用戶可靈活指定被處理的數據文件; 4) 相比BAT或SHELL腳本,多任務并行的特性使程序的數據處理效率有較大提高。
本文先后進行了兩個實驗,分別驗證了unificate.py和qualitycheck.py程序的功能及其高效、批處理等特點。實驗數據采用的是SDCORS觀測網絡2012年的部分觀測數據。
本次實驗設計了4個實驗方案對SDCORS數據進行格式標準化處理,方案設計如表3所示。

表3 實驗1方案設計
在方案1中,將實驗數據放到指定文件夾,如“rinex”,在“命令提示符”窗口進入腳本所在目錄,輸入命令“python unificate.py rinex/*2070.16o-out unificated -cfg-siteconfig.yml”,表示處理rinex文件夾中所有文件名以“2070.16o”結尾的文件,其中配置文件為-siteconfig.yml,將最終的處理成果輸入到當前路徑的unificated文件夾。其他方案依此類推。
通過對四種方案進行實驗,并對每種方案的耗時進行統計,實驗結果如表4所示。

表4 實驗1各方案耗時統計
查看程序輸出的數據文件,發現格式標準化以后,觀測文件信息更加完整,添加了接收機類型和天線類型,同時將采樣間隔修改為30 s.由表4可以看出,處理14.6 GB、29.1 GB、58.1 GB、463 GB的數據分別需要120.5 s、212.2 s、478.2 s、3 722.3 s。相比于僅使用TEQC軟件進行處理,處理速度有了很大幅度的提高,同時也很大程度上提高了操作的便利性。這對于提高工作效率有著非常大的幫助。
本文設計了兩個實驗方案對SDCORS網絡觀測數據進行質量檢核。該參考站網絡共有90個站點,實驗所用數據為2012年第001天的觀測數據。方案1不對觀測數據進行任何預處理,直接使用GAMIT/GLOBK軟件進行基線解算[16]。方案2使用qualitycheck.py腳本對數據進行質量檢查,并根據質量檢查結果修復不合格數據并剔除觀測時間較短的數據,再將預處理后的數據使用GAMIT/GLOBK軟件進行基線解算。
方案2的具體步驟如下:
1) 利用unificate.py腳本對數據進行格式標準化,本次實驗所用數據為2012年001天的數據,在“命令提示符”窗口進入腳本所在目錄,輸入命令:“python unificate.py rinex/*0010.12o -out unificated -cfg -siteconfig.yml”。
2) 利用qualitycheck.py腳本對數據進行質量檢查,在“命令提示符”窗口進入腳本所在目錄,輸入命令:“python qualitycheck.py unificated/*0010.12o -out table > result.txt”,處理unificated目錄內文件名以“0010.12o”結尾的文件,將最終的檢查成果以表格形式輸出到result.txt文件中。限于篇幅所限,表5中僅包含部分測站的質量檢查信息。

表5 質量檢查結果(部分)
經過對檢查結果的統計分析發現,SZRS站的MP1為0.55,超過閾值0.5,數據質量不合格;PYRS站的MP2為0.78,超過閾值0.75,數據質量不合格;ZHYU站的MP2為0.77,超過閾值0.75,數據質量不合格。針對數據質量不合格的三個測站進行處理,其中對SZRS測站的MP1分析文件進行分析找出多路徑效應較為嚴重的歷元和衛星,分析發現,3號衛星在1 930~1 980歷元多路徑效應嚴重;同樣對PYRS測站和ZHYU測站的MP2文件進行分析,發現PYRS測站的2號衛星在800~900歷元多路徑效應嚴重,ZHYU測站的3號衛星2 700~2 850歷元多路徑效應比較嚴重。利用TEQC文件切割功能,將多路徑效應嚴重的歷元刪除,處理后數據質量得到改善。修復后的質量檢查結果如表6所示:

表6 預處理前后典型測站數據質量
由表6可以看出,通過以上的數據預處理,SZRS、PYRS和ZHYU站的各項指標均達到了閾值要求。同時,分別對方案一中的原始數據和方案二中預處理后的數據使用GAMIT/GLOBK軟件進行基線解算,解算結果顯示,未經過預處理的數據解算結果的標準均方根誤差(NRMS)值為0.23,經過預處理后的數據的解算結果為NRMS值為0.20,以上結果充分說明利用qualitycheck.py程序進行數據預處理并對不合格數據進行修復,可以有效提高數據解算的質量和數據解算的精度。
采用qualitycheck.py和unificate.py程序進行數據預處理,效率高,操作便捷,生成的結果豐富可靠,能夠有效的分析和提高GPS觀測數據的質量,提高數據解算的精度,有助于工作人員了解測站周圍的環境變化及儀器的穩定性。
1) 利用Python進行二次開發的unificate.py程序,能夠批量、高效、方便快捷的進行數據的格式標準化,將不同站點采集的觀測數據記錄格式、采樣間隔、天線類型和接收機類型等統一為標準化的文件格式。
2) 利用qualitycheck.py程序,能夠有效地探測GPS觀測數據中信噪比、電離層、周跳和多路徑效應的影響,并以一定的指標(如MP1、MP2、SN1、SN2、CSR)、多種表現形式(表格、列表等)展現質量檢查的結果。
3) 通過qualitycheck.py和unificate.py程序對數據進行格式標準化和質量檢查,對不合格的數據進行修復,并利用GAMIT/GLOBK軟件對觀測數據進行基線解算,結果表明根據質量檢查結果進行數據預處理并對不合格數據進行修復,可以有效提高數據解算的精度。
[1] 周保興. GPS數據預處理方法研究及其應用[D].南京:河海大學,2005.
[2] 李征航,張小紅, 衛星導航定位新技術及高精度數據處理方法[M]. 武漢:武漢大學出版社,2013.
[3] 余文坤,戴吾蛟,楊哲. 基于TEQC 的GNSS 數據質量分析及預處理軟件的設計與實現[J].大地測量與地球動力學, 2010, 30(5): 81-85.
[4] ESTEY L H,MEERTENS C M. TEQC: the multipurpose tookit for GPS/GLONASS data[J]. GPS Solutions, 1999, 3 (1): 42-49.
[5] 朱道強,關海濤. Python在ArcGIS中的應用[J]. 測繪與空間地理信息,2013,36(7):152-154.
[6] 賈瑩媛,黃張裕,楊富春,等. 基于Matlab的TEQC在GPS數據預處理中的應用[J]. 海洋測繪,2012,32(02):52-54.
[7] 郭金運,劉智敏,趙春梅. 區域CORS網數據處理方法及應用[M]. 北京:科學出版社, 2016.
[8] 李軍,王繼業,熊熊, 等. 東北地區GPS 觀測數據質量檢測和分析[J]. 武漢大學學報(信息科學版) 2006, 31(3): 209-212.
[9] 趙傳華,秘金鐘,黨亞民. 基于TEQC的數據預處理分析[J]. 導航定位學報,2013,1(1):84-88.
[10] 田云鋒. TEQC在GPS 數據預處理中的應用[J]. 計算機與信息技術, 2008(12): 63-66.
[11] The YAML Project. The Office YAML Web Site[EB/OL]. (2011-11-20)[2018-1-11]. http://yaml.org.
[12] The YAML Project. The Office PyYAML Web Site[EB/OL]. (2016-08-28)[2018-1-11]. http://pyyaml.org.
[13] Python Software Foundation. Python 3.5.5 documentation, The Python Standard Library : glob - Unix style pathname pattern expansion[EB/OL]. (2018-01-04)[2018-1-11].https://docs.python.org/3.5/library/glob.html.
[14] Python Software Foundation. Python 3.5.5 documentation, The Python Standard Library : argparse - Parser for command-line options, arguments and sub-commands[EB/OL]. (2018-01-04) [2018-1-11]. https://docs.python.org/3.5/library/argparse.html.
[15] Python Software Foundation. Python 3.5.5 documentation, The Python Standard Library : concurrent.futures - Launching parallel tasks[EB/OL]. (2018-01-04)[2018-1-11].https://docs.python.org/3.5/library/concurrent.futures.html.
[16] HERRING T A, KING R W, MCCLUSKY S C. GAMIT Reference Manual[EB/OL]. Massachusetts Instituteof Technology, MIT, 2010: 63-64.