Main Content

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

IEEE 802.15.4 OQPSK 信号の復元

この例では、Communications Toolbox™ を使用して、無線機から受信した可能性のある OQPSK 波形を復号化する実用的な IEEE® 802.15.4™ PHY 受信機を実装する方法を説明します。この実用的な受信機は、USRP® B200-mini 無線機と Communications Toolbox Support Package for USRP® radio アドオンを使用して、2.4 GHz 帯域でホーム オートメーションを有効にする市販の ZigBee 無線機から受信した規格準拠の波形を復号化しました。

背景

IEEE 802.15.4 規格は、低速無線パーソナル エリア ネットワーク (LR-WPAN) [1] の MAC レイヤーと PHY レイヤーを規定します。IEEE 802.15.4 の MAC レイヤーと PHY レイヤーは、ZigBee、WirelessHart®、6LoWPAN、および MiWi などの他の上位レイヤーの規格のベースを提供します。このような規格は、ホーム オートメーションやセンサー ネットワーキングに使用例があり、モノのインターネット (IoT) の流行にも密接に関連しています。

受信機アーキテクチャ

全体に、受信機は以下の処理を実行します。

  • 整合フィルター処理

  • 大まかな周波数補正

  • 細かな周波数補正

  • Timing Recovery

  • プリアンブル検出

  • 位相不確定性の解決

  • 逆拡散

これらのステップの間に信号が可視化されて、信号の劣化要因と補正を確認できます。

整合フィルター処理

load lrwpanPHYCaptures % load OQPSK signals from the 2.4 GHz band
spc = 12; % 12 samples per chip
          % the frame was captured at 12x chiprate = 12 MHz

整合フィルターは、信号の SNR を改善します。2.4 GHz OQPSK PHY はハーフ サイン パルスを使用するため、次の整合フィルター処理演算が必要です。

% Matched filter for captured OQPSK signal:
halfSinePulse = sin(0:pi/spc:(spc)*pi/spc);
decimationFactor = 3; % reduce spc to 4, for faster processing
matchedFilter = dsp.FIRDecimator(decimationFactor,halfSinePulse);
filteredOQPSK = matchedFilter(capturedFrame1); % matched filter output

周波数オフセット

周波数オフセットが存在する状態での信号の復号化は、どのような無線受信機にとっても困難です。30 kHz までの周波数オフセットは、市販の ZigBee 無線機から送信され、USRP® B200-mini 無線機を使用して取得された信号のものとして測定されました。

コンスタレーション ダイアグラムから受信信号の品質がわかりますが、はじめに、理想的な OQPSK 信号の軌跡は円を辿るということに気付くことが重要です。

% Plot constellation of ideal OQPSK signal
msgLen = 120;                       % length in bytes
message = randi([0 1], msgLen, 1);  % transmitted message
oqpskConfig = lrwpanOQPSKConfig(SamplesPerChip=spc, PSDULength=msgLen);
idealOQPSK = lrwpanWaveformGenerator(message, oqpskConfig);
constellation = comm.ConstellationDiagram( ...
    'Name','Ideal OQPSK Signal', ...
    'ShowTrajectory',true);
constellation.Position = [constellation.Position(1:2) 300 300];
constellation(idealOQPSK);

上のコンスタレーションにも、フレームの先頭に対応する半径が 1 つと、フレームの終端に対応する半径が 1 つ含まれています。同時に、周波数オフセットはコンスタレーションを円状に回転させ、コンスタレーションもリング状になります。このため、OQPSK 信号の同相成分を半分のシンボル分遅延させることで得られる QPSK に相当する信号のコンスタレーションを観察することの方が重要です。ハーフ サイン パルス フィルター処理を使用し、オーバーサンプリング係数が 1 より大きいときには、理想的な QPSK コンスタレーションは原点と 4 つの QPSK シンボル (赤色の十字) をつなげた 'X' の形の領域に似ています。

% Plot constellation of ideal QPSK-equivalent signal
idealQPSK = complex(real(idealOQPSK(1:end-spc/2)), ...
    imag(idealOQPSK(spc/2+1:end))); % align I and Q
release(constellation);
constellation.Name = 'Ideal QPSK-Equivalent Signal';
constellation.ReferenceConstellation = [1+1i 1-1i 1i-1 -1i-1];
constellation(idealQPSK);

ただし、キャプチャされたフレームのサンプルでは、周波数オフセットが原因でこの 'X' の形の領域の位置が変わります。

% Plot constellation of QPSK-equivalent (impaired)
% received signal
filteredQPSK = complex( ...
    real(filteredOQPSK(1:end-spc/(2*decimationFactor))), ...
    imag(filteredOQPSK(spc/(2*decimationFactor)+1:end))); % align I/Q
constellation = comm.ConstellationDiagram( ...
    'XLimits',[-7.5 7.5], ...
    'YLimits',[-7.5 7.5], ...
    'ReferenceConstellation',5*qammod(0:3, 4), ...
    'Name','Received QPSK-Equivalent Signal');
constellation.Position = [constellation.Position(1:2) 300 300];
constellation(filteredQPSK);

大まかな周波数補正

このような周波数オフセットは、OQPSK 信号を二乗し 2 つのスペクトル ピークを明らかにする FFT ベースの手法 [2] を使用して、まず大まかに補正されます。大まかな周波数オフセットは、この 2 つのスペクトル ピーク周波数を平均化し半分にすることで求められます。

% Coarse frequency compensation of OQPSK signal
coarseFrequencyCompensator = comm.CoarseFrequencyCompensator( ...
    'Modulation','OQPSK', ...
    'SampleRate',spc*1e6/decimationFactor, ...
    'FrequencyResolution',1e3);
[coarseCompensatedOQPSK, coarseFrequencyOffset] = ...
    coarseFrequencyCompensator(filteredOQPSK);
fprintf('Estimated frequency offset = %.3f kHz\n', ...
    coarseFrequencyOffset/1000);
Estimated frequency offset = 26.367 kHz
% Plot QPSK-equivalent coarsely compensated signal
coarseCompensatedQPSK = complex( ...
    real(coarseCompensatedOQPSK( ...
    1:end-spc/(2*decimationFactor))), ...
    imag(coarseCompensatedOQPSK( ...
    spc/(2*decimationFactor)+1:end))); % align I and Q
release(constellation);
constellation.Name = ...
    'Coarse frequency compensation (QPSK-Equivalent)';
constellation(coarseCompensatedQPSK);

それでも、サンプルの中には、原点と QPSK シンボルをつないだ 'X' の形の領域 (赤色の十字) の外側に位置するものがあるため、細かな周波数補正も必要です。

細かな周波数補正

細かな周波数補正では、[3] で説明されている "OQPSK 搬送波再生アルゴリズム" に従います。このアルゴリズムは、同相信号成分を半分のシンボル分遅延させている場合にも OQPSK 信号に適用されることがない、対応する QPSK とは動作が異なります。

% Fine frequency compensation of OQPSK signal
fineFrequencyCompensator = comm.CarrierSynchronizer( ...
    'Modulation','OQPSK', ...
    'SamplesPerSymbol',spc/decimationFactor);
fineCompensatedOQPSK = ...
    fineFrequencyCompensator(coarseCompensatedOQPSK);

% Plot QPSK-equivalent finely compensated signal
fineCompensatedQPSK = complex( ...
    real(fineCompensatedOQPSK( ...
    1:end-spc/(2*decimationFactor))), ...
    imag(fineCompensatedOQPSK( ...
    spc/(2*decimationFactor)+1:end))); % align I and Q
release(constellation);
constellation.Name = 'Fine frequency compensation (QPSK-Equivalent)';
constellation(fineCompensatedQPSK);

ここまででコンスタレーションは理想的な形に近づきましたが、まだタイミング再生が必要です。

タイミング再生

シンボル同期は、[3] で説明されている OQPSK タイミング再生アルゴリズムに従って行われます。搬送波再生とは対照的に、OQPSK タイミング再生アルゴリズムは、OQPSK 信号の同相成分を半分のシンボル分遅延させることで得られる QPSK に相当する信号に対応する QPSK と等価です。

% Timing recovery of OQPSK signal, via its QPSK-equivalent version
symbolSynchronizer = comm.SymbolSynchronizer( ...
    'Modulation','OQPSK', ...
    'SamplesPerSymbol',spc/decimationFactor);
syncedQPSK = symbolSynchronizer(fineCompensatedOQPSK);

% Plot QPSK symbols (1 sample per chip)
release(constellation);
constellation.Name = 'Timing Recovery (QPSK-Equivalent)';
constellation(syncedQPSK);

シンボル同期装置の出力には、シンボルごとにサンプルが 1 つ含まれていることに注意してください。この段階では、コンスタレーションは QPSK 信号に本当によく似ています。原点から徐々に遠ざかるいくつかのシンボルは、フレームの先頭と終端に対応しています。

プリアンブル検出、逆拡散、位相不確定性の解決:

信号が同期されると、次のステップはプリアンブル検出です。プリアンブル検出は信号が逆拡散されていると成功しやすくなります。細かな周波数補正の結果、π/2 位相の不確実性が生じていることも注目に値します。真のコンスタレーションは 0、π/2、π、または 3π/2 ラジアン分回転されている可能性があるということです。プリアンブル検出で 4 つすべての可能性のあるコンスタレーションの回転を考慮することで、この位相の不確定性が解決されます。次の関数は、同期済み OQPSK 信号を処理し、複合逆拡散、位相不確実性の解決、およびプリアンブル検出を実行して、MAC プロトコル データ ユニット (MPDU) を出力します。

MPDU =  lrwpan.PHYDecoderOQPSKAfterSync(syncedQPSK);
Found preamble of OQPSK PHY.
Found start-of-frame delimiter (SFD) of OQPSK PHY.

その他の調査

この例では、lrwpan.PHYDecoderOQPSKAfterSync ユーティリティを使用して IEEE 802.15.4 OQPSK 波形を復号化します。ドキュメンテーションにないこのユーティリティの API と機能は、将来変更される可能性があります。ソース コードを表示するには、関数editを使用します。

参考文献

1 - "IEEE Standard for Local and Metropolitan Area Networks--Part 15.4: Low-Rate Wireless Personal Area Networks (LR-WPANs)," in IEEE Std 802.15.4-2011 (Revision of IEEE Std 802.15.4-2006) , vol., no., pp.1-314, 5 Sept. 2011, doi: 10.1109/IEEESTD.2011.6012487.

2 - "Designing an OQPSK demodulator", Jonathan Olds.

3 - Rice, Michael.Digital Communications - A Discrete-Time Approach.1st ed. New York, NY: Prentice Hall, 2008.

関連するトピック