このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
直交周波数分割多重変調
直交周波数分割多重 (OFDM) 変調は、複数の搬送波周波数でデジタル データを符号化する線形ベースバンド変調方式です。送信機は、逆高速フーリエ変換 (IFFT) を使用して、近接した複数の直交サブキャリア信号をオーバーラップ スペクトルと結合 (変調) し、データを並列に伝送します。受信機は FFT を使用して信号を復調します。
Communications Toolbox™ ソフトウェアには、以下の変調関数と復調関数、System object、および OFDM 変調をモデル化するためのブロックが含まれています。
関数 | System object | ブロック |
---|---|---|
OFDM
Proakis ([2]) で説明されているように、N 個のサブチャネルをもつ OFDM システムでは、全帯域幅 W を使用し、OFDM と同じレートでデータを送信する単一搬送波システムのシンボル レートに対して、シンボル レート 1/T が N 分の 1 に減少します。したがって、OFDM システムのシンボル間隔は T = NTs になります。ここで、Ts は単一搬送波システムのシンボル間隔です。十分に大きな N を選択することにより、シンボル区間 T をチャネル時間分散の持続時間より大幅に大きく取ることができます。したがって、N の選択によって符号間干渉が小さくなるように強制できます。つまり、各サブチャネルは固定の周波数応答 C(fk), k = 0, 1, . . . , N - 1 をもつように見えます。
OFDM 変調の例
以下の例では、OFDM 変調方式を示します。
ユーザー指定のパイロット インデックスを使用する OFDM の適用
直交周波数分割多重 (OFDM) 変調器と復調器のペアを構築し、それらのパイロット インデックスを指定します。OFDM 変調器 System object™ では、オブジェクト関数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
2 つのアンテナで空間的に多重化された QPSK 信号への OFDM の適用
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 変調を実行します。
qpskSig(:,:,1) = pskmod(ant1,M); qpskSig(:,:,2) = pskmod(ant2,M); y1 = ofdmmod(qpskSig,nfft,cplen,nullIdx,pilotIdx,pilots);
参照
[1] IEEE Standard 802.16-2017. "Part 16: Air Interface for Broadband Wireless Access Systems." March 2018.
[2] Proakis, John G. Digital Communications. 5th ed. New York: McGraw Hill, 2007.
参考
関数
オブジェクト
comm.RaisedCosineTransmitFilter
|comm.RaisedCosineReceiveFilter
|comm.OFDMModulator
|comm.OFDMDemodulator
ブロック
- Raised Cosine Transmit Filter | Raised Cosine Receive Filter | OFDM Modulator Baseband | OFDM Demodulator Baseband