張 堯,唐小妹,陳華明,孫廣富
(國(guó)防科技大學(xué)電子科學(xué)與工程學(xué)院衛(wèi)星導(dǎo)航定位技術(shù)工程研究中心,湖南 長(zhǎng)沙 410073)
軟件接收機(jī)在GNSS信號(hào)處理方面發(fā)揮著重要的作用,然而傳統(tǒng)的軟件接收機(jī)均是基于CPU(中央處理單元)實(shí)現(xiàn),效率低下,是實(shí)時(shí)處理與商業(yè)推廣的瓶頸所在。信號(hào)的跟蹤具有大量的并行運(yùn)算,而且也是實(shí)時(shí)性要求最為嚴(yán)格的地方,減小跟蹤部分的耗時(shí)是解決軟件接收機(jī)實(shí)時(shí)性的核心。圖像處理單元(GPU)是高度并行化的處理器,在并行計(jì)算領(lǐng)域有著廣泛的應(yīng)用,將信號(hào)的跟蹤采用GPU實(shí)現(xiàn)可以大大提升接收機(jī)的處理效率。目前,國(guó)外有很多學(xué)者已經(jīng)開(kāi)始了基于GPU的軟件接收機(jī)研究[1-2],國(guó)內(nèi)研究則相對(duì)較少,且主要集中在信號(hào)捕獲的GPU實(shí)現(xiàn)上[3-4],信號(hào)跟蹤的GPU實(shí)現(xiàn)仍很少見(jiàn)。本文將信號(hào)跟蹤采用GPU實(shí)現(xiàn),同時(shí)給出了這種實(shí)現(xiàn)方案的數(shù)據(jù)更新、分配策略,以及生成偽距觀測(cè)量時(shí)與傳統(tǒng)方法相比做出的調(diào)整。仿真的結(jié)果表明:采用該方法可實(shí)現(xiàn)信號(hào)跟蹤,且其效率相比傳統(tǒng)的軟件接收機(jī)跟蹤提升了112.5倍。
信號(hào)的跟蹤分為載波跟蹤和碼跟蹤,分別使用載波環(huán)和碼環(huán)實(shí)現(xiàn),其中碼環(huán)一般采用DLL實(shí)現(xiàn)。跟蹤環(huán)的結(jié)構(gòu)圖如圖1所示[5],其中數(shù)字中頻信號(hào)和本地正余弦載波相乘,剝離信號(hào)中的載波,所得結(jié)果的同相和正交分量依次與超前、即時(shí)和滯后支路的本位偽碼相乘,剝離偽碼,進(jìn)而進(jìn)行積分清零,得到相關(guān)結(jié)果。相關(guān)結(jié)果可用于碼環(huán)和載波環(huán)的更新。
采用并行處理代替原始的串行處理時(shí),由于各個(gè)通道可利用的數(shù)據(jù)是相同的,且每個(gè)通道每次更新所需的數(shù)據(jù)量不同,因此需要研究相應(yīng)的數(shù)據(jù)更新和對(duì)各個(gè)通道的分配策略,下面將逐一闡述、分析。
將跟蹤放在GPU上執(zhí)行時(shí),所有通道可用的數(shù)據(jù)是相同的。但是由于各顆衛(wèi)星之間的碼相位不同,每個(gè)通道利用的數(shù)據(jù)在全局存儲(chǔ)器中的起始、終止位置不同。因此在GPU中處理此問(wèn)題時(shí),需要每次緩存足夠長(zhǎng)的數(shù)據(jù)以滿足各顆衛(wèi)星的需要。采取的方案是緩存4 ms的數(shù)據(jù),具體如圖2所示。其中GMi(i=1、2、3、4)表示一個(gè)連續(xù)的1 ms數(shù)據(jù)塊,且它們?cè)跁r(shí)間上是連續(xù)的,開(kāi)始跟蹤時(shí)大部分衛(wèi)星所需要處理的數(shù)據(jù)在中間2 ms.由于多普勒的存在,一個(gè)碼周期的數(shù)據(jù)時(shí)長(zhǎng)不等于嚴(yán)格的1 ms,GM1和GM4中存儲(chǔ)的1 ms數(shù)據(jù)用以保證當(dāng)跟蹤足夠長(zhǎng)的時(shí)間后,每顆衛(wèi)星更新處理的數(shù)據(jù)仍然在這4 ms之內(nèi)。
圖1 接收機(jī)跟蹤環(huán)路結(jié)構(gòu)
數(shù)據(jù)每次更新時(shí),首先丟棄GM4中的數(shù)據(jù),GMi(i=1、2、3)替換掉GMi+1中的數(shù),GM1中的數(shù)據(jù)利用從CPU中最新復(fù)制的數(shù)據(jù)更新。
圖2 GPU中數(shù)據(jù)的更新策略
各個(gè)通道數(shù)據(jù)分配的關(guān)鍵在于確定每個(gè)通道利用的采樣點(diǎn)在4 ms數(shù)據(jù)中的起始位置和數(shù)據(jù)長(zhǎng)度。以圖3為例,假設(shè)某次更新時(shí),GPU全局存儲(chǔ)器中的數(shù)據(jù)時(shí)長(zhǎng)總共為4 ms,一共跟蹤5顆衛(wèi)星,每顆衛(wèi)星所需的數(shù)據(jù)在4 ms中的起始位置分別為pi,假設(shè)上次更新后的殘留碼相位分別為ri,碼頻率為fci(i=1,2,3,4,5),碼長(zhǎng)為L(zhǎng)c,信號(hào)采樣率為fs,則下次每個(gè)通道讀數(shù)時(shí),對(duì)應(yīng)的起始位置為
pi=pi+(Lc-ri)·fs/fci-Lu.
(1)
圖3 GPU中各通道數(shù)據(jù)分配策略
ri、fci等參數(shù)可以通過(guò)環(huán)路更新獲取,其原理和單通道并行處理相同。在GPU中進(jìn)行數(shù)據(jù)分配和更新的獨(dú)特之處在于對(duì)起始位置pi的標(biāo)記。
跟蹤環(huán)設(shè)計(jì)的關(guān)鍵在于環(huán)路鑒別器和環(huán)路濾波器參數(shù)的設(shè)計(jì),由于本文的重點(diǎn)是采用GPU實(shí)現(xiàn)信號(hào)跟蹤,因此忽略這方面的設(shè)計(jì)。在此基礎(chǔ)上,基于GPU的跟蹤環(huán)路結(jié)構(gòu)如圖4所示。
圖4 基于GPU的跟蹤環(huán)結(jié)構(gòu)圖
圖5 規(guī)約算法示意圖
整個(gè)跟蹤過(guò)程可以分為4個(gè)階段,其中Si(i=1、2、3、4),表示各個(gè)階段的輸入信號(hào)。其中S1數(shù)據(jù)的更新和對(duì)各個(gè)通道的分配在1.1和1.2節(jié)中已做詳細(xì)說(shuō)明。每個(gè)階段的功能和GPU網(wǎng)格配置如下。
階段1:去載波。原始信號(hào)和本地產(chǎn)生的載波信號(hào)相乘以實(shí)現(xiàn)接收信號(hào)的載波剝離,本地載波的頻率由載波環(huán)路產(chǎn)生,此階段GPU的塊數(shù)設(shè)置為2N,其中N為跟蹤的衛(wèi)星數(shù)目,2表示同相和正交分量;
階段2:去偽碼。經(jīng)載波剝離的信號(hào)和本地產(chǎn)生的偽碼相乘以實(shí)現(xiàn)接收信號(hào)的偽碼剝離,本地偽碼的頻率和初相位由碼環(huán)產(chǎn)生,此階段GPU的塊數(shù)設(shè)置為6N;
階段3:相干積累。對(duì)解調(diào)和解擴(kuò)后的基帶信號(hào)S3進(jìn)行相干累加,得到各個(gè)超前、即時(shí)、滯后支路的同相分量和正交分量,此階段GPU的塊數(shù)設(shè)置為6N;
階段4:環(huán)路更新。包含碼環(huán)和載波環(huán)的更新,此階段的塊數(shù)設(shè)置為1,線程設(shè)置為2N,其中一半負(fù)責(zé)對(duì)碼環(huán)的更新,一半負(fù)責(zé)對(duì)載波環(huán)的更新。
除階段4外,其余每個(gè)階段每個(gè)塊中的線程數(shù)可以設(shè)置為最大以提升效率,對(duì)于NVIDIA GT640,此值為1 024.
對(duì)于1.3節(jié)中的積分求累加和的環(huán)節(jié),GPU中常規(guī)的算法是對(duì)數(shù)據(jù)進(jìn)行分組,每個(gè)線程處理指定的一組數(shù)據(jù)之和,得到的結(jié)果存放在共享存儲(chǔ)器中,最后利用某一個(gè)線程對(duì)該共享數(shù)組求和(例如利用每塊中的第一個(gè)線程求和)。利用某一線程對(duì)共享數(shù)組求和非常耗時(shí),同時(shí)也浪費(fèi)了很多可用的線程資源。為了提升處理的效率,可以采用規(guī)約算法實(shí)現(xiàn)[6],其具體方法如圖5所示。
圖5中Ti(i=1、2、3…9、10)表示規(guī)約的第i步,每一行的數(shù)字表示塊中的線程序號(hào),弧形箭頭連接的兩個(gè)數(shù)表示將利用連接的前一個(gè)線程將共享存儲(chǔ)器中對(duì)應(yīng)位置的兩個(gè)數(shù)相加。采用這種操作,可以是原來(lái)1 024次相加變?yōu)?0次相加,大大提升程序效率。
生成不同衛(wèi)星的偽距觀測(cè)量時(shí),需要從跟蹤環(huán)路中提取不同通道當(dāng)前時(shí)刻的碼相位。直接提取不同衛(wèi)星指定時(shí)刻的碼相位會(huì)導(dǎo)致程序的效率減低,因此,必須在GPU外(CPU中)對(duì)同一時(shí)刻的碼相位進(jìn)行預(yù)測(cè)。
各個(gè)通道跟蹤的衛(wèi)星分別記為Sati(i=1、2、…N),每個(gè)通道上一次跟蹤所得的偽碼頻率為fcodei(i=1、2、…N),以Sat1為基準(zhǔn),最近一次更新時(shí)各通道處理數(shù)據(jù)的指針在數(shù)據(jù)文件中的分別指向第pi(i=1、2、…N)個(gè)采樣點(diǎn),每個(gè)通道跟蹤的碼相位殘差分別為ri(i=1、2、…N),如圖6所示則各個(gè)衛(wèi)星通道在t0時(shí)刻跟蹤的碼相位分別為
CPi=ri+(p1-pi)/fs·fcodei.
(2)
圖6 觀測(cè)量時(shí)間同步示意圖
仿真生成北斗二代B1I信號(hào),信號(hào)的采樣率為20 MHz,中頻為4.09 MHz,信號(hào)中僅有1號(hào)衛(wèi)星,下采樣采用4倍抽取進(jìn)行,NVIDIA GT640顯卡作為試驗(yàn)的GPU平臺(tái)。對(duì)信號(hào)捕獲后進(jìn)行后續(xù)的跟蹤,跟蹤的結(jié)果如圖7所示。圖7(a)是(I,Q)散點(diǎn)圖,(I,Q)散點(diǎn)集中在與Q軸對(duì)稱的I軸附近,說(shuō)明能穩(wěn)定地跟蹤載波相位;EPL(超前、即時(shí)、滯后支路)相關(guān)結(jié)果圖7(b)中,即時(shí)支路的相關(guān)結(jié)果比超前和延遲支路的結(jié)果明顯高出,說(shuō)明環(huán)路能穩(wěn)定地鎖定碼相位。分析說(shuō)明本文給出的基于GPU的跟蹤方法能穩(wěn)定地進(jìn)行信號(hào)跟蹤。
在保證環(huán)路能穩(wěn)定工作的基礎(chǔ)上,分析基于GPU的跟蹤算法的實(shí)時(shí)性。仿真信號(hào)中分別生成包含1、5、8、12顆衛(wèi)星的仿真信號(hào),其余參數(shù)保持不變,采用GPU對(duì)其進(jìn)行跟蹤,其耗時(shí)如表1所示。
表1 基于GPU的信號(hào)跟蹤耗時(shí)
表2 基于GPU和CPU的信號(hào)跟蹤耗時(shí)比較
為了進(jìn)一步突出體現(xiàn)出基于GPU信號(hào)跟蹤在效率上的優(yōu)勢(shì),對(duì)上述的仿真信號(hào)利用基于CPU的傳統(tǒng)跟蹤方法進(jìn)行跟蹤,并且和基于GPU的信號(hào)跟蹤算法進(jìn)行對(duì)比,得到的每毫秒信號(hào)處理耗時(shí)如表2所示。
圖7 基于GPU的信號(hào)跟蹤結(jié)果(a)(I,Q)散點(diǎn)圖;(b)EPL各支路相關(guān)結(jié)果的幅值
從上面的比較可以發(fā)現(xiàn),基于GPU的信號(hào)跟蹤,其耗時(shí)隨著跟蹤衛(wèi)星數(shù)目的增加并不會(huì)有較大的變化,但是基于CPU的信號(hào)跟蹤,其耗時(shí)隨著衛(wèi)星數(shù)目的增加成正比例增加,這是GPU信號(hào)跟蹤優(yōu)于CPU信號(hào)跟蹤一個(gè)顯著的地方。
結(jié)合導(dǎo)航信號(hào)跟蹤的并行運(yùn)算特點(diǎn)和GPU并行運(yùn)算結(jié)構(gòu),實(shí)現(xiàn)了基于GPU的跟蹤算法,其中涉及跟蹤各環(huán)節(jié)的GPU實(shí)現(xiàn)原理及與之相適應(yīng)的數(shù)據(jù)更新、分配策略、觀測(cè)量生成方法等。仿真結(jié)果表明:該方法能可靠地實(shí)現(xiàn)信號(hào)跟蹤,并且其跟蹤效率相比傳統(tǒng)的軟件接收機(jī)跟蹤方法提升了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信號(hào)FFT捕獲的GPU實(shí)現(xiàn)[J].全球定位系統(tǒng),2011,36(6):12-66.
[4]楊 靜,劉一霏.基于GPU的GPS 信號(hào)并行捕獲[J].中國(guó)慣性技術(shù)學(xué)報(bào),2010.8,20(4):430-434.
[5]KAPLAN E D, HEGARTY C J. GPS原理與應(yīng)用[M]. 2版.寇艷紅譯. 北京: 電子工業(yè)出版社.
[6]張 舒,褚艷利,GPU高性能運(yùn)算之CUDA[M]. 北京:中國(guó)水利水電出版,2009.