Main Content

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

OFDM 同期

この例では、IEEE® 802.11a™ 標準に基づく OFDM 同期によるデジタル通信の方法を説明します。Communications Toolbox™ の System object™ は、OFDM 変調と復調の実施および同期機能の向上に利用されます。特に、この例では、搬送波周波数再生、タイミング再生、周波数領域のイコライズなど、実際の無線通信の問題への対処方法について説明します。

実装

この例では、MATLAB® での IEEE 802.11a 標準 [3] に基づく OFDM 同期の実装について説明します。

はじめに

IEEE 802.11a 標準は、ローカルおよびメトロポリタン エリア ネットワーク間においてそれぞれのシステムが情報を交換するための OFDM 変調信号の伝送について規定しています。この例では、その標準により大枠が定められている物理レイヤー、具体的には、プリアンブル シンボルおよび OFDM グリッド構造を利用します。

この例の目的は次のとおりです。

  • 各種チャネル劣化要因シミュレーションにより破損されたメッセージが正常に再生される、一般的な OFDM 無線通信システムのモデル化

  • OFDM システム設計および OFDM シンボル同期における主要な Communications Toolbox ツールの使用方法の説明

  • MATLAB Coder™ の運用上のメリットの説明

初期化

複数の OFDM シンボルから成る各フレーム内のペイロード メッセージと送信されたフレーム数を含む調整可能な送信機パラメーター。

message = 'Live long and prosper, from the Communications Toolbox Team at MathWorks!';
numFrames = 1e2;

% Adjustable channel parameters
EbN0dB = 12; % Channel noise level (dB)
frequencyOffset = 1e4; % Frequency offset (Hz)
phaseOffset = 15; % Phase offset (Degrees)
delay = 80; % Initial sample offset for entire data stream (samples)

% Display recovered messages
displayRecoveredMsg = false;

% Enable scope visualizations
useScopes = true;

% Check for MATLAB Coder license
useCodegen = checkCodegenLicense;
if useCodegen
  fprintf(['--MATLAB Coder license found. ',...
    'Transmitter and receiver functions will be compiled for ',...
    'additional simulation acceleration.--\n']);
end

% By default the transmitter and receiver functions will be recompiled
% between every run, which is not always necessary. To disable receiver
% compilation, change "compileIt" to false.
compileIt = useCodegen;
--MATLAB Coder license found. Transmitter and receiver functions will be compiled for additional simulation acceleration.--

システムのコード アーキテクチャ

この例では、IEEE 802.11a 標準 [ 3 ] に基づくデジタル通信システムをモデル化します。システムは、generateOFDMSignal、applyOFDMChannel、receiveOFDMSignal および calculateOFDMBER の 4 つの関数に分けられます。

1) generateOFDMSignal: OFDMTransmitter System object を設定して呼び出します。このオブジェクトはペイロード メッセージをビット ストリームに変換します。ビット ストリームは、まず PSK 変調され、次に OFDM 変調されて、最後に、個別のフレームを形成するためにプリアンブル OFDM シンボルが先頭に追加されます。送信機はこのフレームを numFrames 回繰り返します。

2) applyOFDMChannel: 搬送波オフセット、タイミング オフセットおよび加法性ホワイト ガウス ノイズ (AWGN) のあるチャネルをモデル化します。

3) receiveOFDMSignal: OFDMReceiver System object を設定して呼び出します。このオブジェクトは、タイミング再生、搬送波周波数再生、チャネル イコライズ、復調などの受信機での一連のコンポーネントをモデル化します。オブジェクトは、複数のスコープを表示して受信機の処理を可視化するように設定することもできます。OFDMReceiver オブジェクトの出力は、検出されたフレームから復号化されたビット ストリームです。

4) calculateOFDMBER: システムのフレーム エラー レート (FER) とビット エラー レート (BER) を、各フレームの元のペイロード メッセージと OFDMReceiver System object からのビット出力に基づいて計算します。

各コンポーネントおよびアルゴリズムの説明

送信機

OFDMTransmitter System object は、IEEE 802.11a 標準に基づき、与えられた ASCII ペイロードをもつ OFDM 信号を生成します。それぞれの伝送フレームは、プリアンブル シンボルやデータ シンボルを含む、複数の OFDM シンボルから構成されます。同一のフレームが、与えられた値に基づいて送信機で反復されます。必要に応じて、フレームがパディングされて OFDM グリッドが埋られます。

チャネル

このコンポーネントは、無線伝送の様々な影響をシミュレートします。これにより、位相と周波数の両方のオフセット、送信機と受信機との間のチャネル遅延を再現する遅延および AWGN をもつ送信信号が劣化させられます。AWGN のノイズ レベルは dB 単位で指定されます。

受信機

この OFDMReceiver System object は送信された元のペイロード メッセージを復元します。これは、次の順で実施される 4 つの主要な操作に分けられます。

1) タイミング再生: このコンポーネントは、指定のフレームのサンプル開始位置を決定する役割を果たします。具体的には、相互相関によって検出される受信フレーム内の既知のプリアンブル シーケンスを利用します。相互相関データには、特定のピーク配置またはピーク間隔が含まれ、それらによって識別が可能になります。プリアンブル自体が、この特定の形状を時間領域で生成するように設計されています。この識別方式は [ 1 ] に基づいています。この操作を行うオブジェクトの locatePreamble メソッドは、正規化された最小ピーク高と最小限必要なピークの数を使用して、可能なプリアンブル一致を提供します。

2) 搬送波周波数再生: 周波数推定は、802.11a プリアンブルの長い部分の半分どうしの間の時間領域における位相差を計算することによって行われます。この位相差 Phi は、その後、周波数オフセットに変換されます。これは、元々は Schmidl および Cox [ 2 ] によって発表された一般的な手法です。この位相測定の実装では、実際のオフセットは pi 内にある (つまり、FFT の 1 周波数ビンである) ことを前提としています。802.11a の場合、1 つのビンの幅は 312.5kHz です。

3) 周波数領域イコライズ: 周波数推定は正確ではない場合があるため、OFDM シンボルのサブキャリアレベルでは余分な位相回転が存在します。位相回転と同様に、チャネル フェージングも受信信号に影響を及ぼします。これらの障害は、両方とも、周波数領域イコライザーによって修正されます。このイコライザーには 2 つのステージがあり、プリアンブルとパイロット データの両方を利用します。最初に、受信ペイロードが、受信された長いプリアンブルのサンプルから生成されるタップを使用してイコライズされます。その後、パイロット サブキャリアが抽出され、周波数に内挿されて、完全なチャネル推定が提供されます。次に、それらのパイロット推定を使用してペイロードがイコライズされます。

4) データ復号化器: 最後に、OFDM サブキャリアが復調された後で、ビットに PSK 復調されます。このビットから、元のペイロード メッセージを復元できます。

BER の計算

このコンポーネントは、元のペイロード メッセージと受信機で検出されたフレームから復号化されたビット ストリームに基づいてシステムの FER と BER を計算します。検出されないフレームは計算に含まれません。

復元されたメッセージの表示

受信機で復元されたメッセージは、検出されたフレームごとに表示されます。元のメッセージ長が受信機に送信されないため、各フレーム内のパディングされたビットも文字に復元され、表示されます。そのため、復元された各メッセージの末尾に、最大 7 文字分の無意味な文字が表示される場合があります。

スコープ

  • 周波数領域のイコライズの前後の受信信号を示すコンスタレーション ダイアグラム

  • 指定のフレームに使用されたイコライザー タップのベクトル プロット

  • 検出されたデータのフレームを表示するスペクトル アナライザー

  • 検出されたフレームの開始を表示する時間プロット

  • 検出されたフレームに対する送信機の搬送波オフセットの周波数推定を表示する時間プロット

OFDM 同期テストの概要

指定の EbN0 値に対する大きなデータ ベクトルが関数 generateOFDMSignal によって再生成されます。その後、このデータは関数 applyOFDMChannel に渡され、いくつかの一般的なチャネル劣化要因が組み込まれます。最後に、データは受信機に渡されて再生されます。関数 receiveOFDMSignal は、データをフレーム単位で処理します。この処理メカニズムは、コード生成を使用する場合のパフォーマンス上のメリットとコードの簡略化のため自己完結します。既定では、このスクリプトは送信機および受信機関数のコードを生成します。これは、MATLAB Coder 製品が提供する "codegen" コマンドを使用して行われます。"codegen" コマンドは、MATLAB 関数を C++ スタティックまたはダイナミック ライブラリ、実行可能ファイルあるいは MEX ファイルに変換してコードを生成し、実行を高速化します。生成された C コードの実行速度は、元の MATLAB コードよりも数倍高速です。

操作中、受信機には特定の同期結果と信号への影響を示す一連のプロットが表示されます。

% Compile transmitter with MATLAB Coder
if compileIt
    codegen generateOFDMSignal -args {coder.Constant(message), coder.Constant(numFrames)}
end

% Generate transmission signal
if useCodegen
    [txSig, frameLen] = generateOFDMSignal_mex(message, numFrames);
else
    [txSig, frameLen] = generateOFDMSignal(message, numFrames);
end

% Pass signal through channel
rxSig = applyOFDMChannel(txSig, EbN0dB, delay, frequencyOffset, phaseOffset);

% Compile receiver with MATLAB Coder
if compileIt
   codegen  receiveOFDMSignal -args {rxSig, coder.Constant(frameLen), coder.Constant(displayRecoveredMsg), coder.Constant(useScopes)}
end

% Recover signal
if useCodegen
    [decMsgInBits, numFramesDetected] = receiveOFDMSignal_mex(rxSig, frameLen, displayRecoveredMsg, useScopes);
else
    [decMsgInBits, numFramesDetected] = receiveOFDMSignal(rxSig, frameLen, displayRecoveredMsg, useScopes);
end

% Calculate average BER
[FER, BER] = calculateOFDMBER(message, decMsgInBits, numFramesDetected);
fprintf('\nAt EbNo = %5.2fdB, %d frames detected among the %d transmitted frames with FER = %f and BER = %f\n', ...
    EbN0dB, numFramesDetected, numFrames, FER, BER);
Code generation successful.

Code generation successful.


At EbNo = 12.00dB, 100 frames detected among the 100 transmitted frames with FER = 0.050000 and BER = 0.000294

まとめ

この例では、いくつかの MATLAB System object を利用して、AWGN チャネルによる OFDM とのデジタル通信をシミュレートします。変調、周波数推定、タイミング再生、イコライズなど、OFDM システムの各部分をモデル化する方法を説明します。また、シミュレーションでは、同期アルゴリズムの操作に関する情報を一連のプロットで示します。この例では、コード生成を利用して、シミュレーションを元の MATLAB コードよりも数倍高速に実行できます。

付録

この例では、次の System object が使用されています。

この例では、次の補助関数が使用されています。

参考文献

  1. Minn, H.; Zeng, M.; Bhargava, V.K., "On timing offset estimation for OFDM systems," Communications Letters, IEEE , vol.4, no.7, pp.242,244, July 2000

  2. Schmidl, T.M.; Cox, D.C., "Robust frequency and timing synchronization for OFDM," Communications, IEEE Transactions on , vol.45, no.12, pp.1613,1621, Dec 1997

  3. IEEE Std 802.11a, "Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications," 1999.