Main Content

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

Simulink での消失、パンクチャ、および短縮を使用したリード・ソロモン符号化

このモデルでは、消失、パンクチャおよび短縮を使用したブロック符号化を実行するためのリード・ソロモン (RS) コードの構成方法を示します。

RS 復号化器は誤りと消失の両方を訂正できます。受信機は、与えられた符号語の中に最も信頼性の低いシンボルを識別すると消失を生成できます。受信機がシンボルを消去する場合、そのシンボルをゼロで置換し、復号化器にフラグを渡して、そのシンボルは有効なコード シンボルではなく、消失であることを伝えます。

また符号化器は、その出力から特定のパリティ シンボルが常に除去されたパンクチャを生成できます。復号化器はパンクチャのパターンを認識し、パンクチャ位置にゼロを挿入し、これらのシンボルを消失として扱います。復号化器は符号化器が生成したパンクチャと受信機が生成した消失を、復号化する場合と同様に扱います。

パンクチャは誤り訂正能力を多少低下させますが、符号化率をより柔軟にするメリットがあります。短縮符号は、同じ復調器入力 Eb/N0 の場合、誤り訂正性能を低下させることなく同一の符号化率の柔軟性を維持します。パンクチャは符号語からパリティ シンボルを除去することで、短縮は符号語からメッセージ シンボルを除去することであることに注意してください。

受信機が生成する消失を使用した復号化

このデモは 64-QAM 変調方式と協調して動作する (63,53) RS 符号を示します。このコードは (63-53)/2 = 5 個の誤りを訂正できるため、その代替として (63-53) = 10 個の消失を訂正することもできます。復調された各符号語に対して、受信機は判定境界に最も近い判定領域内のシンボルを検索して、最も信頼性の低いシンボルを 6 個決定します。そしてこれらのシンボルを消去します。RSCodingErasuresExample モデルを以下に示します。

model_e = 'RSCodingErasuresExample';
open_system(model_e);
close_system([model_e,'/Received Signal Scatter Plot'])
close_system([model_e,'/Erased Signal Scatter Plot'])

消失のみを使用したシミュレーションと可視化

システム シミュレーション パラメーターを以下のように定義します。

RS_TsUncoded = 1; % Sample time (s)
RS_n = 63; % Codeword length
RS_k = 53; % Message length
RS_MQAM = 64; % QAM order
RS_numBitsPerSymbol = ... % 6 bits per symbol
    log2(RS_MQAM);
RS_sigPower = 42; % Assume points at +/-1, +/-3, +/-5, +/-7
RS_numErasures = 6; % Number of erasures
RS_EbNoUncoded = 15; % In dB

符号化されていない Eb/N0 を 15 dB として、システムをシミュレートします。しかし、RS 符号化器によって追加された冗長シンボルのため、符号化された Eb/N0 は減少します。また、Random Integer Generator の出力におけるサンプル時間 1 秒に対応して、モデルの各フレーム期間は 53 秒で一定に維持されます。さらに、63 個のシンボルは 53 秒のフレーム時間全体での出力であるため、RS 符号化器の出力におけるシンボル時間は、符号化率のファクターだけ減少します。AWGN Channel ブロックではこれを考慮するために次のパラメーターを使用します。

RS_EbNoCoded = RS_EbNoUncoded + 10*log10(RS_k/RS_n);
RS_TsymCoded = RS_TsUncoded * (RS_k/RS_n);

受信機は、判定境界に最も近い、符号語あたり 64 個の QAM シンボルを検索して、どのシンボルを消去するか決定します。受信機は最も信頼性の低いコード シンボル 6 個を除去し、これにより、RS 復号化器が符号語あたり (10-6)/2 = 2 個の誤りを訂正できるようになります。

シミュレーションを実行し、受信されたシンボルと消去されたシンボルを示します。

sim(model_e)
open_system([model_e,'/Received Signal Scatter Plot'])
open_system([model_e,'/Erased Signal Scatter Plot'])
%

消失のみを使用した BER 性能

復号化器の出力での BER 性能を調べます。シミュレーションの停止時間を inf に設定し、RS 復号化器から 100 個のビット誤りが収集されるまでシミュレートします。訂正された誤りの合計数、64-QAM BER、および RS BER を表示します。

fprintf('Total number of corrected errors with\n')
fprintf('erasures: %d\n',totCorrErrors_e(1))
fprintf('64-QAM BER with\n')
fprintf('erasures: %s\n',channelBER_e(1))
fprintf('RS BER with\n')
fprintf('erasures: %s\n',codedBER_e(1))
Total number of corrected errors with
erasures: 6905
64-QAM BER with
erasures: 1.702521e-03
RS BER with
erasures: 2.589668e-06

消失とパンクチャを使用したシミュレーション

RS 復号化器は、受信機が生成した消失の復号化を行う他に、符号化器が生成したパンクチャを訂正できます。この 2 つのケースで復号化アルゴリズムは同一ですが、パンクチャと消失の符号語あたりの合計は符号の誤り訂正能力の 2 倍を超えることはできません。消失とパンクチャの両方に対して復号化を実行する次のモデルを考えてみましょう。

符号化器ブロックと復号化器ブロックの両方で、同じパンクチャ ベクトルを指定します。この例では、各符号語から 2 つのシンボルをパンクチャします。ベクトル値 "1" はパンクチャしていないシンボルを表し、値 "0" はパンクチャされたシンボルを表します。一方、消去ベクトルでは、値 "1" は消去されたシンボルを表し、値 "0" は消去されていないシンボルを表します。

符号語の長さが前の例と異なるため、AWGN Channel ブロックのパラメーターのいくつかは若干異なっています。このブロックではサイズの違いを考慮するため次のコードを使用します。

RS_numPuncs = 2;
RS_EbNoCoded = RS_EbNoUncoded + 10*log10(RS_k / (RS_n - RS_numPuncs));
RS_TsymCoded = RS_TsUncoded * (RS_k / (RS_n - RS_numPuncs));

モデル RSCodingErasuresPunctExample.mdl をシミュレートし、RS Decoder ブロックから 1000 個の誤りを収集します。パンクチャのため、符号化器から出力する信号の次元は 61 行 1 列になります。パンクチャを使用しないモデルでは 63 行 1 列です。Create Erasures Vector サブシステムも、61 行 1 列の消去ベクトルを作成する場合にサイズの違いを考慮しなければなりません。RSCodingErasuresPunctExample モデルを以下に示します。

model_ep = 'RSCodingErasuresPunctExample';
open_system(model_ep);

sim(model_ep)

消失とパンクチャを使用した BER 性能

パンクチャを使用した場合と使用しない場合の消失の復号化について BER を比較します。

64-QAM 復調器の出力の BER は、復調器に入力される Eb/N0 が少し高いため、パンクチャを使用したケースで若干良くなっています。しかし、RS 復号化器の出力の BER はパンクチャを使用したケースで悪化しています。これは、2 つのパンクチャが符号の誤り訂正能力を 1 つ低下させ、その結果、符号語あたり (10-6-2)/2 = 1 個の誤りだけしか訂正できなくなるためです。消失とパンクチャを使用した RS 符号について、訂正された誤りの合計数、64-QAM BER、および RS BER を表示します。

fprintf('Total number of corrected errors with\n')
fprintf('              erasures: %d\n',totCorrErrors_e(1))
fprintf('erasures and punctures: %d\n',totCorrErrors_ep(1))
fprintf('64-QAM BER with\n')
fprintf('              erasures: %s\n',channelBER_e(1))
fprintf('erasures and punctures: %s\n',channelBER_ep(1))
fprintf('RS BER with\n')
fprintf('              erasures: %s\n',codedBER_e(1))
fprintf('erasures and punctures: %s\n',codedBER_ep(1))
Total number of corrected errors with
              erasures: 6905
erasures and punctures: 1960
64-QAM BER with
              erasures: 1.702521e-03
erasures and punctures: 1.475314e-03
RS BER with
              erasures: 2.589668e-06
erasures and punctures: 5.627692e-05

短縮符号の指定

ブロック符号の短縮はメッセージ部からシンボルを除去し、パンクチャはパリティ部からシンボルを除去します。RS Encoder ブロックと RS Decoder ブロックで、両方の手法を組み合わせることができます。

たとえば、(63,53) 符号を (53,43) 符号に短縮するには、符号化器と復号化器のブロック マスクの n、k、s に、それぞれ 63、53、43 を入力するだけで済みます。RSCodingErasuresPunctShortExample モデルを以下に示します。

model_eps = 'RSCodingErasuresPunctShortExample';
open_system(model_eps);

消失、パンクチャ、および短縮を使用したシミュレーション

パンクチャの場合と同様に、短縮を行うと符号化率が大きく変わるため、もう一度 AWGN パラメーターを変更しなければなりません。AWGN Channel ブロックではこれを考慮するために次のコードを使用します。

RS_EbNoCoded = RS_EbNoUncoded + ...
    10*log10(RS_s  / (RS_n - RS_k + RS_s - RS_numPuncs));
RS_TsymCoded = RS_TsUncoded * RS_s / (RS_n - RS_k + RS_s - RS_numPuncs);

モデルをシミュレートし、再度 RS Decoder ブロックの出力から 1000 個の誤りを収集します。短縮によるシンボル 35 個とパンクチャによるシンボル 2 個のため、RS 符号化器の出力の信号の次元は 26x1 です。Create Erasures Vector サブシステムも、短縮符号に起因するサイズの違いを再度考慮しなければなりません。

sim(model_eps)

消失、パンクチャ、および短縮を使用した BER 性能

消失のみを使用した場合、消失とパンクチャを使用した場合、消失、パンクチャ、および短縮を使用した場合の復号化の BER 性能を比較します。

64-QAM 復調器の出力の BER は、短縮を使用した方が使用しない場合より悪化します。これは、短縮コードの符号化率が非短縮符号の符号化率よりもかなり低く、復調器に入力される符号化された Eb/N0 が短縮によって悪化するためです。短縮符号は同一の Eb/N0 に対する誤り訂正能力では非短縮符号と変わりはありませんが、Eb/N0 の低減は、短縮を使用した場合の RS 復号化器の出力において、使用しない場合よりも高い BER として明確に現れます。消失、パンクチャ、短縮を使用した RS 符号について、訂正された誤りの合計数、64-QAM BER、および RS BER を比較します。

fprintf('Total number of corrected errors\n')
fprintf( ...
    '                           erasures: %d\n',totCorrErrors_e(1))
fprintf( ...
    '             erasures and punctures: %d\n',totCorrErrors_ep(1))
fprintf( ...
    'erasures, punctures, and shortening: %d\n',totCorrErrors_eps(1))
fprintf('64-QAM BER with\n')
fprintf('                           erasures: %s\n',channelBER_e(1))
fprintf('             erasures and punctures: %s\n',channelBER_ep(1))
fprintf('erasures, punctures, and shortening: %s\n',channelBER_eps(1))
fprintf('RS BER with\n')
fprintf('                           erasures: %s\n',codedBER_e(1))
fprintf('             erasures and punctures: %s\n',codedBER_ep(1))
fprintf('erasures, punctures, and shortening: %s\n',codedBER_eps(1))
Total number of corrected errors
                           erasures: 6905
             erasures and punctures: 1960
erasures, punctures, and shortening: 3287
64-QAM BER with
                           erasures: 1.702521e-03
             erasures and punctures: 1.475314e-03
erasures, punctures, and shortening: 3.590801e-03
RS BER with
                           erasures: 2.589668e-06
             erasures and punctures: 5.627692e-05
erasures, punctures, and shortening: 9.748840e-05

その他の調査

これらのシステムを Eb/N0 値のループで実行し、その BER 曲線を生成することにより、システムを実験することができます。さらに消失、パンクチャ、または短縮を使用しない場合の 64-QAM/RS システムの理論値に対して、性能を比較することができます。BER の理論曲線を生成するには BERTool を使用します。

close_system(model_e,0);
close_system(model_ep,0);
close_system(model_eps,0);