當 IGate 戀上 SDR
自從考獲業餘電台牌照成為「火腿操作員」(HAM operator) 後,從未認真履行應有責任,進行無線電相關研究及測試。雖然有著「一係唔做,一做就要做到最好」的決心,但業餘無線電博大精深,範圍又廣,找一個合適的研究題目並不容易。又要 topic 勁,又要新奇好玩無得頂,在幾經思索後,決定由 APRS 開始。
由 Bob Bruninga (WB4APR) 研發,APRS (Automatic Packet Reporting System) 是一個供業餘電台使用的數據通訊系統,於業餘頻道以模擬 FM 調製方式傳送即時資訊,包括通告、信息、警報、位置、及天氣情況等等。「火腿操作員」只需配備有 APRS 功能的通訊器材,完成設定後調校至指定頻道(大中華區為 144.640 MHz),就可以收發資訊。資訊可透過數據中繼 (digipeater) 傳播到更遠地方,亦可透過 IGate (Internet Gateway) 經互聯網轉送到 APRS-IS (APRS Internet Service) 核心 ,讓大家只需上網便能一覽世界各地 APRS 實時情況。
IGate 是今次研究對象,目標是利用 RTL-SDR 技術架設 IGate。IGate 於整個 APRS 架構中處於非常重要位置,它將互聯網及無線電世界聯繫起來,一方面利用 IP (Internet Protocol) 連接互聯網,另一方面透過無線電設備收發 APRS 資訊。使用 RTL-SDR 好處是硬件售價便宜,對應軟件齊備,易於與電腦整合,靈活性及擴展性又高,絕對適合作為 IGate 接收 APRS 訊號的最佳拍檔。
【相關文章:次世代無線電 RTL-SDR】
架設 IGate 需要以下設備:
- RTL-SDR 手指,即使用 Realtek RTL2832U demodulator 及 Rafael Micro R820T tuner 晶片的數碼電視及電台 USB 接收器
- 可連線上網的電腦或 Raspberry Pi
- Dire Wolf 電腦軟件
在香港購買 RTL-SDR 手指可能比較困難,但在淘寶卻非常容易 ,而且數十元就有交易。IGate 軟件方面採用由 WB2OSZ 開發的 Dire Wolf。它是一個軟件音效卡、modem/TNC (terminal node controller)、及 APRS 編碼及解碼器,可作 digipeater 及 IGate 之用。Dire Wolf 好處是跨平台 (cross platform),無論於 Windows、OS X、Linux 或 Raspberry Pi 平台上都可以安裝,又支援 RTL-SDR,而且 hackable,可透過編寫程式發放不同 APRS 資訊,所以選用 Dire Wolf。電腦方面使用運行 Linux Mint 17.3 Rosa MATE Edition 操作系統的 Acer Aspire One D250 netbook。
【相關文章:去吧!轉用 Linux 啦!】
安裝 Dire Wolf
- 首先到 Dire Wolf GitHub 網頁下載最新版本源碼(現時最新版本為 1.3)。
- 開啟 Terminal,輸入以下指令,進入 Downloads 文件夾。
- 將 Dire Wolf 1.3 源碼檔案解壓。
- 將解壓出來的 direwolf-1.3 文件夾移送到 /opt/。
- 進入 /opt/direwolf-1.3/ 文件夾。
- 透過 APT 套件管理員安裝 libasound2-dev 套件。
- 更新 APRS 符號檔案。
- 一切準備就緒,現在使用 make 指令建立程式。
- 成功建立後便安裝程式。
- 最後,安裝原廠設定檔案。
https://github.com/wb2osz/direwolf/releases
$ cd ~/Downloads
$ tar xfz direwolf-1.3.tar.gz
$ sudo mv direwolf-1.3 /opt/
$ cd /opt/direwolf-1.3/
$ sudo apt-get install libasound2-dev
$ make tocalls-symbols
$ make
$ sudo make install
$ make install-conf
安裝 Dire Wolf 大致完成,然後開始更改設定。開啟任何 text editor(例如 gedit 或 Leafpad 等等),打開位於 home directory ~/ 的 direwolf.conf 檔案,然後更改或加入以下設定:
ADEVICE stdin null CHANNEL 0 MYCALL VR2ZDX-10 IGSERVER asia.aprs2.net IGLOGIN VR2ZDX-10 123456 PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=R lat=22^20.20N long=114^2.2E comment="RX-only IGate using RTL-SDR"
說明:
ADEVICE stdin null
代表 Dire Wolf 可使用 RTL-SDR 手指內置的音效卡作為唯一音頻設備,並選擇從 stdin 讀取音頻訊號。 因選用的 RTL-SDR 手指不能發射訊號,所以在輸出一欄填上 null。
CHANNEL 0
代表只有一條無線電頻道。(0 代表一條頻道,1 代表兩條)
MYCALL VR2ZDX-10
寫上自己業餘電台呼號,加上 “-” 及合適的 SSID (substation ID)。IGate 的 SSID 是 10,所以在呼號後填上 “-10″。
SSID | Applications |
---|---|
0 | Your primary station usually fixed and message capable |
1 | Generic additional station, digi, mobile, wx, etc |
2 | Generic additional station, digi, mobile, wx, etc |
3 | Generic additional station, digi, mobile, wx, etc |
4 | Generic additional station, digi, mobile, wx, etc |
5 | Other networks (D-STAR, iPhone, Android, BlackBerry, etc) |
6 | Special activity, Satellite ops, camping or 6 meters, etc |
7 | Walkie talkies, HT’s or other human portable |
8 | Boats, sailboats, RV’s or second main mobile |
9 | Primary Mobile (usually message capable) |
10 | Internet, IGates, Echolink, Winlink, AVRS, APRN |
11 | Balloons, aircraft, spacecraft, etc |
12 | APRStt, DTMF, RFID, devices, one-way trackers, etc |
13 | Weather stations |
14 | Truckers or generally full time drivers |
15 | Generic additional station, digi, mobile, wx, etc |
IGSERVER asia.aprs2.net
填上 IGate 需要接駁的 APRS-IS 第二級 (tier 2) 伺服器名稱。不建議直接接駁個别伺服器,否則當伺服器出現問題時影響 IGate 連線運作。建議接駁到循環地址 asia.aprs2.net,該地址會自動循環選擇位於亞洲區內不同的伺服器,有助負載平衡 (load balancing) 之餘又可以提高彈性 (resilience)。
IGLOGIN VR2ZDX-10 123456
然後輸入呼號連同 SSID 作登入名稱,及相關的 APRS 6 位數字驗證碼。
PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=R lat=22^20.20N long=114^2.2E comment="RX-only IGate using RTL-SDR"
Dire Wolf 可定時發出信標 (beacon),讓其他 APRS 使用者及 APRS-IS 伺服器接收電台位置、遙測數據 (telemetric data)、及天氣資訊等等。而以上 PBEACON 設定代表 Dire Wolf 啟動 30 秒後會將電台位置、以 R 蓋上 IGate 符號的標記,連同註釋一併經 IGate 發送到 APRS-IS 去,每 60 分鐘重複發送,讓電台顯示於 aprs.fi 及 findu.com 網站上。
最後階段
完成設定後,可以正式使用 Dire Wolf。執行 Dire Wolf 需要使用 rtl_fm 指令工具,將 RTL2832U 初始化,並調校至指定頻率(即 144.640 MHz),然後將接收得來的音頻訊號傳送至 Dire Wolf 再作調解。執行指令如下:
$ rtl_fm -f 144.640M - | direwolf -r 24000 -D 1 -
RTL-SDR 手指雖然售價便宜,但頻率偏移 (frequency offset) 嚴重,而且每支不同,需要每支進行校準 (calibration)。可選擇用人手方法將頻率上下調校,直至找到最佳接收頻率為止。圖中黑色使用 R820T tuner 的接收器就需要將頻率調低 10 KHz 至 144.630 MHz 才能接收清晰 APRS 訊號。
$ rtl_fm -f 144.630M - | direwolf -r 24000 -D 1 -
或者可以選擇使用 Kalibrate-rtl 程式利用 GSM 頻率計算出每支接收器的頻率誤差。首先安裝 Kalibrate-rtl:
$ cd /opt/ $ sudo apt-get install libtool autoconf automake libfftw3-dev $ git clone https://github.com/asdil12/kalibrate-rtl.git $ cd kalibrate-rtl $ git checkout arm_memory $ ./bootstrap $ ./configure $ make $ sudo make install
完成後執行以下指令,掃描所有 GSM 900 MHz 頻率,並尋找存在的頻道。
$ kal -s EGSM
Kalibrate-rtl 會顯示所有存在的頻道及其功率。選擇功率較大的頻道並計算出頻率偏差。
$ kal -c 76
完成計算後發現使用 R820T2 tuner 的 RTL-SDR 手指 (藍色)誤差大約是 38-39 ppm 之間。然後透過 -p 指令將誤差數字植入到 rtl_fm。
$ rtl_fm -f 144.640M -p 39 - | direwolf -r 24000 -D 1 -
登登!APRS IGate 架設成功!
運作已經超過一個月時間,除了電腦耗電比較高,整體運作非常暢順,平均每月處理超過 10,000 條 APRS 資訊。將來會考慮轉移到 Raspberry Pi 或其它單板電腦上運行,減低耗電量之餘又可令體積減少。除此之外,亦會考慮更換天線改善接收能力,令 IGate 可以接觸到更遠訊號,還會嘗試開發一些小程式將實時資訊透過 IGate 發送到全世界。有人認為互聯網出現後令愈來愈少人對業餘無線電感興趣,但若然能夠將這兩個不同世界連接起來,兩個世界最好的事物也走在一起,不是更新奇、更好玩嗎?
73 de VR2ZDX
(完)
發表意見