
Dump1090 は、RTLSDR デバイス用のシンプルな Mode S デコーダです
Dump1090 は、RTLSDR デバイス向けに特別に設計された Mode S デコーダです。
主な機能は以下の通りです:
「make」と入力します。
RTL デバイスから直接トラフィックをキャプチャし、標準出力に表示するには、オプションなしでプログラムを実行するだけです:
./dump1090
16 進数メッセージのみを出力するには:
./dump1090 --raw
インタラクティブモードでプログラムを実行するには:
./dump1090 --interactive
インタラクティブモードで、ネットワークサポートを有効にしてプログラムを実行し、ブラウザで http://localhost:8080 に接続してライブトラフィックを表示するには:
./dump1090 --interactive --net
インタラクティブモードでは、情報密度は低いですが、より「アーケードスタイル」の出力が可能です。画面は毎秒更新され、受信した Mode S パケットから抽出された高度や便名などの追加情報とともに、最近見られたすべての航空機が表示されます。
ファイルからデータをデコードするには、以下を使用します:
./dump1090 --ifile /path/to/binfile
バイナリファイルは、以下のように rtl_sdr を使用して作成する必要があります(または、2MHz のサンプルレートで 8 ビット符号なし IQ サンプルを出力できる他のプログラムでも構いません)。
rtl_sdr -f 1090000000 -s 2000000 -g 50 output.bin
この例では rtl_sdr でゲイン 50 を使用していますが、チューナーに応じて利用可能な最高のゲインを使用する必要があります。Dump1090 自体を呼び出す場合にはこれは不要です。Dump1090 は自動的にサポートされる最高のゲインを選択できるためです。
--ifile オプションに引数として "-" を指定することで、標準入力からデータをプログラムに供給することも可能です。
Dump1090 は、異なるゲインや周波数などを設定するための他のコマンドラインオプションを指定して呼び出すことができます。オプションの一覧を表示するには、以下を使用します:
./dump1090 --help
ここに文書化されていないものはすべて明白であり、ほとんどのユーザーにとっては、引数なしで呼び出すことが最善の方法です。
デフォルトでは、Dump1090 は利用可能な場合、24 ビット CRC チェックサムを使用してデコードエラーをチェックします。エラーのあるメッセージは破棄されます。
--fix コマンドラインスイッチは、CRC チェックサムに基づくシングルビット誤り訂正を有効にします。技術的には、シングルビット誤りから生じる事前計算されたチェックサム差分のテーブルを使用して、誤ったビット位置を検索します。
これは確かにエラーを修正でき、私の経験では信頼性高く動作します。ただし、非常に信頼性の高いデータが必要な場合は、エラー修正を無効にするために --no-fix コマンドラインスイッチを使用することをお勧めします。
私の限られた経験では、Dump1090 は他のプログラムで問題が発生した条件下でも多数のメッセージをデコードできました。ただし、正式なテストは行われていないため、このプログラムが他の類似プログラムと比較して優れているか劣っているかを実際に主張することはできません。
Dump1090 が適切にデコードできないトラフィックをキャプチャできた場合は、ダウンロードリンクを添えてメールを送ってください。自由時間に(これは単なる趣味のプロジェクトです)検出の改善を試みるかもしれません。
--net でネットワークサポートを有効にすると、Dump1090 はポート 30002 と 30001 でクライアント接続のリッスンを開始します(必要に応じて両方のポートを変更できます。--help の出力を参照)。
接続されたクライアントには、デバイス(または --ifile が使用されている場合はファイル)から到着するデータが、以下のような raw 形式で ASAP で提供されます:
*8D451E8B99019699C00B0A81F36E;
各エントリは単純な改行(LF 文字、16 進数 0x0A)で区切られます。
ポート 30001 は raw 入力ポートであり、上記と同じ形式(16 進数メッセージは * で始まり ; で終わる)で Dump1090 にデータを供給するために使用できます。
例えば、データを収集している別のリモート Dump1090 インスタンスがある場合、以下のようにして出力をローカルの Dump1090 インスタンスに集約することができます:
nc remote-dump1090.example.net 30002 | nc localhost 30001
ポート 30001 を介して受信されたものは、ポート 30002 をリッスンしているクライアントにもブロードキャストされることに注意することが重要です。
一般的に、ポート 30001 から受信されたものはすべて、RTL デバイスからの通常のトラフィックや --ifile が使用された場合のファイルからのトラフィックとまったく同じように処理されます。
以下の例のように、--ifile に引数として /dev/zero を使用することで、Dump1090 をハブとして使用することも可能です:
./dump1090 --net-only
または、画面で何が起こっているかを確認するには:
./dump1090 --net-only --interactive
その後、インターネット上のさまざまなデータソースからデータを供給できます。
接続されたクライアントには、SBS1 (BaseStation) 形式のメッセージが提供されます。例:
MSG,4,,,738065,,,,,,,,420,179,,,0,,0,0,0,0
MSG,3,,,738065,,,,,,,35000,,,34.81609,34.07810,,,0,0,0,0
これは、別のデコーダを使用せずにさまざまな共有サイトにデータを供給するために使用できます。
Mode S メッセージは 1090 MHz の周波数で送信されます。適切なアンテナがあれば、特に屋外で空がよく見える場所にいれば、かなり遠くの航空機からの信号を受信できます。
以下の指示に従って、非常に安価なアンテナを簡単に構築できます:
http://antirez.com/news/46
この簡単なアンテナで、200 km 以上離れた航空機の信号を受信できました。
より本格的なアンテナに興味がある場合は、以下のリソースを参照してください:
--aggressive を使用すると、Mode S パケットの検出とデコードの修正バージョンである アグレッシブモード を有効にできます。
アグレッシブモードは通常、より多くの CPU を使用します(特に多くの飛行機が DF17 パケットを送信している場合)が、さらにいくつかのメッセージを検出できます。
アグレッシブモードのアルゴリズムは以下のように変更されています:
アグレッシブモードの使用は、トラフィックが少ない場所でのみ推奨されます。さらにいくつかのメッセージをキャプチャするチャンスを得るためです。
デバッグモードは、検出アルゴリズムを改善したり、特定の入力に対してプログラムが機能しない理由を理解したりするための視覚的な補助です。
このモードでは、メッセージは ASCII アート風のグラフィカル表現で表示され、2MHz でサンプリングされた個々のマグニチュードバーが表示されます。
インデックスはサンプル番号を示し、0 は最初の Mode S ピークが見つかったサンプルです。最初のピークの前には、コンテキストを提供するためにいくつかの追加の背景雑音も追加されます。
デバッグモードを有効にしてログに記録できるパケットの組み合わせを確認するには、mode1090 --help を使用して利用可能なデバッグフラグのリストを取得します。
デバッグモードには、Web ブラウザを使用してパケットを可視化するためのオプションの JavaScript 出力が含まれています。'tools' ディレクトリ内の debug.html ファイルを使用して、生成された frames.js ファイルを読み込むことができます。
コードは非常によく文書化されており、わかりやすく書かれています。Mode S の仕様を手にした勤勉なプログラマーにとっては、それがどのように機能するかを理解するのは簡単なはずです。
使用したアルゴリズムは、基本的に、使い捨ての SDL プログラムを使用して表示された多くのメッセージを観察し、メッセージがグラフィカルにどのように見えるかに基づいてアルゴリズムをモデル化しようとすることで得られました。
RTLSDR デバイスを持っていて、頭上を飛行機が飛んでいる地域にいる場合は、プログラムを実行して信号を確認してください。
ただし、RTLSDR デバイスがない場合や、お住まいの地域での航空機の存在が非常に限られている場合は、Dump1090 配布物に含まれている "testfiles" ディレクトリ内のサンプルファイルを試してみてください。
次のように実行します:
./dump1090 --ifile testfiles/modes1.bin
これは、生の IQ 8 ビットサンプルを入力として受け取り、I と Q が指定された より低い部分を 32 サンプル以上連続して除去したファイルを出力する単純なフィルターです。
次のように使用します:
cat big.bin | ./dump1090 --snip 25 > small.bin
このプログラムのソースコード配布物に含める小さなテストファイルを作成するために使用しました。
Dump1090 は 2012 年のクリスマスの空き時間に書かれました。趣味のプロジェクトなので、問題に対処したり改善したりできるのは空き時間のみですが、プログラムを改善するためにプルリクエストを送ることを歓迎します。良い出発点は、ソース配布物に含まれている TODO リストです。
Dump1090 は Salvatore Sanfilippo [email protected] によって書かれ、BSD 3-Clause ライセンスの下でリリースされています。