ドキュメンテーション センター

  • 評価版
  • 製品アップデート

このページは前リリースの情報です。該当の英語のページはこのリリースで更新されています。このリリースの英語のドキュメンテーションを参照するには、言語設定を United States に変更してください。

離散マルチトーン信号

この例では、電話回線でデータとマルチメディア情報を送信するための非対称デジタル加入者回線 (ADSL) 技術の一部である離散マルチトーン (DMT) 信号技術を示します。

はじめに

DMT 技術では通信チャネルを 256 個の直交サブチャネル (またはトーン) に分割し、直交振幅変調 (QAM) メソッドを使用してサブチャネルごとに個別にデータを変調します。DMT 技術では、SNR に関して測定されたデータ品質に基づいて、異なる数のビットを各サブチャネルに割り当てます。

この例ではさまざまな Communications System Toolbox™ System object を使用して DMT システムをモデル化します。256 要素のベクトル b を読み込んで、サブチャネルごとのビット数を決定します。例では送信機における変調信号のスペクトルを表示し、システムのビット誤り率 (BER) を計算します。サブチャネル全体での異なる QAM コンスタレーション サイズの使用を説明するため、この例では QAM コンスタレーション正規化メソッドをシンボル間の最小距離に設定し、この距離を 2 に固定します。高次変調を行うサブチャネルは、送信信号のスペクトルで高い信号電力をもちます。またこの例では、DMT システムの BER 性能を SNR の関数として示します。このために、QAM コンスタレーションの平均電力を正規化します。

初期化

この節では、この例で使用する変数、System object およびスペクトル スコープを初期化します。変数 b は 256 要素ベクトルで、各要素は対応するサブチャネルに割り当てられるビット数を決定します。フレームあたりのビット数は b のすべての要素の合計になります。

load commdmt_bitalloc.mat;
numChan = length(b);
numBit = sum(b);

スクリプト configureDMTDemo.mconfigureDMTDemo.m は以下の System object を作成し、構成します。

hMod/hDemod     - Rectangular QAM Modulators/Demodulators
hIFFT/hFFT      - IFFT/FFT Transformation
hAWGNChan       - AWGN Channel
hErrorRateCalc  - Bit Error Rate Calculator

hMod と hDemod は、異なるコンスタレーション サイズの矩形 QAM 変調器と復調器の System object を含む 2 つの配列であることに注意してください。このスクリプトは、各サブチャネルの適正なインデックス (hMod では変調器インデックス、hDemod では復調器インデックス) を決定するのに使用する別の 256 要素ベクトル modPerChan を作成します。

またスクリプトはスペクトル スコープを設定し、変調と IFFT 変換の後での送信信号のスペクトルを表示します。

configureDMTDemo;

ストリーム処理ループ

以下のコードではループを使用してフレームごとにデータを処理します。反復ごとに乱数データ ビットを生成し、256 個の QAM 変調器で構成されている変調器バンクに送ります。送信機は、256 要素の変調出力とその共役対称の出力を追加して、512 点の共役対称の周波数領域ベクトルを取得します。IFFT System object はこのベクトルを時間領域の信号に変換します。システムは次にこの信号を AWGN チャネル経由で渡します。受信機は、512 点 FFT をチャネル出力に適用し、最初の 256 要素を抽出します。受信機はこれらの要素、つまり QAM 変調されたシンボルを復調器バンクに送信します。誤り率計算機 System object は送信されたビットと復調されたビットを比較し、BER を求めます。

rxMsg = zeros(numBit, 1);       % Random source bits per frame
txModData = zeros(numChan, 1);  % 256-element modulated signals

for frameIdx = 1:100            % 100 frames for simulation
    % Generate random bits
    txMsg = randi([0, 1], numBit, 1);

    % Modulate bits using QAM modulator bank
    bitIdx = 1;
    for chanIdx = 1:numChan
        thisMod = hMod{modPerChan(chanIdx)};            % Get next modulator
        msgData = txMsg(bitIdx:bitIdx+b(chanIdx)-1);    % Get next data bits
        txModData(chanIdx, 1) = step(thisMod, msgData); % Modulate data
        bitIdx  = bitIdx + b(chanIdx);                  % Advance bit index
    end

    % Pad modulation output by its conjugate symmetry and convert it by
    % IFFT transformation
    chanIn = step(hIFFT, [txModData; 0; conj(flipud(txModData(2:end)))]);

    % Update spectrum scope
    updateSpectrumDMTDemo;

    % Pass through AWGN channel
    chanOut = step(hAWGNChan, chanIn);

    % Extract the first half of FFT transformation output
    fftOut = step(hFFT, chanOut);
    rxModData = fftOut(1:end/2);

    % Demodulate FFT output using QAM demodulator bank
    bitIdx = 1;
    for chanIdx = 1:numChan
        if isreal(rxModData(chanIdx))
            demodIn = complex(rxModData(chanIdx));
        else
            demodIn = rxModData(chanIdx);
        end
        thisDemod = hDemod{modPerChan(chanIdx)};        % Get next demodulator
        demodBits = step(thisDemod, demodIn);           % Demodulate data
        rxMsg(bitIdx:bitIdx+b(chanIdx)-1, 1) = demodBits;
        bitIdx = bitIdx + b(chanIdx);                   % Advance bit index
    end

    % Calculate BER
    ber = step(hErrorRateCalc, txMsg, rxMsg);
end

% Display BER results
bitErrorRate     = ber(1)
numBitErrors     = ber(2)
numSimulatedBits = ber(3)
bitErrorRate =

    0.0022


numBitErrors =

   348


numSimulatedBits =

      160700

トーンあたりのビット数変数 b をプロットし、256 個のサブチャネル全体でのサブチャネルあたりのビット数の分布を示すと、ビット分布と送信信号のスペクトルが類似していることがわかります。サブチャネルのビット数が多いほど、その電力は大きくなります。これは、この例ではシンボル間の最小距離をすべてのサイズの QAM コンスタレーションに対して 2 に固定しているためです。

figure('Position', [0 0 500 400]); movegui('north');
axes('XLim',[1, numChan],'YLim',[1, 11]);
xlabel('Subchannel'); ylabel('Number of bits'); hold on; grid on;
title('Number of bits per subchannel');
plot(1:numChan, b);

BER の性能

対象の SNR 値の範囲に対して DMT システムの BER を求めるため、スクリプト simBERDMTDemo.msimBERDMTDemo.m を実行します。このシミュレーションでは QAM コンスタレーションの平均電力を実際のシステムと同様に正規化していることに注意してください。SNR 値を 39 ~ 60 dB の範囲で 3 dB 間隔で設定すると、次の図のような結果が得られます。

simBERDMTDemo;

まとめ

この例では、Communications System Toolbox™ System object を使用し、256 個のサブチャネル (またはトーン) で構成される DMT 通信システムをモデル化しました。例では、送信信号のスペクトルを表示し、ある範囲の SNR 値に対する BER の性能をシミュレートしました。シミュレーションのフレーム数を増やすことで、より正確な BER を求めることができます。

トーンあたりのビット数を決定する b ベクトルの要素数を変更することにより、この例をより詳しく検証することができます。QAM 変調器オブジェクトと QAM 復調器オブジェクトは b の要素数に応じて動的に生成されます。極端な場合、b の 256 個の要素がすべて同じ場合は変調器と復調器が最小の 1 個ずつになり、b の要素がすべて異なる場合は変調器と復調器がそれぞれ最大の 256 個になります。

付録

この例では以下のスクリプトが使用されています。

参考文献

[1] Maxwell, Kim, "Asymmetric Digital Subscriber Line:Interim Technology for the Next Forty Years," IEEE Communications Magazine, October 1996, pp. 100-106.

この情報は役に立ちましたか?