Main Content

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

ofdmmod

直交周波数分割多重 (OFDM) を使用した周波数領域信号の変調

説明

ofdmSig = ofdmmod(inSym,nfft,cplen) は、nfft で指定された FFT サイズと cplen で指定された巡回プレフィックス長を使用して、周波数領域入力データ副搬送波 inSym で OFDM 復調を実行します。詳細については、OFDM 変調を参照してください。

ofdmSig = ofdmmod(inSym,nfft,cplen,nullidx) は、OFDM 変調を実行する前に、null 副搬送波を周波数領域入力データ信号に挿入します。null 副搬送波は、nullidx で指定された、1 ~ nfft のインデックス位置に挿入されます。この構文では、入力 inSym の行数は nfftlength(nullidx) でなければなりません。null 搬送波は、保護帯域と DC 副搬送波を考慮するために使用します。詳細については、副搬送波割り当て、保護帯域、および保護間隔を参照してください。

ofdmSig = ofdmmod(inSym,nfft,cplen,nullidx,pilotidx,pilots) は、OFDM 変調を実行する前に、null 副搬送波とパイロット副搬送波を周波数領域入力データ シンボルに挿入します。null 副搬送波は、nullidx で指定されたインデックス位置に挿入されます。パイロット副搬送波 pilots は、pilotidx で指定されたインデックス位置に挿入されます。この構文では、入力 inSym の行数は nfftlength(nullidx)length(pilotidx) でなければなりません。関数は、パイロット副搬送波の位置が各 OFDM シンボルと送信アンテナで同じと仮定します。

すべて折りたたむ

2 つの送信アンテナで完全にパックされた入力を OFDM 変調します。

入力パラメーターを初期化し、ランダム データを生成して、OFDM 変調を実行します。

nfft  = 128;
cplen = 16;
nSym  = 5;
nt    = 2;
dataIn = complex(randn(nfft,nSym,nt),randn(nfft,nSym,nt));

y1 = ofdmmod(dataIn,nfft,cplen);

null 副搬送波を割り当てる OFDM 変調を適用します。

入力パラメーターを初期化し、ランダム データを生成します。

M = 16; % Modulation order for 16QAM
nfft  = 64;
cplen = 16;
nSym  = 10;
nullIdx  = [1:6 33 64-4:64]';
numDataCarrs = nfft-length(nullIdx);
inSig = randi([0 M-1],numDataCarrs,nSym);

データを QAM 変調します。OFDM 変調を実行します。

qamSym = qammod(inSig,M,'UnitAveragePower',true);
outSig = ofdmmod(qamSym,nfft,cplen,nullIdx);

各シンボルに適用された巡回プレフィックス長が異なる入力周波数領域データ信号に OFDM 変調を実行します。

入力パラメーターを初期化し、ランダム データを生成します。

M = 16; % Modulation order for 16QAM
nfft  = 64;
cplen = [4 8 10 7 2 2 4 11 16 3];
nSym  = 10;
nullIdx  = [1:6 33 64-4:64]';
numDataCarrs = nfft-length(nullIdx);
inSig = randi([0 M-1],numDataCarrs,nSym);

データを QAM 変調します。OFDM 変調を実行します。

qamSym = qammod(inSig,M,'UnitAveragePower',true);
outSig = ofdmmod(qamSym,nfft,cplen,nullIdx);

2 つの送信アンテナで空間的に多重化された QPSK 信号に OFDM 変調を適用します。

入力パラメーターを初期化し、各アンテナ用のランダム データを生成します。

M = 4; % Modulation order for QPSK
nfft  = 64;
cplen = 16;
nSym  = 5;
nt    = 2;
nullIdx  = [1:6 33 64-4:64]';
pilotIdx = [12 26 40 54]';
numDataCarrs = nfft-length(nullIdx)-length(pilotIdx);
pilots = repmat(pskmod((0:M-1).',M),1,nSym,2);

ant1 = randi([0 M-1],numDataCarrs,nSym);
ant2 = randi([0 M-1],numDataCarrs,nSym);

アンテナごとに個別にデータを QPSK 変調します。OFDM 変調を実行します。

qpskSym(:,:,1) = pskmod(ant1,M);
qpskSym(:,:,2) = pskmod(ant2,M);
y1 = ofdmmod(qpskSym,nfft,cplen,nullIdx,pilotIdx,pilots);

null およびパイロット パッキングを指定して、データ入力を OFDM 変調します。

入力パラメーターを初期化し、null 副搬送波およびパイロット副搬送波の位置を定義します。ランダム データを生成して OFDM 変調を実行します。

nfft     = 64;
cplen    = 16;
nSym     = 10;

nullIdx  = [1:6 33 64-4:64]';
pilotIdx = [12 26 40 54]';

numDataCarrs = nfft-length(nullIdx)-length(pilotIdx);
dataIn = complex(randn(numDataCarrs,nSym),randn(numDataCarrs,nSym));
pilots = repmat(pskmod((0:3).',4),1,nSym);

y2 = ofdmmod(dataIn,nfft,cplen,nullIdx,pilotIdx,pilots);

入力引数

すべて折りたたむ

入力データ副搬送波。シンボルの ND x NSym x NT の配列として指定します。データ副搬送波の数 ND は、nfftlength(nullidx)length(pilotidx) と等しくなければなりません。NSym は、送信アンテナあたりの OFDM シンボル数、NT は送信アンテナ数です。

OFDM 変調器への入力データ シンボルは通常、qammod などのベースバンド デジタル変調器で作成されます。

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

FFT 長。8 以上の整数として指定します。nfft は、変調処理で使用される副搬送波の数に相当します。

データ型: double

巡回プレフィックス長。スカラーまたは長さ NSym の行ベクトルとして指定します。

  • cplen をスカラーとして指定した場合、巡回プレフィックス長はすべてのアンテナのすべてのシンボルで同じになります。

  • cplen を長さ NSym の行ベクトルとして指定した場合、巡回プレフィックス長はシンボルごとに変えられますが、アンテナ長はすべて同じ長さのままです。

詳細については、副搬送波割り当て、保護帯域、および保護間隔を参照してください。

データ型: double

null 副搬送波の位置のインデックス。1 ~ nfft の要素値をもつ列ベクトルとして指定します。

データ型: double

パイロット副搬送波の位置のインデックス。1 ~ nfft の要素値をもつ列ベクトルとして指定します。

データ型: double

パイロット副搬送波。シンボルの NPilot x NSym x NT の配列として指定します。NPilotpilotidx の長さに等しくなければなりません。NSym は、送信アンテナあたりの OFDM シンボルの数です。NT は、送信アンテナの数です。関数は、パイロット副搬送波の位置が各 OFDM シンボルと送信アンテナで同じと仮定します。OFDM シンボルまたはアンテナ間でパイロット副搬送波の位置を変えるには、comm.OFDMModulator を使用します。

データ型: double | single

出力引数

すべて折りたたむ

変調された OFDM シンボル。複素数シンボルの 2 次元配列として返されます。

  • cplen がスカラーである場合、配列サイズは ((nfft + cplen) × NSym) 行 NT 列です。

  • cplen が行ベクトルである場合、配列サイズは ((nfft × NSym) + sum(cplen)) 行 NT 列です。

    NSym は送信アンテナあたりのシンボル数、NT は送信アンテナ数です。

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

詳細

すべて折りたたむ

OFDM 変調

OFDM は、マルチキャリア変調方式のクラスに属しています。複数のデータ ストリームを複数の搬送波で同時に送信できるため、OFDM は単一搬送波変調と同じレベルでノイズによる影響を受けません。

OFDM 操作は、送信周波数帯を N 個の連続する個別に変調した副搬送波に分解して、高レートのデータ ストリームを低データ レートのサブストリームに分割します。複数の並列および直交副搬送波は、広帯域チャネルとほぼ同じ帯域幅でサンプルを伝送します。狭帯域の直交副搬送波を使用して、OFDM 信号は周波数選択性フェージング チャネルでロバスト性を獲得し、隣接副搬送波の干渉を排除します。低データ レートのサブストリームはチャネル遅延拡散よりシンボル区間が大きいため、符号間干渉 (ISI) が低減されます。

OFDM 波形における直交副搬送波の周波数領域表現は、次のようになります。

送信機は、逆高速フーリエ変換 (IFFT) を一度に N 個のシンボルに適用します。IFFT の出力は、N 個の直交正弦波の和です。

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

ここで、{Xk} はデータ シンボル、および T は OFDM シンボル時間です。データ シンボル Xk は通常複素数で、任意のデジタル変調アルファベット (たとえば、QPSK、16-QAM、64-QAM) に基づくものになります。

副搬送波間隔は Δf = 1/T で、次に示すように副搬送波はシンボル周期ごとに直交します。

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

OFDM 変調器は、シリアルからパラレルへの変換で構成され、それぞれが各 OFDM 副搬送波に対応する一連の N 個の複素数変調器が続きます。

副搬送波割り当て、保護帯域、および保護間隔

個々の OFDM 副搬送波は、データ、パイロット、または null 副搬送波として割り当てられます。

以下に示すとおり、副搬送波は、データ、DC、パイロット、または保護帯域の副搬送波として指定されています。

  • データ副搬送波は、ユーザー データを送信します。

  • パイロット副搬送波は、チャネル推定に使用されます。

  • null 副搬送波は、データを送信しません。データをもたない副搬送波は、DC null を提供して OFDM リソース ブロック間でバッファーとして機能するために使用されます。

    • null DC 副搬送波は、周波数帯域の中心であり、nfft が偶数の場合は (nfft/2 + 1)、nfft が奇数の場合は ((nfft + 1) / 2) のインデックス値をもちます。

    • 保護帯域は、連続する OFDM シンボル間のバッファーを提供し、符号間干渉を低減することで送信される信号の整合性を保護します。

null 副搬送波では、さまざまな 802.11 形式や LTE、WiMAX などの特定の規格またはカスタム割り当ての保護帯域と DC 副搬送波の位置をモデル化できます。null 副搬送波インデックスのベクトルを割り当てることで、null の位置を割り当てることができます。

保護帯域と同様に、保護間隔は、符号間干渉を低減することで送信信号の整合性を保護するために OFDM で使用されます。

保護間隔の割り当ては、保護帯域の割り当てに似ています。保護間隔をモデル化して、OFDM シンボル間に時間的な区切りを設けることができます。保護間隔は、時間分散チャネルを介して信号を渡した後にシンボル間の直交性を保持するうえで役立ちます。保護間隔は、巡回プレフィックスを使用して作成されます。巡回プレフィックスの挿入では、OFDM シンボルの最後部が次の OFDM シンボルの最前部としてコピーされます。

時間分散のスパンが巡回プレフィックスの期間を超えない限り、巡回プレフィックス挿入の効果は持続します。

巡回プレフィックスはデータ送信に使用される可能性のある帯域幅を占めるため、巡回プレフィックスの挿入によりユーザー データのスループットがわずかに低下します。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

R2018a で導入