張文德,劉怡俊
(廣東工業大學 信息工程學院,廣東 廣州 510006)
目前,北斗衛星導航系統(BDS)和GPS衛星導航系統能夠為用戶提供高精度、全天候的定位服務。但是,單個衛星導航系統在觀測衛星數目有限的情況下,定位能力較低。BDS和GPS在定位原理、系統設計方面存在共通性,能夠同時接收兩個衛星導航系統的衛星信號并組合定位,不僅解決了上述問題,而且提高了精度[1-2]。本文描述了BDS/GPS的組合定位算法,并在基于SoCFPGA的BDS/GPS接收機上使用嵌入式軟件實現該算法。
一般的定位解算方法會使用卡爾曼濾波器。卡爾曼濾波的計算過程是遞推過程。遞推過程中會產生舍入誤差,SoCFPGA上的CPU也會產生計算誤差。這兩種誤差可能使估計的均方誤差陣失去非負定性或對稱性,使增益陣的計算逐漸喪失加權作用,導致卡爾曼濾波產生發散現象[3]。為了克服發散現象,本文使用平方根濾波算法優化傳統卡爾曼濾波算法,并通過嵌入式軟件實現該算法,最終在接收機上運行。
計算機系統是離散的系統,本文描述了用于BDS/GPS雙模定位的離散卡爾曼濾波模型[4-5]。
系統狀態方程:

系統觀測方程:

其中,X(k)是系統k時刻的目標狀態向量,Φ(k+1,k)是系統從k時刻到k+1時刻的狀態轉移矩陣,G(k)是系統噪聲增益矩陣,Z(k+1)是系統k+1時刻的觀測向量,H(k+1)是觀測矩陣。卡爾曼濾波要求系統噪聲V(k)和觀測噪聲W(k+1)是相互獨立、均值為零的白噪聲,即:

定義誤差向量為:

定義預測誤差的相關矩陣為:

當k+1時刻輸入Z(k+1)時,求得的新息向量為:

其中,Z(k+1)為新息向量。
定義新息向量Z(k+1)的相關矩陣為:

卡爾曼濾波的增益:

其中,Q(k)為系統噪聲矩陣,R(k+1)為觀測噪聲矩陣,要求它們分別是已知的非負定矩陣和正定矩陣。
本文基于SoCFPGA的接收機中使用卡爾曼濾波算法出現了發散現象。因此,本文引入平方根算法解決濾波過程中的發散問題,使接收機在定位方面更加穩定。卡爾曼濾波中,狀態均方差陣p(k)表示狀態估計誤差的平方。平方根濾波主要針對均方差更新過程而設計,采用橋萊斯基分解均方差陣更新平方根,減少計算誤差[5]。
將增益公式帶入卡爾曼濾波測量公式,得:

其中,γ(k+1)為待定系數。
將Δ(k+1)、Δ(k)、Δ(k+1,k)代入卡爾曼濾波器的狀態公式,可以得到均方差陣的狀態更新為:

同時簡記:

若簡記:

本節描述了避免估計的均方誤差陣失去非負定性或對稱性的方法。
本文的接收機式基于SoCFPGA平臺,如圖1所示,使用的FPGA類型為Altera的DE2-115。在FPGA上寫入數據采集、衛星信號捕獲和跟蹤等模塊的硬件代碼,在FPGA上燒寫LEON3處理器,處理器中運行裸機的嵌入式處理程序,實現射頻前端驅動、捕獲和跟蹤環路的控制,位同步、幀同步處理以及定位解算等功能。本文使用平方根濾波算法優化卡爾曼濾波算法也在LEON3處理器上運行。
實驗平臺的天線接到華力創通衛星導航信號模擬器,接收機工作25 min后觀察定位結果,如圖2、圖3和圖4所示[6]。

圖1 實驗平臺實物

圖2 接收機啟動完成工作不到1 min的定位結果

圖3 接收機工作5 min后的定位結果
實驗結果可以看出,接收機連續工作25 min后,定位精度在2 m以內,驗證了算法的有效性,能夠解決因計算機計算精度誤差和舍入精度誤差而引起的卡爾曼濾波發散問題。

圖4 接收機工作25 min后的定位結果
本文著重研究基于卡爾曼濾波算法的BDS/GPS雙模定位。由于接收機設備存在計算精度誤差、卡爾曼濾波迭代存在舍入誤差等原因,卡爾曼濾波算法會出現發散問題[7-8]。本文引入了平方根濾波算法優化卡爾曼濾波算法,通過在接收機上進行試驗觀察,驗證了算法的有效性和可行性,對實際工程應用具有一定借鑒意義。