2018-06-09 の 鹿児島Linux勉強家 2018.04 で発表したものです.
秋葉原なんかのジャンク箱で投げ売られていたりしたワンセグチューナーですが,中のCHIPによってはワンセグ以外の色々な電波を受信することが出来るようです.私は2016年に以下のチューナーを$10.75で入手していました.台風シーズン前に活用法を調べておこうと思います.
$ sudo apt install rtl-sdr
動作確認
$ rtl_test
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Detached kernel driver
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
[R82XX] PLL not locked!
Sampling at 2048000 S/s.
Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.
Reading samples in async mode...
Allocating 15 zero-copy buffers
lost at least 104 bytes
^CSignal caught, exiting!
User cancel, exiting...
Samples per million lost (minimum): 1
Reattached kernel driver
元々自宅ではラジオの入りが悪いので,付属のアンテナでは受信できなかった.鹿屋市で試すと受信出来きた.
$ rtl_fm -f 85.6M -M wbfm -s 200000 -r 48000 - | aplay -r 48k -f S16_LE
ラジオ局周波数 鹿児島県 より
NHK FM鹿児島
徳之島 81.6 名瀬 82.2 阿久根 83.7 知名 84.0 鹿屋 84.1 東市来 84.3 種子島 84.4 瀬戸内 84.5 枕崎 84.7 末吉 84.9 鹿児島 85.6 栗野 85.9
元々自宅ではラジオの入りが悪いので,付属のアンテナでは受信できなかった.鹿屋市で試すと受信出来きた.
$ rtl_fm -M am -f 576M -s 12k -g 50 -l 280 | play -r 32k -t raw -e s -b 16 -c 1 -V1 -
NHK 鹿児島 第一放送
鹿児島 576 名瀬 792 阿久根・瀬戸内 1026 徳之島・1341
主に民間航空機はADS-Bという信号を発信しています.これの受信を試してみます.先ずはrtl_sdr
に含まれるrtl_adsb
を試します.
$ rtl_adsb
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to automatic.
Tuned to 1090000000 Hz.
Exact sample rate is: 2000000.052982 Hz
Sampling at 2000000 S/s.
Allocating 12 zero-copy buffers
*cbe08e47690539811f307b4ba156;
*8d78012b9941d01b88045dfaf5fb;
*8d78812b58d3048e845d71d0b8dd;
*81e19b32d8d304e72215d064b151;
*adaaac04f78c8ffa0f172134d4d0;
*80e19a3058d388f7c317d004bd51;
*8d78012b9941d01b80085e27e5e1;
^CSignal caught, exiting!
User cancel, exiting...
内容はよくわからないけど何かを受信しています.このデータではちょっと何を言っているのかわからないのでDump1090
を利用してみました.
$ sudo apt install librtlsdr-dev
$ git clone https://github.com/MalcolmRobb/dump1090
$ cd dump1090
$ make
$ ./dump1090 --net --aggressive --interactive
このバージョンのDump1090はhttpdを内蔵しています.--net
optionでこれを有効に出来ます.
./dump1090 --interactive --net
httpで8080 portにアクセスすると地図上にプロットされた航空機が確認できます.わかりやすいです.
その他,
port 30001
入力ポート.リモートのdump1090のデータを受信することが出来る
$ nc remote.example.com 30002 | nc localhost 30001
port 30002
RAW形式のASAPデータを表示
$ nc localhost 30002
port 30003
SBS1形式のデータを表示
$ nc localhost 30003
自宅は窪地で周りを山に囲われているがそれでも思ったより受信範囲が広い.よく見る航路では開聞岳の影から志布志湾辺りまで.鹿児島空港は範囲外.高空を飛ぶものだと吹上浜沖のものを捉えることも.基本的に民間機のみが発信するので,近くの海上自衛隊鹿屋基地の航空機は補足できないのが残念. 数週間連続で動作してもソフトウェアハードウェア共に安定して動作している.アンテナを交換したらもっと広範囲が細く出来るようになると思うが未確認.
Flightradar24というsiteは,いくつかの公開情報と,世界中の人がADS-Bを受信してこのsiteに送信したデータで成り立っている.自宅に機材やサーバなどがある場合は参加すると有料サービスが受けられるようになるので興味のある人にはおすすめ.Linux用(Raspberry Piも)の専用プログラムも配布されている.初代Raspberry Piでもスペック的には問題ない.
類似サービスもいくつかあるのでそれらに同時に発信してもいいかもしれない.自分はもうちょっと他のことで遊んでからやろうと思います.
船舶も航空機のADS-BのようなAIS信号を発信している.身近なところでは桜島フェリーや垂水フェリーやトッピーロケットなどが発信している.(山川-根占フェリーは発信していない?)
$ git clone https://github.com/dgiardini/rtl-ais
$ cd rtl-ais/
$ make
-n
optionでログが表示できるようなのでとりあえずこれを試します.[-n log NMEA sentences to console (stderr) (default off)]
$ ./rtl_ais -n
1日放置しても1件も出力されませんでした.山間部なので電波が届かないのかもと思い,小さなマシンにセットアップして海岸で試しましたがやはり受信できません.
類似ソフトウェアのnaive_ais
も試してみましたが同様です.
$ git clone https://github.com/xofc/naive_ais
$ cd naive_ais
$ make
$ ./naive_ais -t -v
AISHubのAIS decoder未検証.(Ubuntu 16.04 LTS arm64でbuild失敗/Debian sid amd64はとおったけど持ち運べない)
$ wget http://www.aishub.net/downloads/aisdecoder-1.0.0.tar.gz
$ tar tvzf aisdecoder-1.0.0.tar.gz
$ tar xf aisdecoder-1.0.0.tar.gz
$ cd aisdecoder-1.0.0
$ mkdir build
$ cd build
$ cmake ../ -DCMAKE_BUILD_TYPE=RELEASE
$ make
$ ./aisdecoder
Usage: aisdecoder -h hostname -p port -a pulse,file [-f /path/file.raw] [-l]
-h Destination host or IP address
-p Destination UDP port
-a Audio driver [pulse,file]
-c Sound channels [stereo,mono,left,right] (default stereo)
-f Full path to 48kHz raw audio file
-l Log sound levels to console (stderr)
-d Log NMEA sentences to console (stderr)
-H Display this help
$ ./aisdecoder -hlocalhost -p12345 -apulse -d
AIS出力しているフェリー乗船時に試してみようと思います.
AIS情報が受信できたあと文字列だけでは寂しいので地図上にプロットしてみます. 今回は海洋ナビゲーションソフトウェアのOpenCPNを利用します.マルチプラットホームなのでWindowsやMacでも動作するそうです.
Ubuntuだとppaからの導入が楽そうなのでppaから導入しました.
$ sudo add-apt-repository ppa:opencpn/opencpn
$ sudo apt update
$ sudo apt install opencpn
後は,rtl_aisを起動した状態でOpenCPNを起動して,スパナアイコンをクリック,「Connections」タブの「Add Connection」からUDP/127.0.0.1/10110
のような感じで設定するだけです.これでOpenCPNの地図上にプロットされるはず……だけど未だrtl_ais
で拾えてないので未確認.
AISにもADS-Bに対するFlightradar24のように,MarineTrafficというサービスが存在する.船舶はあらかた写真が登録されているけれど鹿児島県内のモナと野党台などはほぼ登録されていないのでみんな登録しよう.
NOAAなどの気象衛星や船舶向け短波での気象情報やニュースなどがFAX形式で配信されています.これをsdrで受信してデコードすればオフライン(災害時等)でも情報を入手できそうです.
音声変換のためにsoxを導入
$ sudo apt install sox
FAXデータを画像に変換するためにwxtoimgを導入
※betaだとarm版など対応環境が多い
$ wget http://www.wxtoimg.com/beta/wxtoimg-amd64-2.11.2-beta.deb
$ sudo dpkg -i ./wxtoimg-amd64-2.11.2-beta.deb
気象庁のJMHを受信してWAV形式で保存.
$ rtl_fm -f 3.6206M -s 60k -g 45 -p 55 -E wav -E deemp -F 9 - | sox -t wav - JMH_FAX.wav rate 11025
wxtoimg で音声を画像にデコード
$ wxtoimg JMH_FAX.wav JMH_FAX.png
自宅では受信できなかった.アンテナを用意したり気象庁JMHの送信所は鹿児島市錦江町のようなので鹿児島市では受信できそう.
衛星が受信地の上空を通るときに試す必要がある.衛星追跡サイトやpredict
などを利用して確認する.
NOAAの周波数
NOAA15を受信してWAV形式で保存.
$ rtl_fm -f 137.62M -s 60k -g 45 -p 55 -E wav -E deemp -F 9 - | sox -t wav - NOAA15.wav rate 11025
wxtoimg で音声を画像にデコード
$ wxtoimg JMH_FAX.wav JMH_FAX.png
多分アンテナを用意しないと難しい?(受信できないらしいことしか確認できていない)
スペクトログラム表示などが出来るので知らない電波を補足しやすかったりする.まだ試せていない. AISが受信できないなどはこれで確認すると良さそう.
他のOSや他の場所のデバイスを受信して遊ぶのに使える.Radiko以前はこれで他地域のラジオを受信するなどが便利だったかも.
$ rtl_tcp -a 0.0.0.0
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Detached kernel driver
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Tuned to 100000000 Hz.
listening...
Use the device argument 'rtl_tcp=0.0.0.0:1234' in OsmoSDR (gr-osmosdr) source
to receive samples in GRC and control rtl_tcp parameters (frequency, gain, ...).
日本で受信できるかは不明
Baudot (various speeds) : Used by amateurs , weather stations and other users. CCIR493-4 : A HF selective calling mode CIS36-50 (50 baud only currently) : Used by the Russian Navy. CROWD36 : Used for Russian diplomatic and intelligence messages FSK200/500 : Used for Russian diplomatic and intelligence messages FSK200/1000 : Used for Russian diplomatic and intelligence messages FSK (raw) : For advanced users to investigate unknown FSK modes GW FSK (100 baud) : A commercial ship to shore data system. XPA (10 and 20 baud) : Believed used for Russian intelligence messages. XPA2 : Believed used for Russian intelligence messages.
参考URL
Kenichiro MATOHARA ( https://matoken.org ) CC BY-NC-SA 4.0