馮鵬睿,徐泮林,高明超
(山東科技大學測繪科學與工程學院,山東 青島 266590)
全球定位系統(GPS)為GNSS 最具代表性的部分,很多國內外學者都專注于此領域的研究,偽距單點定位技術發展已經相當成熟。但查閱已發表的文獻發現,偽距單點定位程序的編寫在相當多的文獻中僅是一筆帶過,許多文獻都并未對程序進行詳細的解讀,這給學習GPS 編程中遇到問題的讀者帶來了很大的困擾,需要額外浪費大量的研究時間去摸索程序的編寫。因此,自主開發改進程序設計,實現GPS單點定位的各項功能顯得尤為重要。
GPS 時是全球定位系統GPS 使用的一種時間系統。它是由GPS 的地面監控系統和GPS 衛星中的原子鐘建立、維持的一種原子時,其起點為1980-01-06T00:00:00。在起始時刻,GPS 時與UTC 對齊,這兩種時間系統所給出的時間是相同的。由于UTC 存在跳秒,經過一段時間后,這兩種時間系統中就會相差n個整秒,n是這段時間內UTC 的積累跳秒數,隨時間的變化而變化。由于在GPS 時的起始時刻1980-01-06,UTC 與國際原子時TAI 已相差19 s,因此GPS 時與國際原子時之間總會有19 s 的差異,即TAIGPST=19 s。GPS 已被廣泛應用在時間對比,用戶通過上述關系,即可獲得高精度的UTC 或者TAI時間,國際上有專門的單位在測定并且公布了C0值,其數值一般可以保持在10 ns 以內。
WGS-84 坐標系統是一種國際上公認的地心坐標系統,在用廣播星歷的情況下,GPS 單點定位的坐標以及相對定位中解算的基線向量屬于WGS-84 大地坐標系,GPS 衛星廣播星歷是以WGS-84 坐標系為依據而建立的。坐標系原點位于地球質心,X軸指向BIH1984.0 的零子午面和CTP 赤道的點,Z軸指向BIH198.40 定義的協議地球極(CTP),Y軸與Z軸、X軸構成右手坐標系,稱為1984 年世界大地坐標系統。
GPS 衛星發射的信號由載波、測距碼、導航電文三部分組成。
GPS 導航定位是以衛星為已知的基準點,通過測定站星間的距離,解算用戶的位置。GPS 定位所采用的坐標系是由測軌跟蹤站及其坐標值所定義的地心坐標系,該地心坐標系采用WGS-84(1984 年世界大地坐標系)。因此,用戶接收機在取得導航電文的軌道參數后,要首先計算衛星的位置和速度。為了解算測站點的坐標,需要知道在同一坐標系中站星間的距離和GPS 衛星的信號與衛星星歷衛星位置,所以需要多次計算衛星的位置。
根據廣播星歷中衛星電文提供的軌道參數,按一定的公式可計算出觀測瞬間GSP 衛星在地固系的位置。按“二體問題”公式計算軌道參數;根據導航電文給出的軌道攝動參數進行攝動修正,計算修正后的軌道參數;計算衛星在軌道坐標系的坐標;考慮地球自轉的影響,將軌道坐標系轉換為WGS-84 坐標系。
接上一過程,解算出每個歷元內個衛星的位置坐標,再由衛星的已知坐標進行空間距離交會,進而解算出地面站的位置坐標。
GPS 定位中出現的各種誤差,按性質可分為系統誤差(偏差)和隨機誤差兩大類。其中,系統誤差無論從誤差的大小還是對定位結果的危害性來講,都比隨機誤差大得多,而且它們又有規律可循,可以采取一定的方法和措施來加以消除。
3.3.1 衛星星歷誤差
由衛星星歷所給出的衛星位置和速度與衛星的實際位置和速度之差稱為衛星星歷誤差。星歷誤差的大小主要取決于衛星定軌系統的質量。如定軌站的數量及其地理分布、觀測值的數量及精度、定軌時所用的數學力學模型和定軌軟件的完善程度等。此外,與星歷的外推時間間隔(實測星歷的外推時間間隔可視為零)也有直接關系。
3.3.2 衛星鐘的鐘誤差
衛星上雖然使用了高精度的原子鐘,但它們也不可避免地存在誤差,這種誤差既包含著系統性的誤差(如鐘差鐘連頻漂等偏差),也包含著隨機誤差。系統誤差遠較隨機誤差的值大,而且可以通過檢驗和比對來確定并通過模型來加以改正,而隨機誤差只能通過鐘的穩定度來描述其統計特性,無法確定其符號和大小。
3.3.3 接收機的位置誤差
在進行授時和定軌時,接收機的位置通常被認為是已知的,其誤差將使授時和定軌的結果產生系統誤差。該項誤差對測碼偽距觀測值和載波相位觀測值的影響是相同的。進行GPS 基線解算時,需已知其中一個端點在WGS-84 坐標系中的近似坐標,近似坐標的誤差過大也會對解算結果產生影響。目前采用的對流折射改正模型很多,主要有霍普菲爾德模型、薩斯塔莫寧模型、勃蘭克模型等,這些模型都有各自的適用范圍,經過比對各種模型和測試各種模型的結果后,本程序采用霍普菲爾德模型,電離層改正主要采用主流的雙頻觀測值進行消除。
根據上述GPS 單點定位原理,使用Qt 開發環境,編寫單點定位程序。在讀取觀測文件時,為了更方便地看出文件頭的內容和構成,推薦使用Edit with Notepad++來查看。讀取導航文件,計算測量時刻衛星瞬時坐標,提取偽距解算地面點近似坐標,建立誤差方程確定誤差系數,利用最小二乘原理計算坐標的改正值,最后即求得瞬時的WGS84 絕對坐標。在此過程中,需用到大量的矩陣計算,因此選用了成熟穩定的Eigen 矩陣庫。
將O 文件和N 文件導入程序,根據時間匹配依次計算衛星鐘差、坐標及速度,得出改正值,刪除不符合要求的觀測歷元,生成地面點坐標結果文件,文件中包含的內容為各歷元解算坐標與地面點預估坐標的差值。使用Matlab 中的plot命令,將文件中N、E、U 三個方向的數據分別成圖,查看改正值的波動情況。各測站坐標改正值平均值如表1 所示。
通過較多實例表明,程序編寫可以順利地運行出結果,定位精度都在米級,結果精度均在標準范圍之內,完全可以驗證偽距單點定位解算結果的正確性,從而驗證了該算法程序能夠滿足單點定位的精度要求。有極個別歷元結算出來的坐標內符合精度精度較低,原因主要分為兩個方面,①該歷元觀測時衛星數量較少,使得衛星結構不穩定而引起誤差;②因為衛星高度角較小,對流層和電離層改正未完全消除,使誤差增大。通過查看生成的.spp 文件,觀測時衛星觀測數正常,但衛星高度角較小,對流層和電離層的改正未完全消除,導致解算精度較差。

表1 各測站坐標改正值平均值
由于觀測文件(*.O 文件)有不同格式,在不同格式的文件中偽距所在的位置不同,而且對每顆衛星的觀測數據所占的行數也不同,因此給偽距讀取帶來了很大不便。為解決這個問題,在程序設計中對偽距的讀取進行了精心設計,根據RENIX 文件版本和*.O 文件字頭塊內容進行判斷,先確定需要獲取的偽距所在的行和列,然后依次將衛星號及其偽距讀入到動態數組。
GPS 單點定位計算過程需要用到大量矩陣計算,數值分析,使用C++語言處理這些問題較為復雜,而Matlab 包含大量高度集成的函數,可以方便地處理這些問題,因此將C++與Matlab 等可視化的語言交互,美化界面是很多程序常用的方法。但是這種C++與Matlab 相互交互的程序也存在不足,比如在進行程序編寫過程中電腦必須同時安裝C++開發環境和Matlab 軟件才可以進行程序編輯,增加了程序書寫的復雜性及可行性,使用Matlab 編程,對基于IGS 全球跟蹤站的解算出來的各軸觀測值改正數進行繪圖,觀察計算結果的波動情況。