基于凌華科技與System Generator的GPS快速捕獲算法的實(shí)現(xiàn)與驗(yàn)證
作者
本文引用地址:http://cafeforensic.com/article/201610/306742.htm劉恩曉,男,1983.08生人,現(xiàn)為哈爾濱工業(yè)大學(xué)通信技術(shù)研究所博士生在讀,主要研究方向?yàn)樾l(wèi)星導(dǎo)航接收機(jī)及其抗干擾技術(shù)研究
應(yīng)用領(lǐng)域
導(dǎo)航接收機(jī)關(guān)鍵算法的硬件實(shí)現(xiàn)
挑戰(zhàn)
目前在GPS接收機(jī)中,對(duì)碼的捕獲一般有兩種方法:串行搜索方法和并行搜索方法。串行搜索方法硬件實(shí)現(xiàn)簡(jiǎn)單,但其捕獲時(shí)間較長(zhǎng),每更改一次本地碼相位,就需要花費(fèi)1ms,完成一個(gè)搜索約2min左右時(shí)間。導(dǎo)航接收機(jī)在很多應(yīng)用領(lǐng)域要求高的數(shù)據(jù)更新率,這就要求捕獲時(shí)間變得更短才行。目前GPS信號(hào)捕獲電路的主要實(shí)現(xiàn)手段是通過(guò)使用DSP芯片,DSP可以通過(guò)C語(yǔ)言編寫程序,屬于軟件工作,可以在較高的層次進(jìn)行設(shè)計(jì),為設(shè)計(jì)工作提供了方便。但是此種實(shí)現(xiàn)方法不利于知識(shí)產(chǎn)權(quán)的保護(hù),也不利于生產(chǎn)專門的芯片。因此本文采用FPGA來(lái)實(shí)現(xiàn)。而FPGA資源有限,如何通過(guò)復(fù)用來(lái)滿足資源占用是一個(gè)關(guān)鍵問(wèn)題。此外,導(dǎo)航信號(hào)強(qiáng)度遠(yuǎn)遠(yuǎn)低于噪聲,接收SNR僅有-20dB,準(zhǔn)確采集中頻數(shù)據(jù)對(duì)算法的驗(yàn)證至關(guān)重要。
解決方案
重點(diǎn)研究了在SDR(Software Defined Radio)平臺(tái)上實(shí)現(xiàn)頻域捕獲算法,基于SDR平臺(tái)和FFT來(lái)實(shí)現(xiàn)并行快速捕獲算法。本文使用Xilinx公司的系統(tǒng)級(jí)建模工具System Generator完成了對(duì)XCVFX60FF1152這款V4 系列的FPGA芯片編程,完成了頻域捕獲算法的硬件實(shí)現(xiàn)。在設(shè)計(jì)中采用時(shí)分復(fù)用技術(shù),使整個(gè)設(shè)計(jì)方案只采用一個(gè)FFT核,并且使用了一種新的復(fù)數(shù)乘法方案,節(jié)約了硬件資源。為了避免系統(tǒng)熱噪聲的影響而準(zhǔn)確采集導(dǎo)航數(shù)據(jù),本系統(tǒng)設(shè)計(jì)時(shí)使用ADLINK公司生產(chǎn)的數(shù)字化儀PCI-9846H進(jìn)行衛(wèi)星信號(hào)采集,使用Xilinx公司提供的編程軟件——System Generator,讀取采集數(shù)據(jù),在Matlab下的Simulink中進(jìn)行系統(tǒng)設(shè)計(jì)調(diào)試,然后直接生成硬件描述語(yǔ)言下載到FPGA中。
一、引言
GPS接收機(jī)必須復(fù)現(xiàn)待捕獲的衛(wèi)星所發(fā)射的PN碼,然后必須移動(dòng)這個(gè)復(fù)現(xiàn)碼的相位,直到與衛(wèi)星的PN碼發(fā)生相關(guān)為止。當(dāng)接收機(jī)所復(fù)現(xiàn)的碼與輸入的衛(wèi)星碼相匹配時(shí),有最大的相關(guān)值。當(dāng)復(fù)現(xiàn)碼的相位與輸入的衛(wèi)星碼的相位在任何一邊的偏移超過(guò)1個(gè)碼片時(shí),有最小的相關(guān)。這就是GPS接收機(jī)捕獲或跟蹤衛(wèi)星信號(hào)時(shí)在碼相位域內(nèi)檢測(cè)衛(wèi)星信號(hào)的方式。這樣GPS信號(hào)的捕獲和跟蹤過(guò)程是二維的信號(hào)復(fù)現(xiàn)過(guò),如圖1所示。圖中橫坐標(biāo)為碼相位,縱坐標(biāo)為多普勒頻槽。
典型情況下碼相位以1/2碼片的增量被搜索。每個(gè)碼相位搜索增量是一個(gè)碼片分格。每個(gè)頻率的分格大概是2/3T Hz,其中T是搜索逗留時(shí)間(逗留時(shí)間越長(zhǎng)頻率分格越小)。一個(gè)碼分格和一個(gè)多普勒分格合并起來(lái)成為一個(gè)方格。在碼域內(nèi),GPS接收機(jī)完成自相關(guān)的過(guò)程是,首先搜索希望衛(wèi)星的相位,然后調(diào)節(jié)復(fù)現(xiàn)碼發(fā)生器的基碼標(biāo)稱速率,以補(bǔ)償由于接收機(jī)和衛(wèi)星之間視距動(dòng)態(tài)在衛(wèi)星PRN碼上所引起的碼相位延遲,從而實(shí)現(xiàn)對(duì)衛(wèi)星碼狀態(tài)的跟蹤。碼相關(guān)的過(guò)程用被相移的復(fù)現(xiàn)碼與輸入的衛(wèi)星碼實(shí)時(shí)相乘,然后積分和累加而實(shí)現(xiàn)。GPS接收機(jī)的目標(biāo)是使其復(fù)現(xiàn)碼的瞬時(shí)相位于所希望的衛(wèi)星的碼相位保持最大的相關(guān)。 接收機(jī)還必須調(diào)整其復(fù)現(xiàn)的載頻信號(hào),以使其與所希望的衛(wèi)星頻率相匹配,否則在距離域內(nèi)的信號(hào)的相關(guān)過(guò)程將因?yàn)镚PS接收機(jī)頻率響應(yīng)的滾降特性而受到嚴(yán)重的衰減,后果是永遠(yuǎn)也捕獲不到信號(hào)。即使接收機(jī)在搜索過(guò)程中成功捕獲了信號(hào),如果失去了對(duì)衛(wèi)星頻率的跟蹤,也會(huì)接著失去對(duì)碼的跟蹤。因此,GPS接收機(jī)首先搜索希望衛(wèi)星的載波多普勒頻率,然后跟蹤這顆衛(wèi)星的載波多普勒狀態(tài),以在載波多普勒域完成載波的匹配過(guò)程。
二、頻域快速捕獲算法
2.1 頻域捕獲原理
隨著硬件技術(shù)的發(fā)展,F(xiàn)FT的運(yùn)算速度越來(lái)越快。在現(xiàn)代通信,無(wú)線電導(dǎo)航,精密定位,精密時(shí)間測(cè)量和傳遞、授時(shí)等方面都要求對(duì)無(wú)線電信號(hào)進(jìn)行實(shí)時(shí)相關(guān)處理。為了做到信號(hào)的快速捕獲,GPS接收機(jī)引入FFT算法來(lái)計(jì)算相關(guān)值。在每一個(gè)頻槽同時(shí)計(jì)算出所有碼相位的相關(guān)值,可以使捕獲時(shí)間盡可能的縮短。
FFT搜索算法是基于數(shù)學(xué)特性:時(shí)域的卷積等價(jià)于頻域的相乘[9]91-93。傳統(tǒng)的兩個(gè)抽樣序列之間的關(guān)系是按如下方式實(shí)現(xiàn)
偽碼并行FFT算法的搜索過(guò)程與匹配濾波法相似(但速度比匹配濾波法快),即:在估計(jì)的多普勒頻率點(diǎn)進(jìn)行一次FFT搜索全部偽碼相位,功率最大值和門限值比較,若最大值大于門限值,則表明信號(hào)捕獲,給出信號(hào)所在位置的碼相位和多普勒頻率,進(jìn)入信號(hào)跟蹤階段,如果最大值小于門限值,則表明信號(hào)未捕獲,通過(guò)控制邏輯改變多普勒搜索單元,重復(fù)上述過(guò)程。由于FFT具有把能量集中到一個(gè)單元上的特性,所以FFT的并行搜索方式,不但搜索時(shí)間短,而且可以在低信噪比下捕獲信號(hào)。
2.2 頻域捕獲的步驟
偽碼并行FFT算法的具體過(guò)程如下:
(1) 中頻信號(hào)采樣后經(jīng)數(shù)字下變頻,交給FFT模塊。其中I、Q兩支路分別為實(shí)部和虛部進(jìn)行復(fù)數(shù)FFT運(yùn)算。
(2) 在FFT單元中,對(duì)進(jìn)來(lái)的數(shù)據(jù)做分段處理,分段的長(zhǎng)度L決定一次并行運(yùn)算的長(zhǎng)度,與捕獲概率、捕獲時(shí)間有很大的關(guān)系。
(3) 對(duì)本地產(chǎn)生的擴(kuò)頻碼進(jìn)行FFT運(yùn)算,并取其復(fù)共軛。
(4) 把數(shù)據(jù)段和地址段的FFT結(jié)果相乘,然后進(jìn)行IFFT運(yùn)算。
(5) 對(duì)IFFT的結(jié)果取模值,存儲(chǔ)結(jié)果。
對(duì)結(jié)果進(jìn)行捕獲判決,找出累加后一幀中最大點(diǎn)與設(shè)定的門限比較,如果高于門限值,進(jìn)行一次捕獲檢驗(yàn),確定是真的捕獲后交與后面跟蹤支路。
2.3 頻域捕獲運(yùn)算量分析
由于FFT算法的使用,使得相對(duì)時(shí)域的搜索算法相比,運(yùn)算量大幅下降。以碼長(zhǎng)為1023討論,對(duì)一路的接收信號(hào)序列x(n)和本地信號(hào)序列y(n)的相關(guān)函數(shù)在時(shí)域的表達(dá)式為:
在頻域計(jì)算1023個(gè)相關(guān)函數(shù)值所需的乘法運(yùn)算次數(shù)縮減為在時(shí)域運(yùn)算的1.57%,所需要的加法運(yùn)算次數(shù)縮減為在時(shí)域運(yùn)算的2.94%。可見(jiàn)該算法對(duì)運(yùn)算量有明顯的減少。
三、算法實(shí)現(xiàn)與實(shí)驗(yàn)驗(yàn)證
本文中的導(dǎo)航信號(hào)來(lái)源于安捷倫4438C信號(hào)模擬器,射頻前端采用SiGe公司的SE4150芯片,數(shù)據(jù)采集采用ADLINK公司的PCI-9846H高速高分辨率數(shù)字化儀,該數(shù)字化儀具有4通道,16bit量化和40MSps的數(shù)據(jù)采集能力,板載512MHz的SDRAM,采集后將數(shù)據(jù)通過(guò)PCI存儲(chǔ)dat格式文件到計(jì)算機(jī)中,完全滿足實(shí)驗(yàn)需求。數(shù)字處理平臺(tái)選用的是國(guó)防科技大學(xué)空間儀器研究中心開發(fā)的通用軟件無(wú)線電(SDR)開發(fā)平臺(tái)。
軟件平臺(tái)是Xilinx公司的System Generator,其特點(diǎn)是可以通過(guò)Simulink在高層實(shí)現(xiàn)硬件編程。System Generator是Xilinx公司的系統(tǒng)級(jí)建模工具,在很多方面擴(kuò)展了MathWorks公司的Simulink平臺(tái),提供了適合硬件設(shè)計(jì)的數(shù)字信號(hào)處理(DSP)建模環(huán)境,加速、簡(jiǎn)化了FPGA的DSP系統(tǒng)級(jí)硬件設(shè)計(jì)。目前,基于System Generator的設(shè)計(jì)方法已在復(fù)雜系統(tǒng)實(shí)現(xiàn)中展現(xiàn)出強(qiáng)大的潛能。System Generator 在DSP工程師和FPGA工程師之間架起了一座橋梁,使得它在兩個(gè)領(lǐng)域都得到廣泛應(yīng)用。對(duì)于DSP工程師來(lái)說(shuō),通過(guò)Simulink的設(shè)計(jì),System Generator即可自動(dòng)完成硬件比特流的產(chǎn)生,而不需要了解比特流的產(chǎn)生細(xì)節(jié)。對(duì)于FPGA工程師來(lái)說(shuō),System Generator并沒(méi)替代HDL的實(shí)現(xiàn)方式,而是簡(jiǎn)化了繁瑣的編程過(guò)程,讓設(shè)計(jì)者把精力放在系統(tǒng)的關(guān)鍵模塊上。
3.1 系統(tǒng)設(shè)計(jì)
如果一個(gè)系統(tǒng)的所有模塊在System Generator模塊庫(kù)中能找到,那么使用System Generator實(shí)現(xiàn)整個(gè)系統(tǒng)設(shè)計(jì)將非常方便。用戶只需要點(diǎn)擊Generator按鈕即可產(chǎn)生所需要的所有文件,這些文件包括以下幾個(gè)。
(1) 該設(shè)計(jì)的全部HDL代碼。
(2) Clock Wrapper,包括系統(tǒng)時(shí)鐘和Clock Enable信號(hào)的產(chǎn)生。
(3) Testbench,用于ISE下仿真測(cè)試文件,可以對(duì)比Simulink下的仿真結(jié)果。
(4) 工程腳本文件,允許不同綜合工具(比如XST和Synplify)操作System Generator產(chǎn)生的HDL代碼。
(5) 其他文件,ISE通過(guò)這些文件使用System Generator產(chǎn)生的代碼。
使用System Generator進(jìn)行FPGA開發(fā)的主要流程如圖3所示。
3.2 硬件開發(fā)平臺(tái)
國(guó)防科技大學(xué)空間儀器工程研究中心的通用軟件無(wú)線電(SDR)開發(fā)平臺(tái),采用Xilinx公司的Virtex-4系列的XC4VFX60FF1148這款FPGA芯片和TI公司的TMS320C6455-1G這款DSP芯片作為主處理器。圖4及為SDR平臺(tái)。此外,此開發(fā)平臺(tái)上還集成了
(1) AD9287,四通道,8比特量化串行輸出,A/D轉(zhuǎn)換器。
(2) AD9432,單通道,12比特量化并行輸出,A/D轉(zhuǎn)換器。
(3) AD9777,二通道,16比特并行輸入,D/A轉(zhuǎn)換器。
(4) VME總線模塊,RS232模塊。
(5) 外擴(kuò)SpiFlash,總?cè)萘?4Mbit。
本設(shè)計(jì)方案采用了FPGA芯片作為處理器芯片,其內(nèi)部資源如表1所示,可以看出此款FPGA芯片資源豐富,為基于FFT的快速捕獲算法的實(shí)現(xiàn)提供了很好的條件。
3.3 實(shí)驗(yàn)結(jié)果
設(shè)置模擬器輸出GPS 4號(hào)衛(wèi)星導(dǎo)航信號(hào),SNR=-19dB,多普勒頻偏+1kHz;ADLINK新建任務(wù),設(shè)置ch0為工作通道,生成dat文件存儲(chǔ)到本地計(jì)算機(jī),40MHz的采樣速率采集大于1s時(shí)長(zhǎng)。
SiGe公司的SE4150芯片輸出中頻為16.368MHz,對(duì)DDS(Direct Digital Synthesizer)位數(shù)要求較高,所以對(duì)采集的數(shù)據(jù)進(jìn)行預(yù)處理:經(jīng)數(shù)字變頻將中頻降到1.25MHz。對(duì)于2MHz的帶寬,對(duì)數(shù)據(jù)不等間隔抽取降采樣,等效為4.096MHz的采樣速率,并重新量化為8bit位寬。將預(yù)處理的數(shù)據(jù)打開到工作區(qū)以待System Generator讀取調(diào)用。
System Generator的總體設(shè)計(jì)如圖5所示,主要包括以下幾個(gè)功能模塊:數(shù)據(jù)讀取模塊,4096點(diǎn)FFT/IFFT模塊,掃頻模塊,信號(hào)產(chǎn)生模塊,復(fù)數(shù)取模模塊,復(fù)數(shù)乘法模塊,F(xiàn)FT結(jié)果存儲(chǔ)模塊,捕獲判決模塊,邏輯控制模塊,本地?cái)?shù)據(jù)與中頻數(shù)據(jù)選擇模塊(FFT數(shù)據(jù)與IFFT數(shù)據(jù)選擇模塊,系統(tǒng)控制信號(hào)產(chǎn)生模塊)等。
System Generator 可以自動(dòng)生成可在ISE中處理的寄存器傳輸級(jí)(Register Transfer Level, RTL)和IP核代碼,在ISE中完成Xilinx執(zhí)行工程后生成位流文件,最后下載到FPGA完成整個(gè)設(shè)計(jì)流程。表2給出了經(jīng)ISE綜合后本設(shè)計(jì)方案的硬件消耗情況。
從表中可以看出本設(shè)計(jì)方案所占用的芯片內(nèi)的各項(xiàng)硬件資源平均在20%以下,這主要是因?yàn)椋驹O(shè)計(jì)方案采用了時(shí)分復(fù)用技術(shù)在整個(gè)設(shè)計(jì)方案中只采用一個(gè)FFT/IFFT核。從報(bào)告中可以看出系統(tǒng)的所支持的最大時(shí)鐘頻率為93.458MHz。
使用System Generator的Hardware Co-simulation功能,實(shí)現(xiàn)SDR平臺(tái)與PC交互通信,SDR平臺(tái)讀取PC中的數(shù)據(jù),并將運(yùn)行結(jié)果返回給PC從而在PC上觀察分析實(shí)驗(yàn)結(jié)果,如圖6所示。
圖7為輸入的待捕獲信號(hào)以及本地信號(hào)的波形圖。其中自上而下分別是待捕獲信號(hào)的實(shí)部,本地信號(hào)實(shí)部,待捕獲信號(hào)的虛部,本地信號(hào)的虛部,這里已經(jīng)對(duì)待捕獲信號(hào)進(jìn)行了歸一化處理。
圖8為FFT/IFFT模塊的輸入數(shù)據(jù)波形圖。其中圖a)為待運(yùn)算數(shù)據(jù)的實(shí)部,圖b)為待運(yùn)算數(shù)據(jù)的虛部,而圖c)為控制FFT/IFFT模塊開始工作的start端輸入的信號(hào),圖d)為控制其進(jìn)行FFT還是IFFT運(yùn)算的fwd_inv端輸入的信號(hào)。輸入的運(yùn)算數(shù)據(jù)分為3部分:本地信號(hào)FFT運(yùn)算結(jié)果與待捕獲信號(hào)FFT運(yùn)算結(jié)果復(fù)共軛相乘得到的數(shù)據(jù),下一次相關(guān)運(yùn)算所需的本地信號(hào),下一次相關(guān)運(yùn)算所需的待捕獲信號(hào)。可以看到每當(dāng)一部分?jǐn)?shù)據(jù)輸入時(shí),start端都會(huì)出現(xiàn)一個(gè)脈沖以使模塊開始進(jìn)行運(yùn)算,同時(shí)fwd_inv端輸入信號(hào)控制進(jìn)行FFT運(yùn)算還是IFFT運(yùn)算。由于本地信號(hào)FFT運(yùn)算結(jié)果與待捕獲信號(hào)FFT運(yùn)算結(jié)果復(fù)共軛相乘得到的數(shù)據(jù)要進(jìn)行IFFT運(yùn)算,所以當(dāng)這部分?jǐn)?shù)據(jù)輸入時(shí),fwd_inv端輸入的是0,代表進(jìn)行的運(yùn)算是IFFT運(yùn)算。
圖9為FFT/IFFT模塊的輸出數(shù)據(jù)波形圖。其中圖a)為運(yùn)算結(jié)果的實(shí)部,圖b)為運(yùn)算結(jié)果的虛部,圖c)為xk_index端輸出數(shù)據(jù)波形,圖d)為標(biāo)志著運(yùn)算結(jié)束的edone端輸出數(shù)據(jù)波形。運(yùn)算結(jié)果分為三部分:本地信號(hào)FFT運(yùn)算結(jié)果與待捕獲信號(hào)FFT運(yùn)算結(jié)果復(fù)共軛相乘得到的數(shù)據(jù)進(jìn)行IFFT運(yùn)算的結(jié)果待捕獲信號(hào)FFT運(yùn)算結(jié)果,本地信號(hào)FFT運(yùn)算結(jié)果。從圖中可以看出由于待捕獲信號(hào)的信噪比SNR=-19dB,其信號(hào)頻譜已完全淹沒(méi)于噪聲中。FFT/IFFT模塊完成一次運(yùn)算,edone端會(huì)在輸出結(jié)果的前一個(gè)時(shí)鐘周期輸出一個(gè)脈沖,而當(dāng)運(yùn)算結(jié)果輸出時(shí),xk_index端也會(huì)隨之輸出運(yùn)算結(jié)果的序列號(hào)。
圖10為最終得到的捕獲結(jié)果波形圖,而圖11為最終捕獲到的碼相位延時(shí)和多普勒頻槽??梢钥闯鲈赟NR=-19dB時(shí),本設(shè)計(jì)方案得到了很好的相關(guān)峰。最終捕獲得到的碼相位延時(shí)為2000,多普勒頻槽為7,即捕獲到的DDS模塊的頻率字為40032,其對(duì)應(yīng)的載波頻率為1.251MHz。這與輸入的待捕獲數(shù)據(jù)的參數(shù)一致。所以從仿真結(jié)果上可以證明,本設(shè)計(jì)方案能夠進(jìn)行GPS信號(hào)的捕獲,同時(shí)進(jìn)一步證明了基于FFT的頻域快速捕獲算法是正確有效的。
四、結(jié)論
本文詳細(xì)闡述了如何通過(guò)ADLINK結(jié)合System Generator構(gòu)建驗(yàn)證快速捕獲算法。本設(shè)計(jì)方案總體可分為FFT/IFFT模塊,掃頻模塊,信號(hào)產(chǎn)生模塊,復(fù)數(shù)運(yùn)算模塊,F(xiàn)FT結(jié)果存儲(chǔ)模塊,捕獲判決模塊,以及最復(fù)雜的邏輯控制模塊等7個(gè)模塊。并且在設(shè)計(jì)的過(guò)程中只采用個(gè)一個(gè)FFT/IFFT核,很大程度上節(jié)約了硬件資源。同時(shí)還采用了一種新穎的復(fù)數(shù)乘法設(shè)計(jì)方案。從本章可以看出基于System Generator的硬件開發(fā)方法避開了繁瑣的編寫代碼的過(guò)程,簡(jiǎn)單明了,模塊化很強(qiáng),是一種快速有效的開發(fā)手段。
同時(shí),本文通過(guò)Hardware Co-simulation對(duì)本設(shè)計(jì)方案進(jìn)行了驗(yàn)證。最終能夠?qū)NR=-19dB的待捕獲信號(hào)進(jìn)行正確的捕獲。驗(yàn)證了本設(shè)計(jì)方案的正確性與實(shí)用性。
評(píng)論