Main Content

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

パンクチャド畳み込み符号化

この例では、Convolutional Encoder および Viterbi Decoder ブロックを使用してパンクチャド符号化システムをシミュレートする方法を示します。ビタビ復号化器の複雑度は符号化率に伴い急激に増大します。パンクチャとは、標準符号化率 1/2 の符号化器と復号化器を使用して高符号化率の符号の符号化と復号化を可能にする手法です。

この例は、パンクチャなしでの畳み込み符号化を示す軟判定復号化の例と似ています。

例の構造

この例には、以下のブロックが含まれています。

MATLAB® コマンド プロンプトで以下を入力して、この例の doc_punct_conv_code を開きます。

doc_punct_conv_code

ランダム データの生成

Bernoulli Binary Generator ブロックは、このシミュレーション用の信号源を作成します。このブロックは、サンプル時間ごとに 3 つのランダムなビットのフレームを生成します。Samples per frame パラメーターは出力フレームの行数を決定します。

パンクチャを使用した畳み込み符号化

Convolutional Encoder ブロックは、Bernoulli Binary Generator からのデータを符号化します。この例では、軟判定復号化で説明しているコードと同じコードを使用します。

パンクチャ パターンは、マスクの Puncture vector パラメーターによって指定されます。パンクチャ ベクトルはバイナリ列ベクトルです。1 は入力ベクトルの対応する位置のビットが出力ベクトルに送信されることを示し、0 はそのビットが削除されることを示します。

たとえば、符号化率 1/2、拘束長 7 の畳み込み符号から符号化率 3/4 の符号を生成する場合、最適なパンクチャ ベクトルは [1 1 0 1 1 0].' です(ここでベクトルの後の .' は転置を示します)。位置 1、2、4、および 5 のビットは送信されますが、位置 3 および 6 のビットは削除されます。3 ビットの入力ごとに、パンクチャド符号は 4 ビットの出力を生成します (パンクチャ前は 6 ビットが生成されます)。これによって符号化率が 3/4 になります。

この例では、Bernoulli Binary Generator からの出力は長さ 3 の列ベクトルです。符号化率 1/2 の Convolutional Encoder によって各ベクトルの長さが 2 倍になるため、パンクチャ ベクトルの長さは 6 で除算しなければなりません。

データの送信

AWGN Channel ブロックは、ノイズの多いチャネルを使用した送信をシミュレートします。このブロックのパラメーターはマスクで次のように設定されます。

  • このブロックの [Mode] パラメーターは Signal to noise ratio (Es/No) に設定されます。

  • Es/No パラメーターは 2 dB に設定されます。この値は通常、実行されている 1 つのシミュレーションから次に実行されるシミュレーションに変更されます。

  • 先行の変調ブロックが単位出力信号を生成するので、[Input signal power] は 1 ワットに設定されます。

  • Symbol period は、符号化率が 3/4 のため 0.75 秒に設定されます。

復調

このシミュレーションでは、Viterbi Decoder ブロックは非量子化入力を受け入れるように設定されます。その結果、このシミュレーションでは、複素数サンプルの実数部を抽出する Simulink® Complex to Real-Imag ブロックを通じてチャネル出力を渡します。

パンクチャド符号のビタビ復号化

Viterbi Decoder ブロックは、Convolutional Encoder ブロックで指定されているものと同じ符号化率 1/2 の符号を復号化するように構成されています。

この例では、判定タイプは Unquantized に設定されます。パンクチャを使用しない符号の場合、この符号の [Traceback depth] は通常、40 に近い値に設定します。ただし、パンクチャド符号の復号化の場合、パンクチャによって誘引されたあいまいさを解決するための十分なデータを復号化器に与えるために、これを超える値が必要になります。

パンクチャド ビットは送信されないため、その値を示す情報はありません。その結果、復号化プロセスではこれらは無視されます。

Puncture vector パラメーターは、復号化プロセスで無視するパンクチャまたはビットの位置を示します。パンクチャ ベクトルの各 1 は送信されたビットを、各 0 は復号化器への入力で無視するパンクチャまたはビットを示します。

通常、Convolutional Encoder および Viterbi Decoder の 2 つの [Puncture vector] パラメーターは同じでなければなりません。

誤り率の計算

Error Rate Calculation ブロックは、復号化されたビットを元のソース ビットと比較します。Error Rate Calculation ブロックの出力は、計算されたビット誤り率 (BER)、観測された誤り数、処理されたビットの数を含んでいる 3 要素ベクトルです。

このブロックのマスクで、[Receive delay] パラメーターは 96 に設定されます。これは、Viterbi Decoder ブロックの [Traceback depth] の値 96 によって遅延 96 が生成されるためです。遅延を生成するブロックが他にもモデル内にある場合、[Receive delay] はすべての遅延の合計数と等しくなります。

BER シミュレーションは一般的に、最小誤り数が発生するまで、またはシミュレーションで最大数のビットが処理されるまで実行されます。Error Rate Calculation ブロックはその [シミュレーションの中止] モードを使用してこれらの制限を設定し、シミュレーションの持続時間を制御します。

結果の評価

ビット誤り率曲線を生成するには複数のシミュレーションが必要です。sim コマンドを使用すると、複数のシミュレーションを実行できます。次の手順に従います。

  • モデル ウィンドウで Display ブロックとその端子に接続されている線を削除します。

  • AWGN Channel ブロックで [Es/No] パラメーターを変数名 EsNodB に設定します。

  • Error Rate Calculation ブロックで、[Output data]Workspace に設定してから、[Variable name]BER_Data に設定します。

  • 作業ディレクトリ内に my_punct_conv_code.slx などの別名を付けてモデルを保存します。

  • 次のコードを実行します。このコードはシミュレーションを複数回実行し、結果を収集します。

    CodeRate = 0.75;
    EbNoVec = [2:.5:5];
    EsNoVec = EbNoVec + 10*log10(CodeRate);
    BERVec = zeros(length(EsNoVec),3);
    for n=1:length(EsNoVec),
        EsNodB = EsNoVec(n);
        sim('my_commpunctcnvcod');
        BERVec(n,:) = BER_Data;
    end

結果の妥当性を確認するには、これらの結果を確立した性能限界と比較します。符号化率 r = (n-1)/n のパンクチャド符号のビット誤り率性能は、上方で次のように境界されます。

この例の erfc は相補誤差関数を示し、r は符号化率を示します。dfree と ωd はどちらも個々のコードに依存します。この例の符号化率 3/4 の符号の場合、dfree = 5、ω5 = 42、ω6 = 201、ω7 = 1492 などのようになります。詳細は、参考文献 [1] を参照してください。

次のコマンドは、合計の最初の 7 つの項を使用してこの境界の近似を計算します (nerr に使用される値は参考文献 [2] の表 2 に記載されています)。

dist = [5:11];
nerr = [42 201 1492 10469 62935 379644 2253373];
CodeRate = 3/4;
EbNo_dB = [2:.02:5];
EbNo = 10.0.^(EbNo_dB/10);
arg = sqrt(CodeRate*EbNo'*dist);
bound = nerr*(1/6)*erfc(arg)';

同じ図でシミュレーションと理論的結果をプロットするには、次のコマンドを使用します。

berfit(EbNoVec',BERVec(:,1)); % Curve-fitted simulation results
hold on;
semilogy(EbNo_dB,bound,'g'); % Theoretical results
legend('Simulated BER','Fit for simulated BER',...
    'Theoretical bound on BER')

場合によっては、下方ビットの誤り率が限界より少し上回るようなシミュレーション結果になることがあります。このような結果になるのは、シミュレーションの分散 (観測されたビット誤り数が 500 個未満の場合) または復号化器の有限トレースバック長が原因です。

参照

[1] Yasuda, Y., K. Kashiki, and Y. Hirata, "High Rate Punctured Convolutional Codes for Soft Decision Viterbi Decoding," IEEE Transactions on Communications, Vol. COM-32, March, 1984, pp. 315-319.

[2] Begin, G., Haccoun, D., and Paquin, C., "Further results on High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding," IEEE Transactions on Communications, Vol. 38, No. 11, November, 1990, p. 1923.