張海平,孔昭龍,姜英明,周茂盛,高士民,徐陽
(1.山東省國土測繪院,山東 濟南 250102;2.山東科技大學(xué) 測繪科學(xué)與工程學(xué)院,山東 青島 266590)
GNSS數(shù)據(jù)后處理的基本過程為:數(shù)據(jù)預(yù)處理——基線解算——網(wǎng)平差,其中數(shù)據(jù)預(yù)處理過程是一項很重要的環(huán)節(jié)[1]。GNSS數(shù)據(jù)預(yù)處理的主要目的是對原始數(shù)據(jù)進行轉(zhuǎn)換、編輯、加工和整理,為數(shù)據(jù)解算做好準(zhǔn)備[2]。數(shù)據(jù)預(yù)處理工作的完善與否,對隨后的基線解算和網(wǎng)平差結(jié)果的精度將會產(chǎn)生重要的影響[3]。
TEQC是一個功能強大的 GPS/GLONASS數(shù)據(jù)預(yù)處理軟件,由UNAVCO研制,用于GPS監(jiān)測站的數(shù)據(jù)管理和預(yù)處理[4]。但TEQC的GPS觀測數(shù)據(jù)預(yù)處理功能仍存在諸多不足:如不能對大量數(shù)據(jù)進行批處理、操作相對復(fù)雜、配置參數(shù)不靈活等。而區(qū)域CORS參考站網(wǎng)具有站點相對固定、數(shù)據(jù)量大且時間跨度較長的特點,這就需要針對TEQC的不足進行二次開發(fā)以適應(yīng)CORS參考站運營和維護的需要。
Python作為一種新型的解釋型腳本語言,近年來被廣泛運用于科學(xué)計算、機器學(xué)習(xí)、數(shù)據(jù)挖掘和系統(tǒng)運維等領(lǐng)域。其特點是語法簡潔、清晰,具有豐富強大的第三方工具庫,可以跨平臺使用等。Python語言簡單易學(xué)且功能強大,可適用于從大型項目到小型的一次性程序(稱為腳本)[5]。
本文利用Python語言及多線程等技術(shù)對TEQC進行二次開發(fā),完善了TEQC的不足,實現(xiàn)了簡單易用、跨平臺(Windows、Linux)且高效可靠的批量GPS數(shù)據(jù)預(yù)處理。
GPS觀測數(shù)據(jù)的格式標(biāo)準(zhǔn)化和數(shù)據(jù)質(zhì)量檢查是TEQC的重要功能[6]。
數(shù)據(jù)的格式標(biāo)準(zhǔn)化是將不同類型接收機的數(shù)據(jù)記錄格式、接收機類型、天線類型、天線相位中心偏移、概略坐標(biāo)、衛(wèi)星系統(tǒng)、觀測值類型和觀測數(shù)據(jù)采樣率等統(tǒng)一為一致的文件格式[7]。這些信息對于數(shù)據(jù)解算結(jié)果有非常重要的影響。然而,原始觀測數(shù)據(jù)中,由于數(shù)據(jù)來源、觀測人員疏忽或接收機設(shè)置等原因,這些信息經(jīng)常會出現(xiàn)錯誤或缺失。如果在解算前不進行標(biāo)準(zhǔn)化預(yù)處理,將會導(dǎo)致解算結(jié)果精度偏低甚至解算無法進行。
通過對GPS偽距和載波相位觀測量進行線性組合,可以計算觀測量的多路徑效應(yīng)、電離層延遲、電離層延遲的變化率以及接收機的鐘漂和周跳等,該過程通常被稱為數(shù)據(jù)的質(zhì)量檢查或質(zhì)量評價。
數(shù)據(jù)質(zhì)量檢查主要的指標(biāo)有信噪比(SNR)、多路徑效應(yīng)(MP)、周跳比(O/SLPS)等[8-9]。各個指標(biāo)通常使用的閾值[8,10]如表1所示。
表1 TEQC數(shù)據(jù)質(zhì)量檢查閾值
Python語言具有非常強大的工具庫模塊,在本次二次開發(fā)過程中主要使用了PyYAML、glob、argparse和concurrent.futures等模塊。
YAML(YAMLAin't Markup Language)是一種數(shù)據(jù)序列化格式[11]。它語法清晰易讀,非常適合對數(shù)據(jù)類型進行編碼。YAML可以用作數(shù)據(jù)序列、配置文件、log文件、Internet信息和過濾等。PyYAML是為Python語言提供YAML格式編碼和解碼的模塊,為了使程序的使用和配置更靈活,本程序引入了PyYAML(office page)模塊來解碼配置文件[12]。YAML文檔以類似于大綱的縮進方式編寫,一個YAML格式的配置文件如圖1所示。
如圖1所示的配置文件中的各項的含義如表2所示。
表2 配置文件說明
glob是Python標(biāo)準(zhǔn)庫中的模塊,此模塊提供了類似于UNIX/Linux系統(tǒng)中的通配符的路徑名查找方式,可用于匹配符合用戶要求的文件。例如,使用“*”代表0個或多個字符,使用“?”代表任意一個字符,使用“[]”匹配指定范圍內(nèi)的字符,如[0-9]匹配數(shù)字[13]。
argparse是Python標(biāo)準(zhǔn)庫提供的用于解析命令行參數(shù)的模塊,可以靈活地處理用戶輸入的參數(shù)選項,如文件輸入路徑、文件輸出路徑等[14]。
以上三個模塊的應(yīng)用對于提高程序的靈活性和易用性具有立竿見影的效果。然而,隨著計算機硬件的發(fā)展,利用多核CPU的處理能力來提高數(shù)據(jù)處理的效率越來越受到社會的重視。利用Python標(biāo)準(zhǔn)庫提供的concurrent.futures模塊,可開發(fā)支持多任務(wù)并行的應(yīng)用程序[15]。二次開發(fā)過程中也充分考慮了數(shù)據(jù)處理的效率,運用多線程技術(shù)將程序的數(shù)據(jù)處理能力提高了數(shù)倍。
基于TEQC軟件的數(shù)據(jù)編輯和質(zhì)量檢查功能,通過Python的二次開發(fā),彌補了TEQC的部分不足,所實現(xiàn)的unificate.py和qualitycheck.py程序具有以下功能或特性: 1) 封裝TEQC的數(shù)據(jù)編輯功能,提供可讀性高、容易編寫的配置文件接口(YAML格式); 2) 封裝TEQC的數(shù)據(jù)質(zhì)量檢查功能,提取并輸出數(shù)據(jù)質(zhì)量檢查結(jié)果的重要指標(biāo); 3) 通過通配符,用戶可靈活指定被處理的數(shù)據(jù)文件; 4) 相比BAT或SHELL腳本,多任務(wù)并行的特性使程序的數(shù)據(jù)處理效率有較大提高。
本文先后進行了兩個實驗,分別驗證了unificate.py和qualitycheck.py程序的功能及其高效、批處理等特點。實驗數(shù)據(jù)采用的是SDCORS觀測網(wǎng)絡(luò)2012年的部分觀測數(shù)據(jù)。
本次實驗設(shè)計了4個實驗方案對SDCORS數(shù)據(jù)進行格式標(biāo)準(zhǔn)化處理,方案設(shè)計如表3所示。
表3 實驗1方案設(shè)計
在方案1中,將實驗數(shù)據(jù)放到指定文件夾,如“rinex”,在“命令提示符”窗口進入腳本所在目錄,輸入命令“python unificate.py rinex/*2070.16o-out unificated -cfg-siteconfig.yml”,表示處理rinex文件夾中所有文件名以“2070.16o”結(jié)尾的文件,其中配置文件為-siteconfig.yml,將最終的處理成果輸入到當(dāng)前路徑的unificated文件夾。其他方案依此類推。
通過對四種方案進行實驗,并對每種方案的耗時進行統(tǒng)計,實驗結(jié)果如表4所示。
表4 實驗1各方案耗時統(tǒng)計
查看程序輸出的數(shù)據(jù)文件,發(fā)現(xiàn)格式標(biāo)準(zhǔn)化以后,觀測文件信息更加完整,添加了接收機類型和天線類型,同時將采樣間隔修改為30 s.由表4可以看出,處理14.6 GB、29.1 GB、58.1 GB、463 GB的數(shù)據(jù)分別需要120.5 s、212.2 s、478.2 s、3 722.3 s。相比于僅使用TEQC軟件進行處理,處理速度有了很大幅度的提高,同時也很大程度上提高了操作的便利性。這對于提高工作效率有著非常大的幫助。
本文設(shè)計了兩個實驗方案對SDCORS網(wǎng)絡(luò)觀測數(shù)據(jù)進行質(zhì)量檢核。該參考站網(wǎng)絡(luò)共有90個站點,實驗所用數(shù)據(jù)為2012年第001天的觀測數(shù)據(jù)。方案1不對觀測數(shù)據(jù)進行任何預(yù)處理,直接使用GAMIT/GLOBK軟件進行基線解算[16]。方案2使用qualitycheck.py腳本對數(shù)據(jù)進行質(zhì)量檢查,并根據(jù)質(zhì)量檢查結(jié)果修復(fù)不合格數(shù)據(jù)并剔除觀測時間較短的數(shù)據(jù),再將預(yù)處理后的數(shù)據(jù)使用GAMIT/GLOBK軟件進行基線解算。
方案2的具體步驟如下:
1) 利用unificate.py腳本對數(shù)據(jù)進行格式標(biāo)準(zhǔn)化,本次實驗所用數(shù)據(jù)為2012年001天的數(shù)據(jù),在“命令提示符”窗口進入腳本所在目錄,輸入命令:“python unificate.py rinex/*0010.12o -out unificated -cfg -siteconfig.yml”。
2) 利用qualitycheck.py腳本對數(shù)據(jù)進行質(zhì)量檢查,在“命令提示符”窗口進入腳本所在目錄,輸入命令:“python qualitycheck.py unificated/*0010.12o -out table > result.txt”,處理unificated目錄內(nèi)文件名以“0010.12o”結(jié)尾的文件,將最終的檢查成果以表格形式輸出到result.txt文件中。限于篇幅所限,表5中僅包含部分測站的質(zhì)量檢查信息。
表5 質(zhì)量檢查結(jié)果(部分)
經(jīng)過對檢查結(jié)果的統(tǒng)計分析發(fā)現(xiàn),SZRS站的MP1為0.55,超過閾值0.5,數(shù)據(jù)質(zhì)量不合格;PYRS站的MP2為0.78,超過閾值0.75,數(shù)據(jù)質(zhì)量不合格;ZHYU站的MP2為0.77,超過閾值0.75,數(shù)據(jù)質(zhì)量不合格。針對數(shù)據(jù)質(zhì)量不合格的三個測站進行處理,其中對SZRS測站的MP1分析文件進行分析找出多路徑效應(yīng)較為嚴(yán)重的歷元和衛(wèi)星,分析發(fā)現(xiàn),3號衛(wèi)星在1 930~1 980歷元多路徑效應(yīng)嚴(yán)重;同樣對PYRS測站和ZHYU測站的MP2文件進行分析,發(fā)現(xiàn)PYRS測站的2號衛(wèi)星在800~900歷元多路徑效應(yīng)嚴(yán)重,ZHYU測站的3號衛(wèi)星2 700~2 850歷元多路徑效應(yīng)比較嚴(yán)重。利用TEQC文件切割功能,將多路徑效應(yīng)嚴(yán)重的歷元刪除,處理后數(shù)據(jù)質(zhì)量得到改善。修復(fù)后的質(zhì)量檢查結(jié)果如表6所示:
表6 預(yù)處理前后典型測站數(shù)據(jù)質(zhì)量
由表6可以看出,通過以上的數(shù)據(jù)預(yù)處理,SZRS、PYRS和ZHYU站的各項指標(biāo)均達到了閾值要求。同時,分別對方案一中的原始數(shù)據(jù)和方案二中預(yù)處理后的數(shù)據(jù)使用GAMIT/GLOBK軟件進行基線解算,解算結(jié)果顯示,未經(jīng)過預(yù)處理的數(shù)據(jù)解算結(jié)果的標(biāo)準(zhǔn)均方根誤差(NRMS)值為0.23,經(jīng)過預(yù)處理后的數(shù)據(jù)的解算結(jié)果為NRMS值為0.20,以上結(jié)果充分說明利用qualitycheck.py程序進行數(shù)據(jù)預(yù)處理并對不合格數(shù)據(jù)進行修復(fù),可以有效提高數(shù)據(jù)解算的質(zhì)量和數(shù)據(jù)解算的精度。
采用qualitycheck.py和unificate.py程序進行數(shù)據(jù)預(yù)處理,效率高,操作便捷,生成的結(jié)果豐富可靠,能夠有效的分析和提高GPS觀測數(shù)據(jù)的質(zhì)量,提高數(shù)據(jù)解算的精度,有助于工作人員了解測站周圍的環(huán)境變化及儀器的穩(wěn)定性。
1) 利用Python進行二次開發(fā)的unificate.py程序,能夠批量、高效、方便快捷的進行數(shù)據(jù)的格式標(biāo)準(zhǔn)化,將不同站點采集的觀測數(shù)據(jù)記錄格式、采樣間隔、天線類型和接收機類型等統(tǒng)一為標(biāo)準(zhǔn)化的文件格式。
2) 利用qualitycheck.py程序,能夠有效地探測GPS觀測數(shù)據(jù)中信噪比、電離層、周跳和多路徑效應(yīng)的影響,并以一定的指標(biāo)(如MP1、MP2、SN1、SN2、CSR)、多種表現(xiàn)形式(表格、列表等)展現(xiàn)質(zhì)量檢查的結(jié)果。
3) 通過qualitycheck.py和unificate.py程序?qū)?shù)據(jù)進行格式標(biāo)準(zhǔn)化和質(zhì)量檢查,對不合格的數(shù)據(jù)進行修復(fù),并利用GAMIT/GLOBK軟件對觀測數(shù)據(jù)進行基線解算,結(jié)果表明根據(jù)質(zhì)量檢查結(jié)果進行數(shù)據(jù)預(yù)處理并對不合格數(shù)據(jù)進行修復(fù),可以有效提高數(shù)據(jù)解算的精度。
[1] 周保興. GPS數(shù)據(jù)預(yù)處理方法研究及其應(yīng)用[D].南京:河海大學(xué),2005.
[2] 李征航,張小紅, 衛(wèi)星導(dǎo)航定位新技術(shù)及高精度數(shù)據(jù)處理方法[M]. 武漢:武漢大學(xué)出版社,2013.
[3] 余文坤,戴吾蛟,楊哲. 基于TEQC 的GNSS 數(shù)據(jù)質(zhì)量分析及預(yù)處理軟件的設(shè)計與實現(xiàn)[J].大地測量與地球動力學(xué), 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] 朱道強,關(guān)海濤. Python在ArcGIS中的應(yīng)用[J]. 測繪與空間地理信息,2013,36(7):152-154.
[6] 賈瑩媛,黃張裕,楊富春,等. 基于Matlab的TEQC在GPS數(shù)據(jù)預(yù)處理中的應(yīng)用[J]. 海洋測繪,2012,32(02):52-54.
[7] 郭金運,劉智敏,趙春梅. 區(qū)域CORS網(wǎng)數(shù)據(jù)處理方法及應(yīng)用[M]. 北京:科學(xué)出版社, 2016.
[8] 李軍,王繼業(yè),熊熊, 等. 東北地區(qū)GPS 觀測數(shù)據(jù)質(zhì)量檢測和分析[J]. 武漢大學(xué)學(xué)報(信息科學(xué)版) 2006, 31(3): 209-212.
[9] 趙傳華,秘金鐘,黨亞民. 基于TEQC的數(shù)據(jù)預(yù)處理分析[J]. 導(dǎo)航定位學(xué)報,2013,1(1):84-88.
[10] 田云鋒. TEQC在GPS 數(shù)據(jù)預(yù)處理中的應(yīng)用[J]. 計算機與信息技術(shù), 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.