Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

IEEE 802.15.4z を使用した UWB 測距

この例では、Communications Toolbox™ の機能を使用して、IEEE® 802.15.4z™ 規格 [ 2 ] に従って 2 つのデバイス間の距離を推定する方法を説明します。

概要

IEEE® 802.15.4 規格 [ 1 ] の IEEE 802.15.4z 修正規格 [ 2 ] は、MAC レイヤーと PHY レイヤーについて、さらには超広帯域 (UWB) 通信を使用した関連する測距と位置推定について規定しています。UWB のパルス存続時間は非常に短いため、時間領域での粒度が細かくなり、空間領域での推定がより正確になります。

802.15.4z 修正規格の測距および位置推定の主要な機能は、3 つの MAC レベルの手法を含みます。

  • 片側双方向測距 (SS-TWR) - 片方のデバイスが無線 802.15.4z リンクの双方向フレーム送信を使用して、2 つのデバイス間の距離を推定します。

  • 両側双方向測距 (DS-TWR) - 両方のデバイスが無線 802.15.4z リンクの双方向フレーム送信を使用して、2 つのデバイス間の距離を推定します。

  • 単方向測距/到着時間差 (OWR/TDOA) - 1 つのデバイスが同期されたノードのセットと通信してデバイスの位置を推定するネットワーク支援型位置推定です。この手法は、IEEE 802.15.4z を使用した UWB 位置推定の例で説明されています。

この例では、IEEE 802.15.4 規格 [ 1 ] および IEEE 802.15.4z 修正規格 [ 2 ] と互換性のある PHY フレームを使用した SS-TWR 手法を示します。PHY レベルの IEEE 802.15.4z 波形生成の詳細については、HRP UWB IEEE 802.15.4a/z の波形生成の例を参照してください。

片側双方向測距 (SS-TWR)

双方向測距には、無線 802.15.4z リンクの双方向フレーム送信が含まれます。片側測距とは、2 つのデバイスのうち片方が互いの距離を推定することを意味します。

ssTWR_custom.png

各フレームは、それ自体の測距マーカー (RMARKER) でタイミングが取られます。これは、フレーム開始区切り記号 (SFD) に続く最初のシンボルの時間です。送信フレームのフィールドの詳細については、HRP UWB IEEE 802.15.4a/z の波形生成の例を参照してください。測距レスポンダー デバイスは、特定の応答時間 (Treply) の後に応答フレームを送信します。測距イニシエーター デバイスは、送信フレームの RMARKER と応答フレームの RMARKER の間の時間距離としてラウンドトリップ時間 (Tround) を計算します。Treply は、測距レスポンダー デバイスから測距イニシエーター デバイスに送信されるため、後者は伝播時間 (Tprop) を Tprop = (Tround - Treply)/2 として推定します。

IEEE 802.15.4z 修正規格 [ 2 ] では、Treply を共有するための複数の方法が規定されています。

  • レスポンダーからイニシエーターへの Treply の通信を延期し、応答フレームに続けて別のメッセージで実行する。

  • Treply を応答フレームに埋め込む。

  • Treply を、イニシエーターとレスポンダー双方にとって既知である固定値に設定する。

この例では、双デバイス間固定応答時間のシナリオについて考えます。

IEEE 802.15.4 [ 1 ] では、交換されるフレームがデータ フレームとその肯定応答でなければならないと規定されています。IEEE 802.15.4z 修正規格 [ 2 ] では、この仕様が緩和され、送信フレームと応答フレームの任意のペアで範囲測定が実行できるようになっています。ただし、固定応答時間のシナリオについて、802.15.4z 修正規格では、スクランブルされたタイムスタンプ シーケンス パケット構成のオプション 3 (SP3) フレームの交換を規定しています。SP3 フレームには、スクランブルされたタイムスタンプ シーケンス (STS) が含まれ、PHY ヘッダー (PHR) またはペイロードは含まれていません。

この例では、基本的な範囲交換に焦点を当てており、測距手順に関連する先行の設定作業や後続の完了作業については示していません。

設定

実際の距離と Tprop を決定し、可視化を初期化します。イニシエーターとレスポンダーの信号をプロットするように timescope オブジェクトを構成します。

c = physconst('LightSpeed');    % Speed of light (m/s)
actualDistance = 5;             % In meters
actualTprop = actualDistance/c; % In seconds
SNR = 30;                       % Signal-to-Noise ratio
symbolrate = 499.2e6;           % Symbol rate for HRP PHY
sps = 10;                       % Samples per symbol
ts = timescope( ...
    SampleRate=sps*symbolrate, ...
    ChannelNames={'Initiator','Responder'}, ...
    LayoutDimensions=[2 1], ...
    Name='SS-TWR');
ts.YLimits = [-0.25 0.25];
ts.ActiveDisplay = 2;
ts.YLimits = [-0.25 0.25];

送信フレーム

イニシエーターからの送信

デバイス間で送信される SP3 PHY フレーム (MAC フレーム/PSDU なし) を含む波形を生成します。送信フレームをイニシエーターのタイムラインに登録します。

sp3Config = lrwpanHRPConfig( ...
    Mode='HPRF', ...
    STSPacketConfiguration=3, ...
    PSDULength=0, ...
    Ranging=true);
sp3Wave = lrwpanWaveformGenerator(zeros(0,1), sp3Config);
[transmitFrame,responseFrame] = deal(sp3Wave);

% start initiator time at the start of transmission
initiatorView = transmitFrame; 

無線チャネル

AWGN チャネルを通して送信フレームをフィルター処理し、伝播遅延を追加します。次に、両方のリンクのエンドポイントのタイムラインを更新します。

samplesToDelay = actualTprop*sp3Config.SampleRate;
receivedTransmitted = lclDelayWithNoise( ...
    transmitFrame,samplesToDelay,SNR);

initiatorView = [initiatorView; zeros(ceil(samplesToDelay),1)];
responderView = receivedTransmitted;

レスポンダーでの受信

レスポンダー側で 802.15.4z PHY フレームのプリアンブルを検出した後、送信フレームを処理します。プリアンブル検出は、Nsync = PreambleDuration からプリアンブルの最初のインスタンスを決定することで構成されます。イニシエーターとレスポンダーのビューを timescope でプロットします。

ind = lrwpanHRPFieldIndices(sp3Config); % length (start/end) of each field

sp3Preamble = sp3Wave(1:ind.SYNC(end)/sp3Config.PreambleDuration);
preamPos = helperFindFirstHRPPreamble( ...
    receivedTransmitted,sp3Preamble,sp3Config);

ts(initiatorView,responderView);

応答フレーム

レスポンダーからの送信

Treply 時間を 3 つの SP3 フレームの長さに設定して、応答フレームを送信するタイミングを指定します。レスポンダー側の最初の RMARKER サンプル インデックスが最初の SFD シンボル後から始まり、最後の RMARKER サンプル インデックスが Treply サンプルの後から始まるように設定します。Treply サンプルの後、レスポンダー デバイスから応答フレームを送信します。

Treply = 3*length(sp3Wave); % in samples

% Find RMARKERs at responder side
frameStart = 1+preamPos-ind.SYNC(end)/sp3Config.PreambleDuration;
sfdEnd = frameStart + ind.SYNC(end) + diff(ind.SFD);
RMARKER_R1 = sfdEnd+1;                                    
RMARKER_R2 = RMARKER_R1 + Treply;

% Transmit after Treply. Find how long the responder needs 
% to remain idle.
idleResponderTime = Treply - diff(ind.STS)-1 - diff(ind.SHR)-1;
responderView = ...
    [responderView; zeros(idleResponderTime,1); ...
    responseFrame; zeros(ceil(samplesToDelay),1)];

initiatorView = [initiatorView; zeros(idleResponderTime,1)];

無線チャネル

AWGN チャネルを通して送信フレームをフィルター処理し、伝播遅延を追加します。次に、両方のリンクのエンドポイントのタイムラインを更新します。

receivedResponse = lclDelayWithNoise( ...
    responseFrame,samplesToDelay,SNR);
initiatorView = [initiatorView; receivedResponse];

イニシエーターでの受信

一方、イニシエーター側でも、802.15.4z PHY フレームのプリアンブルを検出し、送信フレームを処理します。

txFrameEnd = ind.STS(end);
preamPos = helperFindFirstHRPPreamble( ...
    initiatorView(txFrameEnd+1:end),sp3Preamble,sp3Config);

範囲推定

伝播遅延と 2 つのデバイス間の距離を推定します。イニシエーター側の最初の RMARKER サンプル インデックスが送信の開始点 (t = 0 で知られる) になり、最後の RMARKER サンプル インデックスが最初の SFD シンボル後から始まるように設定します。RMARKER、Tround、および Tprop を使用して、イニシエーターとレスポンダーの間の距離を推定します。

RMARKER_I1 = 1+ind.SFD(end);
frameStart = 1+preamPos-ind.SYNC(end)/sp3Config.PreambleDuration;
sfdEnd = txFrameEnd + frameStart + ind.SYNC(end) + diff(ind.SFD);
RMARKER_I2 = sfdEnd+1;

Tround = RMARKER_I2 - RMARKER_I1;                 % In samples
Tprop = (Tround-Treply)/(2*sp3Config.SampleRate); % In seconds
estimatedDistance = c*Tprop;                      % In meters

この timescope は、[ 2 ] の図 6-47a のようなフレーム交換を示したもので、送信フレームと応答フレームの間の伝播遅延を確認するために X 軸の範囲を拡大しています。

reset(ts);
ts([initiatorView; zeros(ceil(samplesToDelay),1)],responderView);
release(ts);

推定された距離は実際の距離と数センチの差があります。

fprintf(['Actual distance = %d m.' ...
    '\nEstimated Distance = %0.2f m' ...
    '\nError = %0.3f m (%0.2f%%)\n'], ...
    actualDistance,estimatedDistance, ...
    estimatedDistance-actualDistance, ...
    100*(estimatedDistance-actualDistance)/actualDistance)
Actual distance = 5 m.
Estimated Distance = 5.03 m
Error = 0.030 m (0.59%)

飛行時間型 (TOF) の推定に依存する測距方法の場合、距離推定の誤差は主に、伝播時間 (Tprop) がサンプル時間の整数倍でないことによるものです。この種の測距方法では、Tprop がサンプル時間の整数倍よりもサンプル時間の半分を超えて続くときに距離誤差が最大になります。Tprop がサンプル時間の整数倍であるときは距離誤差が最小になります。この例で使用されている高レート パルス繰り返し周波数 (HRP) PHY の高パルス繰り返し周波数 (HRPF) モードの場合、シンボル レートが 499.2 MHz、シンボルごとのサンプル数が 10 であるため、Tprop 推定における最大誤差は 0.5×c/(499.2×10) になります。したがって、既定の測距誤差は 0 ~ 3 cm になります。

一般に、UWB のチャネル帯域幅が大きいほど、狭帯域通信と比較してシンボル区間が短くなり、測距誤差が小さくなります。IEEE 802.11az で規定されている狭帯域通信では、チャネル帯域幅が 20 MHz ~ 160 MHz の範囲になります。狭帯域通信の最大 Tprop 誤差を考慮すると、測距誤差の推定値は、160 MHz で 0 ~ 10 cm、20 MHz で 0 ~ 75 cm になります。IEEE 802.11az の測距に関する詳細については、802.11az Positioning Using Super-Resolution Time of Arrival Estimation (WLAN Toolbox)の例を参照してください。

その他の調査

この例で使用している Communications Toolbox™ のオブジェクトおよび関数は次のとおりです。

function received = lclDelayWithNoise(transmitted, samplesToDelay, SNR)
% lclDelayWithNoise Operations of wireless channel (propagation delay, AWGN)

  vfd = dsp.VariableFractionalDelay;
  % zero pad @ end, to get entire frame out of VFD
  delayedTransmitted = vfd( ...
      [transmitted; zeros(ceil(samplesToDelay), 1)],samplesToDelay);
  % add white gaussian noise:
  received = awgn(delayedTransmitted,SNR);
end

参考文献

1 - "IEEE Standard for Low-Rate Wireless Networks," in IEEE Std 802.15.4-2020 (Revision of IEEE Std 802.15.4-2015), pp.1-800, 23 July 2020, doi: 10.1109/IEEESTD.2020.9144691.

2 - "IEEE Standard for Low-Rate Wireless Networks – Amendment 1: Enhanced Ultra Wideband (UWB) Physical Layers (PHYs) and Associated Ranging Techniques," in IEEE Std 802.15.4z-2020 (Amendment to IEEE Std 802.15.4-2020), pp.1-174, 25 Aug. 2020, doi: 10.1109/IEEESTD.2020.9179124.

関連するトピック