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

リード・ソロモン符号化パート II - パンクチャ

この例では、パンクチャド符号を使用するためのリード・ソロモン (RS) 符号化器/復号化器の設定方法を示します。符号化器は、その出力から特定のパリティ シンボルが常に除去されたパンクチャを生成できます。復号化器はパンクチャのパターンを認識し、パンクチャ位置にゼロを挿入し、これらのシンボルを消失として扱います。復号化器は符号化器が生成したパンクチャと受信機が生成した消失を、復号化する場合と同様に扱います。パンクチャは誤り訂正能力を多少低下させますが、符号化率をより柔軟にするメリットがあります。

この例に加え、「リード・ソロモン符号化パート I - 消失」の例では、消失を使用した (63,53) RS ブロック符号の矩形 64-QAM 通信システムを説明し、「リード・ソロモン符号化パート III - 短縮」の例では短縮符号を使用した RS ブロック符号化を説明しています。

はじめに

この例では、ランダム ソース、RS 符号化器、矩形 64-QAM 変調器、AWGN チャネル、矩形 64-QAM 復調器および RS 復号化器で構成される通信システムのシミュレーションを示します。これには、チャネルのビット誤り率 (BER) 性能と符号化された BER 性能の比較による、消失とパンクチャを使用した RS 符号化の解析が含まれます。この例では、矩形 QAM 変調器の入力と矩形 QAM 復調器の出力を比較してチャネルの BER を求め、RS 符号化器の入力と RS 復号化器の出力を比較して符号化された BER を求めます。

初期化

スクリプト ファイル RSCodingConfigExample は、矩形 64 QAM 変調器と復調器、AWGN チャネルおよび通信システムのシミュレーションに使用する誤り率測定 System object を構成します。スクリプトは符号化されていない Eb/N0 比を EbNoUncoded = 15 dB に設定し、目標の誤り数とビット送信の最大回数をそれぞれ 500 と 5×106に定義してシミュレーション停止条件を設定します。

RSCodingConfigExample

RS 符号化器/復号化器の構成

消失の復号化方法を紹介するために、「リード・ソロモン符号化パート I - 消失」の例で使用した 64-QAM 変調方式と協調して動作する、同じ (63,53) RS 符号を検討します。この例では、パンクチャド符号を使用するための RS 符号化器/復号化器の設定方法を示します。RS 復号化器は、受信機が生成した消失の復号化を行う他に、符号化器が生成したパンクチャを訂正できます。復号化のアルゴリズムはこれら 2 つのケースでまったく同一です。各符号語に対して、パンクチャと消失の合計は、符号の誤り訂正能力の 2 倍を超えることはできません。

N = 63;  % Codeword length
K = 53;  % Message length
numErasures = 6;
rsEncoder = comm.RSEncoder(N,K, 'BitInput', false);
rsDecoder = comm.RSDecoder(N,K, 'BitInput', false, 'ErasuresInputPort', true);

コードのパンクチャを有効にするには、PuncturePatternSource プロパティを 'Property' に、PuncturePattern プロパティを目的のパンクチャ パターン ベクトルに設定します。符号化器と復号化器とで、同じパンクチャ ベクトルを指定しなければなりません。この例では、各符号語から 2 つのシンボルをパンクチャします。パンクチャ パターン ベクトルの値 1 はパンクチャされていないシンボル、値 0 はパンクチャされたシンボルを示します。

numPuncs = 2;

rsEncoder.PuncturePatternSource = 'Property';
rsEncoder.PuncturePattern = [ones(N-K-numPuncs,1); zeros(numPuncs,1)];

rsDecoder.PuncturePatternSource = 'Property';
rsDecoder.PuncturePattern = rsEncoder.PuncturePattern;

ストリーム処理ループ

符号化されていない Eb/N0 比を 15 dB として、通信システムをシミュレートします。符号化されていない Eb/N0 は、システム内にコードがない場合でもチャネルの入力で測定できる比率です。

RS 符号化器によって生成された符号語の長さは、パンクチャ パターン ベクトルで指定されたパンクチャ数だけ減少します。このため、符号化された Eb/N0 比の値は、これらのパンクチャを考慮して調整する必要があります。この例では、符号化されていない Eb/N0 比は符号化された Eb/N0 と、以下に示すような関係があります。AWGN チャネル オブジェクトの EbNo プロパティを符号化された Eb/N0 値の計算値に設定します。

EbNoCoded = EbNoUncoded + 10*log10(K/(N - numPuncs));
channel.EbNo = EbNoCoded;

シミュレーションが目標の誤り数または最大送信回数に達するまでループします。

chanErrorStats = zeros(3,1);
codedErrorStats = zeros(3,1);
correctedErrors = 0;
while (codedErrorStats(2) < targetErrors) && ...
    (codedErrorStats(3) < maxNumTransmissions)

  % Data symbols - transmit 1 message word at a time. Each message word
  % has K symbols in the [0 N] range.
  data = randi([0 N],K,1);

  % Encode the message word. The encoded word encData is N-numPuncs symbols
  % long.
  encData = rsEncoder(data);

  % Modulate encoded data.
  modData = qamModulator(encData);

  % Add noise.
  chanOutput = channel(modData);

  % Demodulate channel output.
  demodData = qamDemodulator(chanOutput);

  % Get erasures vector.
  erasuresVec = RSCodingGetErasuresExample(chanOutput,numErasures);

  % Decode data.
  [estData,errs] = rsDecoder(demodData,erasuresVec);

  % If a decoding error did not occur, accumulate the number of corrected
  % errors using the cumulative sum objet.
  if errs >= 0
    correctedErrors = cumulativeSum(errs);
  end

  % Convert integers to bits and compute the channel BER.
  chanErrorStats(:,1) = ...
    chanBERCalc(intToBit1(encData),intToBit1(demodData));

  % Convert integers to bits and compute the coded BER.
  codedErrorStats(:,1) = ...
    codedBERCalc(intToBit2(data),intToBit2(estData));
end

誤り率測定オブジェクト chanBERCalccodedBERCalc は、BER の測定値の更新、誤り数、ビット送信の合計数を含む 3 行 1 列のベクトルを出力します。符号化された BER と RS 復号化器によって訂正された誤りの合計数を表示します。

codedBitErrorRate = codedErrorStats(1)
totalCorrectedErrors = correctedErrors
codedBitErrorRate =

   4.3198e-05


totalCorrectedErrors =

   578

処理ループの前後に for ループを追加して、一連の Eb/N0 値でシミュレーションを実行します。シミュレーションは、符号化されていない Eb/N0 値を 4:15 dB に、目標の誤り数を 5000 に、最大送信回数を 50×106 に設定してオフラインで行いました。下の図にシミュレーション結果を示します。比較のために、図には「リード・ソロモン符号化パート I - 消失」の例で得られた結果も示しています。これは、消失は使用するがパンクチャは使用しないシステムに対応します。

曲線から、チャネルの BER はパンクチャを使用したケースの方が若干よくなっています。これは、符号化された Eb/N0 の方が少し高いからです。一方、符号化された BER はパンクチャを使用したケースで悪化しています。これは、2 つのパンクチャが符号の誤り訂正能力を 1 つ低下させ、その結果、符号語あたり (10-6-2)/2 = 1 個の誤りだけしか訂正できなくなるためです。

まとめ

この例では System object をいくつか利用して、RS ブロック符号化を使用した AWGN チャネルでの矩形 64-QAM 通信システムをシミュレートしました。パンクチャド符号を取得するための RS 符号化器/復号化器 System object の構成方法を示しました。符号化された BER 曲線を誤り率測定 System object を使用して求め、チャネルと共に使用してシステム性能を測定しました。

「リード・ソロモン符号化パート III - 短縮」の例では、短縮符号を使用した RS ブロック符号化を示しています。

付録

この例では次のスクリプトと補助関数が使用されています。

参考文献

[1] G. C. Clark, Jr., J. B. Cain, Error-Correction Coding for Digital Communications, Plenum Press, New York, 1981.