ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

グレイ符号 8-PSK

この例では、Communications System object を使用したグレイ符号 8 相位相シフト キーイング (8-PSK) 変調による通信システムを示します。グレイ符号化は、ビット誤り率を最小限に抑えるためにマルチレベル変調方式で頻繁に使用される手法です。この手法では、隣接するシンボルのバイナリ表現が 1 ビットだけ異なるように変調シンボルを順序付けます。

はじめに

この例では、8-PSK 手法を使用してデータを変調します。データは AWGN チャネルを通過し、8-PSK 復調器を使用して復調されます。誤り率計算機 System object は、シンボル誤り率とビット誤り率を計算します。

この通信システムでは、PSK 変調器 System object は次のように動作します。

  • 0 から M – 1 までの整数を表すバイナリ値入力を受け入れます。M は変調次数であり、8-PSK 変調の場合は 8 と等しくなります。

  • グレイ符号化の順序付けを使用して、バイナリ表現をコンスタレーション点に割り当てます。

  • 0 から 2π(M – 1)/M までの等間隔の位相をもつ、単位振幅の複素フェーザ出力を生成します。

次の表は、入力内のバイナリ表現と出力内のフェーザとの関係を示しています。表の 2 列目は、System object による計算で使用される中間表現です。

変調器入力グレイ符号化された順序変調器出力
0000exp(0)
0011exp(jπ/4)
0103exp(j3π/4)
0112exp(jπ/2) = exp(j2π/4)
1007exp(j7π/4)
1016exp(j3π/2) = exp(j6π/4)
1104exp(jπ) = exp(j4π/4)
1115exp(j5π/4)

次の表は、上の表の最初の 2 列を出力値に従って並べ替えたものです。このように並べ替えると、隣接するシンボルの差が 1 ビットしかないことが明らかになります。次の図では、表の 2 列目の数値が反時計回りの順序で並んでいます。

変調器出力変調器入力
exp(0)000
exp(jπ/4)001
exp(jπ/2) = exp(j2π/4)011
exp(j3π/4)010
exp(jπ) = exp(j4π/4)110
exp(j5π/4)111
exp(j3π/2) = exp(j6π/4)101
exp(j7π/4)100

初期化

コードのこのセクションでは、システム変数を初期化します。また、この例で使用される System object を作成して構成します。

8-PSK 変調の場合は、変調次数を 8 に設定します。指定したビット誤りの最大数 (maxNumErrs) またはビットの最大数 (maxNumBits) に達するまで、シミュレーションを実行します。このシミュレーションは、ビット エネルギーとノイズ パワー スペクトル密度の比 (Eb/No) の値に対して反復して実行されます。

M = 8;                    % Modulation order
SamplesPerFrame = 10000;  % Symbols processed for each iteration of the
                          % stream processing loop

% Initialize variables used to determine when to stop processing bits
maxNumErrs=100;
maxNumBits=1e8;

% Since the AWGN Channel as well as the RANDI function uses the default
% random stream, the following commands are executed so that the results
% will be repeatable, i.e. same results will be obtained for every run of
% the example. The default stream will be restored at the end of the
% example.
prevState = rng;
rng(529558);

整数からビットへの変換器 (hInt2Bit) System object とビット-整数変換器 (hBit2Int) System object を作成して、ランダムに生成された整数データをビットに変換し、復調されたデータ ビットを整数に変換します。

hInt2Bit = comm.IntegerToBit('BitsPerInteger',log2(M), ...
                    'OutputDataType','uint8');
hBit2Int = comm.BitToInteger('BitsPerInteger',log2(M), ...
                    'OutputDataType','uint8');

PSK 変調器 (hMod) System object を作成して構成し、バイナリ入力データを 8-PSK グレイ符号コンスタレーションと、一致した PSK 復調器 (hDemod) System object に割り当てます。

hMod = comm.PSKModulator('ModulationOrder',M, ...
                    'SymbolMapping','gray', ...
                    'PhaseOffset',0, ...
                    'BitInput',true);
hDemod = comm.PSKDemodulator('ModulationOrder',M, ...
                    'SymbolMapping','gray', ...
                    'PhaseOffset',0, ...
                    'BitOutput',true, ...
                    'OutputDataType','uint8', ...
                    'DecisionMethod','Hard decision');

AWGN チャネルの System object を作成して、加法性ホワイト ガウス ノイズを変調信号に追加します。ストリーム処理ループのビット エネルギーとノイズ パワー スペクトル密度の比を指定するように、このノイズ手法が適切に選択されます。PSK 変調器は 1 W の電力でシンボルを生成するので、AWGN チャネルの信号強度プロパティも 1 に設定されます。

hChan = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Eb/No)', ...
                    'BitsPerSymbol',log2(M), ...
                    'SignalPower',1);

シンボル誤り率計算機 (hSymError) System object とビット誤り率計算機 (hBitError) System object を作成し、復調された整数およびビット データと元のソース データを比較します。この比較により、シンボル誤りおよびビット誤りの統計値が生成されます。誤り率計算機 System object の出力は、計算された誤り率、観測された誤り数、および処理されたデータ量から構成された 3 要素ベクトルになります。シミュレーションでは hBitError で生成された 3 要素ベクトルを使用して、シミュレーションを停止するタイミングを決定します。

hSymError = comm.ErrorRate;
hBitError = comm.ErrorRate;

ストリーム処理ループ

コードのこのセクションでは、データが 8-PSK 変調を使用してグレイ符号化、変調、および復調される処理ループを呼び出します。このループは、0 ~ 12 dB の範囲の Eb/No 値について 2 dB 刻みで通信システムをシミュレートします。

% For each Eb/No value, simulation stops when either the maximum number of
% errors (maxNumErrs) or the maximum number of bits (maxNumBits) processed
% by the bit error rate calculator System object is reached.
EbNoVec = 0:2:12;                             % Eb/No values to simulate
SERVec = zeros(size(EbNoVec));                % Initialize SER history
BERVec = zeros(size(EbNoVec));                % Initialize BER history
for p = 1:length(EbNoVec)
  % Reset System objects
  reset(hSymError);
  reset(hBitError);
  hChan.EbNo = EbNoVec(p);
  % Reset SER / BER for the current Eb/No value
  SER = zeros(3,1);                           % Symbol Error Rate
  BER = zeros(3,1);                           % Bit Error Rate
  while (BER(2)<maxNumErrs) && (BER(3)<maxNumBits)
    % Generate random data
    txSym = randi([0 M-1], SamplesPerFrame, 1, 'uint8');
    txBits = step(hInt2Bit, txSym);           % Convert symbols to bits
    tx = step(hMod, txBits);                  % Modulate
    rx = step(hChan, tx);                     % Add white Gaussian noise
    rxBits = step(hDemod, rx);                % Demodulate
    rxSym = step(hBit2Int, rxBits);           % Convert bits back to symbols

    % Calculate error rate
    SER = step(hSymError, txSym, rxSym);      % Symbol Error Rate
    BER = step(hBitError, txBits, rxBits);    % Bit Error Rate
  end
  % Save history of SER and BER values
  SERVec(p) = SER(1);
  BERVec(p) = BER(1);
end

クリーンアップ

既定のストリームを復元します。

rng(prevState)

まとめ

この例で生成されたデータを解析して、理論上の性能とシミュレーションでの性能を比較します。MPSK の理論上のシンボル誤り確率は次のとおりです。

PE(M)=erfc(EsN0sin(πM))

ここで、erfc は相補誤差関数、Es/N0 はノイズ パワー スペクトル密度に対するシンボルのエネルギーの比、M はシンボルの数です。

ビット誤り確率を調べるには、シンボル誤り確率 (PE) をビット誤り確率に変換します。シンボル誤り確率をビット誤り確率に変換するための一般的な式はありませんが、上限と下限を設定するのは簡単です。実際のビット誤り確率 (Pb) は、次の範囲内にあるものとして表されます。

PE(M)log2MPbM/2M1PE(M)

下限は、シンボルにグレイ符号化が行われた場合に相当します。上限は、純粋な 2 進符号化の場合に相当します。

次のスクリプトは、理論上のシンボル誤り確率およびビット誤り確率と共に、シミュレートされたシンボル誤り率 (SERVec) とビット誤り率 (BERVec) をプロットします。

理論上の誤り確率を計算します。

[theorBER, theorSER] = berawgn(EbNoVec, 'psk', M, 'nondiff');

結果をプロットします。

figure;
semilogy(EbNoVec,SERVec,'o',   EbNoVec,BERVec,'*', ...
         EbNoVec,theorSER,'-', EbNoVec,theorBER,'-');
legend  ( 'Symbol error rate',              'Bit error rate', ...
          'Theoretical Symbol error rate',  'Theoretical Bit error rate', ...
          'Location','SouthWest');
xlabel  ( 'Eb/No (dB)' ); ylabel( 'Error Probability' );
title   ( 'Symbol and Bit Error Probability' );   grid on;

追加の演習として、Constellation ordering パラメーターが 'Gray' ではなく 'Binary' となるように、PSK 変調器 System object と PSK 復調器 System object を変更することによって、グレイ符号化と純粋な 2 進符号化を比較することもできます。このプロパティを設定してシミュレーションを再実行すると、次のような結果が生成されます。

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