RTL-SDRで色々な電波を受信してみる

2018-06-09 の 鹿児島Linux勉強家 2018.04 で発表したものです.


秋葉原なんかのジャンク箱で投げ売られていたりしたワンセグチューナーですが,中のCHIPによってはワンセグ以外の色々な電波を受信することが出来るようです.私は2016年に以下のチューナーを$10.75で入手していました.台風シーズン前に活用法を調べておこうと思います.

基本?のRTL-SDRを使う

$ 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

FMラジオを受信してみる

元々自宅ではラジオの入りが悪いので,付属のアンテナでは受信できなかった.鹿屋市で試すと受信出来きた.

$ rtl_fm -f 85.6M -M wbfm -s 200000 -r 48000 - | aplay -r 48k -f S16_LE

AMラジオを受信してみる

元々自宅ではラジオの入りが悪いので,付属のアンテナでは受信できなかった.鹿屋市で試すと受信出来きた.

$ rtl_fm -M am -f 576M -s 12k -g 50 -l 280 | play -r 32k -t raw -e s -b 16 -c 1 -V1 -

航空機の発信しているADS-Bを受信

主に民間航空機は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にアクセスすると地図上にプロットされた航空機が確認できます.わかりやすいです.

20180602_20:06:52-10970

その他,

しばらく運用してみて

自宅は窪地で周りを山に囲われているがそれでも思ったより受信範囲が広い.よく見る航路では開聞岳の影から志布志湾辺りまで.鹿児島空港は範囲外.高空を飛ぶものだと吹上浜沖のものを捉えることも.基本的に民間機のみが発信するので,近くの海上自衛隊鹿屋基地の航空機は補足できないのが残念. 数週間連続で動作してもソフトウェアハードウェア共に安定して動作している.アンテナを交換したらもっと広範囲が細く出来るようになると思うが未確認.

WebService

Flightradar24というsiteは,いくつかの公開情報と,世界中の人がADS-Bを受信してこのsiteに送信したデータで成り立っている.自宅に機材やサーバなどがある場合は参加すると有料サービスが受けられるようになるので興味のある人にはおすすめ.Linux用(Raspberry Piも)の専用プログラムも配布されている.初代Raspberry Piでもスペック的には問題ない.

類似サービスもいくつかあるのでそれらに同時に発信してもいいかもしれない.自分はもうちょっと他のことで遊んでからやろうと思います.

船舶が発信するAIS信号を受信……出来ない?

船舶も航空機のADS-BのようなAIS信号を発信している.身近なところでは桜島フェリーや垂水フェリーやトッピーロケットなどが発信している.(山川-根占フェリーは発信していない?)

rtl-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情報を地図上にプロット

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 Webサービス

AISにもADS-Bに対するFlightradar24のように,MarineTrafficというサービスが存在する.船舶はあらかた写真が登録されているけれど鹿児島県内のモナと野党台などはほぼ登録されていないのでみんな登録しよう.

FAX受信(※まだうまく行っていない)

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の送信所は鹿児島市錦江町のようなので鹿児島市では受信できそう.

参考URL

NOAA

衛星が受信地の上空を通るときに試す必要がある.衛星追跡サイトや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

多分アンテナを用意しないと難しい?(受信できないらしいことしか確認できていない)

その他

GNU Radio/Gqrx/SDR#等のGUI Softwareを利用

スペクトログラム表示などが出来るので知らない電波を補足しやすかったりする.まだ試せていない. AISが受信できないなどはこれで確認すると良さそう.

20180608_21:06:59-23114

rtl_tcpでリピータになる

他の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, ...).

HF データデコーダ

日本で受信できるかは不明

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