Main Content

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

MATLAB を使用した 16-QAM の調査

この例では、ベースバンド変調器、チャネル、復調器で構成される通信リンクを使用してバイナリ データ ストリームを処理する方法を示します。この例では、ランダム データの一部をステム プロットで表示し、送信信号と受信信号をコンスタレーション ダイアグラムで表示し、ビット エラー レート (BER) を計算します。この通信リンクにパルス整形フィルターを追加するには、16-QAM 信号でのパルス整形の使用の例を参照してください。パルス整形フィルターを適用した通信リンクに前方誤り訂正を追加するには、16-QAM 信号での前方誤り訂正の使用の例を参照してください。

ランダムな信号の変調

変調方式にベースバンド 16-QAM を使用し、信号が加法性ホワイト ガウス ノイズ (AWGN) チャネルを通過するようにします。基本のシミュレーション操作として、Communications Toolbox™ および MATLAB® の次の関数を使用します。

  • rng — 乱数発生の制御

  • randi — ランダムなバイナリ データ ストリームの生成

  • bit2int — バイナリ データから整数値のシンボルへの変換

  • qammod — 16-QAM を使用した変調

  • comm.AWGNChannel — AWGN を使用した送信データの劣化

  • scatterplot — コンスタレーション ダイアグラムの作成

  • qamdemod — 16-QAM を使用した復調

  • int2bit — 整数値のシンボルからバイナリ データへの変換

  • biterr — システムの BER の計算

ランダムなバイナリ データ フレームの生成

MATLAB で信号を表すための通常の形式は、ベクトルまたは行列です。関数 randi でバイナリ データ ストリームの値を含む列ベクトルを作成します。バイナリ データ ストリームの長さ (すなわち、列ベクトル内の行数) は 30,000 に設定されます。

パラメーターを定義します。

M = 16;      % Modulation order (alphabet size or number of points in signal constellation)
k = log2(M); % Number of bits per symbol
n = 30000;   % Number of bits to process
sps = 1;     % Number of samples per symbol (oversampling factor)

例で結果を繰り返し再現できるように、関数 rng を既定の状態または静的なシード値に設定します。その後、関数 randi を使用してランダムなバイナリ データを生成します。

rng default;
dataIn = randi([0 1],n,1); % Generate vector of binary data

ステム プロットを使用してランダムなバイナリ データ ストリームの最初の 40 ビットのバイナリ値を表示します。関数 stem の呼び出しでコロン (:) 演算子を使用してバイナリ ベクトルの一部を選択します。

stem(dataIn(1:40),'filled');
title('Random Bits');
xlabel('Bit Index');
ylabel('Binary Value');

Figure contains an axes object. The axes object with title Random Bits contains an object of type stem.

バイナリ データから整数値のシンボルへの変換

関数 qammod の既定の構成では、変調する入力シンボルとして整数値データが想定されています。この例では、関数 qammod を使用する前にバイナリ データ ストリームを前処理して整数値にします。具体的には、関数 bit2int を使用して 4 組ずつ、範囲 [0, (M–1)] 内の対応する整数に変換します。この例では、変調次数 M は 16 です。

k=log2(M) で定義されるシンボルごとのビット数を判定して、ビットからシンボルへのマッピングを実行します。その後、関数 bit2int を使用して 4 組ずつ整数値に変換します。

dataSymbolsIn = bit2int(dataIn,k);

最初の 10 個のシンボルをステム プロットにプロットします。

figure;                    % Create new figure window.
stem(dataSymbolsIn(1:10));
title('Random Symbols');
xlabel('Symbol Index');
ylabel('Integer Value');

Figure contains an axes object. The axes object with title Random Symbols contains an object of type stem.

16-QAM を使用した変調

通常符号化されたバイナリとグレイ符号化されたバイナリのビットをシンボルにマッピングするために、関数 qammod を使用して、位相オフセットがゼロの 16-QAM 変調を dataSymbolsIn 列ベクトルに適用します。

dataMod = qammod(dataSymbolsIn,M,'bin'); % Natural-encoded binary
dataModG = qammod(dataSymbolsIn,M);      % Gray-encoded binary

この変調処理により、16-QAM 信号コンスタレーションの要素となる値が格納された複素数列ベクトルが出力されます。この例では、この後に示すコンスタレーション ダイアグラムで通常とグレイのバイナリ シンボル マッピングを表示します。

変調関数の詳細については、デジタル変調を参照してください。位相シフト キーイング (PSK) 変調でグレイ符号化を使用する例については、グレイ符号化された 2 値符号の順序を参照してください。

ホワイト ガウス ノイズの追加

変調された信号は、関数 awgn を使用して、指定された S/N 比 (SNR) でチャネルを通じて渡されます。ノイズ パワー スペクトル密度に対する 1 ビットあたりのエネルギーの比 (Eb/N0) を関数 awgn で使用する SNR 値に変換します。変数 sps は、この例では重要な役割を果たすわけではありませんが、使用するとパルス整形を使用する場合の例の拡張が簡単になります。詳細は、16-QAM 信号でのパルス整形の使用の例を参照してください。

チャネルの Eb/N0 が 10 dB である場合の SNR を計算します。

EbNo = 10;
snr = EbNo+10*log10(k)-10*log10(sps);

通常の符号とグレイ符号のバイナリ シンボル マッピングのために、AWGN チャネル経由で信号を渡します。

receivedSignal = awgn(dataMod,snr,'measured');
receivedSignalG = awgn(dataModG,snr,'measured');

コンスタレーション ダイアグラムの作成

関数 scatterplot を使用して、変調した信号 dataMod とチャネルの後に受信したノイズ信号の同相成分と直交成分を表示します。AWGN の影響がコンスタレーション ダイアグラムに表示されます。

sPlotFig = scatterplot(receivedSignal,1,0,'g.');
hold on
scatterplot(dataMod,1,0,'k*',sPlotFig)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot contains 2 objects of type line. This object represents Channel 1.

16-QAM の復調

関数 qamdemod を使用して、受信データを復調し、整数値データ シンボルを出力します。

dataSymbolsOut = qamdemod(receivedSignal,M,'bin'); % Natural-encoded binary data symbols
dataSymbolsOutG = qamdemod(receivedSignalG,M);     % Gray-coded binary data symbols

整数値のシンボルからバイナリ データへの変換

関数 int2bit を使用して、QAM 復調器から通常符号化されたデータ シンボルを (Nsym×Nbits/sym) の長さのバイナリ ベクトルに変換します。Nsym は QAM シンボルの合計数、Nbits/sym はシンボルごとのビット数です。16-QAM の場合は Nbits/sym = 4 です。グレイ符号化されたシンボルに対して処理を繰り返します。

この例で前に実行したビットからシンボルへのマッピングを元に戻します。

dataOut = int2bit(dataSymbolsOut,k);
dataOutG = int2bit(dataSymbolsOutG,k);

システム BER の計算

関数 biterr を使用して、元のバイナリ データ ストリーム dataIn と受信したデータ ストリーム dataOut および dataOutG からビット誤り統計を計算します。グレイ符号化によって BER が大幅に減少しています。

エラー レート関数を使用して誤り統計を計算します。関数 fprintf を使用して結果を表示します。

[numErrors,ber] = biterr(dataIn,dataOut);
fprintf('\nThe binary coding bit error rate is %5.2e, based on %d errors.\n', ...
    ber,numErrors)
The binary coding bit error rate is 2.27e-03, based on 68 errors.
[numErrorsG,berG] = biterr(dataIn,dataOutG);
fprintf('\nThe Gray coding bit error rate is %5.2e, based on %d errors.\n', ...
    berG,numErrorsG)
The Gray coding bit error rate is 1.63e-03, based on 49 errors.

コンスタレーションのプロット

コンスタレーション ダイアグラムには、以前に QAM コンスタレーションでプロットした点が表示されていますが、そのときはシンボル値とコンスタレーション点の間のマッピングは示していませんでした。この節では、コンスタレーション ダイアグラムで通常の符号化とグレイ符号化のバイナリ データからコンスタレーション点へのマッピングを示します。

16-QAM コンスタレーションにおける通常の符号とグレイ符号のバイナリ シンボル マッピングの表示

通常の符号のバイナリ シンボル マッピングとグレイ符号のシンボル マッピングを使用して、一連のすべてのコンスタレーション点に 16-QAM 変調を適用します。

M = 16;                       % Modulation order
x = (0:15);                   % Integer input
symbin = qammod(x,M,'bin');   % 16-QAM output (natural-coded binary)
symgray = qammod(x,M,'gray'); % 16-QAM output (Gray-coded)

関数 scatterplot を使用して、コンスタレーション ダイアグラムをプロットし、コンスタレーション点の通常のバイナリ表現 (赤) とグレイのバイナリ表現 (黒) で注釈を付けます。

scatterplot(symgray,1,0,'b*');
for k = 1:M
    text(real(symgray(k)) - 0.0,imag(symgray(k)) + 0.3,...
        dec2base(x(k),2,4));
     text(real(symgray(k)) - 0.5,imag(symgray(k)) + 0.3,...
         num2str(x(k)));
    
    text(real(symbin(k)) - 0.0,imag(symbin(k)) - 0.3,...
        dec2base(x(k),2,4),'Color',[1 0 0]);
    text(real(symbin(k)) - 0.5,imag(symbin(k)) - 0.3,...
        num2str(x(k)),'Color',[1 0 0]);
end
title('16-QAM Symbol Mapping')
axis([-4 4 -4 4])

Figure Scatter Plot contains an axes object. The axes object with title 16-QAM Symbol Mapping contains 65 objects of type line, text. This object represents Channel 1.

プロットの確認

グレイ符号のコンスタレーション点は隣接する各近傍点と 1 ビットしか違いがないため、グレイ符号のシンボル マッピングを使用すると BER 性能が向上します。通常の符号のバイナリ シンボル マッピングでは、隣接するコンスタレーション点のうち、2 つのビットが異なるものがあります。たとえば、通常の符号における 1 のバイナリ値 (0 0 0 1) と 2 のバイナリ値 (0 0 1 0) は 2 つのビットが異なっています (3 番目と 4 番目のビット)。

関連するトピック