
Dump1090は、RTLSDRデバイス向けのシンプルなMode Sデコーダです。
Dump1090 は、RTLSDR デバイス向けに特別に設計された Mode S デコーダです。
主な機能は次のとおりです。
私自身のフォークに時々機能を追加・修正していますが、実装のミニマリズムを目標としています。ただし、MalcolmRobb によって開発されたより機能が充実したフォークも利用可能です。
「make」と入力します。
RTL デバイスから直接トラフィックをキャプチャして標準出力に表示するには、オプションなしでプログラムを実行するだけです。
./dump1090
16 進数メッセージのみを出力する場合:
./dump1090 --raw
対話型モードでプログラムを実行する場合:
./dump1090 --interactive
対話型モードでネットワークサポートを有効にし、ブラウザで http://localhost:8080 に接続してライブトラフィックを表示する場合:
./dump1090 --interactive --net
対話型モードでは、情報密度は低くなりますが、より「アーケードスタイル」の出力が可能です。画面は 1 秒ごとに更新され、最近検出されたすべての航空機が、受信した 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 自体を呼び出す場合、サポートされている最高のゲインを自動的に選択するため、これは必要ありません。
--ifile オプションに "-" を引数として使用することで、標準入力からプログラムにデータを供給することも可能です。
Dump1090 は、別のゲインや周波数などを設定するために、他のコマンドラインオプションを指定して呼び出すことができます。オプションのリストについては、次を使用します。
./dump1090 --help
ここに文書化されていないものはすべて明白であり、ほとんどのユーザーにとっては引数なしで呼び出すことが最善です。
デフォルトでは、Dump1090 は CRC チェックサムを使用してビットエラーの修正を試みます。このプログラムは、事前計算されたシンドロームテーブルを使用して、受信メッセージ内の最大 2 ビットのエラーを迅速に識別して修正します。
これは実際にエラーを修正でき、私の経験では確実に動作しますが、非常に信頼性の高いデータが必要な場合は、--no-fix コマンドラインスイッチを使用してエラー修正を無効にすることをお勧めします。
私の限られた経験では、Dump1090 は他のプログラムで問題が発生した状況でも多数のメッセージをデコードできましたが、正式なテストは行われていないため、このプログラムが他の同様のプログラムよりも優れているか劣っているかを実際に主張することはできません。
Dump1090 が適切にデコードできないトラフィックをキャプチャできる場合は、ダウンロードリンクを記載してメールをお送りください。空き時間に検出の改善を試みるかもしれません(これは単なる趣味のプロジェクトです)。
Dump1090 は、航空機が地上にいるとき(タキシング、ゲート待機など)に送信される表面位置メッセージ(タイプコード 5-8)をデコードできます。これらのメッセージには、航空機の位置、対地速度、対地軌跡が含まれます。
表面位置は空中位置とは異なるエンコーディングを使用します。CPR(Compact Position Reporting)フォーマットは 360 度ではなく 90 度のみをカバーし、曖昧さなくデコードするには 45 海里以内の参照位置が必要です。
受信機の位置を手動で設定する必要はなく、Dump1090 は正常にデコードされたすべての空中位置を平均化することで参照位置を自動的に計算します。これは、空港の表面トラフィックを受信できる場合、ほぼ確実に空中トラフィックも受信できるためです。上空を通過する航空機の平均位置は、表面位置をデコードするのに十分近い(45 NM 要件を十分に満たす)参照を提供します。
注:表面位置は、参照を確立するために少なくとも 1 つの空中位置が正常にデコードされた後にのみ表示されます。地上の航空機は、対話型表示で高度 0 として表示されます。
--net でネットワークサポートを有効にすると、Dump1090 はポート 30002 および 30001 でクライアント接続を待機し始めます(必要に応じて両方のポートを変更できます。--help 出力を参照してください)。
接続されたクライアントには、デバイス(または --ifile 使用時はファイル)から到着したデータが、次のような生フォーマットで ASAP で提供されます。
*8D451E8B99019699C00B0A81F36E;
各エントリは単純な改行(LF 文字、16 進数 0x0A)で区切られます。
ポート 30001 は生入力ポートであり、上記と同じフォーマット(16 進メッセージが * で始まり ; で終わる)で Dump1090 にデータを供給するために使用できます。
たとえば、別のリモート Dump1090 インスタンスがデータを収集している場合、次のように出力をローカルの Dump1090 インスタンスに集約できます。
nc remote-dump1090.example.net 30002 | nc localhost 30001
ポート 30001 で受信したものは、ポート 30002 をリッスンしているクライアントにもブロードキャストされることに注意してください。
一般に、ポート 30001 から受信したものはすべて、--ifile 使用時の RTL デバイスまたはファイルからの通常のトラフィックとまったく同じように処理されます。
Dump1090 を単なるハブとして使用することも可能です。次の例のように、--ifile に /dev/zero を引数として使用します。
./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 パケットを送信する航空機が多い場合)が、さらにいくつかのメッセージを検出できます。
アグレッシブモードのアルゴリズムは次のように変更されています。
アグレッシブモードの使用は、トラフィックが少ない場所でのみ推奨され、さらにいくつかのメッセージをキャプチャする可能性があります。
デバッグモードは、検出アルゴリズムを改善したり、特定の入力に対してプログラムが機能しない理由を理解したりするための視覚的な補助です。
このモードでは、メッセージがアスキーアートスタイルのグラフィカル表現で表示され、2MHz でサンプリングされた個々のマグニチュードバーが表示されます。
インデックスにはサンプル番号が表示され、0 は最初の Mode S ピークが見つかったサンプルです。いくつかの背景ノイズも最初のピークの前に追加され、コンテキストを提供します。
デバッグモードを有効にして、ログできるパケットの組み合わせを確認するには、dump1090 --help を使用して利用可能なデバッグフラグのリストを取得してください。
デバッグモードには、Web ブラウザを使用してパケットを視覚化するためのオプションの JavaScript 出力が含まれています。'tools' ディレクトリの debug.html ファイルを使用して、生成された frames.js ファイルをロードできます。
コードは非常によく文書化されており、理解しやすいように記述されています。Mode S 仕様を手にした勤勉なプログラマーにとって、その仕組みを理解するのは簡単でしょう。
私が使用したアルゴリズムは、基本的に、使い捨ての SDL プログラムを使用して表示された多くのメッセージを観察し、メッセージがグラフィカルにどのように見えるかに基づいてアルゴリズムをモデル化しようとすることで得られました。
RTLSDR デバイスを持っていて、頭上を航空機が飛行している地域にいる場合は、プログラムを実行して信号を確認するだけです。
ただし、RTLSDR デバイスがない場合、またはお住まいの地域での航空機の存在が非常に限られている場合は、Dump1090 ディストリビューションに含まれている「testfiles」ディレクトリのサンプルファイルを試すことをお勧めします。
次のように実行します。
./dump1090 --ifile testfiles/modes1.bin
これは単純なフィルターで、生の 8 ビット IQ サンプルを入力として受け取り、I と Q が指定された より低い部分を 32 サンプル以上連続して欠落させたファイルを出力します。
次のように使用します。
cat big.bin | ./dump1090 --snip 25 > small.bin
このプログラムのソースコード配布物に含める小さなテストファイルを作成するために使用しました。
Dump1090 は 2012 年のクリスマスの空き時間に作成されました。趣味のプロジェクトであるため、空き時間にのみ問題に対処し改善することができますが、プログラムを改善するためのプルリクエストを送信することをお勧めします。良い出発点は、ソース配布物に含まれている TODO リストです。
Dump1090 は Salvatore Sanfilippo [email protected] と、これまでにパッチを送信した他のコントリビューター(詳細についてはコミット履歴を確認してください)によって作成され、BSD 3 条項ライセンスの下でリリースされています。