Main Content

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

ユーザー定義トレリス構造体の作成、検証、およびテスト

ユーザー定義トレリス構造体の作成

この例では、符号化されていないビットとフィードバックをもつ畳み込み符号化器用の非標準トレリス構造体を作成する方法を示します。符号化器固有の仕様が poly2trellis の入力要件に合わないため、poly2trellisを使用してこの符号化器を作成することはできません。

手動でトレリス構造体を作成して、符号化器および復号化器の入力トレリス構造体として使用できます。符号化されていないビットとフィードバックをもつ畳み込み符号化器のモデルで使用されているConvolutional EncoderブロックおよびViterbi Decoderブロックが、ここで作成されたトレリス構造体を PreLoadFcn コールバックを使用して読み込みます。

畳み込み符号化器

MSB ビットが符号化されないで残っている、フィードバック接続をもつレート 3/4 の畳み込み符号化器を作成します。

仕様に従って変数を宣言します。

K = 3;
N = 4;
constraintLength = 4;

トレリス構造体の作成

トレリスは、以下のフィールドをもつ構造体で表現されます。

  • numInputSymbols - 入力シンボルの数

  • numOutputSymbols - 出力シンボルの数

  • numStates - 状態の数

  • nextStates - 次の状態行列

  • outputs - 出力行列

これらの構造体フィールドの詳細については、istrellisを参照してください。

以前の myTrellis 構造体のすべての出現箇所をリセットします。

clear myTrellis;

トレリス構造体のフィールドを定義します。

myTrellis.numInputSymbols = 2^K;
myTrellis.numOutputSymbols = 2^N;
myTrellis.numStates  = 2^(constraintLength-1);

行列 nextStates の作成

行列 nextStates は [numStates x numInputSymbols] 行列です。次の状態行列の (i,j) 要素は、j に等しい入力の初期状態 i からの遷移に対応する、結果として得られる最終状態インデックスです。

myTrellis.nextStates = [0  1  2  3  0  1  2  3; ...
                        6  7  4  5  6  7  4  5; ...
                        1  0  3  2  1  0  3  2; ...
                        7  6  5  4  7  6  5  4; ...
                        2  3  0  1  2  3  0  1; ...
                        4  5  6  7  4  5  6  7; ...
                        3  2  1  0  3  2  1  0; ...
                        5  4  7  6  5  4  7  6]    
myTrellis = struct with fields:
     numInputSymbols: 8
    numOutputSymbols: 16
           numStates: 8
          nextStates: [8x8 double]

行列 nextStates のプロット

補助関数 commcnv_plotnextstates を使用して行列 nextStates をプロットし、与えられた入力のさまざまな状態間の分枝遷移を示します。

commcnv_plotnextstates(myTrellis.nextStates);

Figure contains 2 axes. Axes 1 with title Plot of {\itNextStates} Matrix contains 8 objects of type line. Axes 2 is empty.

行列 outputs の作成

行列 outputs は [numStates x numInputSymbols] 行列です。出力行列の (i,j) 要素は、j に等しい入力の現在の状態 i を与えられた 8 進数の出力シンボルです。

outputs =  [0  2  4  6  10  12  14  16; ...
            1  3  5  7  11  13  15  17; ...
            0  2  4  6  10  12  14  16; ...
            1  3  5  7  11  13  15  17; ...
            0  2  4  6  10  12  14  16; ...
            1  3  5  7  11  13  15  17; ...
            0  2  4  6  10  12  14  16; ...
            1  3  5  7  11  13  15  17]
outputs = 8×8

     0     2     4     6    10    12    14    16
     1     3     5     7    11    13    15    17
     0     2     4     6    10    12    14    16
     1     3     5     7    11    13    15    17
     0     2     4     6    10    12    14    16
     1     3     5     7    11    13    15    17
     0     2     4     6    10    12    14    16
     1     3     5     7    11    13    15    17

oct2decを使用して、これらの値を 10 進数で表示します。

outputs_dec = oct2dec(outputs)
outputs_dec = 8×8

     0     2     4     6     8    10    12    14
     1     3     5     7     9    11    13    15
     0     2     4     6     8    10    12    14
     1     3     5     7     9    11    13    15
     0     2     4     6     8    10    12    14
     1     3     5     7     9    11    13    15
     0     2     4     6     8    10    12    14
     1     3     5     7     9    11    13    15

出力行列を myTrellis 構造体にコピーします。

myTrellis.outputs = outputs
myTrellis = struct with fields:
     numInputSymbols: 8
    numOutputSymbols: 16
           numStates: 8
          nextStates: [8x8 double]
             outputs: [8x8 double]

行列 outputs のプロット

補助関数 commcnv_plotoutputs を使用して行列 outputs をプロットし、入力シンボルに応じて与えられた状態の考えられる出力シンボルを示します。

commcnv_plotoutputs(myTrellis.outputs, myTrellis.numOutputSymbols);

Figure contains 2 axes. Axes 1 with title Plot of {\itOutputs} Matrix contains 8 objects of type line. Axes 2 is empty.

結果のトレリス構造体のチェック

istrellis(myTrellis)
ans = logical
   1

戻り値 1 により、トレリス構造体が有効であることが確認されます。

符号化されていないビットとフィードバックをもつ畳み込み符号化器

モデルは、実装された畳み込み符号のユニット テスト ベンチとして機能します。モデルでは、畳み込み符号を記述するトレリスを定義して使用する方法を示します。この例の特定の符号は、一連の生成多項式およびフィードバック接続多項式で記述できません。関数が入力引数として生成多項式およびフィードバック接続多項式を期待しているため、符号のトレリスはpoly2trellisで作成できません。

畳み込み符号の構造

次の図は、畳み込み符号を示しています。

例の構造

この例の主要なコンポーネントには、次が含まれます。

  • 離散低レベル遅延ブロックおよび加算 (XOR) ブロックを使用して畳み込み符号化器の表現を作成する、送信パス。この表現は、畳み込み符号の構造を示す図によく似ています。

  • Convolutional Encoderブロックを使用して同じ畳み込み符号化器の表現を作成する、送信-受信パス。ここでは、符号化器の説明は、ブロックのトレリス構造体パラメーター内にあります。モデルのこの部分には、畳み込み符号を復号化する、Viterbi Decoderブロックも含まれます。

  • どちらのパスもビット誤り数を計算します。

モデル例を開きその内容を調べる

モデル例 slex_commcnvencoder を開きます。

結果と表示

シミュレーションを実行すると、Compare Encoder というラベルのブロックによって、符号化器の 2 つの表現が同じ結果になることがチェックされます。Compare Encoder - Decoder というラベルのブロックによって、符号化器と復号化器がペアとして適切に機能することがチェックされます。モデルの各 Display ブロックに、予想どおりに、誤り率が 0 と表示されます。

Error rate for Compare Encoder signal: 0.000
Error rate for Compare Encoder-Decoder signal: 0.000