Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

comm.OFDMModulator

OFDM 法を使用した信号の変調

説明

OFDMModulator オブジェクトは、直交周波数分割変調法を使用して信号を変調します。出力は、変調信号のベースバンド表現です。

OFDM を使用した信号は次により変調します。

  1. comm.OFDMModulator オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

hMod = comm.OFDMModulator は、OFDM 変調器 System object™ を作成します。

hMod = comm.OFDMModulator(Name,Value) は、1 つ以上の名前と値のペアの引数を使用してプロパティを指定します。各プロパティ名を引用符で囲みます。たとえば、comm.OFDMModulator('NumSymbols',8) は時間周波数グリッドで 8 つの OFDM シンボルを指定します。

hMod = comm.OFDMModulator(hDemod) は、指定された OFDM 復調器 System object comm.OFDMDemodulator に基づいて、OFDM 変調器 System object のプロパティを設定します。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

高速フーリエ変換 (FFT) 点の数。正の整数として指定します。FFT の長さ NFFT は 8 以上でなければならず、副搬送波の数と等しくなります。

データ型: double

左保護帯域と右保護帯域に割り当てられた副搬送波の数。整数の 2 要素列ベクトルとして指定します。副搬送波の数は [0, ⌊NFFT/2⌋ − 1] の範囲内でなければなりません。このベクトルは [NleftG, NrightG] の形式になります。ここで、NleftG と NrightG はそれぞれ左保護帯域と右保護帯域を指定します。

データ型: double

DC null を挿入するオプション。数値または logical 0 (false) または 1 (true) として指定します。DC 副搬送波は、周波数帯域の中心であり、次のインデックス値をもちます。

  • FFTLength が偶数の場合、(FFTLength / 2) + 1

  • FFTLength が奇数の場合、(FFTLength + 1) / 2

パイロット入力を指定するオプション。数値または logical 0 (false) または 1 (true) として指定します。このプロパティが 1 (true) の場合は、パイロット送信の個々の副搬送波を割り当てることができます。このプロパティが 0 (false) の場合は、パイロット情報が入力データに埋め込まれるものと見なされます。

パイロット副搬送波インデックス。列ベクトルとして指定します。PilotCarrierIndices プロパティが 1 (true) に設定されている場合、パイロット副搬送波のインデックスを指定できます。これらのインデックスは、各シンボルについて同一または別々の副搬送波に割り当てることができます。同様に、パイロット搬送波インデックスは複数の送信アンテナで異なるものにすることができます。インデックス割り当ての制御に必要なレベルに応じて、プロパティの次元は異なります。有効なパイロット インデックスは

[NleftG+1,NFFT/2][NFFT/2+2,NFFTNrightG],

の範囲内であり、この場合、インデックス値は副搬送波の数を超えることはできません。パイロット インデックスがすべてのシンボルと送信アンテナで同じ場合、プロパティの次元は Npilot 行 1 列になります。パイロット インデックスがシンボルによって異なる場合、プロパティの次元は Npilot-by-Nsym になります。送信するシンボルが 1 つのみで送信アンテナが複数ある場合、プロパティの次元は Npilot-by-1-by-Nt. になります。Nt. は送信アンテナの数です。パイロット インデックスがシンボルと送信アンテナの数の間で異なる場合、プロパティの次元は Npilot-by-Nsym-by-Nt となります。送信アンテナの数が複数の場合は、干渉を最小限にするため、シンボルごとのインデックスがアンテナ間で異なるようにしなければなりません。

このプロパティを有効にするには、PilotInputPort プロパティを 1 (true) に設定します。

巡回プレフィックスの長さ。正の整数として指定します。スカラーを指定した場合、プレフィックス長はすべてのアンテナのすべてのシンボルで同じになります。長さ Nsym の行ベクトルを指定した場合、プレフィックス長はシンボルごとに変えられますが、アンテナ長はすべて同じ長さのままです。

データ型: double

OFDM シンボル間にレイズド コサイン ウィンドウを適用するオプション。true または false として指定します。ウィンドウ処理とは、帯域外副搬送波の強度をより迅速に弱めるため、OFDM シンボルをレイズド コサイン ウィンドウで乗算してから送信する処理です。ウィンドウ処理により、スペクトル再成長が軽減されます。

レイズド コサイン ウィンドウの長さ。正のスカラーとして指定します。この値は最小巡回プレフィックス長以下でなければなりません。たとえば、巡回プレフィックス長が 12、14、16 および 18 である 4 つのシンボルの構成の場合、ウィンドウの長さは 12 以下でなければなりません。

このプロパティを有効にするには、Windowing プロパティを 1 (true) に設定します。

時間周波数グリッドの OFDM シンボルの数。正の整数として指定します。

OFDM 変調信号の送信に使用される送信アンテナの数。正の整数として指定します。

使用法

説明

waveform = hMod(insignal) は、OFDM 変調を指定されたベースバンド信号に適用し、変調した OFDM ベースバンド信号を返します。

waveform = hMod(data,pilot) は、hMod System object の PilotCarrierIndices プロパティ値で指定された周波数副搬送波にパイロット信号 pilot を割り当てます。この構文を有効にするには、PilotCarrierIndices プロパティを true に設定します。

入力引数

すべて展開する

入力ベースバンド信号。数値の行列または 3 次元配列として指定します。入力ベースバンド信号のサイズは Nf-by-Nsym-by-Nt. でなければなりません。ここで、Nf は保護帯域および DC null を除く周波数副搬送波の数です。

データ型: double
複素数のサポート: あり

入力データ。行列または 3 次元配列として指定します。入力は、サイズ Nd-by-Nsym-by-Nt. の数値でなければなりません。ここで、Nd は各シンボルのデータ副搬送波の数です。Nd の計算方法の詳細については、PilotCarrierIndices プロパティを参照してください。

データ型: double
複素数のサポート: あり

パイロット信号。数値の 3 次元配列として指定します。パイロット信号のサイズは Npilot-by-Nsym-by-Nt でなければなりません。

データ型: double
複素数のサポート: あり

出力引数

すべて展開する

OFDM 変調されたベースバンド信号。2 次元配列として返されます。CyclicPrefixLength プロパティがスカラーの場合、出力 waveform のサイズは ((NFFT+CPlen)⁎Nsym)-by-Nt です。そうでない場合、サイズは (NFFT⁎Nsym+∑(CPlen))-by-Nt です。

データ型: double
複素数のサポート: あり

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

infoOFDM 変調器の次元情報を提供
showResourceMappingOFDM 変調器 System object で作成される OFDM シンボルの副搬送波マッピングを表示します。
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

既定のプロパティ値を使用して OFDM 変調器 System object™ を作成および表示します。

hMod = comm.OFDMModulator
hMod = 
  comm.OFDMModulator with properties:

               FFTLength: 64
    NumGuardBandCarriers: [2x1 double]
            InsertDCNull: false
          PilotInputPort: false
      CyclicPrefixLength: 16
               Windowing: false
              NumSymbols: 1
     NumTransmitAntennas: 1

副搬送波とシンボルの数を変更します。

hMod.FFTLength = 128;
hMod.NumSymbols = 2;

副搬送波の数とシンボルの数が変更されたことを確認します。

disp(hMod)
  comm.OFDMModulator with properties:

               FFTLength: 128
    NumGuardBandCarriers: [2x1 double]
            InsertDCNull: false
          PilotInputPort: false
      CyclicPrefixLength: 16
               Windowing: false
              NumSymbols: 2
     NumTransmitAntennas: 1

オブジェクト関数 showResourceMapping を使用して、時間周波数空間におけるデータ、パイロットおよび null の各副搬送波のマッピングを示します。

showResourceMapping(hMod)

既定のプロパティ値を使用して OFDM 復調器 System object™ を作成します。次に、1 つの信号シンボルと 2 つの送信アンテナに対してパイロット インデックスを指定します。

復調器の PilotCarrierIndices プロパティを設定すると、変調器の作成で復調器を使用する場合の OFDM 変調器における送信アンテナの数に影響します。復調器の受信アンテナの数は送信アンテナの数と相関しません。

ofdmDemod = comm.OFDMDemodulator;
ofdmDemod.PilotOutputPort = true;
ofdmDemod.PilotCarrierIndices = cat(3,[12; 26; 40; 54],[13; 27; 41; 55]);

OFDM 復調器を使用して OFDM 変調器を構築します。

ofdmMod = comm.OFDMModulator(ofdmDemod);

OFDM 変調器と復調器のプロパティを表示し、適用可能なプロパティが一致するか確認します。

disp(ofdmMod)
  comm.OFDMModulator with properties:

               FFTLength: 64
    NumGuardBandCarriers: [2x1 double]
            InsertDCNull: false
          PilotInputPort: true
     PilotCarrierIndices: [4x1x2 double]
      CyclicPrefixLength: 16
               Windowing: false
              NumSymbols: 1
     NumTransmitAntennas: 2
disp(ofdmDemod)
  comm.OFDMDemodulator with properties:

               FFTLength: 64
    NumGuardBandCarriers: [2x1 double]
         RemoveDCCarrier: false
         PilotOutputPort: true
     PilotCarrierIndices: [4x1x2 double]
      CyclicPrefixLength: 16
              NumSymbols: 1
      NumReceiveAntennas: 1

showResourceMapping メソッドは、送信アンテナごとの時間周波数リソース マッピングを表示します。

OFDM 変調器を構築します。

mod = comm.OFDMModulator;

showResourceMapping メソッドを適用します。

showResourceMapping(mod)

DC null を挿入します。

mod.InsertDCNull = true;

DC null を追加した後のリソース マッピングを表示します。

showResourceMapping(mod)

OFDM 変調器を作成して、パイロット信号の副搬送波インデックスを指定します。シンボルおよび送信アンテナごとにインデックスを指定します。送信アンテナの数が複数の場合は、シンボルごとのパイロット インデックスがアンテナ間で異なるように設定します。

2 つのシンボルを指定し、DC null を挿入して、OFDM 変調器 System object を作成します。

mod = comm.OFDMModulator('FFTLength',128,'NumSymbols',2,...
    'InsertDCNull',true);

パイロット インデックスを指定できるようにするため、パイロット入力端子を有効にします。

mod.PilotInputPort = true;

両方のシンボルに同じパイロット インデックスを指定します。

mod.PilotCarrierIndices = [12; 56; 89; 100];

オブジェクト関数 showResourceMapping を使用して、パイロット信号と null 値の配置を OFDM 時間周波数グリッドで可視化します。

showResourceMapping(mod)

パイロット インデックスの 2 番目の列を PilotCarrierIndices プロパティに連結して、2 番目のシンボルに別のインデックスを指定します。

mod.PilotCarrierIndices = cat(2,mod.PilotCarrierIndices, ...
    [17; 61; 94; 105]);

パイロット副搬送波インデックスが 2 つのシンボル間で異なることを確認します。

showResourceMapping(mod)

送信アンテナの数を 2 に増やします。

mod.NumTransmitAntennas = 2;

2 つの送信アンテナのそれぞれについてパイロット インデックスを指定します。アンテナ間の干渉を最小限にしながら複数のアンテナのインデックスを指定するには、各シンボルのインデックスがアンテナによって異なる 3 次元配列を PilotCarrierIndices プロパティに設定します。

mod.PilotCarrierIndices = cat(3,[20; 50; 70; 110], [15; 60; 75; 105]);

2 つの送信アンテナのリソース マッピングを表示します。グレイの線は、カスタム null の挿入を示しています。これらの null は、異なるアンテナからのパイロット シンボル間の干渉を最小限にするため、このオブジェクトで作成されます。

showResourceMapping(mod)

各 OFDM シンボルの巡回プレフィックス長を指定します。

5 つのシンボル、4 つ左保護帯域の副搬送波、3 つの右保護帯域の副搬送波、および各 OFDM シンボルの巡回プレフィックス長を指定して、OFDM 変調器を作成します。

mod = comm.OFDMModulator('NumGuardBandCarriers',[4;3],...
    'NumSymbols',5,...
    'CyclicPrefixLength',[12 10 14 11 13]);

OFDM 変調器のプロパティを表示し、巡回プレフィックス長がシンボル間で異なることを確認します。

disp(mod)
  comm.OFDMModulator with properties:

               FFTLength: 64
    NumGuardBandCarriers: [2x1 double]
            InsertDCNull: false
          PilotInputPort: false
      CyclicPrefixLength: [12 10 14 11 13]
               Windowing: false
              NumSymbols: 5
     NumTransmitAntennas: 1

オブジェクト関数 info を使用して OFDM 変調器のデータ次元を取得します。

ユーザー指定のパイロット インデックス、挿入された DC null をもつ OFDM 変調器 System object™ を構築し、2 つの送信アンテナを指定します。

hMod = comm.OFDMModulator('NumGuardBandCarriers',[4;3], ...
    'PilotInputPort',true, ...
    'PilotCarrierIndices',cat(3,[12; 26; 40; 54], ...
    [11; 25; 39; 53]), ...
    'InsertDCNull',true, ...
    'NumTransmitAntennas',2);

オブジェクト関数 info を使用して、変調器の入力データ、パイロット入力データおよび出力データのサイズを取得します。

info(hMod)
ans = struct with fields:
     DataInputSize: [48 1 2]
    PilotInputSize: [4 1 2]
        OutputSize: [80 2]

リンクレベルのシミュレーションで使用する OFDM 変調シンボルを生成します。

DC null が挿入され、保護帯域の副搬送波が 7 つ、パイロット インデックスが異なるシンボルが 2 つある OFDM 変調器を構築します。

mod = comm.OFDMModulator('NumGuardBandCarriers',[4;3],...
'PilotInputPort',true, ...
'PilotCarrierIndices',[12 11; 26 27; 40 39; 54 55], ...
'NumSymbols',2, ...
'InsertDCNull',true);

入力データ、パイロットおよび出力データの次元を決定します。

modDim = info(mod);

OFDM 変調器のランダム データ シンボルを生成します。構造体変数 modDim によってデータ シンボルの数が決定されます。

dataIn = complex(randn(modDim.DataInputSize),randn(modDim.DataInputSize));

正しい次元をもつパイロット信号を作成します。

pilotIn = complex(rand(modDim.PilotInputSize),rand(modDim.PilotInputSize));

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

modData = step(mod,dataIn,pilotIn);

OFDM 変調器オブジェクトを使用して、対応する OFDM 復調器を作成します。

demod = comm.OFDMDemodulator(mod);

OFDM 信号を復調し、データ信号とパイロット信号を出力します。

[dataOut, pilotOut] = step(demod,modData);

狭い許容誤差内で、入力データ シンボルおよび入力パイロット シンボルが出力データ シンボルおよび出力パイロット シンボルと一致することを確認します。

isSame = (max(abs([dataIn(:) - dataOut(:); ...
    pilotIn(:) - pilotOut(:)])) < 1e-10)
isSame = logical
   1

詳細

すべて展開する

参照

[1] Dahlman, Erik, Stefan Parkvall, and Johan Sköld. 4G LTE/LTE-Advanced for Mobile Broadband. Amsterdam: Elsevier, Acad. Press, 2011.

[2] Andrews, J. G., A. Ghosh, and R. Muhamed. Fundamentals of WiMAX. Upper Saddle River, NJ: Prentice Hall, 2007.

[3] Agilent Technologies, Inc., “OFDM Raised Cosine Windowing”, http://wireless.agilent.com/rfcomms/n4010a/n4010aWLAN/onlineguide/ofdm_raised_cosine_windowing.htm.

[4] Montreuil, L., R. Prodan, and T. Kolze. “OFDM TX Symbol Shaping 802.3bn”, http://www.ieee802.org/3/bn/public/jan13/montreuil_01a_0113.pdf. Broadcom, 2013.

[5] “IEEE Standard 802.16TM-2009,” New York: IEEE, 2009.

拡張機能

R2014a で導入