2019年8月27日火曜日

SDRやっとこさ

すごく参考になる。サイトのメモ
https://www.ishikawa-lab.com/index.html 石川氏のサイトから

RaspberryPiによるADS-B受信機
SDR(Software Defined Radio)「ソフトウエアラジオ」という方式があります。これは出力や周波数帯、変調方式などが異なるさまざまな無線通信手段を、1台の無線機のソフトウエアを書き換えることで対 応する技術です。言いかえると、汎用的なハードウエアを用いて通信を行い、従来は半導体が行ってきた方式依存の処理の大部分をソフトウエアで行います。新 しい通信方式が登場すると新しいソフトウエアを取得して通信機器に送り込むことで、ハードウエアを交換する必要がありません。
 これを実現するために従来は、高度な信号処理プロセッサを用いる必要があり、手が出せませんでしたが、QSTというアマチュア無線の雑誌2013年1月号に、パソコン用のUSBタイプのワンセグTVチューナー(日本の方式とは異なるDVB-T方式)を用いると簡単に実現できることが発表され、一躍世界に広がりました。
Cheap and Easy SDR
 これはQST 2013年1月号のタイトルです。ドングル(Dongle)とは「コンピューターのUSBポートに接続する小さな装置」を指 すため、もっぱらこのチューナーは「ドングル」と呼ばれます。価格は20ドル前後と手ごろであり、生産は中国、日本でもインターネット通販で安価に手に入ります。
 さて、そのソフトウエアラジオでなにを受信するかですが、ADS-B(Automatic Dependent Surveillance-Broadcast)を受信しようと思います。
 ADS-Bは航空機から1090MHzの周波数で、航空機識別子、GPSによる現在位置、高度、速度などを含む信号をたえず放送的に発信しており、この情報を地上や航空機間で利用することでより安全に航空機を運用できるようにするものです。近年これに対応したトランスポンダを搭載する航空機が増えてきています。それを受信し、パソコン地図上に仮想レーダのように、航空機を表示しようとするものです。
 (2019/07/29更新)

 仮想レーダ画面
Flightradar24へ情報を提供する
Flightradar24(フライトレーダー24)は飛行中の民間航空機の現在位置をリアルタイム表示するWebサービスです。Wikipediaによると、2006年、2名のスウェーデンの航空ファンがヨーロッパ北部・中部のADS-B受信ネットワークの構築をスタートし、たくさんの人誰で受信したADS-BのデータをFlightradar24のサーバに送信できるシステムとして公開されたため、世界各国の航空ファ ンによってレーダーの対応範囲は拡大し、現在はヨーロッパ、アメリカをはじめとして世界中ひろくボランティアが参加者がいます。従来は航空管制官やパイロットしか知ることのできなかった航空機の位置情報・飛行経路が手軽に取得できるため、航空事故発生時にマスメディアの情報源として用いられることもあるようです。Flightradar24が推奨するADS-B受信機がありますが高価(800ユーロ)で、ここに述べてきたDVB-Tドングルとソフトウェアラジオによる受信機が普及したため、一気に情報提供者が増加しています。
 ここではRaspberryPiによるADS-B受信機でFlightradar24に情報をアップし、ボランティアの仲間入りをしたいと思います。
 
 2019年5月、いままで動いていたfr24feedが動かなくなり、RaspberryPiを2台使う新しい方式に変更しました。(2019/07/28)


ドングル(DVB-T+DAB+FM USB チューナー RTL2832U+R820T)はアマゾンで入手できます。簡易包装で送られてきたセットはドングルの他にアンテナとリモコン、CDがついており、これが1000円~2000円(価格は時々変わる)。リモコン、CDの使い道はありませんがアンテナは、さまざまな実験用に使えましすし、特殊なMCXコネクタはあとで部品として貴重です。
 ドングルのなかをのぞいてみると、キー部品の信号処理LSI Realtek RTL2832U とチューナLSI Rafael Micro R820T がみえます。
 一部に、ドングルの製造が雑で、USBの接続が不安定、あるいは周波数がずれているなどの報告がありますが、そのようなことはなく、充分安定に使えました。
なお、デコーダーチップのRTL2832Uを積んだチューナーとSDRソフトを使ったソフトウェア受信をRTL-SDRと呼んでいます。

 RaspberryPiでソフトウエアラジオを動かすために必要なソフトを準備します。手順はこちらを参考にしました。

1. 必要なパッケージをインストール
$ sudo apt-get update
$ sudo apt-get install git
$ sudo apt-get install cmake
$ sudo apt-get install libusb-1.0-0.dev
$ sudo apt-get install build-essential
$ sudo apt-get install pkg-config


2. rtl-sdrのソースの取得
つぎに最も重要なソウトウェアラジオ用パッケージであるrtl-sdrを本家からインストールします。
$ git clone git://git.osmocom.org/rtl-sdr.git

3. rtl-sdrをビルド
$ cd rtl-sdr
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig
$ sudo cp rtl-sdr.rules /etc/udev/rules.d/


4./etc/modprobe.d/ディレクトリにrtl-tcp-blacklist.confというファイルを下記の内容で作成

$ sudo nano /etc/modprobe.d/rtl-tcp-blacklist.conf 
blacklist dvb_usb_rtl28xxu
blacklist rtl2830
blacklist dvb_usb_v2
blacklist dvb_core
一度念のためリブートしておきます。

上のようにドングルをRaspberryPiのUSBにさし、つぎの確認を行います。
$ lsusb
Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T

$ rtl_test
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
・・・・


 これでソフトラジオがRaspberryPiで実現できましたので、試しにFMラジオを受信してみます。例えば79.5MHzにチューニングする場合
次のコマンドをRaspberryPiのコマンドラインから入力します。
$ rtl_fm -f 79.5M -M fm -s 200000 -r 48000 - | aplay -r 48k -f S16_LE

RaspberryPiのイヤホンジャックにイヤホンをさしこむと、FM埼玉が聞こえます。

次にRaspberryPiのソフトラジオをWindows親機からリモート操作する練習を行います。

1.Windowsパソコン側のSDRソフトのダウンロード
 SDRSharpというソフトを使います。Dawnloadsページ
  http://sdrsharp.com/index.php/downloads 
を開きます。

 Dawnloadsページの中ほど「Important note for RTL-SDR users」の項目にある、
 sdr-install.zip ファイルをダウンロードします。

2.ファイルの解凍とインストール
 PCがインターネットアクセスできる環境であることを確認し、解凍したフォルダの中の、install.bat をダブルクリックします。自動的にsdrsharpフォルダーが作成され、その中にSDR#の必要なファイル群がインターネット経由でダウンロードされます。ダウンロードが終了し たら、sdrsharpフォルダーを開き、中に、 zadig.exe と SDRSharp.exe が保存されていることを確認します。

3.RaspberryPiで次を実行

$ rtl_tcp -a 0.0.0.0

4.Windows側でSDRSharp.exe を起動すると、次のような画面が現れる
 Source のプルダウンメニューを RTL-SDR/TCP とし、歯車形のConfigure ボタンをクリック
サブウィンドウが現れるので、Hostに、RaspberryPiのIPアドレスを記入し、Port が1234を確認しクローズ
Radio のWFM ボタンを指定
一番上の大きな数字に、受信したい放送局の周波数を指定
3角のスタートボタンをクリック



 右側のスライダを適宜調整すると、このような画面があらわれます。またパソコンのスピーカから音声が聞こえます。
終了するには、RaspberryPi側でctr-C
Modesdeco2を導入
いよいよ、ADS-Bの受信設定です。ADS-Bの情報を受信しそれをデコードするフリーソフトには、いくつかあります。ここでは評判の良いModesdeco2を使います。上で説明したソフトラジオ用のデコーダソフトは使わず、これだけで動作するようです。こちらを参考にしました。
1.まずは、 RaspberryPi用の modesdeco2 のダウンロードです。
$ wget https://drive.google.com/open?id=1WhheW-I4_1sb3VUXa9bcs8XEkh9fn_Lh

2.ファイルを展開します
$ tar xfz modesdeco2_rpi2-3_deb9_20180729.tgz

3.これでソフトの準備が出来ました。たくさんのパラメータ指定があります。しらべるには
$ ./modesdeco2 --help

4. modesdeco2の起動
 設置されているサイトの、緯度経度を調べておきます。60進ではなく少数以下4桁まで指定します。そしてつぎのように起動します。
$ ./modesdeco2 --gain 49.6 --avrmlat 30002 --rbs --location 35.xxxx:139.xxxx --web 8080
2015-04-03 12:48:31.428 INFO ModeSDeco2 v.20150321
2015-04-03 12:48:31.482 INFO Magnetic declinations coefficient file wmm.cof load successful
2015-04-03 12:48:31.513 INFO Using device: 0 mnf: Realtek prod: RTL2838UHIDIR serial: 00000001
2015-04-03 12:48:32.034 INFO Supported Gains (dB): 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
2015-04-03 12:48:32.036 INFO Sample Rate: 2.0 MHz
2015-04-03 12:48:32.038 INFO Freq: 1090.0 MHz
2015-04-03 12:48:32.039 INFO Freq Correction: 0 ppm
2015-04-03 12:48:32.093 INFO Gain: 49.6 dB
ADS-Bが正常に動き出しました。
--avrmlat 30002 はAVR format with MLAT style timestampsで、のちほどつかいます。

4.LANにつながっている、パソコンのブラウザからアドレスを
http://192.168.x.xxx:8080/

とすれば、このページのトップのような仮想レーダの画面が映し出されます。

RaspberryPiからFlightradar24へ情報をアップロードする(これをフィードといいます)プログラムをインストールします。最新の方法はこちらにあります。 またマニュアルがこちらです。(2019/07/28更新)

マニュアルによれば、デコードソフトdump1090が自動でインストールされ、以前に比べ格段に簡単になっています。私の場合はうえで構成したModesdeco2(アドレスは192.168.x.xxx)はそのまま生かして、Flightradar24へのフィードだけを、LAN接続された別のRaspberryPi(アドレスは192.168.x.yyy)から行うこととしました。

別のRaspberryPiからつぎのコマンドを実行し、fr24feedをインストールします。
$ sudo bash -c "$(wget -O - https://repo-feed.flightradar24.com/install_fr24_rpi.sh)"

事前準備
1.ADS-B受信機をこのコンピュータに接続するかLAN経由でアクセスできるようにしておくこと
2.アンテナの緯度 アンテナの経度 アンテナの海抜の正確な値を準備(MLATの場合)
3.ただしいメールアドレス
4.このコンピュータですでに fr24feed が動いているならば、停止しておく : sudo systemctl stop fr24feed

次のコマンドで設定していく
$ fr24feed --signup
(一部省略 すでにシェアリングキーを持っている場合の例)


Welcome to the FR24 Decoder/Feeder sign up wizard!

Before you continue please make sure that:

1 - Your ADS-B receiver is connected to this computer or is accessible over network
2 - You know your antenna's latitude/longitude up to 4 decimal points and the altitude in feet
3 - You have a working email address that will be used to contact you
4 - fr24feed service is stopped. If not, please run: sudo systemctl stop fr24feed

To terminate - press Ctrl+C at any point ( Ctrl+C で途中放棄できる)


Step 1.1 - Enter your email address (username@domain.tld)
$username@domain.tld (自分のアドレス)

Step 1.2 - If you used to feed FR24 with ADS-B data before enter your sharing key.
If you don't remember your sharing key, pelase use the retrival form:
https://feed.flightradar24.com/forgotten_key.php

Otherwise leave this field empty and continue.
$:シェアリングキー (すでにシェアリングキーを持っている場合)

Verifying sharing key...OK



Step 1.3 - Would you like to participate in MLAT calculations? (yes/no)$:yes

IMPORTANT: For MLAT calculations the antenna's location should be entered very precise!

Step 3.A - Enter antenna's latitude (DD.DDDD)
$:北緯

Step 3.B - Enter antenna's longitude (DDD.DDDD)
$:東経

Step 3.C - Enter antenna's altitude above the sea level (in feet)
$:海抜

Using latitude: DD.DDDD, longitude: DDD.DDDD, altitude: xxxft above sea level

Step 4.1 - Receiver selection (in order to run MLAT please use DVB-T stick with dump1090 utility bundled with fr24feed):

1 - DVBT Stick (USB)
-----------------------------------------------------
2 - SBS1/SBS1er (USB/Network)
3 - SBS3 (USB/Network)
4 - ModeS Beast (USB/Network)
5 - AVR Compatible (DVBT over network, etc) (今回はこれ)
6 - microADSB (USB/Network)
7 - SBSx via Basestation (localhost:30006)


Enter your receiver type (1-7)$:5

Step 4.2 - Please select connection type:

1 - Network connection
2 - USB directly to this computer

Enter your connection type (1-2)$:1

Step 4.3A - Please enter your receiver's IP address/hostname
$:192.168.x.xxx (modesdeco2 のアドレス)

Step 4.3B - Please enter your receiver's data port number
$:30002 (avrmlatのポート番号)

Step 5.1 - Would you like to enable RAW data feed on port 30334 (yes/no)$:no

Step 5.2 - Would you like to enable Basestation data feed on port 30003 (yes/no)$:no

Step 6A - Please select desired logfile mode:
0 - Disabled
1 - 48 hour, 24h rotation
2 - 72 hour, 24h rotation
Select logfile mode (0-2)$:1

Step 6B - Please enter desired logfile path (/var/log/fr24feed):
$:

Submitting form data...OK

Congratulations! You are now registered and ready to share ADS-D data with Flightradar24.
+ Your radar id is T-RJTY44, please include it in all email communication with us.
+ Please make sure to start sharing data within one month from now as otherwise your ID/KEY will be deleted.

Thank you for supporting Flightradar24! We hope that you will enjoy our Premium services that will be available to you when you become an active feeder.

To start sending data now please execute:
sudo systemctl start fr24feed

Saving settings to /etc/fr24feed.ini...OK
Settings saved, please run "sudo systemctl restart fr24feed" to use new configuration.

modesdeco2のAVR出力を、fr24feedに食わせるため、Step4では「5 - AVR Compatible」 を選択し、modesdeco2の動いているRaspberryPiのIPアドレス192.168.x.xxx、ポート番号30002を入力しています。

フィードを開始するには
$ sudo systemctl start fr24feed

RaspberryPiをスタートさせると、常にfr24feedは動いています。
$ sudo service fr24feed status
により、Active: active (running)が表示されれば、正常にフィードされています。
さらに
$ fr24feed --status で動作状態を表示できます。

また、LAN接続されたほかのPCのブラウザからは次のアドレスで、状態を見ることができます。
http://192.168.x.yyy:8754

設定ファイルは/etc/fr24feed.iniにあります。

fr24feedを停止させる場合は
sudo systemctl stop fr24feed


そのほかのよく使うコマンド
fr24feed --help ヘルプ
fr24feed --fr24key=0123456789ABCDEF 手動でフィード開始
fr24feed --signup サインアップと構成
fr24feed --reconfigure
 構成変更

fr24feed --version version 番号


つぎに、Flightradar24のWebにアクセスして、フィードのサインアップに使用したメールアドレスで、アカウントを作っておきます。アカウントの作成はフィードのサインアップとは別に行う必要があります。同じメールアドレスを使う必要があります。
 Flightradar24にログインすると、自分のフィードの情報を確認することができます。数時間動作させた後であれば、受信した航空機やメッセージ数、距離や方向などの統計情報を確認することができます。
 フィードが動作しているならFlightradar24のプレミアムサービスが無料で利用可能です。表示時間の制限が無くなり、その他全画面表示や、レーダービューなどを見ることができます。さらにスマホから、FR24Premium が無料で使えるようになります。
ひととおりうまく設定できたので、本番に移ります。なにより重要なのは、アンテナです。とりあえず付属のアンテナを室内に置いていただけですので、これでは不十分です。
 いろいろな製作例を参考にしながら、簡単で性能の良さそうなグランド・プレーンアンテナを作ります。
アンテナの基礎から応用までによる固い電力コードの芯線を使いました。
気象観測用のポールの先端に設置。地上高約7m 海抜100m

 グランド・プレーンアンテナは図のように、1/4波長の放射素子に、地面を模したラジアルを配置したもので、無指向アンテナです。ADS-Bは1060MHzですから、放射素子、ラジアルとも、
エレメント長 = 300/1090MHz x 1/4 x 0.95 = 65mm
となり、適当な銅線を切断し、BNCコネクタのセンタと、アース側に4本配置しました。それを水道用の塩ビパイプのふたに穴をあけ取り付け、気象観測用のポールの先端に設置しました。


 つぎにドングルですが、アマゾンで本番用にあたらしい改良版を購入しました。これは チューナLSIに新型のR820T2を実装し、周波数偏差/周波数温度特性とも±10PPM以下の日本製高精度水晶発振子に国内で交換作業したものです。
 予備実験でわかったことですが、主要部品のRTL2832U と R820TのLSIは、運用中に手で触れないほど高温になります。そのため図のようにヒートシンクを用い、かつメタルのケースに熱を逃すようにしました。かなり効果があります。
 ドングルとアンテナの配線長は短い方がよいので、ドングルは金属ケースにいれ、軒下に設置。RaspberryPiとはUSB接続

裏側に大きめのヒートシンク2個を熱伝導テープで貼り付け
改良版ドングル(上) 赤丸は表面実装水晶発振子
金属ケースにドングルをねじ止め。こちら側にもLSIにヒートシンク
BNCコネクタに変換ケーブルで出力
ドングルは軒下に(ふたをはずしてある)。左は2A、5Vの電源と共にケースに入れたRaspberryPi。雷センサ用の基板がついている。

Flightradar24ではさまざまなフィードされたデータの中から、選択し、一つの画面を構成しています。自分のPC上では20数機とらえていますが、東京ようにたくさんの情報提供者がいる地域では、なかなか激戦で採用されません。どのようなアルゴリズムで多数の情報から選択しているのか不明ですが、少なくとも受信レベルを報告しているので、これによっているものと思われます。
 下は、当方のデータが使われた例です。 これで皆さんに仲間入りできました。


 数週間運用後、Flightradar24の自分のアカウントをみると、下のような統計データが表示されます。西側が開けた地形のため、200ノーチカルマイル(1ノーチカルマイル=1.852km)、名古屋上空まで見えています。1GHzの電波は直進性が強く障害物(山、樹木)を回り込まないため、南東の特に高度の低い航空機はとらえられず、残念ながら羽田や成田の発着は見えません。


参考:Flightradar24における最近の事故例(動画で見えます 2019/03/18追記)
2014/03/08 マレーシア航空370便 クアラルンプール発北京行 行方不明
2014/07/17 マレーシア航空17便 アムステルダム発クアラルンプール行 ウクライナ上空で撃墜
2015/03/24 ジャーマンウィングズ9525便 バルセロナ発デュッセルドルフ行 フランスアルプスに激突
2016/05/12 エジプト航空804便 パリからカイロへ向かっている途中に、レーダーから機影が消えた
2018/10/29 インドネシアのライオン・エアJT610便 ジャカルタ発パンカルピナン行きのボーイング737 MAX 8が墜落
2019/03/10 エチオピア航空ET302便 アディスアベバ発ナイロビ行きのボーイング737 MAX 8型機墜落