張 堯,唐小妹,陳華明,孫廣富
(國防科技大學電子科學與工程學院衛星導航定位技術工程研究中心,湖南 長沙 410073)
軟件接收機在GNSS信號處理方面發揮著重要的作用,然而傳統的軟件接收機均是基于CPU(中央處理單元)實現,效率低下,是實時處理與商業推廣的瓶頸所在。信號的跟蹤具有大量的并行運算,而且也是實時性要求最為嚴格的地方,減小跟蹤部分的耗時是解決軟件接收機實時性的核心。圖像處理單元(GPU)是高度并行化的處理器,在并行計算領域有著廣泛的應用,將信號的跟蹤采用GPU實現可以大大提升接收機的處理效率。目前,國外有很多學者已經開始了基于GPU的軟件接收機研究[1-2],國內研究則相對較少,且主要集中在信號捕獲的GPU實現上[3-4],信號跟蹤的GPU實現仍很少見。本文將信號跟蹤采用GPU實現,同時給出了這種實現方案的數據更新、分配策略,以及生成偽距觀測量時與傳統方法相比做出的調整。仿真的結果表明:采用該方法可實現信號跟蹤,且其效率相比傳統的軟件接收機跟蹤提升了112.5倍。
信號的跟蹤分為載波跟蹤和碼跟蹤,分別使用載波環和碼環實現,其中碼環一般采用DLL實現。跟蹤環的結構圖如圖1所示[5],其中數字中頻信號和本地正余弦載波相乘,剝離信號中的載波,所得結果的同相和正交分量依次與超前、即時和滯后支路的本位偽碼相乘,剝離偽碼,進而進行積分清零,得到相關結果。相關結果可用于碼環和載波環的更新。
采用并行處理代替原始的串行處理時,由于各個通道可利用的數據是相同的,且每個通道每次更新所需的數據量不同,因此需要研究相應的數據更新和對各個通道的分配策略,下面將逐一闡述、分析。
將跟蹤放在GPU上執行時,所有通道可用的數據是相同的。但是由于各顆衛星之間的碼相位不同,每個通道利用的數據在全局存儲器中的起始、終止位置不同。因此在GPU中處理此問題時,需要每次緩存足夠長的數據以滿足各顆衛星的需要。采取的方案是緩存4 ms的數據,具體如圖2所示。其中GMi(i=1、2、3、4)表示一個連續的1 ms數據塊,且它們在時間上是連續的,開始跟蹤時大部分衛星所需要處理的數據在中間2 ms.由于多普勒的存在,一個碼周期的數據時長不等于嚴格的1 ms,GM1和GM4中存儲的1 ms數據用以保證當跟蹤足夠長的時間后,每顆衛星更新處理的數據仍然在這4 ms之內。

圖1 接收機跟蹤環路結構
數據每次更新時,首先丟棄GM4中的數據,GMi(i=1、2、3)替換掉GMi+1中的數,GM1中的數據利用從CPU中最新復制的數據更新。

圖2 GPU中數據的更新策略
各個通道數據分配的關鍵在于確定每個通道利用的采樣點在4 ms數據中的起始位置和數據長度。以圖3為例,假設某次更新時,GPU全局存儲器中的數據時長總共為4 ms,一共跟蹤5顆衛星,每顆衛星所需的數據在4 ms中的起始位置分別為pi,假設上次更新后的殘留碼相位分別為ri,碼頻率為fci(i=1,2,3,4,5),碼長為Lc,信號采樣率為fs,則下次每個通道讀數時,對應的起始位置為
pi=pi+(Lc-ri)·fs/fci-Lu.
(1)

圖3 GPU中各通道數據分配策略
ri、fci等參數可以通過環路更新獲取,其原理和單通道并行處理相同。在GPU中進行數據分配和更新的獨特之處在于對起始位置pi的標記。
跟蹤環設計的關鍵在于環路鑒別器和環路濾波器參數的設計,由于本文的重點是采用GPU實現信號跟蹤,因此忽略這方面的設計。在此基礎上,基于GPU的跟蹤環路結構如圖4所示。

圖4 基于GPU的跟蹤環結構圖

圖5 規約算法示意圖
整個跟蹤過程可以分為4個階段,其中Si(i=1、2、3、4),表示各個階段的輸入信號。其中S1數據的更新和對各個通道的分配在1.1和1.2節中已做詳細說明。每個階段的功能和GPU網格配置如下。
階段1:去載波。原始信號和本地產生的載波信號相乘以實現接收信號的載波剝離,本地載波的頻率由載波環路產生,此階段GPU的塊數設置為2N,其中N為跟蹤的衛星數目,2表示同相和正交分量;
階段2:去偽碼。經載波剝離的信號和本地產生的偽碼相乘以實現接收信號的偽碼剝離,本地偽碼的頻率和初相位由碼環產生,此階段GPU的塊數設置為6N;
階段3:相干積累。對解調和解擴后的基帶信號S3進行相干累加,得到各個超前、即時、滯后支路的同相分量和正交分量,此階段GPU的塊數設置為6N;
階段4:環路更新。包含碼環和載波環的更新,此階段的塊數設置為1,線程設置為2N,其中一半負責對碼環的更新,一半負責對載波環的更新。
除階段4外,其余每個階段每個塊中的線程數可以設置為最大以提升效率,對于NVIDIA GT640,此值為1 024.
對于1.3節中的積分求累加和的環節,GPU中常規的算法是對數據進行分組,每個線程處理指定的一組數據之和,得到的結果存放在共享存儲器中,最后利用某一個線程對該共享數組求和(例如利用每塊中的第一個線程求和)。利用某一線程對共享數組求和非常耗時,同時也浪費了很多可用的線程資源。為了提升處理的效率,可以采用規約算法實現[6],其具體方法如圖5所示。
圖5中Ti(i=1、2、3…9、10)表示規約的第i步,每一行的數字表示塊中的線程序號,弧形箭頭連接的兩個數表示將利用連接的前一個線程將共享存儲器中對應位置的兩個數相加。采用這種操作,可以是原來1 024次相加變為10次相加,大大提升程序效率。
生成不同衛星的偽距觀測量時,需要從跟蹤環路中提取不同通道當前時刻的碼相位。直接提取不同衛星指定時刻的碼相位會導致程序的效率減低,因此,必須在GPU外(CPU中)對同一時刻的碼相位進行預測。
各個通道跟蹤的衛星分別記為Sati(i=1、2、…N),每個通道上一次跟蹤所得的偽碼頻率為fcodei(i=1、2、…N),以Sat1為基準,最近一次更新時各通道處理數據的指針在數據文件中的分別指向第pi(i=1、2、…N)個采樣點,每個通道跟蹤的碼相位殘差分別為ri(i=1、2、…N),如圖6所示則各個衛星通道在t0時刻跟蹤的碼相位分別為
CPi=ri+(p1-pi)/fs·fcodei.
(2)

圖6 觀測量時間同步示意圖
仿真生成北斗二代B1I信號,信號的采樣率為20 MHz,中頻為4.09 MHz,信號中僅有1號衛星,下采樣采用4倍抽取進行,NVIDIA GT640顯卡作為試驗的GPU平臺。對信號捕獲后進行后續的跟蹤,跟蹤的結果如圖7所示。圖7(a)是(I,Q)散點圖,(I,Q)散點集中在與Q軸對稱的I軸附近,說明能穩定地跟蹤載波相位;EPL(超前、即時、滯后支路)相關結果圖7(b)中,即時支路的相關結果比超前和延遲支路的結果明顯高出,說明環路能穩定地鎖定碼相位。分析說明本文給出的基于GPU的跟蹤方法能穩定地進行信號跟蹤。
在保證環路能穩定工作的基礎上,分析基于GPU的跟蹤算法的實時性。仿真信號中分別生成包含1、5、8、12顆衛星的仿真信號,其余參數保持不變,采用GPU對其進行跟蹤,其耗時如表1所示。

表1 基于GPU的信號跟蹤耗時

表2 基于GPU和CPU的信號跟蹤耗時比較
為了進一步突出體現出基于GPU信號跟蹤在效率上的優勢,對上述的仿真信號利用基于CPU的傳統跟蹤方法進行跟蹤,并且和基于GPU的信號跟蹤算法進行對比,得到的每毫秒信號處理耗時如表2所示。


圖7 基于GPU的信號跟蹤結果(a)(I,Q)散點圖;(b)EPL各支路相關結果的幅值
從上面的比較可以發現,基于GPU的信號跟蹤,其耗時隨著跟蹤衛星數目的增加并不會有較大的變化,但是基于CPU的信號跟蹤,其耗時隨著衛星數目的增加成正比例增加,這是GPU信號跟蹤優于CPU信號跟蹤一個顯著的地方。
結合導航信號跟蹤的并行運算特點和GPU并行運算結構,實現了基于GPU的跟蹤算法,其中涉及跟蹤各環節的GPU實現原理及與之相適應的數據更新、分配策略、觀測量生成方法等。仿真結果表明:該方法能可靠地實現信號跟蹤,并且其跟蹤效率相比傳統的軟件接收機跟蹤方法提升了112.5倍。
[1]KNEZEVIC A.Co-processor aiding for real-time software GNSS receivers[D].Canada.The University of Calgary, 2010.
[2]HOBIGER T,GITOH T,AMAGAI J.A GPU based real-time GPS software receiver[J].GPS Solut,2010(14):207-216.
[3]王可東,李鴻田,侯紹東,等.GPS信號FFT捕獲的GPU實現[J].全球定位系統,2011,36(6):12-66.
[4]楊 靜,劉一霏.基于GPU的GPS 信號并行捕獲[J].中國慣性技術學報,2010.8,20(4):430-434.
[5]KAPLAN E D, HEGARTY C J. GPS原理與應用[M]. 2版.寇艷紅譯. 北京: 電子工業出版社.
[6]張 舒,褚艷利,GPU高性能運算之CUDA[M]. 北京:中國水利水電出版,2009.