最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ユーザー指定のパイロット インデックスを使用する OFDM

この例では、直交周波数分割変調 (OFDM) の変調器と復調器のペアの構築方法およびパイロット インデックスの指定方法を説明します。OFDM 変調器 System object では、comm.OFDMModulator.info で記述されている制約に従ったパイロット副搬送波インデックスを指定できます。この例では、3×2 チャネルの OFDM 伝送の場合に、3 つの送信アンテナそれぞれについてパイロット インデックスが作成されます。さらに、偶数シンボルと奇数シンボルではパイロット インデックスが異なります。

シンボル 5、送信アンテナ 3 をもち、長さ 6 のウィンドウ処理を行う OFDM 変調器オブジェクトを作成します。

ofdmMod = comm.OFDMModulator('FFTLength',256, ...
    'NumGuardBandCarriers',[12; 11], ...
    'NumSymbols', 5, ...
    'NumTransmitAntennas', 3, ...
    'PilotInputPort',true, ...
    'Windowing', true, ...
    'WindowLength', 6);

1 つ目の送信アンテナの偶数シンボルと奇数シンボルのパイロット インデックスを指定します。

pilotIndOdd = [20; 58; 96; 145; 182; 210];
pilotIndEven = [35; 73; 111; 159; 197; 225];

pilotIndicesAnt1 = cat(2, pilotIndOdd, pilotIndEven, pilotIndOdd, ...
    pilotIndEven, pilotIndOdd);

1 つ目のアンテナに指定されたインデックスに基づいて 2 つ目と 3 つ目のアンテナのパイロット インデックスを生成します。3 つのアンテナのインデックスを連結し、それらを PilotCarrierIndices プロパティに割り当てます。

pilotIndicesAnt2 = pilotIndicesAnt1 + 5;
pilotIndicesAnt3 = pilotIndicesAnt1 - 5;

ofdmMod.PilotCarrierIndices = cat(3, pilotIndicesAnt1, pilotIndicesAnt2, pilotIndicesAnt3);

既存の OFDM 変調器 System object に基づいて 2 つの受信アンテナをもつ OFDM 復調器を作成します。関数 info を使用してデータ次元とパイロット次元を決定します。

ofdmDemod = comm.OFDMDemodulator(ofdmMod);
ofdmDemod.NumReceiveAntennas = 2;

dims = info(ofdmMod)
dims = struct with fields:
     DataInputSize: [215 5 3]
    PilotInputSize: [6 5 3]
        OutputSize: [1360 3]

modDim に指定されている配列サイズを指定して OFDM 変調器のデータとパイロット シンボルを生成します。

dataIn = complex(randn(dims.DataInputSize), randn(dims.DataInputSize));
pilotIn = complex(randn(dims.PilotInputSize), randn(dims.PilotInputSize));

OFDM 変調をデータとパイロットに適用します。

modOut = ofdmMod(dataIn,pilotIn);

変調されたデータを、3 行 2 列の乱数のチャネルを通して渡します。

chanGain = complex(randn(3,2), randn(3,2));
chanOut = modOut * chanGain;

OFDM 復調器オブジェクトを使用して受信データを復調します。

[dataOut,pilotOut] = ofdmDemod(chanOut);

3 つの送信アンテナのリソース マッピングを表示します。図のグレーの線はアンテナ間の干渉を回避するために指定された null の位置を示しています。

showResourceMapping(ofdmMod)

1 つ目の送信アンテナと 1 つ目の受信アンテナのペアについて、入力パイロット信号が入力パイロット信号と一致することを実証します。

pilotCompare = abs(pilotIn(:,:,1)*chanGain(1,1)) - abs(pilotOut(:,:,1,1));
max(pilotCompare(:) < 1e-10)
ans = logical
   1