このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
poly2trellis
畳み込み符号多項式をトレリス表現に変換
構文
説明
は、符号化率 K / N のフィードフォワード符号化器の変換に対応するトレリス構造体記述を返します。K は符号化器への入力ビット ストリームの数、N は出力結合の数です。trellis
= poly2trellis(ConstraintLength
,CodeGenerator
)ConstraintLength
は符号化器への入力ビット ストリームの遅延を指定します。CodeGenerator
は符号化器への入力ビット ストリームの出力結合を指定します。
関数 poly2trellis は、畳み込み符号化器の多項式表現を受け入れ、対応するトレリス構造体記述を返します。この出力を関数 convenc
および vitdec
への入力として使用できます。また、Convolutional Encoder、Viterbi Decoder、および APP Decoder ブロックのマスク パラメーター値として使用することもできます。
メモ
フィードバック多項式と共に使用すると、poly2trellis はトレリスの入力へのフィードバック接続を作成します。
は、符号化率 K / N のフィードバック符号化器の変換に対応するトレリス構造体記述を返します。K は符号化器への入力ビット ストリームの数、N は出力結合の数です。trellis
= poly2trellis(ConstraintLength
,CodeGenerator
,FeedbackConnection
)ConstraintLength
は符号化器への入力ビット ストリームの遅延を指定します。CodeGenerator
は符号化器への入力ビット ストリームの出力結合を指定します。FeedbackConnection
は符号化器への K 個の入力ビット ストリームそれぞれのフィードバック接続を指定します。
例
符号化率 1/2 のフィードフォワード畳み込み符号化器のトレリス構造体の使用
トレリス構造体を使用して、次の図の符号化率 1/2 のフィードフォワード畳み込み符号を構成します。
拘束長を 3 に設定し、符号生成器を 8 進数値のベクトルとして指定して、トレリス構造体を作成します。この図は 2 進数値と多項式形式を示し、一番左のビットが最上位ビットであることを示します。バイナリ ベクトル [1 1 0] は 8 進数 6 を表し、図の上列の 2 進数値に対応します。バイナリ ベクトル [1 1 1] は 8 進数 7 を表し、図の下列の 2 進数値に対応します。これらの 2 進数値は、図におけるレジスタの出力から 2 つの加算器への接続を示します。
trellis = poly2trellis(3,[6 7])
trellis = struct with fields:
numInputSymbols: 2
numOutputSymbols: 4
numStates: 4
nextStates: [4x2 double]
outputs: [4x2 double]
ランダムなバイナリ データを生成します。指定したトレリス構造体を使用してデータを畳み込み符号化します。トレリス構造体、トレースバック長 34、打ち切り操作モード、硬判定を指定したビタビ アルゴリズムを使用して、符号化したデータを復号化します。
data = randi([0 1],70,1); codedData = convenc(data,trellis); tbdepth = 34; decodedData = vitdec(codedData,trellis,tbdepth,'trunc','hard');
復号化されたデータにビット誤りがないことを確認します。
biterr(data,decodedData)
ans = 0
2/3 のフィードフォワード畳み込み符号化器のトレリス構造体
符号化率 2/3 のフィードフォワード畳み込み符号のトレリス構造体を作成し、トレリスの次の状態の一部を表示します。この符号化器の使用例は、convenc
を参照してください。
この図は、2 つの入力ストリーム、3 つの出力ストリーム、および 7 つのシフト レジスタがある符号化率 2/3 の符号化器を示しています。
トレリス構造体を作成します。上のパスの拘束長は 5、下のパスの拘束長は 4 に設定します。符号生成行列の 8 進数表現は、上と下のシフト レジスタからのタップに対応します。
trellis = poly2trellis([5 4],[23 35 0; 0 5 13])
trellis = struct with fields:
numInputSymbols: 4
numOutputSymbols: 8
numStates: 128
nextStates: [128x4 double]
outputs: [128x4 double]
2 つのビット ストリームで 4 つの異なる入力シンボルを生成できるため、構造体フィールド numInputSymbols
は 4 になります。3 つのビット ストリームで 8 つの異なる出力シンボルを生成できるため、構造体フィールド numOutputSymbols
は 8 になります。符号化器に合計で 7 つのシフト レジスタがあるため、nextStates
フィールドで示されるように、可能な状態の数は です。
trellis.nextStates
の 128 行 4 列の行列の最初の 5 行を表示します。
trellis.nextStates(1:5,:)
ans = 5×4
0 64 8 72
0 64 8 72
1 65 9 73
1 65 9 73
2 66 10 74
符号化率 1/2 のフィードバック畳み込み符号化器のトレリス構造体の使用
次の図に表示されているフィードバックを使用して、符号化率 1/2 の組織畳み込み符号化器を表すトレリス構造体を作成します。
この符号化器は、拘束長が 5 で、生成多項式行列が [37 33] で、フィードバック接続多項式は 37 です。
最初の生成多項式は 8 進数 37 です。2 番目の生成多項式は 8 進数 33 です。フィードバック多項式は 8 進数 37 です。最初の出力は組織的なビットに対応するため、最初の生成多項式はフィードバック接続多項式と一致します。
バイナリ ベクトル [1 1 1 1 1] は 8 進数 37 を表し、図の上列の 2 進数値に対応します。バイナリ ベクトル [1 1 0 1 1] は 8 進数 33 を表し、図の下列の 2 進数値に対応します。これらの 2 進数値は、図におけるレジスタの出力から 2 つの加算器への接続を示します。最初の 1 は入力ビットに対応します。
関数 poly2trellis
を使用して多項式をトレリス構造体に変換します。フィードバック多項式と共に使用すると、poly2trellis
はトレリスの入力へのフィードバック接続を作成します。
trellis = poly2trellis(5,[37 33],37)
trellis = struct with fields:
numInputSymbols: 2
numOutputSymbols: 4
numStates: 16
nextStates: [16x2 double]
outputs: [16x2 double]
ランダムなバイナリ データを生成します。指定したトレリス構造体を使用してデータを畳み込み符号化します。トレリス構造体、トレースバック長 34、打ち切り操作モード、硬判定を指定したビタビ アルゴリズムを使用して、符号化したデータを復号化します。
data = randi([0 1],70,1); codedData = convenc(data,trellis); tbdepth = 34; % Traceback depth for Viterbi decoder decodedData = vitdec(codedData,trellis,tbdepth,'trunc','hard');
復号化されたデータにビット誤りがないことを確認します。
biterr(data,decodedData)
ans = 0
多項式型での符号生成器の指定
トレリス構造体の符号生成器を指定する代替方法が同等であることを実証します。
トレリス構造体を使用して、次の図の符号化率 1/2 のフィードフォワード畳み込み符号を構成します。この図は 2 進数値と多項式形式を示し、一番左のビットが最上位ビットであることを示します。
拘束長を 4 に設定します。多項式の文字ベクトルの cell 配列を使用して符号生成器を指定します。詳細は、Communications Toolbox での多項式の表現 を参照してください。符号生成器の指定に文字表現を使用する場合、多項式は昇順または降順で指定できますが、関数poly2trellis
は MSB の左端レジスタを使用して常にレジスタを降順で割り当てます。
trellis_poly = poly2trellis(4,{'x3 + x','x3 + x2 + 1'})
trellis_poly = struct with fields:
numInputSymbols: 2
numOutputSymbols: 4
numStates: 8
nextStates: [8x2 double]
outputs: [8x2 double]
バイナリ ベクトル [1 0 1 0] は 8 進数 12 を表し、図の上列の 2 進数値に対応します。バイナリ ベクトル [1 1 0 1] は 8 進数 15 を表し、図の下列の 2 進数値に対応します。8 進数表現を使用して、等価のトレリス構造体の符号生成器を指定します。
trellis = poly2trellis(4,[12 15])
trellis = struct with fields:
numInputSymbols: 2
numOutputSymbols: 4
numStates: 8
nextStates: [8x2 double]
outputs: [8x2 double]
isequal
を使用して 2 つのトレリスが等価であることを確認します。
isequal(trellis,trellis_poly)
ans = logical
1
ユーザー定義トレリス構造体の作成
この例では、符号化されていないビットとフィードバックをもつ畳み込み符号化器用の非標準トレリス構造体を作成する方法を示します。符号化器固有の仕様が 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);
行列 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);
結果のトレリス構造体のチェック
istrellis(myTrellis)
ans = logical
1
戻り値 1
により、トレリス構造体が有効であることが確認されます。
軟判定復号化の実装
0 に近い値が 0 にマッピングされ、1 に近い値が 7 にマッピングされるように、分割された 3 ビット軟判定で復号化します。より優れた復号化性能が必要となるアプリケーションの場合は、分割を調整してより微細な量子化が行われるようにします。
例では符号を復号化し、ビット エラー レートを計算します。復号化されたデータと元のメッセージの比較時に、例では復号化の遅延を考慮に入れなければなりません。ビタビ復号化器の連続操作モードではトレースバック長と等しい遅延が生じるので、msg(1)
は decoded(1)
ではなく decoded(tblen+1)
に対応します。
システム設定
メッセージ データ、トレリス、ビット エラー レートの計算、およびトレースバック長のランタイム変数を初期化します。
stream = RandStream.create('mt19937ar', 'seed',94384); prevStream = RandStream.setGlobalStream(stream); msg = randi([0 1],4000,1); % Random data trellis = poly2trellis(7,[171 133]); % Define trellis ber = zeros(3,1); % Store BER values tblen = 48; % Traceback length
AWGN チャネル System object™ (ビタビ復号化器 System object) とエラー レート計算機 System object を作成します。ビタビ復号化器のトレースバック長による受信遅延を考慮します。
awgnChan = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)','SNR',6); vitDec = comm.ViterbiDecoder(trellis,'InputFormat','Soft', ... 'SoftInputWordLength',3,'TracebackDepth',tblen,'TerminationMethod','Continuous'); errorCalc = comm.ErrorRate('ReceiveDelay', tblen);
符号化および復号化の実行
メッセージを畳み込み符号化し、AWGN フィルターを通過させて、ノイズを含むメッセージを軟判定復号化のために量子化します。poly2trellis
を使用して生成されたトレリスを使用してビタビ復号化を実行します。
code = convenc(msg,trellis); awgnChan.SignalPower = (code'*code)/length(code); ncode = awgnChan(code);
quantiz
を使用してノイズを含むデータ値を 0 から 7 までの整数の適切な判定値にマッピングします。quantiz
の 2 番目の引数は、どのデータ値が 0、1、2 などにマッピングされるかを決定する分割ベクトルです。
qcode = quantiz(ncode,[0.001,0.1,0.3,0.5,0.7,0.9,0.999]); decoded = vitDec(qcode);
ビット エラー レートを計算します。
ber = errorCalc(msg,decoded); ratio = ber(1)
ratio = 0.0013
number = ber(2)
number = 5
RandStream.setGlobalStream(prevStream);
入力引数
ConstraintLength
— 拘束長
行ベクトル
拘束長。符号化器への K 個の入力ビット ストリームのそれぞれの遅延を定義する、1 行 K 列の行ベクトルとして指定します。
データ型: double
CodeGenerator
— 符号生成器
行列 | 文字ベクトルの cell 配列 | string 配列
符号生成器。8 進数の K 行 N 列の行列、多項式の文字ベクトルの K 行 N 列の cell 配列、または K 行 N 列の string 配列として指定します。CodeGenerator
は、符号化器への K 個の入力ビット ストリームそれぞれに N 個の出力結合を指定します。
符号生成器の指定に文字表現を使用する場合、多項式は昇順または降順で指定できますが、関数 poly2trellis
は、最上位ビット (MSB) の左端をレジスタとして常にレジスタを降順で割り当てます。詳細は、多項式型での符号生成器の指定 を参照してください。
データ型: double
| char
| string
FeedbackConnection
— フィードバック接続
行ベクトル
フィードバック接続。符号化器への K 個の入力ビット ストリームそれぞれのフィードバック接続を定義する、1 行 K 列の 8 進数の行ベクトルとして指定します。
データ型: double
出力引数
trellis
— トレリス表現
構造体
トレリス表現。次のフィールドがある構造体として返されます。この構造体の詳細は、関数 istrellis
を参照してください。
numInputSymbols
— 入力シンボルの数
スカラー
入力シンボルの数。2K の値をもつスカラーとして返されます。この値は符号化器への入力シンボルの数を表し、K は入力ビット ストリームの数を表します。
numOutputSymbols
— 出力シンボルの数
スカラー
出力シンボルの数。2N の値をもつスカラーとして返されます。この値は符号化器からの出力シンボルの数を表し、N は出力ビット ストリームの数を表します。
numStates
— 状態の数
スカラー
符号化器の状態の数。スカラーとして返されます。
nextStates
— 次の状態
行列
現在の状態と現在の入力のすべての組み合わせの次の状態。numStates
行 2K 列の行列として返されます。K は入力ビット ストリームの数を表します。
outputs
— 出力
行列
現在の状態と現在の入力のすべての組み合わせの出力。numStates
行 2K 列の行列として返されます。K は入力ビット ストリームの数を表します。この行列の要素は 8 進数です。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
入力は定数でなければなりません。最大で 3 つ使用できます (ConstraintLength
、CodeGenerator
、FeedbackConnection
)。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)