メインコンテンツ

AIS 信号を使用した船舶の追跡

R2026b

この例では、Automatic Identification System (AIS) 信号を処理して船舶を追跡する方法を示します。以前に取得済みの信号を使用することも、RTL-SDR 無線機、ADALM-PLUTO 無線機、または USRP™ 無線機を使用してリアルタイムに信号を受信することもできます。Mapping Toolbox™ を使用して、追跡している船舶を地図上に表示することもできます。

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

既定では、この例は以前に取得済みの信号を使用して実行します。オプションとして、無線経由で信号を受信できます。このためには、次のいずれかも必要になります。

概要

海上輸送では、船舶交通サービスは 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 のパケット形式を示しています。

Fields in the AIS packet format.

受信機の構造

次のブロック線図は、受信機コードの構造を示しています。処理には、信号ソース、物理レイヤー、データ ビューアーの 3 つの主要な部分があります。

Block diagram showing receiver code flow cart.

信号ソース

信号ソースを次の値のいずれかとして指定します。

  • ''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 の処理コンポーネントを示しています。

Block diagram showing PHY processing components.

  • パケット検索 — 複数のウィンドウに分割して、受信信号の最も強いバーストを検索します。

  • DC オフセットの削除 — 検出信号から DC オフセットを削除します。

  • 周波数補償 — 搬送波周波数オフセットを推定して補償します。

  • 整合フィルター処理 — AIS の仕様に従って生成されたガウス パルスを使用してフィルター処理を実行します。

  • 同期と復調 — 受信信号を既知のプリアンブルと相関させることでタイミング同期を実行し、復調してビットを生成します。

  • AIS ビット パーサー — 開始フラグと終了フラグを検出してから、CRC 検出を実行します。CRC が成功すると、船舶の情報が復号化されます。

AIS 信号には 64 種類の固有のメッセージ タイプが含まれます。船の位置情報は、11 種類のメッセージ タイプに含まれています。この例では、船舶の位置情報を含む 11 種類のメッセージ タイプをすべて復号化します。

この例では、船舶 ID、緯度、経度、および関連する日付と時刻を含む船舶の位置情報をテーブルにリストします。メッセージからの追加情報の復号化については、[1] を参照してください。

データ ビューアー

データ ビューアーでは、受信したメッセージがグラフィカル ユーザー インターフェイス (GUI) に表示されます。データが取得されると、アプリケーションはこれらのメッセージから復号化した情報をテーブルにリストします。

AIS 信号を使用した船舶の追跡

既定の構成は 10 秒間実行され、取得されたデータ ファイルの信号データを使用して、テキスト ファイルに出力します。コマンド ラインから入力値を指定するには、cmdlineInput を 1 に変更しなければなりません。これにより、例を実行するときに、以下の情報の入力を求めるプロンプトが表示されます。

  1. 受信期間の秒数

  2. 信号ソース (取得されたデータ ファイルまたは RTL-SDR 無線機または ADALM-PLUTO 無線機または USRP 無線機)

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

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)

Figure AIS Ship Tracking contains an object of type uipanel.

release(sigSrc)

Mapping Toolbox がある場合は、地図上で船舶の AIS 追跡を観察することもできます。

その他の調査

AISExampleApp を使用して AIS 信号を調査することができます。アプリを起動するには、MATLAB® コマンド ウィンドウで AISExampleApp と入力します。アプリのインターフェイスを使用して信号ソースを選択し、時間を変更します。

物理レイヤーの実装の詳細については、サポート関数と System object を参照してください。

  • helperAISRxPhy.m

  • helperAISRxPhyPacketSearch.m

  • helperAISRxPhyFreqComp.m

  • helperAISRxPhySyncDemod.m

  • helperAISRxPhyBitParser.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