馬社祥, 李慧寧
(天津理工大學電氣電子工程學院,天津 300384)
全球衛星導航系統(GNSS)接收導航衛星發送的導航定位信號,并以導航衛星為動態已知點,實時測定運動載體在航位置和速度,進而完成導航。隨著GNSS的發展,可供測量的衛星越來越多。在未來的幾年里,來自四個GNSS系統(GPS、伽利略、北斗、GLONASS)的大約120顆衛星將被使用,這可以減少確定正確位置的時間。正常的情況下,GNSS需要同時接收到四顆及以上衛星進行定位,但在干擾環境下,某些時刻只能接收到單顆衛星的信號,短時間內船舶定位精確度下降,威脅航行的安全。因此,干擾環境下船舶的定位算法研究具有重大價值。
常用的測量方法有到達時間定位(TOA)、到達時間差定位(TDOA)、到達角交會定位(AOA)等,其中偽距定位的優點是數據處理簡單,對定位條件的要求低,不存在整周模糊度的問題,可以非常容易地實現實時定位。傳統的偽距定位算法采用的是最小二乘(least,LS)算法、高斯牛頓迭代最小二乘(Gauss-Newton iterative least square,GNILS)算法、Kalman濾波算法等。本文提出了將GNILS算法、Kalman算法、列文伯格-馬夸爾特(Levenberg-Marquardt,L-M)算法相結合的方法,解算出在干擾環境下船舶的位置坐標,保證船舶的正常航行。GNILS算法計算速度快,用該算法的結果作為初始值代入到Kalman算法,使用列文伯格-馬夸爾特算法優化卡爾曼濾波算法的預測協方差矩陣。通過仿真驗證,該算法可以在接收的單顆衛星的數據時進行定位,雖然增加了計算量,但可以加快收斂的速度,提高偽距定位精度。
偽距是指衛星定位過程中,地面接收機到衛星之間的大概距離,衛星時鐘和接收機時鐘不可能完全同步,存在時鐘差,在實際的傳播過程中,還有電離層、對流層、多徑效應等產生的影響。在偽距定位中主要的誤差來源為衛星和接收機的鐘差,其它因素可在衛星星歷中計算得出,用后綴為n文件讀取衛星的導航信息,用后綴為o文件讀取觀測的數據,即可得到偽距信息。
如圖1所示,假設某一時刻只能接收到一顆衛星的信號,船舶在持續接收一段時間后,即接收到四個及以上時刻的衛星位置信息,應用偽距定位模型,便可以解算出船舶的位置。忽略電離層等產生的影響,衛星對接收的第i時刻信號的偽距可表示為

(1)

(2)
其中,ρ
為第i
時刻衛星天線到船舶天線的偽距值,可由衛星星歷得出;(x
,,y
,,z
,)為衛星在第i
時刻的位置矢量,可以通過衛星星歷計算得出;(x
,y
,z
)表示船舶在地心地固坐標下的位置矢量,為待解量;c
為光速;δ
表示接收機的鐘差,為未知量。
圖1 偽距定位示意圖
傳統的解算算法為最小二乘算法,該算法可以簡便地求得未知數據,并使求得數據與實際數據之間誤差的平方和最小。高斯牛頓迭代算法在最小二乘的基礎上進行迭代,設置門限值,完成對船舶的定位解算。Kalman算法不僅和當前時刻相關,還和前一時刻有關,不斷更新濾波增益的值,從而得到最優值。
X
=(x
,y
,z
,δ
),在該初始值進行泰勒級數展開,如式(2)所示其中

(3)

(4)

(5)

(6)

(7)

(8)

(9)
定義變量,如上式(8)、(9)、(10)所示,化簡可得
Δρ
=H
·Δx
(10)
在當前初始值下,LS
算法解算后的結果為Δx
=(H
·H
)·H
·Δρ
(11)
根據Δx
修正初始值,得到LS
的最終結果為x
=x
+Δx
(12)


(13)
x
=x
-1+Δx
-1(14)
高斯牛頓迭代算法的缺點是,當初始和真實值相差太大時,無法忽略二次項的影響,收斂速度慢,甚至會出現無法收斂的問題。針對此問題,提出了用L
-M
算法進行改進,如下式所示
(15)
在高斯牛頓算法的基礎上,引入阻尼因子,L-M算法結合了高斯牛頓法和梯度下降法的特點。在整個計算過程中,要保證μ>0,確保迭代的下降方向。當μ較大時,L-M算法即為梯度下降法;當μ較小時,L-M算法即為高斯牛頓法。該算法結合兩者的優點,在遠離實際值時用梯度下降法,下降速度快,在靠近實際值時用高斯牛頓法,避免了初始值誤差過大。
初始值的選取會影響Kalman算法收斂時長以及精確度,初始值越接近真實值,Kalman濾波的效果越好。傳統上用網格搜索的方式確定出最優位置網格點作為初始值,其迭代次數較多,本文使用GNILS算法解算出來的最優值作為初始值,GNILS算法較傳統的方法有精度高,收斂次數少等優點。
Kalman算法求解的原則是使狀態誤差的方差達到最小,由于該算法也是線性系統下的狀態估計,需要將偽距方程進行線性化處理,即進行泰勒級數展開,如上式(2)所示。首先給定初始值,狀態變量X
=(x
,y
,z
,δt
)以及協方差初始值P
。系統的狀態方程為X
=Φ
,-1·X
-1+Γ
-1·W
-1(16)
其中,X
,X
-1分別為第k
時刻和第k
-1時刻的系統狀態向量,Φ
,-1為t
-1時刻至t
時刻的一步轉移矩陣,根據船舶的運行軌跡確定矩陣。Γ
-1為系統噪聲驅動陣,W
-1為系統的噪聲。量測方程定義為
Z
=H
·X
+V
(17)
其中,Z
為觀測向量,即偽距;H
為觀測矩陣,V
為系統噪聲。W
,V
為相互獨立均值為零的高斯白噪聲。濾波計算回路

(18)

(19)
增益計算回路

(20)

(21)
P
=(I
-K
·H
)·P
-1(22)
上式為離散型卡爾曼濾波的基本方程,卡爾曼濾波具有兩個明顯的信息更新過程:時間更新過程和量測更新過程。隨著歷元數目的增加,濾波增益值會逐漸減小,新接收到的觀測數據對定位結果的影響逐漸降低,導致結果的發散。針對此問題,本問題出了用L-M算法改進Kalman濾波算法,增加阻尼因子μ,確保迭代的下降方向,解決了協方差的估計偏低的問題。用L-M算法調整Kalman算法的預測協方差矩陣為
P
-1=(I
-P
-1·(P
-1+μ
·I
))·P
-1(23)
本文采用MATLAB進行仿真,實驗數據采用的是2019年7月19日的GPS的衛星星歷。同一時刻,會接收四顆以上的衛星的信號,選取第一時刻高度角最大的衛星,來進行本次仿真。整個仿真的步驟如圖2所示。

圖2 歷元解算示意圖
其計算船舶坐標,步驟總結如下:
1) 解析衛星星歷,可得到衛星坐標,偽距等信息,列出偽距方程。
2) 設置初始值為0,用改進GNILS算法解算出的位置,待其誤差穩定后,將其結果作為初始值代入到Kalman算法。
3) 采用改進型Kalman算法對船舶的位置進行狀態估計,用L-M算法對協方差矩陣改進,得出最終船舶的位置。

圖3 GNILS定位精度
從圖中可以看出,在單星的情況下,GNILS算法解算出船舶的位置。在歷元數目較少時,衛星的的位置空間幾何分布差,導致定位誤差大,但隨著歷元數目的增大,定位的結果趨近于穩定。

圖4 改進GNILS算法定位精度
仿真共采用400歷元,每個歷元之間間隔30秒,由于初始值設置為0,導致前30個歷元的誤差較大。圖3和圖4比較可以看出,改進后的算法,定位的精度優于原始算法,在400歷元的解算中,三維坐標的精度分別提高了45.3%、62.6%、77.3%。當截掉前30歷元,三維坐標的精度分別提高17.6%、51.2、21.5%。
從圖5可以看出,將改進后的GNILS值作為Kalman算法的初始值,有效地改善了前30 歷元的定位精度。

圖5 Kalman算法定位精度

圖6 改進Kalman算法定位精度
比較圖5和圖6,標的殘差分別提高了60.4%、71.7%、79.1%,而且平滑性更好。該算法在干擾環境中可以大致定位出船舶的位置,保證船舶的安全行駛。
表1中的dx、dy、dz分別為解算出來船舶的位置與準確位置之間的誤差??梢钥闯觯姆N算法都可以在干擾環境中,都能解算出船舶的位置。可以看出,改進型Kalman算法的性能最好。

表1 單歷元解算統計結果/m
本文針對干擾環境中船舶只能接收到單顆衛星信號的問題,改進解算算法,保證船舶的正常定位。GNILS算法計算時間短,但是誤差大,用該算法收斂后的值來改善Kalman算法不收斂的問題,再結合L-M算法,更改Kalman算法的協方差矩陣。從定位的結果可以看出,改進算法要比傳統算法在精度上有很大的提升。