极客DIY:廉价电视棒玩转GNSS-SDR,实现GPS实时定位
0×00 前言
GNSS是Global Navigation Satellite System的縮寫(xiě)。中文稱(chēng)作:全球衛(wèi)星導(dǎo)航系統(tǒng)、全球?qū)Ш叫l(wèi)星系統(tǒng)。
?
GNSS泛指所有的衛(wèi)星導(dǎo)航系統(tǒng),包括全球的、區(qū)域的和增強(qiáng)的,如美國(guó)的GPS、俄羅斯的Glonass、歐洲的Galileo、中國(guó)的北斗衛(wèi)星導(dǎo)航系統(tǒng),以及相關(guān)的增強(qiáng)系統(tǒng),如美國(guó)的WAAS(廣域增強(qiáng)系統(tǒng))、歐洲的EGNOS(歐洲靜地導(dǎo)航重疊系統(tǒng))和日本的MSAS(多功能運(yùn)輸衛(wèi)星增強(qiáng)系統(tǒng))等,還涵蓋在建和以后要建設(shè)的其他衛(wèi)星導(dǎo)航系統(tǒng)。
0×01 摘要
本文描述一種利用GNSS-SDR玩轉(zhuǎn)身邊無(wú)線(xiàn)信號(hào)的最廉價(jià)方式。由于這款產(chǎn)品是許多人共同努力的結(jié)果,無(wú)法一一羅列,在此僅提及一下此產(chǎn)品的先驅(qū),V4L/DVB內(nèi)核的開(kāi)發(fā)人者Antti Palosaari,他發(fā)現(xiàn)基于?realtek瑞昱(也稱(chēng)螃蟹)RTL2832U 芯片的USB電視棒存在一種未公開(kāi)的操作模式, 啟用之后可以作為一種廉價(jià)的軟件無(wú)線(xiàn)電的前端。這個(gè)重要功能是芯片允許設(shè)備向主機(jī)發(fā)送原生的I/Q采樣信號(hào),然后主機(jī)負(fù)責(zé)對(duì)DAB/DVB+/FM信號(hào)進(jìn)行解調(diào)。這對(duì)GNSS軟件接收器來(lái)說(shuō)是好消息,因?yàn)樗采w了目標(biāo)頻率帶寬。
參考規(guī)格說(shuō)明書(shū),RTL2832U能夠以高達(dá)3.2 MSPS基帶采樣頻率輸出8位I/Q采樣信號(hào)。不過(guò),經(jīng)測(cè)試發(fā)現(xiàn)無(wú)損的最高采樣頻率是2.8 MSPS。頻率范圍嚴(yán)重依賴(lài)于所用的調(diào)諧器。使用Elonics E4000調(diào)諧器的電視棒可能提供最寬的頻率范圍(64-1700MHz,而1100-1250MHz之間的存在采樣盲區(qū))。當(dāng)超出規(guī)范使用時(shí),調(diào)諧器可以覆蓋50MHz-2.2GHz(包括盲區(qū))。有關(guān)此設(shè)備兼容性的更多信息可以參考OsmocomSDR Wiki。
全球衛(wèi)星導(dǎo)航系統(tǒng)(GNSS)Galileo-E1和GPS-L1鏈路的中心頻率是 1575.42MHz,而E400調(diào)諧器芯片可以覆蓋這個(gè)頻段。我們可以配置GNSS-SDR,把RTL2832U作為實(shí)時(shí)信號(hào)源,從而為搭建GPS-L1信號(hào)接收器提供一種低成本的選擇(數(shù)十塊)。關(guān)于GNSS-SDR這個(gè)新功能,本文將介紹操作細(xì)節(jié)以及一些性能測(cè)試。
0×02 OsmoSDR驅(qū)動(dòng)
為支持realtek瑞昱RTL2832U芯片的電視棒,GNSS-SDR需要使用OsmoSDR GNU Radio數(shù)據(jù)源模塊(source block)及其驅(qū)動(dòng)。研究人員實(shí)現(xiàn)新的 GNSS-SDR數(shù)據(jù)源適配器,即實(shí)際上是OsmoSDR上gr_hier_block2的類(lèi)實(shí)例,而關(guān)聯(lián)的GNSS-SDR 數(shù)據(jù)源名稱(chēng)為Osmosdr_Signal_Source。適配器的源碼位于:
trunk/src/algorithms/signal_source/adapters/osmosdr_signal_source.h trunk/src/algorithms/signal_source/adapters/osmosdr_signal_source.cc通過(guò)包含以下頭部文件,調(diào)用libgnuradio-osmosdr 函數(shù)庫(kù):
#include <osmosdr_api.h> #include <osmosdr_source_c.h>編譯時(shí)增加GNSS-SDR對(duì)RTL2832U的支持是可選的,需要安裝 OsmoSDR庫(kù)。關(guān)于一步步構(gòu)建的操作方法,請(qǐng)查閱位于trunk/README的GNSS-SDR 說(shuō)明文檔。
0×03 設(shè)置GNSS-SDR 開(kāi)啟GPS-L1實(shí)時(shí)模式
為了兼容 USB DVB-T設(shè)備,我們必須在 GNSS-SDR配置文件(gnss-sdr.conf) 中選擇 Osmosdr_Signal_Source作為信號(hào)源模塊(SignalSource block)。此外,我們也需要配置如下參數(shù):
基帶采樣頻率 //the baseband sampling frequency 射頻中心頻率 //the RF center frequency 射頻增益(IF gain) //the RF gain 自動(dòng)增益控制(AGC) 模式 //the AGC operation可正常接收 GPS-L1 C/A信號(hào)的有效配置如下:
[GNSS-SDR] ;######### GLOBAL OPTIONS ################## GNSS-SDR.internal_fs_hz=2000000 ;######### CONTROL_THREAD CONFIG ############ ControlThread.wait_for_flowgraph=false ;######### SIGNAL_SOURCE CONFIG ############ SignalSource.implementation=Osmosdr_Signal_Source SignalSource.item_type=gr_complex SignalSource.sampling_frequency=2000000 SignalSource.freq=1575420000 SignalSource.gain=60 SignalSource.AGC_enabled=true SignalSource.enable_throttle_control=false安全研究員建議把采樣頻率設(shè)為2 MSPS。在酷睿2四核Q9000處理器@2.66GHz主頻和4G內(nèi)存的硬件情況下,這一配置可以實(shí)現(xiàn)8個(gè)衛(wèi)星信道的實(shí)時(shí)接收操作。此外,啟用E4000的自動(dòng)控制增益(AGC)可以獲得最好效果。
0×04 RTL2832U振蕩器精度和穩(wěn)定性的問(wèn)題
正如Michele Bavaro在他GNSS 博客上提到的, RTL2832U 電視棒所用晶體振蕩器的精確度非常低。通過(guò)在兩種設(shè)備(EzCap666和Generic P160)上的實(shí)驗(yàn)證實(shí)了這個(gè)問(wèn)題。作者使用高精度的信號(hào)生成器在GPS-L1鏈路上產(chǎn)生未調(diào)制的載波信號(hào),然后在捕獲的信號(hào)中測(cè)量載波頻率錯(cuò)誤。在EzCap設(shè)備上產(chǎn)生的偏差是80KHz,而在P160設(shè)備上產(chǎn)生的偏差是14.8KHz。
本地晶體振蕩器的的誤差會(huì)給GNSS接收器造成兩種影響:
1.基帶信號(hào)會(huì)偏移到一個(gè)中頻( Intermediate Frequency //IF //中高頻;中高頻中間頻率; ),等同于壓控振蕩器的偏差(VCO deviation)。也可以視為明顯的多普勒頻移。如果疊加的多普勒頻移(實(shí)際的信號(hào)多普勒頻移+偏移的中頻)超過(guò)可辨識(shí)的多普勒搜索間距,信號(hào)識(shí)別便會(huì)失敗。 2.由于模數(shù)轉(zhuǎn)換器的采樣時(shí)鐘也要參考本地振蕩器,所以采樣頻率也會(huì)出現(xiàn)偏差。這個(gè)問(wèn)題會(huì)影響追蹤的延時(shí)鎖相環(huán)(Delay Locked Loop DLL),因?yàn)榕渲梦募性O(shè)置的理論采樣時(shí)鐘頻率與實(shí)際的采樣時(shí)鐘頻率存在偏差。如果偏差太大,追蹤的延時(shí)鎖相環(huán)(DLL)也會(huì)鎖定失敗。多虧了GNSS-SDR的靈活性,安全研究員可以通過(guò)修改軟件接收器配置來(lái)消除這兩種負(fù)面影響。一方面,可以通過(guò)啟用如下的頻率轉(zhuǎn)換FIR過(guò)濾器來(lái)使用信號(hào)調(diào)節(jié)模塊(Signal Conditioner block )抵消中頻(IF):
;######### SIGNAL_CONDITIONER CONFIG ############ SignalConditioner.implementation=Signal_Conditioner DataTypeAdapter.implementation=Pass_Through ;######### INPUT_FILTER CONFIG ############ InputFilter.implementation=Freq_Xlating_Fir_Filter InputFilter.input_item_type=gr_complex InputFilter.output_item_type=gr_complex InputFilter.taps_item_type=float InputFilter.number_of_taps=5 InputFilter.number_of_bands=2 InputFilter.band1_begin=0.0 InputFilter.band1_end=0.85 InputFilter.band2_begin=0.90 InputFilter.band2_end=1.0 InputFilter.ampl1_begin=1.0 InputFilter.ampl1_end=1.0 InputFilter.ampl2_begin=0.0 InputFilter.ampl2_end=0.0 InputFilter.band1_error=1.0 InputFilter.band2_error=1.0 InputFilter.filter_type=bandpass InputFilter.grid_density=16 InputFilter.sampling_frequency=2000000 InputFilter.IF=14821 ;######### RESAMPLER CONFIG ############ Resampler.implementation=Pass_Through Resampler.dump=false Resampler.item_type=gr_complex另一方面,通過(guò)設(shè)置GNSS-SDR內(nèi)部采樣頻率參數(shù)預(yù)計(jì)的采樣時(shí)鐘頻率,可以測(cè)量和斟酌采樣頻率錯(cuò)誤。
GNSS-SDR.internal_fs_hz=corrected_value InputFilter.sampling_frequency=corrected_value Resampler.sample_freq_in=corrected_value Resampler.sample_freq_out=corrected_value0×05 GPS有源天線(xiàn)
安全研究員使用帶有陶瓷貼片天的低噪聲放大器(Low Noise Amplifier?LNA)天線(xiàn)作為有源GPS天線(xiàn),從而降低整體的噪聲。下圖展示Garmin GA27C GPS天線(xiàn),我們可以看到在它的PCB板子上有塊陶瓷貼片:
除去塑料殼的Garmin GA-27有源天線(xiàn)
為把天線(xiàn)連接到DVT-T電視棒上,安全研究員需要做一些硬件的修改:
1. 假設(shè)GPS天線(xiàn)配置了SMA連接器,為了讓GPS天線(xiàn)能夠與DVB-T電視棒對(duì)接,我們需要自己制作射頻(RF)電纜把SMA連接器轉(zhuǎn)換成MCX連接器。 2. 需要使用Bias-T網(wǎng)絡(luò)(Bias-T network)饋入(feed)低噪聲放大器(LNA)。0×06 性能測(cè)量及結(jié)論
為實(shí)時(shí)接收和處理GPS信號(hào),安全研究員評(píng)估了兩種不同的配置。
第一種方法:安全研究員使用自制的20dB放大和過(guò)濾電路把DVB電視棒連接到有源貼片天線(xiàn)。增益模塊(gain block)提供+5伏直流電壓為有源天線(xiàn)內(nèi)部的低噪聲放大器(LNA)供電。下圖為DVB電視棒(generic P160)、低噪聲放大器(LNA)和有源天線(xiàn)的組合:
使用外部LNA電路把通用P160 DVB-T電視棒連接到的GA-27天線(xiàn)
另一種方法:安全研究員使用bias-T網(wǎng)絡(luò)(standard?bias-T network)把有源GPS天線(xiàn)與DVB電視棒的直接連接起來(lái)。此設(shè)置如下圖所示:
使用bias-T網(wǎng)絡(luò)把通用P160 DVB-T電視棒連接到GA-27天線(xiàn)
在這些實(shí)驗(yàn)中,安全研究員使用Dell XPS M1530筆記本,配置為:
Intel 酷睿2雙核 T9300 CPU (Intel Core 2 Duo T9300 CPU) 內(nèi)存:4 GB 操作系統(tǒng):Ubuntu 12.04 GNU Radio版本為3.6.0本文撰寫(xiě)之時(shí)(SVN rev. 227),在把RtlsdrSignalSource 的采樣頻率從2MSPS降低1MSPS情況下,上述設(shè)備可以支持4個(gè)衛(wèi)星信道的實(shí)時(shí)操作。雖然支持的帶寬有限,但是GNSS-SDR均可以通過(guò)上述兩種配置獲取、追蹤、確定位置。天線(xiàn)放置在CTTC(建筑群熱時(shí)間常數(shù)簡(jiǎn)寫(xiě))建筑的屋頂,并在實(shí)驗(yàn)過(guò)程一直保持固定。
Tracking.dump=true Tracking.dump_filename=./tracking_ch_在后續(xù)的分析處理中,研究人員使用Matlab腳本進(jìn)行完整性檢查(sanity check),腳本位置如下:
trunk/src/utils/matlab/gps_l1_ca_dll_pll_plot_sample.m圖片清楚地顯示了GPS C/A導(dǎo)航信號(hào)。PLL和DLL鑒相器的輸出非常雜亂。
追蹤數(shù)據(jù)分析
最后,直接通過(guò)Google地圖來(lái)描繪獲取到的KMV位置文件,如下圖所示。黃線(xiàn)代碼表示10秒間隔內(nèi)位置的變化,而紅箭頭表示天線(xiàn)實(shí)際所在的位置。此外,我們也繪制了高度的變化情況。使用4顆衛(wèi)星和非常低的采樣頻率-1.2MSPS,研究人員便可以估計(jì)位置的時(shí)間和速度時(shí)間曲線(xiàn)(Position Velocity and Time PVT),這里估計(jì)的定位誤差在200米范圍內(nèi)。
使用Google地圖分析GNSS-SDR估算的位置
0×07 總結(jié)
總結(jié)這個(gè)初步的實(shí)驗(yàn),研究人員得出結(jié)論,使用低成本的Realtek?DVB-T電視棒實(shí)現(xiàn)GNSS定位是可行的。據(jù)稱(chēng),這是GNSS軟件接收器首次使用RTLSDR設(shè)備進(jìn)行實(shí)時(shí)定位操作。這個(gè)里程碑可以讓我們使用筆記本和極低成本的硬件獲取GNSS服務(wù)的潛能。研究人員正在計(jì)劃進(jìn)一步測(cè)試和提升對(duì)RTLSDR設(shè)備的支持。
*原文地址:gnss-sdr.org
本文轉(zhuǎn)自 K1two2 博客園博客,原文鏈接:http://www.cnblogs.com/k1two2/p/5158572.html??,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者總結(jié)
以上是生活随笔為你收集整理的极客DIY:廉价电视棒玩转GNSS-SDR,实现GPS实时定位的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在线字符或文本转二进制工具
- 下一篇: C#通过接口获取税控盘基本信息