AIS 信号を使用した船舶の追跡
この例では、Automatic Identification System (AIS) 信号を処理して船舶を追跡する方法を示します。以前に取得済みの信号を使用することも、RTL-SDR 無線機、ADALM-PLUTO 無線機、または USRP™ 無線機を使用してリアルタイムに信号を受信することもできます。Mapping Toolbox™ を使用して、追跡している船舶を地図上に表示することもできます。
必要なソフトウェアとハードウェア
既定では、この例は以前に取得済みの信号を使用して実行します。オプションとして、無線経由で信号を受信できます。このためには、次のいずれかも必要になります。
RTL-SDR 無線機と Communications Toolbox Support Package for RTL-SDR Radio。
ADALM-PLUTO 無線機と Communications Toolbox Support Package for ADALM-PLUTO Radio。
USRP N2xx または B2xx シリーズ無線機と Communications Toolbox Support Package for USRP Radio。サポートされている無線機の詳細については、サポートされているハードウェアと必要なソフトウェアを参照してください。
USRP E3xx、N3xx、または X3xx シリーズ無線機と Wireless Testbench Support Package for NI USRP Radios。サポートされている無線機の詳細については、Supported Radio Devices (Wireless Testbench)を参照してください。
概要
海上輸送では、船舶交通サービスは AIS を海上交通監視システムのコンポーネントとして使用します。AIS は次の機能を実行します。
船舶の識別子、位置、進路、および速度の送信。
指定された問い合わせ呼び出しの受信と処理。
航行中または停泊中の連続稼働。
AIS には次の属性があります。
156.025 MHz ~ 162.025 MHz の範囲の送信周波数
ガウス最小偏移変調変調
ビット レート 9600 ビット/秒
送信帯域幅と時間の積 0.4
受信帯域幅と時間の積 0.5
変調指数 0.5
AIS の送信パケットには、以下のフィールドが含まれています。
トレーニング シーケンス — 0 と 1 が交互に並んだ 24 ビット シーケンス (0101...)
開始フラグ — 8 ビット シーケンス、01111110
データ — 既定の送信パケットのデータ部分は 168 ビット長
フレーム チェック シーケンス (FCS) — 巡回冗長検査 (CRC) の 16 ビット多項式を使用してチェックサムを計算
終了フラグ — 開始フラグと同じ
バッファー — ビット スタッフィング (最大 4 ビット)、距離遅延 (14 ビット)、および同期ジッター (6 ビット) を考慮して、24 ビット長
この図は AIS のパケット形式を示しています。
![]()
受信機の構造
次のブロック線図は、受信機コードの構造を示しています。処理には、信号ソース、物理レイヤー、データ ビューアーの 3 つの主要な部分があります。
![]()
信号ソース
信号ソースを次の値のいずれかとして指定します。
''
File'' —comm.BasebandFileReaderオブジェクトを使用して、取得された信号を含むファイルを読み取ります。''
RTL-SDR'' — RTL-SDR 無線機を使用してライブ信号を受信します。''
ADALM-PLUTO'' — Pluto 無線機を使用してライブ信号を受信します。''
USRP'' — USRP 無線機を使用してライブ信号を受信します。
この例では、9600 Hz の信号シンボル レートとシンボルあたり 24 個のサンプルを使用します。
信号ソースとして ''RTL-SDR'' を指定する場合、例は、無線アドレス '0' の RTL-SDR 無線機をコンピューターで検索し、その無線機を信号ソースとして使用します。
信号ソースとして ''ADALM-PLUTO'' を指定する場合、例は、無線アドレス 'usb:0' の Pluto 無線機をコンピューターで検索し、その無線機を信号ソースとして使用します。
信号ソースとして ''USRP'' を指定する場合、例は、指定した無線アドレスの USRP 無線機をコンピューターで検索し、その無線機を信号ソースとして使用します。
物理レイヤー
物理レイヤー (PHY) は、信号ソースからのベースバンド サンプルを処理して、船舶の位置情報と生のメッセージ バイトを含むパケットを生成します。この図は PHY の処理コンポーネントを示しています。
![]()
パケット検索 — 複数のウィンドウに分割して、受信信号の最も強いバーストを検索します。
DC オフセットの削除 — 検出信号から DC オフセットを削除します。
周波数補正 — 搬送波周波数オフセットを推定して補償します。
整合フィルター処理 — AIS の仕様に従って生成されたガウス パルスを使用してフィルター処理を実行します。
同期と復調 — 受信信号を既知のプリアンブルと相関させることでタイミング同期を実行し、復調してビットを生成します。
AIS ビット パーサー — 開始フラグと終了フラグを検出してから、CRC 検出を実行します。CRC が成功すると、船舶の情報が復号化されます。
AIS 信号には 64 種類の固有のメッセージ タイプが含まれます。船の位置情報は、11 種類のメッセージ タイプに含まれています。この例では、船舶の位置情報を含む 11 種類のメッセージ タイプをすべて復号化します。
この例では、船舶 ID、緯度、経度、および関連する日付と時刻を含む船舶の位置情報をテーブルにリストします。メッセージからの追加情報の復号化については、[1] を参照してください。
データ ビューアー
データ ビューアーでは、受信したメッセージがグラフィカル ユーザー インターフェイス (GUI) に表示されます。データが取得されると、アプリケーションはこれらのメッセージから復号化した情報をテーブルにリストします。
AIS 信号を使用した船舶の追跡
既定の構成は 10 秒間実行され、取得されたデータ ファイルの信号データを使用して、テキスト ファイルに出力します。コマンド ラインから入力値を指定するには、cmdlineInput を 1 に変更しなければなりません。これにより、例を実行するときに、以下の情報の入力を求めるプロンプトが表示されます。
受信期間の秒数
信号ソース (取得されたデータ ファイルまたは RTL-SDR 無線機または ADALM-PLUTO 無線機または USRP 無線機)
オプションの出力方法 (マップ、テキスト ファイル、または両方)
cmdlineInput = 0; if cmdlineInput % Request user input from the command-line for application parameters userInput = helperAISUserInput; else load('defaultInputs.mat'); end % Calculate AIS parameters based on the user input [aisParam,sigSrc] = helperAISConfig(userInput); % Create the data viewer object and configure based on user input viewer = helperAISViewer('LogFileName',userInput.LogFilename, ... 'SignalSourceType',userInput.SignalSourceType); % Launch map based on user input if userInput.LaunchMap startMapUpdate(viewer); end % Log data based on user input if userInput.LogData startDataLog(viewer); end % Start the viewer and initialize radio time start(viewer) radioTime = 0; % Main loop for capturing and decoding the AIS samples while radioTime < userInput.Duration if aisParam.isSourceRadio if aisParam.isSourceRTLSDRRadio % For RTL-SDR [rcv,~,lost,~] = sigSrc(); lostFlag = logical(lost); elseif aisParam.isSourcePlutoSDRRadio % For ADALM-PLUTO [rcv,~,lostFlag] = sigSrc(); elseif aisParam.isSourceUSRPRadio % For USRP [rcv,~,lostFlag] = sigSrc(); end else % For baseband file rcv = sigSrc(); lostFlag = uint32(0); end % Recover the information by decoding AIS samples [info, pkt] = helperAISRxPhy(rcv,aisParam); % View decoded information on viewer update(viewer, info, pkt, lostFlag); % Update radio time radioTime = radioTime + aisParam.FrameDuration; end % Stop the viewer and release the signal source stop(viewer)
![]()
release(sigSrc)
Mapping Toolbox がある場合は、地図上で船舶の AIS 追跡を観察することもできます。
![]()
その他の調査
AISExampleApp を使用して AIS 信号を調査することができます。アプリを起動するには、MATLAB® コマンド ウィンドウで AISExampleApp と入力します。アプリのインターフェイスを使用して信号ソースを選択し、時間を変更します。
物理レイヤーの実装の詳細については、サポート関数と System object を参照してください。
helperAISRxPhy.mhelperAISRxPhyPacketSearch.mhelperAISRxPhyFreqComp.mhelperAISRxPhySyncDemod.mhelperAISRxPhyBitParser.m
参考文献
[1] Recommendation ITU-R M.1371-5. "Technical characteristics for an automatic identification system using time division multiple access in the VHF maritime mobile frequency band", International Telecommunication Union. https://www.itu.int/rec/R-REC-M.1371-5-201402-I/en