最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ADS-B 信号を使用した飛行機追跡

この例では、MATLAB® および Communications System Toolbox™ を使用して Automatic Dependent Surveillance-Broadcast (ADS-B) 信号を処理することにより飛行機を追跡する方法を示します。取得した信号か、Communications System Toolbox Support Package for RTL-SDR Radio を使用してリアルタイムに受信した信号のいずれかを使用できます。この例では、Mapping Toolbox™ があれば、追跡している飛行機を地図上に表示できます。

必要なソフトウェアとハードウェア

取得した信号を使用してこの例を実行するには、次のソフトウェアが必要です。

信号をリアルタイムに受信するには、次のハードウェアも必要になります。

  • RTL-SDR 無線機

さらに次のソフトウェアも必要になります。

Communications System Toolbox でサポートされる SDR プラットフォームのすべてのリストについては、Software-Defined Radio (SDR) 情報ページのサポートされているハードウェアの節を参照してください。

背景

ADS-B は、航空機を追跡するため協調監視技術です。この技術により、航空機は、モード S 信号方式を使用して、位置情報 (高度、GPS 座標、機首方位など) を定期的にブロードキャストします。

モード S は、航空トランスポンダーの質問モードの種類です。航空機は、質問要求を受信すると、トランスポンダーのスクォーク コードを返信します。これは、モード 3A と呼ばれています。モード S (選択) は、トランスポンダーが頻繁に質問されるのを避けるために設計された質問モードの一種です。モード S の詳細については、[ 1 ] を参照してください。このモードはヨーロッパで広く採用されており、北アメリカでは段階的に導入されています。

モード S 信号方式は、航空無線システムで使用される非要請メッセージとして定義されたスキッタ メッセージを使用します。モード S には次のプロパティがあります。

  • 送信周波数: 1090 MHz

  • 変調: パルス時間変調

  • データ転送速度: 1 メガビット/秒

  • 短スキッタ長: 56 マイクロ秒

  • 拡張スキッタ長: 112 マイクロ秒

短スキッタ メッセージには、次の情報が含まれています。

  • ダウンリンク形式 (DF)

  • 機能 (CA)

  • 航空機 ID (一意の 24 ビット シーケンス)

  • CRC チェックサム

拡張スキッタ (ADS-B) メッセージには、短スキッタ内のすべての情報と、次のいずれかが含まれています。

  • 高度

  • 位置

  • 機首方位

  • 水平および垂直速度

モード S の信号形式には、次の図のように 8 マイクロ秒の長さの同期パルスに続き、56 または 112 マイクロ秒のデータが含まれています。

例の実行

MATLAB コマンド ウィンドウで ADSBExample と入力するか、リンクをクリックして例を実行します。この例を実行するときには、次の情報を入力する必要があります。

  1. 受信期間の秒数

  2. 信号ソース (取得されたデータまたは RTL-SDR 無線機)

  3. オプションの出力方法 (マップ、テキスト ファイル、またはそれら両方)

この例では、次の図のように、検出された飛行機に関する情報が表形式で表示されます。

Mapping Toolbox の有効なライセンスがある場合は、マップ上で飛行機を観察することもできます。

受信機の構造

次のブロック線図は、受信機コードの構造をまとめています。処理には、信号ソース、物理層、メッセージ パーサー、およびデータ ビューアーの 4 つの主要な部分があります。

信号ソース

この例では、2 つの信号ソースを使用できます。

  1. "取得した信号": ファイルに書き込まれ、2.4 Msps でベースバンド ファイル リーダー オブジェクトから取得される無線信号

  2. ''RTL-SDR 無線機'': 2.4 Msps の RTL-SDR 無線機

信号ソースとして ''RTL-SDR 無線機'' を選択すると、このアプリケーションは RTL-SDR 無線機をコンピューターで検索し、それらのいずれかを信号ソースとして選択するように求めます。

信号ソースは、十分なサンプルを提供し、最大 180 の完全な拡張スキッタ メッセージを格納できるように構成されます。拡張スキッタ メッセージは 288 サンプル長であるため、信号ソース オブジェクトの SamplesPerFrame プロパティを 51840 サンプル (180 x 288) に設定します。アルゴリズムの残りの部分では、このデータのフレームでモード S パケットを検索し、正しく識別されたすべてのパケットを出力します。このタイプの処理は、バッチ処理として定義されます。また、この代わりに一度に 1 つずつ拡張スキッタ メッセージを処理することもできます。この単一パケットの処理方法は、バッチ処理の 88 倍以上のオーバーヘッドが生じますが、一方で遅延が 1/88 以下になります。ADS-B 受信機には遅延に対する耐性があるため、バッチ処理が使用されました。

物理層

信号ソースから受信したベースバンド サンプルは物理 (PHY) 層によって処理され、PHY 層のヘッダー情報と生のメッセージ ビットを含むパケットが生成されます。次の図は、物理層の構造を示しています。

RTL-SDR 無線機では、200 kHz から最大 2.8 MHz のサンプルレートを使用することができます。この例では、2.4 MHz のサンプルレートを使用します。このサンプルレートは、ナイキスト レートの 2 MHz よりも高く、デバイスの実際の最大サンプルレートに非常に近いために選択されています。

ベースバンド信号は、12 MHz の実際のサンプルレートを得るために最初に係数 5 によって内挿されます。データ転送速度が 1 メガビット/秒の場合、これは 1 シンボルあたり 12 サンプルに対応します。受信機の残りの部分は、内挿された複素数値の振幅を処理します。

パケット同期装置は、2 つの拡張スキッタ パケット、すなわち 12 MHz または 120 マイクロ秒で 1440 サンプルに相当するデータのサブフレームで動作します。このサブフレームの長さによって、拡張スキッタ パケット全体が必ずサブフレームに含まれるようになります。パケット同期装置は、受信信号を 8 マイクロ秒のプリアンブルに関連付けてから、ピーク値を検索します。次に、同期ポイントがプリアンブルのシーケンス [1 0 0 0 0 0 1 0 1 0 0 0 0 0 0] と一致するかどうかをチェックすることによって同期ポイントを検証します。ここで、'1' は高、'0' は低の値を表します。

モード S の PPM 変調方式では、2 つのシンボルを定義します。各シンボルには 2 つのチップがあり、1 つが高の値をもち、もう 1 つが低の値をもちます。最初が高のチップで続いて低のチップの場合、これは 1 のシンボルに相当します。逆に、最初が、低のチップで続いて高のチップの場合、シンボルは 0 です。ビット パーサーは、受信したチップを復調し、バイナリ メッセージを作成します。バイナリ メッセージは、CRC チェッカーを使用して検証されます。ビット パーサーの出力は、次のフィールドを含むモード S の物理層ヘッダー パケットのベクトルです。

  • RawBits: 生のメッセージ ビット

  • CRCError: CRC がチェックをする場合 FALSE、CRC が失敗した場合 TRUE

  • Time: 受信機の開始から受信までの秒単位の時間

  • DF: ダウンリンク形式 (パケット タイプ)

  • CA: 機能

メッセージ パーサー

メッセージ パーサーが、[ 2 ] で説明されているパケット タイプに従って、生のビットからデータを抽出します。この例では、短スキッタ パケットと、飛行速度、識別情報および飛行位置データを含んだ拡張スキッタ パケットを解析できます。

データ ビューアー

データ ビューアーでは、受信したメッセージがグラフィカル ユーザー インターフェイス (GUI) に表示されます。それぞれのパケット タイプについて、検出されたパケット数、正しく復号化されたパケット数、およびパケット誤り率 (PER) が表示されます。データが取得されるたびに、アプリケーションでは、これらのメッセージから復号化された情報が表形式で一覧表示されます。

また、マップを起動し、GUI を使用してテキスト ファイルのログ記録を開始することもできます。

  • Start Logging - 取得したデータを TXT ファイルに保存します。保存されたデータは後処理で使用できます。

  • Launch Map - 追跡している航空便を表示できるマップを起動します。

コード例

受信機は、ユーザーの入力を求めて、変数を初期化します。次にループで、信号ソース、物理層、メッセージ パーサー、およびデータ ビューアーを呼び出します。また、このループは、フレーム時間を使用して無線時間を追跡し、さらに信号のソースによって報告された失われたサンプルを追跡します。

信号ソースのレイテンシ出力は、サンプルが実際にいつ受信されたかを示し、実行中の受信機がリアルタイムにどれだけ近いかを判断するために使用できます。1 より大きいレイテンシの値は、受信機がリアルタイムにサンプルを処理できなかったことを示します。レイテンシは、フレーム数で報告されます。これは 1 から 128 までの値をとります。レイテンシが 128 より大きい場合、サンプルが失われます。

% Request user input from the command-line for application parameters
userInput = helperAdsbUserInput;

% Calculate ADS-B system parameters based on the user input
[adsbParam,sigSrc] = helperAdsbConfig(userInput);

% Create the data viewer object and configure based on user input
viewer = helperAdsbViewer('LogFileName', userInput.LogFilename);
if userInput.LogData
  startDataLog(viewer);
end
if userInput.LaunchMap
  startMapUpdate(viewer);
end

% Create message parser object
msgParser = helperAdsbRxMsgParser(adsbParam);

% Start the viewer and initialize radio time
start(viewer)
radioTime = 0;

% Main loop
while radioTime < userInput.Duration
  % Receive baseband samples (Signal Source)
  if adsbParam.isSourceRadio
    [rcv,~,lost,late] = sigSrc();
  else
    rcv = sigSrc();
    lost = uint32(0);
    late = uint32(1);
  end

  % Process physical layer information (Physical Layer)
  [pkt,pktCnt] = helperAdsbRxPhy(rcv, radioTime, adsbParam);

  % Parse message bits (Message Parser)
  [msg,msgCnt] = msgParser(pkt,pktCnt);

  % View results packet contents (Data Viewer)
  update(viewer, msg, msgCnt, lost, late);

  % Update radio time. If there were lost samples, add those too.
  radioTime = radioTime + adsbParam.FrameDuration + ...
    double(lost)/adsbParam.FrontEndSampleRate;
end

% Stop the viewer and release the signal source
stop(viewer)
release(sigSrc)

その他の調査

物理層の実装の詳細については、次の関数や System object に関する情報を参照してください。

参考文献

  1. International Civil Aviation Organization, Annex 10, Volume 4. Surveillance and Collision Avoidance Systems.

  2. Technical Provisions For Mode S Services and Extended Squitter (Doc 9871)