Main Content

comm.OFDMModulator

OFDM 法を使用した変調

説明

comm.OFDMModulator System object™ は、直交周波数分割多重 (OFDM) 法を使用して周波数領域信号を変調します。詳細については、直交周波数分割多重を参照してください。出力は、OFDM 変調信号のベースバンド表現です。

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

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

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

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

作成

説明

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

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

ofdmMod = comm.OFDMModulator(ofdmDemod) は、指定されたcomm.OFDMDemodulator オブジェクトに基づいて、OFDM 変調器オブジェクトのプロパティを設定します。

プロパティ

すべて展開する

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

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

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

FFT 点の数。正の整数スカラーとして指定します。FFT の長さは、8 以上で、かつサブキャリアの数と等しくなければなりません。

左右のガード バンドに割り当てられるサブキャリアの数。2 行 1 列の整数ベクトルとして指定します。左右のガードバンド サブキャリアの数 [NleftG; NrightG] は、[0,⌊NFFT / 2 ⌋ − 1] の範囲内でなければなりません。ここで、NFFT は、OFDM 信号に含まれるサブキャリアの総数で、FFTLength によって指定されます。詳細については、サブキャリアの割り当て、ガード バンド、およびガード インターバルを参照してください。

null DC サブキャリアを挿入するオプション。数値または logical を使用して、0 (false) または 1 (true) として指定します。挿入した null DC サブキャリアは、周波数帯域の中心に配置され、次のインデックス値をもちます。

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

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

NFFT は、OFDM 信号に含まれるサブキャリアの総数で、FFTLength によって指定されます。

パイロット サブキャリアを入力するオプション。数値または logical を使用して、0 (false) または 1 (true) として指定します。このプロパティを設定する場合、次のようになります。

  • false — 入力データ X にパイロット情報が組み込まれますが、パイロット サブキャリアのインデックスは割り当てられません。

  • true — オブジェクトは、入力引数 pilot で指定された位置にあるパイロット信号を変調するため、PilotCarrierIndices で指定されたサブキャリアを割り当てます。

パイロット サブキャリアの位置を表すインデックス。次の範囲の整数要素値から成る列ベクトル、行列、または 3 次元配列として指定します。

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

ここで、NFFT はサブキャリアの総数で、FFTLength によって指定されます。また、NleftG と NrightG は左右のガード バンドで、NumGuardBandCarriers によって指定されます。

NPilot 個のパイロット キャリア インデックスを、各シンボルについて同じサブキャリアに割り当てることも、NSym 個の異なるサブキャリアに割り当てることもできます。また、このインデックスを NT 個の送信アンテナに割り当てることができます。

  • パイロット インデックスがすべてのシンボルと送信アンテナで同じ場合、プロパティの次元は NPilot-by-1 になります。

  • パイロット インデックスがシンボルによって異なる場合、プロパティの次元は NPilot-by-NSym になります。

  • 入力 pilot に含まれるシンボルは 1 つだけだが、オブジェクトの構成では複数の送信アンテナが割り当てられている場合、プロパティの次元は NPilot-by-1-by-NT になります。

  • インデックスがシンボルの数と送信アンテナの数で異なる場合、プロパティの次元は NPilot-by-NSym-by-NT となります。

ヒント

複数の送信アンテナによる送信間の干渉を最小限にするため、各シンボルに割り当てるパイロット インデックスをアンテナ間で一意にしなければなりません。

依存関係

このプロパティは、PilotInputPort1 に設定した場合に適用されます。

各 OFDM シンボルのサイクリック プレフィックス長。正の整数スカラー、または NumSymbols 個の要素から成る行ベクトルとして指定します。サイクリック プレフィックス長を指定する場合、次のようになります。

  • スカラー — サイクリック プレフィックス長はすべてのアンテナのすべてのシンボルで同じになります。

  • 行ベクトル — サイクリック プレフィックス長をシンボルごとに変えることができますが、アンテナごとに変えることはできません。

OFDM シンボル間にレイズド コサイン ウィンドウ処理を適用するオプション。数値または logical を使用して、0 (false) または 1 (true) として指定します。

スペクトル再成長によって生じる帯域外サブキャリアの強度を弱めるには、ウィンドウ処理を適用します。詳細については、OFDM レイズド コサイン ウィンドウ処理を参照してください。

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

依存関係

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

オーバーサンプリング係数。正のスカラーとして指定します。オーバーサンプリング係数は次の制約を満たさなければなりません。

  • (OversamplingFactor×FFTLength) は整数値でなければならない。

  • (OversamplingFactor×CyclicPrefixLength) は整数値でなければならない。

  • Windowingtrue に設定した場合、(OversamplingFactor×WindowLength) は整数値でなければならない。

ヒント

オーバーサンプリング係数を無理数に設定する場合は、分数値を指定します。たとえば、FFT 長が 12 で、オーバーサンプリング係数が 4/3 の場合、その積は整数の 16 となります。しかし、オーバーサンプリング係数の設定時に 4/31.333 に丸めると、その積が非整数の 15.9960 になり、このコードはエラーとなります。

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

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

使用法

説明

Y = ofdmMod(X) は、OFDM メソッドを使用して周波数領域入力データのサブキャリアを変調し、OFDM 変調されたベースバンド信号を返します。

Y = ofdmMod(data,pilot) は、PilotCarrierIndices で指定された周波数サブキャリアにパイロット信号 pilot を割り当てます。この構文を有効にするには、PilotInputPort プロパティを true に設定します。

入力引数

すべて展開する

入力ベースバンド信号。NData-by-NSym-by-NT の配列として指定します。

  • NData はデータ サブキャリアの数。詳細については、オブジェクト関数 info を参照してください。

  • NSym はシンボルの数。NumSymbols によって指定される。

  • NT は送信アンテナの数。NumTransmitAntennnas によって指定される。

詳細については、サブキャリアの割り当て、ガード バンド、およびガード インターバルを参照してください。

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

パイロット信号。NPilot×NSym×NT の配列として指定します。

  • NPilot は各シンボルのパイロット サブキャリアの数。size(PilotCarrierIndices,1) によって指定される。

  • NSym は OFDM シンボルの数。NumSymbols によって指定される。

  • NT は送信アンテナの数。NumTransmitAntennnas によって指定される。

詳細については、サブキャリアの割り当て、ガード バンド、およびガード インターバルを参照してください。

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

出力引数

すべて展開する

OFDM 変調されたベースバンド信号。入力信号と同じデータ型の (NCPTotal + NFFT × NSym)-by-NT の行列として返されます。

  • NCPTotal は、すべてのシンボルのサイクリック プレフィックス長です。

  • NFFT はサブキャリアの数で、FFTLength によって決定されます。

  • NSym はシンボルの数で、NumSymbols によって決定されます。

  • NT は送信アンテナの数で、NumTransmitAntennnas によって決定されます。

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

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

ofdmMod = comm.OFDMModulator
ofdmMod = 
  comm.OFDMModulator with properties:

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

サブキャリアとシンボルの数を変更します。サブキャリアの数とシンボルの数が変更されたことを確認します。オブジェクト関数infoを使用して、入力信号と出力信号の次元を表示します。

ofdmMod.FFTLength = 128;
ofdmMod.NumSymbols = 2
ofdmMod = 
  comm.OFDMModulator with properties:

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

info(ofdmMod)
ans = struct with fields:
    DataInputSize: [117 2]
       OutputSize: [288 1]

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

showResourceMapping(ofdmMod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes object. The axes object with title OFDM Subcarrier Mapping for All Tx Antennas, xlabel OFDM Symbols, ylabel Subcarrier Indices contains an object of type image.

オブジェクトを更新します。つまり、DC null を追加し、パイロット入力引数を有効にします。更新後のオブジェクトの構成を表示します。オブジェクト関数 showResourceMapping を使用して、更新後のリソース マッピングを表示します。オブジェクト関数 info を使用して、更新後の入力信号と出力信号の次元を表示します。更新後の入力と出力の次元を見ると、オブジェクトの構成が変更されていることがわかります。特に、オブジェクト実行時にパイロット サブキャリアを与えなければならないことがわかります。

ofdmMod.InsertDCNull = 1;
ofdmMod.PilotInputPort = 1
ofdmMod = 
  comm.OFDMModulator with properties:

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

info(ofdmMod)
ans = struct with fields:
     DataInputSize: [112 2]
    PilotInputSize: [4 2]
        OutputSize: [288 1]

showResourceMapping(ofdmMod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes object. The axes object with title OFDM Subcarrier Mapping for All Tx Antennas, xlabel OFDM Symbols, ylabel Subcarrier Indices contains an object of type image.

構成済みの復調器を使用して変調器を作成することで、変調器と復調器のペアを必ず整合させることができます。

既定のプロパティ値を使用して 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 変調器と OFDM 復調器のプロパティを表示し、適用可能なプロパティが一致するか確認します。

disp(ofdmMod)
  comm.OFDMModulator with properties:

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

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

オブジェクト関数showResourceMappingは、送信アンテナごとの時間周波数リソース マッピングを表示します。

OFDM 変調器を作成します。

ofdmMod = comm.OFDMModulator;

オブジェクト関数 showResourceMapping を適用します。

showResourceMapping(ofdmMod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes object. The axes object with title OFDM Subcarrier Mapping for All Tx Antennas, xlabel OFDM Symbols, ylabel Subcarrier Indices contains an object of type image.

DC null を挿入します。

ofdmMod.InsertDCNull = true;

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

showResourceMapping(ofdmMod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes object. The axes object with title OFDM Subcarrier Mapping for All Tx Antennas, xlabel OFDM Symbols, ylabel Subcarrier Indices contains an object of type image.

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

2 つのシンボルを指定し、DC null を挿入して、OFDM 変調器オブジェクトを作成します。

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

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

ofdmMod.PilotInputPort = true;

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

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

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

showResourceMapping(ofdmMod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes object. The axes object with title OFDM Subcarrier Mapping for All Tx Antennas, xlabel OFDM Symbols, ylabel Subcarrier Indices contains an object of type image.

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

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

パイロット サブキャリア インデックスが 2 つのシンボル間で異なることを確認します。

showResourceMapping(ofdmMod)

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes object. The axes object with title OFDM Subcarrier Mapping for All Tx Antennas, xlabel OFDM Symbols, ylabel Subcarrier Indices contains 2 objects of type image, line.

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

ofdmMod.NumTransmitAntennas = 2;

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

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

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

showResourceMapping(ofdmMod)

Figure OFDM Subcarrier Mapping for Tx Antenna 1 contains an axes object. The axes object with title OFDM Subcarrier Mapping for Tx Antenna 1, xlabel OFDM Symbols, ylabel Subcarrier Indices contains an object of type image.

Figure OFDM Subcarrier Mapping for Tx Antenna 2 contains an axes object. The axes object with title OFDM Subcarrier Mapping for Tx Antenna 2, xlabel OFDM Symbols, ylabel Subcarrier Indices contains an object of type image.

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

5 つのシンボル、4 つ左保護帯域のサブキャリア、3 つの右保護帯域のサブキャリア、および各 OFDM シンボルのサイクリック プレフィックス長を指定して、OFDM 変調器を作成します。

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

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

disp(ofdmMod)
  comm.OFDMModulator with properties:

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

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

パイロット インデックス、DC null、2 つの送信アンテナをもつ OFDM 変調器オブジェクトを作成します。

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

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

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

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

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

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

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

modDim = info(ofdmMod);

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

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

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

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

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

modData = ofdmMod(dataIn,pilotIn);

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

ofdmDemod = comm.OFDMDemodulator(ofdmMod);

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

[dataOut, pilotOut] = ofdmDemod(modData);

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

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

4 倍のサンプル レートで生成されたデータおよびパイロットの入出力の OFDM 変調信号を、単入力単出力 (SISO) チャネルを通してフィルター処理します。チャネルでフィルター処理した信号を復調し、元の信号と比較します。

3 つのシンボルをもち、シンボルごとに異なるパイロット サブキャリア インデックスとサイクリック プレフィックス長が設定された OFDM 復調器オブジェクトを作成します。

ofdmDemod = comm.OFDMDemodulator( ...
    NumGuardBandCarriers=[9;8], ...
    RemoveDCCarrier=true, ...
    PilotOutputPort=true, ...
    PilotCarrierIndices=[[12;26;40;54],[14;28;38;52],[12;26;40;54]], ...
    CyclicPrefixLength=[16 32 16], ...
    OversamplingFactor=4, ...
    NumSymbols=3);

OFDM 変調器 System object を OFDM 復調器オブジェクト ofdmDemod から作成します。

ofdmMod = comm.OFDMModulator(ofdmDemod);

オブジェクト関数showResourceMappingを使用して、データ、パイロット、ガード バンド、および null 信号について構成されたサブキャリア リソースのマッピングを表示します。オブジェクト関数infoを使用して、入力と出力の次元情報を取得します。

showResourceMapping(ofdmDemod);

Figure OFDM Subcarrier Mapping for All Tx Antennas contains an axes object. The axes object with title OFDM Subcarrier Mapping for All Tx Antennas, xlabel OFDM Symbols, ylabel Subcarrier Indices contains 3 objects of type image, line.

modDim = info(ofdmMod);

ランダム データとパイロットの入力を作成し、QAM 変調を適用します。

M = 16;
xd  = randi([0 M-1],modDim.DataInputSize);
dataIn = qammod(xd,M,UnitAveragePower=true);
xp = randi([0 M-1],modDim.PilotInputSize);
pilotIn = qammod(xp,M,UnitAveragePower=true);

データとパイロットの QAM 信号に対し、OFDM 変調を適用します。AWGN チャネルを通して信号をフィルター処理します。データとパイロットのシンボルを復元するため、OFDM 復調を適用してから QAM 復調を適用します。

modOut = ofdmMod(dataIn,pilotIn);
chanOut = awgn(modOut,20,"measured");
[dataOut, pilotOut] = ofdmDemod(chanOut);
yd = qamdemod(dataOut,M,UnitAveragePower=true);
yp = qamdemod(pilotOut,M,UnitAveragePower=true);

この処理によってデータとパイロットが変わっていないことを確認します。

dataSame = isequal(xd,yd)
dataSame = logical
   1

pilotSame = isequal(xp,yp)
pilotSame = logical
   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", https://rfmw.em.keysight.com/wireless/helpfiles/n7617a/ofdm_raised_cosine_windowing.htm.

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

[5] IEEE Standard 802.16-2017. "Part 16: Air Interface for Broadband Wireless Access Systems." March 2018.

拡張機能

バージョン履歴

R2014a で導入

すべて展開する