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