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

comm.OFDMModulator

OFDM 法を使用した変調

説明

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

OFDM 信号を変調するには、以下の手順に従います。

  1. OFDM 変調器オブジェクトを定義および設定します。構築を参照してください。

  2. step を呼び出して、comm.OFDMModulator のプロパティに従い、信号を変調します。step の動作は、ツールボックスの各オブジェクト固有のものです。

メモ

R2016b 以降では、step メソッドを使用して、System object™ によって定義された演算を実行する代わりに、引数を関数であるかのように使ってオブジェクトを呼び出すことができます。たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

構築

H = comm.OFDMModulator は、直交周波数分割変調 (OFDM) 法を使用して入力信号を変調する変調器 System object H を作成します。

H = comm.OFDMModulator(Name,Value) は、指定されたそれぞれのプロパティ セットを指定値に設定して、OFDM 変調器オブジェクト H を作成します。(Name1,Value1,...,NameN,ValueN) のように、追加の名前と値のペアの引数を任意の順番で指定できます。

H = comm.OFDMModulator(hDemod) は、OFDM 変調器オブジェクト H を作成します。このオブジェクトのプロパティは対応する OFDM 復調器オブジェクト hDemod によって決まります。

プロパティ

FFTLength

FFT の長さ NFFT は、変調処理で使用される副搬送波の数と等しくなります。FFTLength は 8 以上でなければなりません。

副搬送波の数を指定します。既定の設定は 64 です。

NumGuardBandCarriers

左右の保護帯域に割り当てられる保護帯域の副搬送波の数。

左右の副搬送波の数は 0 から (floor(FFTLength / 2 ) − 1) の非負の整数で指定します。左保護帯域 NleftG と右保護帯域 NrightG を 2 行 1 列の列ベクトルで個別に指定します。既定値は [6; 5] です。

InsertDCNull

これは、DC null を挿入するかどうかを制御する logical な変数です。既定値は false です。

DC 副搬送波は、周波数帯域の中心であり、次のインデックス値をもちます。

PilotInputPort

これは、パイロット搬送波インデックスを指定できるかどうかを制御する logical なプロパティです。true の場合、パイロット送信の個々の副搬送波を割り当てることができます。そうでない場合は、パイロット情報が入力データに埋め込まれるものと見なされます。既定値は false です。

PilotCarrierIndices

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

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

の範囲内であり、この場合、インデックス値は副搬送波の数を超えることはできません。パイロット インデックスがすべてのシンボルと送信アンテナで同じである場合、プロパティの次元は Npilot 行 1 列になります。Npilot はパイロット副搬送波の数です。パイロット インデックスがシンボルによって異なる場合、プロパティの次元は Npilot 行 Nsym 列になります。Nsym はシンボルの数です。シンボルが 1 つで送信アンテナが複数ある場合、プロパティの次元は Npilot x 1 x NT になります。NT は送信アンテナの数です。パイロット インデックスがシンボルと送信アンテナの数の間で異なる場合、プロパティの次元は Npilot x Nsym x NT となります。送信アンテナの数が複数の場合は、干渉を回避するため、シンボルごとのインデックスがアンテナ間で異なるようにすることをお勧めします。既定値は [12; 26; 40; 54] です。

CyclicPrefixLength

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

Windowing

これは、logical プロパティであり、その状態によってウィンドウ処理が有効または無効になります。ウィンドウ処理とは、帯域外副搬送波の強度をより迅速に弱めるため、OFDM シンボルをレイズド コサイン ウィンドウで乗算してから送信する処理です。これは、スペクトル再成長を軽減するのに役立ちます。既定値は false です。

WindowLength

このプロパティは、comm.OFDMModulator.Windowingtrue の場合にレイズド コサイン ウィンドウの長さを指定します。最大値が最小巡回プレフィックス長を超えない正の整数を使用してください。たとえば、巡回プレフィックス長が [12 16 14 18] である 4 つのシンボルがある構成の場合、ウィンドウの長さは 12 を超えることはできません。既定値は 1 です。

NumSymbols

このプロパティは、シンボルの数 Nsym を指定します。NumSymbols は正の整数でなければなりません。既定値は 1 です。

NumTransmitAntennnas

このプロパティは、OFDM 変調信号の送信に使用されるアンテナの数 NT を決定します。プロパティは正の整数です。既定値は 1 です。

メソッド

infoOFDM 法の次元情報の提供
resetOFDMModulator System object の状態をリセット
showResourceMappingOFDM 変調器 System object で作成される OFDM シンボルの副搬送波マッピングを表示します。
stepOFDM 法を使用した変調
すべての System object に共通
release

System object のプロパティ値の変更の許可

すべて展開する

既定のプロパティを使用して、OFDM 変調器 System object™ を構築できます。構築後、これらのプロパティを変更することができます。

OFDM 変調器を構築します。

ofdmMod = comm.OFDMModulator;

変調器のプロパティを表示します。

disp(ofdmMod)
  comm.OFDMModulator with properties:

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

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

ofdmMod.FFTLength = 128;
ofdmMod.NumSymbols = 2;

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

disp(ofdmMod)
  comm.OFDMModulator with properties:

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

showResourceMapping メソッドは、時間周波数空間におけるデータ、パイロットおよび null の各副搬送波のマッピングを示します。showResourceMapping メソッドを適用します。

showResourceMapping(ofdmMod)

OFDM 変調器 System object™ を既存の OFDM 復調器 System object から構築することができます。

OFDM 復調器 ofdmDemod を構築し、1 つの信号シンボルと 2 つの送信アンテナに対してパイロット インデックスを指定します。

メモ: この復調器オブジェクトで PilotCarrierIndices プロパティを設定することができます。これにより、変調器オブジェクトで送信アンテナの数が変更されます。復調器の受信アンテナの数は送信アンテナの数と相関しません。

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

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

ofdmMod = comm.OFDMModulator(ofdmDemod);

変調器のプロパティを表示して、復調器のプロパティと一致することを確認します。

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 つある OFDM 変調器を構築し、DC null を挿入します。

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]);

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

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]);

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

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 変調器のデータ次元を特定します。

ユーザー指定のパイロット インデックスをもつ OFDM 変調器 System object™ を構築し、DC null を挿入して、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

アルゴリズム

直交周波数分割変調 (OFDM) は、高レートの送信データ ストリームを、それぞれのシンボル区間がチャネル遅延拡散よりも大きい N 個の低レート ストリームに分割します。これは、符号間干渉 (ISI) を緩和するのに役立ちます。個々の副搬送波は、相互に直交する N 個の並列サブチャネルで送信されます。逆高速フーリエ変換 (IFFT) を使用して、OFDM を単一無線で送信できます。具体的には、OFDM Modulator System object で直交周波数分割変調を使用して入力信号を変調します。出力は、変調信号のベースバンド表現です。

v(t)=k=0N1Xkej2πkΔft,0tT,

ここで、{Xk} はデータ シンボル、N は副搬送波の数、T は OFDM シンボル時間です。これらは、Δf = 1/T の副搬送波間隔でシンボル周期ごとに直交します。これは、次の式で表されます。

1T0T(ej2πmΔft)*(ej2πnΔft)dt=1T0Tej2π(mn)Δftdt=0formn.

データ シンボル Xk は通常は複素数であり、いずれかの変調アルファベット (QPSK、16-QAM、64-QAM など) に基づくものになります。

次の図は、OFDM 変調器を示しています。それぞれが 1 つの OFDM 副搬送波に対応する一連の N 個の複素変調器から構成されています。

保護帯域と保護間隔

OFDM 副搬送波には 3 つのタイプがあります。データ、パイロットおよび null です。データ副搬送波はデータの送信に使用され、パイロット副搬送波はチャネル推定に使用されます。null 副搬送波では送信は行われず、これにより DC null の提供と OFDM リソース ブロック間のバッファーを実現します。これらのバッファーは保護帯域と呼ばれ、符号間干渉を防ぐことを目的としています。null と保護帯域の割り当ては、適用可能な規格によって異なります (たとえば、802.11n の場合は LTE の場合とは異なります)。その結果として、この OFDM 変調器オブジェクトでは副搬送波インデックスを割り当てることができます。

保護帯域の概念と同様、OFDM 変調器オブジェクトは保護間隔をサポートしています。保護間隔は、信号の直交性が時間分散チャネルによって失われないよう、OFDM シンボル間に一時的な区切りを設けるために使用されます。保護間隔が遅延拡散よりも長い限り、それぞれのシンボルは他のシンボルに干渉しません。保護間隔は、サイクリック プリフィックスを使用して作成されます。サイクリック プリフィックスでは、OFDM シンボルの最後部がコピーされ、次の OFDM シンボルの最前部に挿入されます。巡回プレフィックス挿入の効果は、時間分散のスパンが巡回プレフィックスの期間を超えない限り持続します。OFDM 変調器オブジェクトによって、巡回プレフィックス長の設定が可能になります。巡回プレフィックスを使用する場合の欠点は、オーバヘッドの増加によるペナルティです。

レイズド コサイン ウィンドウ処理

巡回プレフィックスは時間領域で保護期間を作成して直交性を保持しますが、OFDM シンボルの場合、直前の OFDM シンボルの最後に示された振幅と位相で開始されることはほとんどありません。そのため、スペクトル再成長が発生します。スペクトル再成長とは、相互変調歪みによる信号帯域幅の拡散です。このスペクトル再成長を制限するためには、シンボルの最後のサンプルから次のシンボルの最初のサンプルへの円滑な移行が望まれます。これは、巡回サフィックスとレイズド コサイン ウィンドウ処理の使用により可能です。

サイクリック サフィックスを作成するため、あるシンボルの最初の NWIN 個のサンプルをそのシンボルの最後に付加します。ただし、802.11g 標準に準拠するため、たとえば、シンボル長を任意に延長することはできません。逆に、巡回サフィックスは時間的にオーバーラップしなければならず、次のシンボルの巡回プレフィックスと実質的に合計されます。このオーバーラップ部分がウィンドウ処理が適用される場所です。2 つのウィンドウが適用されますが、片方はもう一方の数学的な反転です。1 つ目のレイズド コサイン ウィンドウは、シンボル k の巡回サフィックスに適用され、区間中に 1 から 0 へと減少します。2 つ目のレイズド コサイン ウィンドウは、シンボル k+1 の巡回サフィックスに適用され、区間中に 0 から 1 へと増加します。これによって、あるシンボルから次のシンボルへの円滑な移行が実現します。

時間領域におけるレイズド コサイン ウィンドウ w(t) は、次の式で表すことができます。

w(t)={1, 0|t|<TTW212{1+cos[πTW(|t|TTW2)]}, TTW2|t|T+TW20, otherwise

ここで、

  • T は、保護間隔を含む OFDM シンボル区間を表します。

  • TW は、ウィンドウの区間を表します。

ウィンドウの長さを適切に設定することにより、巡回サフィックスの長さを調整します。サフィックスの長さは、1 から最小巡回プレフィックス長までの範囲内に設定します。ウィンドウ処理はスペクトル再成長を緩和しますが、その一方でマルチパス フェージング耐性が低下します。これは、円滑化のために保護帯域サンプル値が犠牲になり、その結果、保護帯域の冗長性が低下するためです。

次の図に、レイズド コサイン ウィンドウ処理の使用例を示します。

参考文献

[1] Dahlman, E., S. Parkvall, and J. Skold. 4G LTE/LTE-Advanced for Mobile Broadband. London: Elsevier Ltd., 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 で導入