前言
我們知道捕獲一顆衛(wèi)星而言是對碼相位和多普勒頻率的二維搜索。
多普勒頻率是由衛(wèi)星運動和接收機運動共同疊加的結果。一般情況下的地面運動引起的多普勒都比較小,GPS的衛(wèi)星運動在L1頻點引起的多普勒頻移不會超過±5KHz
總之,兩者疊加的多普勒一般不會超過±5KHz,一些要求高動態(tài)場景的多普勒一般也是在±10KHz內(nèi)
數(shù)據(jù)位寬
我們這里有12bit位寬IQ輸入,但一般的GPS接收機是不需要這么多位寬的,我們將其壓縮成2bit位寬就可以了,這樣能夠很大程度上節(jié)省資源。
在有限帶寬的情況下,一位ADC的量化誤差所引起的損耗為1.96dB,兩位ADC的量化誤差所引起的損耗為1.2dB,三位ADC的量化誤差所引起損耗為0.6dB。
捕獲算法選擇
早期硬件資源不充足的時候使用串行捕獲,時間比較久。后面FPGA資源越來越大的時候,比較經(jīng)典的算法是并行碼相位FFT-IFFT算法。我一般喜歡用這種方法在matlab上進行算法驗證,最簡單的就是使用這種方法,幾行代碼就實現(xiàn)了其功能。
并行碼相位FFT-IFFT算法
優(yōu)點:
1、 設計結構和流程都比較簡單
(1) 中頻信號搬到零頻
(2) 然后做FFT = A
(3) 本地偽碼做FFT = B
(4) C = IFFT(A*CONJ(B))
結果等效于所有碼相位進行了相關運算,運算速度快。在一個頻點一次性將所有碼相位搜索完
2、 速度也比較快
缺點:
1、 大點數(shù)FFT模塊比較消耗資源
2、 對于電文翻轉(zhuǎn)的抵抗性差,例如如果運氣不好,正好采集的中頻數(shù)據(jù)中間存在著電文翻轉(zhuǎn),那么本次相關運算將會趨近于0。而且對于電文速率較高的情況(類似B1 GEO衛(wèi)星這種2ms就一個電文)就會使得性能下降
短時相關+FFT的算法
優(yōu)點:
1、同時搜索碼相位的同時也搜頻
碼相位直接采用相關器實現(xiàn),搜頻使用FFT算法
2、資源使用靈活
缺點:
1、設計和流程較復雜
同時N個相關器進行運算,其時序設計比較復雜
FFT搜頻存在以下問題:
1、如果頻率落在兩個分辨的頻點中間,峰值會有所下降(頻譜泄露)
2、如果頻偏離中心頻點較遠,則峰值會下降,
如下圖所示:
這種問題可以通過補0來緩解,不過無法完全消除(提升計算分辨率)
捕獲參數(shù)設計
1、碼相位參數(shù)
我們參照半碼片為一個碼相位的方法,理論上是2046個碼相位,實際設計我們將25M時鐘的12個時鐘周期作為一個碼相位,那么實際上一共是2083個碼相位
2、 短時相關+FFT參數(shù)
我們希望我們的搜頻范圍為正負10KHz的范圍,那么每個點的時間間隔應該為50us,也就是說1ms數(shù)據(jù)分成了20段,我們希望我們捕獲到的頻率誤差為200Hz以內(nèi),那么FFT兩個點之間的頻率分辨間隔為400Hz以內(nèi),那么FFT的分析時間要2.5ms以上,因此我們設置FFT點數(shù)為64個點,在20個數(shù)據(jù)點的基礎上補足44個0,則FFT的分析時間為3.2ms,捕獲的頻率誤差156Hz
總之
短時相關時間:50us
FFT點數(shù):64
3、 捕獲時間計算
因為在搜索碼的過程中同時就完成了搜頻運算,因此我們計算捕獲時間只需要計算所有碼相位的相關時間即可
相關累加時間:1ms
相關器數(shù)量:100個
將捕獲核心算法時鐘提升到采樣率的7倍以上(還可以更高),那么等效的相關器就相當于700個。
非相干累加次數(shù):10次
因此700個碼相位完成一次捕獲搜索需要時間為10ms。而2083個碼相位只需要3個700次碼相位搜索即可完成,也就是30ms。
一顆星的捕獲時間:
一顆衛(wèi)星最慢也只需要30ms即可完成捕獲,最快10ms完成捕獲
整個GPS系統(tǒng)捕獲時間:
所有衛(wèi)星捕獲時間取平均數(shù)20ms,那么32個GPS衛(wèi)星全部遍歷一遍只需要600ms。加上FPGA其他模塊的延時以及軟件的一些開銷時間,也就是說在1s內(nèi)肯定能夠完成整個GPS衛(wèi)星的捕獲。
FPGA實現(xiàn)的一些組成模塊
1、 數(shù)據(jù)緩存
2、 100個相關器
3、 FFT模塊
4、 FFT結果緩存以及非相干累加邏輯
5、 門限判決部分
6、 PL與PS部分的配置接口
上板測試
剛開始的時候,沒有捕獲到任何一顆衛(wèi)星,這種情況下只能將數(shù)據(jù)采集下來進行進一步分析,
ILA的最長深度為130172個,差不多有5ms多的長度,足夠用于捕獲了。當然也可以使用ILA級聯(lián)的方法采集更多的數(shù)據(jù)。
將采集的數(shù)據(jù)經(jīng)過與verilog設計等效的matlab來進行分析,發(fā)現(xiàn)對輸入信號的搬頻方向反了。
注意,對于搬頻方向搞反是常見的錯誤,改正過來后,明顯的相關峰就出來了
串口打印的捕獲結果如下,這里PS程序?qū)⑺械男l(wèi)星都遍歷了一遍
The cur_acq_ch,satid,phase,doppler,signal,noise is :0,1 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :1,2 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :2,3 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :3,4 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :4,5,7210,15,1769,580 The cur_acq_ch,satid,phase,doppler,signal,noise is :5,6 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :6,7 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :7,8 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :8,9 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :9,10 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :10,11 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :0,12 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :1,13,24094,0,1875,583 The cur_acq_ch,satid,phase,doppler,signal,noise is :2,14 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :3,15 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :5,16,23998,-4,3948,591 The cur_acq_ch,satid,phase,doppler,signal,noise is :6,17 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :7,18,11758,5,14730,597 The cur_acq_ch,satid,phase,doppler,signal,noise is :8,19 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :9,20 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :10,26,10966,3,7507,583 The cur_acq_ch,satid,phase,doppler,signal,noise is :0,21 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :2,22 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :3,23 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :6,24 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :8,25 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :9,31,15694,13,1422,588 The cur_acq_ch,satid,phase,doppler,signal,noise is :0,27,3610,-6,1812,576 The cur_acq_ch,satid,phase,doppler,signal,noise is :2,28 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :3,29,12754,9,9279,588 The cur_acq_ch,satid,phase,doppler,signal,noise is :6,30 failed The cur_acq_ch,satid,phase,doppler,signal,noise is :2,32 failed
捕獲到了5號星、13、16、18、26、31、27和29號星。和之前手機上觀測的數(shù)據(jù)完全吻合,非常好。而且連信號強度也能夠?qū)纳?,打印中的signal值就是對應的信號強度
總結
做FPGA大型算法工程的時候有一套與之對應的matlab程序或者C模型程序是至關重要的,完成這項工作的難度不亞于在FPGA上的實現(xiàn),但也是必須要做的,否則當開始調(diào)試的時候出來不了結果的話,則很難進行定位,反而會花費巨量的時間,以至于最后放棄。
捕獲是FPGA最難的一部分,完成了這部分之后有種豁然開朗的感覺,不過后面跟蹤能不能也實現(xiàn)就得繼續(xù)進行下去才知道了。
-
gps
+關注
關注
22文章
2873瀏覽量
165842 -
接收機
+關注
關注
8文章
1175瀏覽量
53337 -
adc
+關注
關注
97文章
6351瀏覽量
543410
原文標題:從零開始研發(fā)GPS接收機連載——6、捕獲模塊設計與驗證
文章出處:【微信號:FPGA十年老鳥,微信公眾號:FPGA十年老鳥】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論