このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Viterbi Decoder
ビタビ アルゴリズムを使用した畳み込み符号化されたデータの復号化
ライブラリ:
Communications Toolbox /
Error Detection and Correction /
Convolutional
Communications Toolbox HDL Support /
Error Detection and Correction /
Convolutional
説明
Viterbi Decoder ブロックは、ビタビ アルゴリズムを使用して、畳み込み符号化された入力シンボルを復号化し、バイナリ出力シンボルを生成します。トレリス構造体は、畳み込み符号化スキームを指定します。詳細については、畳み込み符号のトレリス表現を参照してください。
このブロックは、パフォーマンスを高速化するために一度に複数のシンボルを処理でき、シミュレーション中に長さが変化する入力を受け入れることができます。可変サイズ信号の詳細については、可変サイズの信号の基礎 (Simulink)を参照してください。
このアイコンは、すべてのオプションのブロック端子が有効になっていることを示しています。
例
畳み込み符号化された信号の SER の計算
畳み込み符号化と BPSK 変調をバイナリ信号に適用し、変調後の信号を AWGN チャネルに渡します。BPSK 復調とビタビ復号化を適用した後の信号のシンボル エラー レート (SER) を計算します。
モデルの検証
doc_conv モデルは、Bernoulli Binary Generatorブロックを使用してバイナリ信号を生成します。Convolutional Encoderブロックは信号を符号化します。BPSK Modulator Basebandブロックは信号を変調します。AWGN Channelブロックは信号にノイズを付加します。BPSK 変調信号をゼロ位相シフトで復調するには、Complex to Real-Imag (Simulink)ブロックを使用して複素シンボル復調の実数成分の値を単に抽出します。Viterbi Decoderブロックは信号を復号化します。Error Rate Calculationブロックは SER を計算します。
シミュレーションの実行
ans = 'Filtering the signal through an AWGN channel with the EsN0 set to -1 dB, the computed SER is 0.005608.' ans = 'For 53499 transmitted symbols, there were 300 symbols errors.'
Simulink でのパンクチャド畳み込み符号化
この例では、符号化率 1/2 の畳み込み符号化とビタビ復号化を使用するパンクチャド符号化システムをシミュレートします。ビタビ復号化器の複雑度は符号化率に伴い急激に増大します。パンクチャ手法を使用すると、符号化率の低い標準のコーダーを使用して符号化率の高い符号の符号化と復号化を行うことができます。
cm_punct_conv_code
モデルは、畳み込み符号化後の BPSK 信号を AWGN チャネル経由で送信し、受信信号を復調し、ビタビ復号化を行って符号化前の信号を復元します。このモデルは、エラー レートを計算するため、元の % 信号と復号化後の信号を比較します。
このモデルは、コールバック関数 PreloadFcn
を使用してこれらのワークスペース変数を設定し、ブロック パラメーターを初期化します。
puncvec = [1;1;0;1;1;0]; EsN0dB = 2; traceback = 96; % Viterbi traceback depth
詳細については、モデル コールバック (Simulink)を参照してください。
このモデルのブロックは次の処理を行います。
Bernoulli Binary Generator — [フレームあたりのサンプル数] を
3
に設定します。このブロックは、各サンプル時刻においてフレームあたり 3 つのサンプルを出力するランダム ビットから成るシーケンスを作成します。Convolutional Encoder — [Trellis structure] で既定の設定を使用し、[Puncture code] を選択し、[パンクチャ ベクトル] をワークスペース変数
puncvec
に設定します。このブロックは、符号化率 1/2、拘束長 7 の畳み込み符号を符号化率 3/4 の符号にパンクチャすることによって、データのフレームを符号化します。puncvec
で指定されたパンクチャ ベクトルは、符号化率が 1/2 で拘束長が 7 の畳み込み符号に最も適したパンクチャ ベクトルです。パンクチャ ベクトルにおいて、1
は符号化されたベクトルの対応する位置にあるビットが出力ベクトルに送信されることを示し、0
はそのビットが削除されることを示します。ここで構成した符号化器では、符号化後の位置 1、2、4、および 5 にあるビットは送信されますが、位置 3 および 6 にあるビットは削除されます。符号化率が 3/4 であるということは、3 ビットを入力するごとにパンクチャド符号によって 4 ビットの出力が生成されることを意味します。BPSK Modulator Baseband — 既定のパラメーター値を使用して、符号化されたメッセージを変調します。
AWGN Channel — [モード] を
Signal to noise ratio (Es/No)
に設定し、Es/No (dB)
をワークスペース変数EsN0dB
に設定します。変調器ブロックは単位電力信号を生成するため、[Input signal power, referenced to 1 ohm (watts)] は既定値1
のままにします。Viterbi Decoder — [Trellis structure]、[Punctured code]、および [パンクチャ ベクトル] を、Convolutional Encoder ブロックに合わせて設定します。このブロックは、[判定タイプ] を
Unquantized
に設定し、[トレースバック長] をワークスペース変数traceback
に設定します。符号のパンクチャ処理を行わない場合、指定した畳み込み符号を復号化するにはトレースバック長が 40 あれば十分です。ただし、このブロックは、パンクチャによって生じるあいまいさを解決するための十分なデータを復号化器に与えるため、トレースバック長を 96 にしてパンクチャド符号を復号化します。畳み込み符号化器と同様に、復号化器のパンクチャ ベクトルによってパンクチャの位置が示されます。パンクチャされたビットは送信されないため、その値を示す情報は存在しません。そのため、復号化器による復号化処理では、この位置にあるビットは無視されます。パンクチャ ベクトルの各 1 は送信されるビットを、各 0 は復号化器への入力で無視されるパンクチャされたビットを示します。Complex to Real-Imag (Simulink) — 複素数サンプルの実数部を抽出して BPSK 信号を復調します。
Error Rate Calculation — [受信遅延] の値を使用してシステム遅延のサンプル数の合計を表し、復号化されたビットを元のソース ビットと比較します。このブロックは、計算された BER、観測された誤り数、および処理されたビットの数で構成される 3 要素ベクトルを出力します。このシステムではビタビのトレースバック長によってのみ遅延が生じるため、[受信遅延] をワークスペース変数
traceback
に設定します。一般に、BER シミュレーションは、誤り数が最小となるまで、またはシミュレーションで最大数のビットが処理されるまで実行されます。Error Rate Calculation ブロックは、シミュレーション期間を制御するため、[シミュレーションの停止] パラメーターを選択し、目標誤り数を100
に設定し、シンボルの最大数を1e6
に設定します。
ビット エラー レートの評価
設定した EbN0 の範囲についてこのコードを実行してモデルをシミュレートし、ビット エラー レート曲線を作成します。
シミュレーション結果をパンクチャド符号ビット エラー確率の境界近似値と比較します [1]。符号化率 のパンクチャド符号のビット エラー レート性能は、次式のように上に有界となります。
この式において、erfc
は相補誤差関数を示し、 は符号化率を示します。 と はどちらも個々のコードに依存します。この例で示す符号化率 3/4 の符号の場合、 = 5、 = 42、 = 201、 = 1492 などのようになります。詳細については、参考文献 [ 1 ] を参照してください。
2:0.02:5
における Eb/N0 の値の積算の最初の 7 項を使用して、理論的な境界の近似値を計算します。nerr
で使用する値は参考文献 [ 2 ] の Table II から取得します。
シミュレーション結果、近似曲線、および理論的な境界をプロットします。
場合によっては、下方ビットのエラー レートが限界より少し上回るようなシミュレーション結果になることがあります。これは、復号器のトレースバック長が有限なためです。または、ビット エラーの観測個数が 500 個未満の場合はシミュレーションのばらつきによるものです。
パンクチャを行わない畳み込み符号化を示す例については、誤りの検出と訂正の「軟判定復号化」のセクションを参照してください。
参考文献
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.
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.
固定小数点のビタビ復号化と理論計算の比較
Viterbi Decoderブロックを固定小数点の硬判定畳み込み復号化と軟判定畳み込み復号化に使用します。Bit Error Rate Analysisアプリで計算された理論上の上限と結果を比較します。
シミュレーションの構成
cm_viterbi_harddec_fixpt
モデルおよび cm_viterbi_softdec_fixpt
モデルは、同様のレイアウトを使用して、ビタビ復号化器の固定小数点モデリング属性を強調表示します。モデルの既定の構成では、PreLoadFcn
コールバックを使用して、AWGN Channelブロックの の設定を 4 dB に指定します。畳み込み符号化器は、符号化率 1/2 の符号化器として構成されます。具体的には、2 ビットごとに、符号化器がさらに 2 つの冗長ビットを追加します。符号化率に対応するため、AWGN ブロックの [Eb/No (dB)] パラメーターは、割り当てられた の設定から 10*log10(2)
を差し引くことにより、半分にされます。Error Rate Calculationブロックの実行期間を 100 エラーまたは 1e6 ビットに制限します。
固定小数点モデリング
固定小数点モデリングは、ハードウェア実装の検討およびデータとパラメーターのダイナミック レンジを考慮に入れたビットトゥルー シミュレーションを有効にします。たとえば、対象のハードウェアが DSP マイクロプロセッサである場合、可能性のある語長は 8、16、または 32 ビットであり、ターゲット ハードウェアが ASIC または FPGA の場合は語長の選択に柔軟性があります。
固定小数点のビタビ復号化を有効にするための条件は、次のとおりです。
硬判定の場合、ブロック入力は ufix1 型 (語長 1 の符号なし整数) でなければなりません。この入力 ( a 0 または a 1 のいずれか) に基づき、内部分岐メトリクスは、トレリス構造体に指定された (硬判定例の場合は 2 に等しい) ように、語長の符号なし整数 = (出力ビットの数) を使用して計算されます。
軟判定の場合、ブロック入力は ufixN 型 (語長 N の符号なし整数) でなければなりません。ここで、N は固定長小数点の復号化を有効にするための軟判定ビットの数です。ブロック入力は、0 ~ の範囲の整数でなければなりません。内部分岐メトリクスは、トレリス構造体に指定された (軟判定例の場合は 4 に等しい) ように、語長の符号なし整数 = (N + 出力ビットの数 - 1) を使用して計算されます。
[State metric word length] は、ユーザーによって指定され、通常は既に計算されている分岐メトリクス語長よりも長くなければなりません。これは、システム用に記録されたデータを確認することによって、最も適した値に (ハードウェアやデータの検討に基づいて) 調整することができます。
ログを有効にするため、[アプリ]、[固定小数点ツール] を選択します。[固定小数点設定] メニューで、[固定小数点のインストルメンテーション モード] を [Minimums, maximums and overflows]
に設定し、シミュレーションを再実行します。オーバーフローが確認できた場合は、データが選択したコンテナーに収まらなかったことを示しています。データを処理する前にデータのスケーリングを行うか、語長のサイズを増やしてみる (ハードウェアで許可されている場合) ことができます。データの最小値と最大値に基づいて、選択したコンテナーが適切なサイズであるかどうかを判断することもできます。
[State metric word length] のさまざまな値でシミュレーションを実行して、その値のアルゴリズムへの影響を理解します。BER の結果に悪影響を及ぼさない適切な値になるようにパラメーターを絞り込むこともできます。
cm_viterbi_harddec_fixpt
モデルの硬判定構成:
BPSK Demodulator Basebandは、復号化器に渡される硬判定を生成します。
Data Type Conversion (Simulink)ブロックは
Mode
パラメーターをFixed point
に設定し、出力データ型をfixdt(0,1,0)
にキャストします。Viterbi Decoderブロックに対する信号入力はufix1
です。
Viterbi Decoder ブロックの
Decision type
パラメーターはHard decision
に設定されます。[Data Types] タブでは、State metric word length
が4
に設定され、Output data type
がboolean
に設定されます。ビット エラー レートが表示され、ワークスペース変数BER
に取得されます。
cm_viterbi_softdec_fixpt
モデルの軟判定構成:
BPSK Demodulator Basebandは、対数尤度比を使用して軟判定を生成します。これらの軟出力は、3 ビットで量子化され、復号化器に渡されます。
Quantizer サブシステム (Gain (Simulink)、Scalar Quantizer Encoder、Data Type Conversion (Simulink)ブロックを含む) は信号を量子化し、出力データ型を
fixdt(0,3,0)
にキャストします。Viterbi Decoderブロックに対する信号入力はufix3
です。
Viterbi Decoderブロックでは、
Decision type
パラメーターはSoft decision
、Number of soft decision bits
は 3 に設定されています。[Data Types] タブでは、State metric word length
が6
、Output data type
がboolean
に設定されています。ビット エラー レートが表示され、ワークスペース変数BER
に取得されます。
硬判定と軟判定の復号化の比較
2 つのモデルは、Bit Error Rate Analysis アプリ内から実行してシミュレーション曲線を生成し、硬判定復号化と軟判定復号化の BER 性能を比較するように構成されています。
以下に概説する手順に従って、次のプロットで結果を生成できます。
以下の手順により、理論値と固定小数点の硬判定/軟判定ビタビ復号化のシミュレーション結果が生成されます。
[アプリ] タブで選択するか、MATLAB コマンド プロンプトで
bertool
と入力して、Bit Error Rate Analysis アプリを開きます。[Theoretical] ペインで、[Eb/N0 range] を 2:5 に設定し、[Channel type] を
[AWGN]
に設定し、[Modulation type] を[PSK]
に設定し、[Channel coding] を[Convolutional]
に設定し、[Decision method] を[Hard]
に設定して実行した後[Soft]
に設定して実行します。理論上の結果の硬判定データ セットと軟判定データ セットを識別できるように、[BER Data Set] の名前を変更します。[Monte Carlo] ペインで、[Eb/N0 range] を 2:1:5 に設定し、[Simulation environment] で
[Simulink]
を選択し、[BER variable name] を[BER]
に設定し、[Simulation limits] の [Number of errors] を 100、[Number of bits] を 1e6 に設定します。[Model name] をcm_viterbi_harddec_fixpt
に設定して実行した後cm_viterbi_softdec_fixpt
に設定して実行します。Simulink の結果の硬判定データ セットと軟判定データ セットを識別できるように、[BER Data Set] の名前を変更します。
この 4 回の実行により、アプリは次のイメージのようになります。
倍精度データとの比較
さらに詳しく調べるために、Apps > Fixed-Point Tool
を選択して、倍精度データで同じモデルを実行できます。Fixed-Point Tool
アプリで、Data type override
を選択して Double
にします。この選択によって、すべてのブロックのすべてのデータ型設定がオーバーライドされて倍精度を使用します。Viterbi Decoder ブロックでは、Output type
が boolean
に設定されているため、このパラメーターも double
に設定しなければなりません。
モデルのシミュレーション時に、倍精度と固定小数点の BER の結果が同じであることに注意してください。これらが同じになるのは、精度の低下を避け、メモリ効率を最適化するためにモデルの固定小数点パラメーターが選択されているためです。
拡張例
テールバイティング畳み込み符号化
Convolutional Encoder ブロックと Viterbi Decoder ブロックを使用して、テールバイティング畳み込み符号をシミュレートする。
端子
入力
In — 畳み込み符号化されたコードワード
列ベクトル
畳み込み符号化されたコードワード。列ベクトルとして指定します。復号化器が N 入力ビット ストリームを取る (つまり、2N の入力シンボル候補を受信できる) 場合、ブロックの入力ベクトルの長さはある正の整数 L に対して L×N になります。詳細については、入力および出力サイズ、入力値と判別タイプ、および Operation mode
パラメーターを参照してください。
この端子は 2 番目の入力端子が有効になるまでは名前なしになります。
データ型: double
| single
| Boolean
| int8
| int16
| int32
| uint8
| uint16
| uint32
| ufixn
Era — コードワードの消去ビット
バイナリ値ベクトル
コードワードの消去ビット。バイナリ値ベクトルとして指定します。ベクトルの 1
の値は消去されたビットに対応し、0
の値は消去されていないビットに対応します。
受信するデータ ストリームでこれらを消去する場合、復号化器は分岐メトリクスを更新しません。消去および入力のデータ端子の幅とサンプル時間は、同じでなければなりません。
依存関係
この端子を有効にするには、[Enable erasures input port] を選択します。
データ型: double
| Boolean
Rst — 復号化器レジスタの状態をリセットするオプション
scalar
復号化器レジスタの状態をリセットするオプション。スカラー値として指定します。この端子が非ゼロの入力値を受け取った場合、ブロックは入力データを処理する前に内部メモリを初期状態に設定します。復号化器レジスタを初期状態にリセットすることで、次のように設定されます。
すべて 0 の状態メトリクス: 0
他のすべての状態メトリクス: 最大値
トレースバック メモリ: 0
このブロックにリセット端子を使用することは、Convolutional Encoder ブロックで [Operation mode] を [Reset on nonzero input via port]
に設定することと同じです。
依存関係
この端子を有効にするには、[Operation mode] パラメーターを [Continuous]
に設定し、[Enable reset input port] を選択します。
データ型: double
| Boolean
出力
Out — 出力メッセージ
バイナリ列ベクトル
出力メッセージ。バイナリ列ベクトルとして返されます。復号化器が K 個の出力ビット ストリームを生成する (つまり、2K 個の出力シンボル候補を生成できる) 場合、ブロックの出力ベクトルの長さはある正の整数 L に対して L×K になります。詳細については、入力および出力サイズを参照してください。
この端子はブロック アイコンで名前なしになります。
データ型: double
| single
| Boolean
| int8
| int16
| int32
| uint8
| uint16
| uint32
| ufix1
パラメーター
ブロック パラメーターを対話的に編集するには、プロパティ インスペクターを使用します。Simulink® ツールストリップの [シミュレーション] タブの [準備] ギャラリーで [プロパティ インスペクター] を選択します。
メインTrellis structure — 畳み込み符号のトレリス表現
poly2trellis(7,[171 133])
(既定値)
畳み込み符号のトレリス表現。符号化率 K / N の符号に対するトレリス表現を含む構造体として指定します。K は入力ビット ストリーム数を表し、N は出力ビット ストリーム数を表します。
トレリス構造体は、関数 poly2trellis
を使用して作成するか、手動で作成することができます。この構造体の詳細については、畳み込み符号のトレリス表現および関数 istrellis
を参照してください。
トレリス構造体には次のフィールドがあります。
numInputSymbols — 符号化器への入力シンボルの数
2K
符号化器への入力シンボルの数。2K と等しい整数として指定します。ここで、K は入力ビット ストリームの数です。
numOutputSymbols — 符号化器からの出力シンボルの数
2N
符号化器からの出力シンボルの数。2N と等しい整数として指定します。ここで、N は出力ビット ストリームの数です。
numStates — 符号化器内の状態の数
2 のべき乗
符号化器内の状態の数。2 のべき乗として指定します。
nextStates — 次の状態
整数の行列
現在の状態と現在の入力のすべての組み合わせの次の状態。整数の行列として指定します。行列のサイズは numStates
行 2K 列でなければなりません。
outputs — 出力
8 進数の行列
現在の状態と現在の入力のすべての組み合わせの出力。8 進数の行列として指定します。行列のサイズは numStates
行 2K 列でなければなりません。
Punctured code — コード パンクチャの指定を有効にするオプション
off
(既定値) | on
[Puncture vector] 端子を表示して有効にするには、このパラメーターを選択します。
Puncture vector — パンクチャ パターン ベクトル
[1; 1; 0; 1; 0; 1]
(既定値) | 列ベクトル
復号化されたデータをパンクチャするためのパンクチャ パターン ベクトル。列ベクトルとして指定します。ベクトルには 1
と 0
が含まれている必要があります。ここで、0
はパンクチャされたビットの位置を示します。このパンクチャ パターンは畳み込み符号化器によって使用されるパンクチャ パターンと一致しなければなりません。
特定のレートや多項式で一般的に使用するパンクチャ パターンについては、Yasuda[4]、Haccoun[5]、および Begin[6]の各参考文献を参照してください。
依存関係
このパラメーターは、[Punctured code] パラメーターを選択した場合にのみ表示されます。
Enable erasures input port — 消去入力端子を有効にするオプション
off
(既定値) | on
ブロックに Era
入力端子を追加するには、このパラメーターを選択します。
Decision type — 復号化器判定タイプ
Unquantized
(既定値) | Hard Decision
| Soft decision
復号化器判定タイプ。[Unquantized]
、[Hard decision]
、または [Soft Decision]
として指定します。
Unquantized
— 復号化器は、ユークリッド距離を使用して分岐メトリクスを計算します。入力データは量子化されていない倍精度または単精度の軟判定値の実数値ベクトルでなければなりません。オブジェクトは、正の値を logical1
に、負の値を logical0
にマッピングしますHard decision
— 復号化器は、ハミング距離を使用して分岐メトリクスを計算します。入力は0
または1
の硬判定値のベクトルでなければなりません。入力のデータ型は、倍精度、単精度、logical、または数値でなければなりません。Soft Decision
— 復号化器は、ハミング距離を使用して分岐メトリクスを計算します。入力には、0 と 2SoftInputWordLength – 1 の間の整数として表される量子化された軟判定値のベクトルが必要です。入力のデータ型は、倍精度、単精度、logical、または数値でなければなりません。あるいは、[Number of soft decision bits] パラメーターに指定する語長と等しい語長 ("SoftInputWordLength") でfi
(Fixed-Point Designer) オブジェクトを使用して、符号なしおよびスケーリングなしの固定小数点オブジェクトとしてデータ型を指定できます。0
は最も信頼性の高い0
と見なされ、2SoftInputWordLength – 1 は最も信頼性の高い1
と見なされます。
Number of soft decision bits — 軟入力の語長
4
(既定値) | 正の整数
それぞれの量子化された軟入力値に対するビット数を表す軟入力の語長。整数として指定します。
依存関係
このパラメーターは、[Decision type] パラメーターを [Soft decision]
に設定したときにのみ表示されます。
Error if quantized input values are out of range — 量子化入力値が範囲外の場合にエラーを発生させるオプション
off
(既定値) | on
量子化入力値が範囲外の場合にエラーを発生させるには、このパラメーターを選択します。このパラメーターが選択されていない場合、範囲外の入力値は無視されます。
依存関係
このパラメーターは、[Decision type] パラメーターを [Hard decision]
または [Soft decision]
に設定したときにのみ表示されます。
Traceback depth — Traceback depth
34
(既定値) | 正の整数
トレースバック長。各トレースバック パスを構築するために使用されるトレリス分岐の数を示す整数として指定します。
トレースバック長は復号化遅延に影響を与えます。復号化遅延は、出力の最初に復号化されるシンボルよりも前の 0 シンボルの数です。
連続操作モードの場合、復号化遅延はトレースバック長シンボルの数と同じです。
打ち切られた操作モードまたは終了した操作モードの場合、復号化遅延は 0 です。この場合、トレースバック長は、各入力のシンボルの数以下でなければなりません。
一般的な推定として、標準のトレースバック長の値は (ConstraintLength – 1) / (1 – coderate) の約 2 倍から 3 倍になります。符号の拘束長 ConstraintLength は (log2(trellis
.numStates
) + 1) に等しくなります。coderate は (K / N) × (length(PuncturePattern) / sum(PuncturePattern) に等しくなります。
K は入力シンボルの数、N は出力シンボルの数、および PuncturePattern はパンクチャ パターン ベクトルです。
たとえば、この一般的な推定を適用することで、次のようなおおよそのトレースバック長が得られます。
符号化率 1/2 の符号のトレースバック長は 5(ConstraintLength – 1) です。
符号化率 2/3 の符号のトレースバック長は 7.5(ConstraintLength – 1) です。
符号化率 3/4 の符号のトレースバック長は 10(ConstraintLength – 1) です。
符号化率 5/6 の符号のトレースバック長は 15(ConstraintLength – 1) です。
詳細については、[7]を参照してください。
Operation mode — 符号化フレームの終了方法
Continuous
(既定値) | Truncated
| Terminated
連続する入力フレーム間の遷移方法。以下のいずれかのモードの値として指定します。
[Continuous]
— ブロックは次のフレームで使用するために、各入力の最後で内部状態メトリクスを保存します。各トレースバック パスは、独立して扱われます。このモードでは、符号化率 K/N の畳み込み符号に対する復号化遅延が Traceback depth×K ゼロ ビットになります。K はメッセージ シンボルの数、N は符号化されたシンボルの数です。[Enable reset input port] が選択されている場合、Rst
端子が非ゼロの値を受け取ると、復号化器の状態がリセットされます。[Truncated]
— ブロックは各入力を個別に扱います。トレースバック パスは最良のメトリクスの状態で開始し、常にすべて 0 の状態で終了します。このモードは、対応する Convolutional Encoder ブロックがその [Operation mode] をTruncated (reset every frame)
に設定するときに適切です。このモードでは、出力遅延が発生しません。[Terminated]
— ブロックは各入力を個別に扱い、トレースバック パスはすべて 0 の状態で開始し、終了します。このモードは、コード化されていないメッセージ信号 (つまり、対応する Convolutional Encoder ブロックへの入力) が各入力の末尾に、フィードフォワード符号化器のすべてのメモリ レジスタを埋めるのに充分な 0 がある場合に適しています。具体的には、入力ストリームがk
個で拘束長ベクトルconstr
(多項式表現を使用) をもつ符号化器の場合、入力の最後に少なくともk*max(constr-1)
個の 0 があることになります。フィードバック符号化器の場合、このモードは、対応する Convolutional Encoder ブロックで [Operation mode] が[Terminate trellis by appending bits]
に設定されている場合には適しています。
メモ
ブロックがシミュレーション中に長さが異なるシーケンスを出力し、[Operation mode] を [Truncated]
または [Terminated]
に設定すると、すべての入力タイム ステップで復号化器の状態がリセットされます。
入力信号にシンボルが 1 つしか含まれていない場合は、[Continuous]
操作モードを使用します。
Enable reset input port — リセット入力端子を追加するオプション
off
(既定値) | on
Rst
入力端子を追加にするには、このパラメーターを選択します。
依存関係
このパラメーターは、[Operation mode] パラメーターを [Continuous]
に設定したときにのみ表示されます。
Delay reset action to next time step — 次のタイム ステップまでリセット アクションを遅延するオプション
off
(既定値) | on
現在のタイム ステップで受信した符号化データを計算するまで復号化器のリセットを遅延させるには、このパラメーターを選択します。このオプションは HDL サポートのために有効にしなければなりません。HDL コードを生成するには、HDL Coder™ ソフトウェアが必要です。
依存関係
このパラメーターは、[Operation mode] パラメーターを [Continuous]
に設定し、[Enable reset input port] を選択したときにのみ表示されます。
State metric word length — 状態メトリクス語長
16
(既定値) | 正の整数
状態メトリクス語長。正の整数として指定します。
Output data type — 出力データ型
Inherit via internal rule
(既定値) | Smallest unsigned integer
| double
| single
| int8
| uint8
| int16
| uint16
| int32
| uint32
| boolean
出力データ型。double
、single
、boolean
、int8
、uint8
、int16
、uint16
、int32
、または uint32
として指定するか、'Inherit via internal rule'
または 'Smallest unsigned integer'
に設定します。
'Smallest unsigned integer'
に設定されると、出力データ型は、モデルの [コンフィギュレーション パラメーター] ダイアログ ボックスの [ハードウェア実行] ペインで使用されている設定に基づいて選択されます。ASIC/FPGA
が [ハードウェア実行] ペインで選択されると、出力データ型はufix(1)
になります。他のすべての選択の場合は、char 値に対応する指定された最も小さな語長 (たとえばuint8
) の符号なし整数です。'Inherit via internal rule'
に設定した場合、ブロックは次のようになります。double の入力に対してデータ型 double を出力
single の入力に対してデータ型 single を出力
他のすべてのデータ型入力に対しては
'Smallest unsigned integer'
オプションと同様の動作
ブロックの特性
詳細
入力および出力サイズ
畳み込み符号が 2N 個のシンボル候補のアルファベットを使用する場合、入力ベクトルの長さは、ある正の整数 L に対して L×N でなければなりません。同様に、復号化されたデータが 2K 個の出力シンボル候補のアルファベットを使用する場合、出力ベクトルの長さは L×K になります。
このブロックは、L の正の整数値のある列ベクトル入力信号を受け入れます。可変サイズの入力の場合、L はシミュレーション中に変化する可能性があります。ブロックの処理は、処理モード パラメーターによって管理されます。
次の表は、入力端子と出力端子でサポートされるデータ型を示しています。
端子 | サポートされているデータ型 |
---|---|
入力 |
|
出力 |
|
入力値と判別タイプ
入力ベクトルのエントリは、[Decision type] パラメーターに応じて、バイポーラ実数、バイナリ、整数データのいずれかになります。
Decision type パラメーター | 復号化器入力の可能なエントリ | 値の解釈 | 分岐メトリクス計算 |
---|---|---|---|
| 実数 [–1012, 1012] の範囲外の入力値はそれぞれ –1012 と 1012 にクリップされます。 | 正の実数: 論理 0 負の実数: 論理 1 | Euclidean 距離 |
| 0, 1 | 0: 論理 0 1: 論理 1 | ハミング距離 |
| 0 から 2b-1 までの整数。ここで、b は [Number of soft decision bits] パラメーターです。 | 0: 論理 0 に対する最も信頼性の高い判定 2b-1: 論理 1 に対する最も信頼性の高い判定 その他の値は、比較的信頼性の低い判定を表します。 | ハミング距離 |
軟判定状況をより明確にするために、次の表は 3 ビット軟判定に対する値の解釈を示しています。
入力値 | 解釈 |
---|---|
0 | 最も信頼性の高い 0 |
1 | 2 番目に信頼性の高い 0 |
2 | 3 番目に信頼性の高い 0 |
3 | 最も信頼性の低い 0 |
4 | 最も信頼性の低い 1 |
5 | 3 番目に信頼性の高い 1 |
6 | 2 番目に信頼性の高い 1 |
7 | 最も信頼性の高い 1 |
固定小数点信号の流れ図
ビタビ復号化アルゴリズムには 3 つの主なコンポーネントがあります。それらは、分岐メトリクス計算 (BMC)、追加比較と選択 (ACS)、およびトレースバック復号化 (TBD) です。次の図は、符号化率 k/n の符号の信号の流れを示しています。
次の図は、符号化率 1/2、nsdec = 3 の信号の流れの BMC を示しています。
次の図は、ユーザーによってマスクに WL2
が指定された ACS コンポーネントのサイクルを示しています。
これらの流れ図では、inNT、bMetNT、stMetNT、および outNT は numerictype
(Fixed-Point Designer) オブジェクトであり、bMetFIMATH と stMetFIMATH は fimath (Fixed-Point Designer)
オブジェクトです。
参照
[1] Clark, George C., and J. Bibb Cain. Error-Correction Coding for Digital Communications. Applications of Communications Theory. New York: Plenum Press, 1981.
[2] Gitlin, Richard D., Jeremiah F. Hayes, and Stephen B. Weinstein. Data Communications Principles. Applications of Communications Theory. New York: Plenum Press, 1992.
[3] Heller, J., and I. Jacobs. “Viterbi Decoding for Satellite and Space Communication.” IEEE Transactions on Communication Technology 19, no. 5 (October 1971): 835–48. https://doi.org/10.1109/TCOM.1971.1090711.
[4] Yasuda, Y., K. Kashiki, and Y. Hirata. “High-Rate Punctured Convolutional Codes for Soft Decision Viterbi Decoding.” IEEE Transactions on Communications 32, no. 3 (March 1984): 315–19. https://doi.org/10.1109/TCOM.1984.1096047.
[5] Haccoun, D., and G. Begin. “High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding.” IEEE Transactions on Communications 37, no. 11 (November 1989): 1113–25. https://doi.org/10.1109/26.46505.
[6] Begin, G., D. Haccoun, and C. Paquin. “Further Results on High-Rate Punctured Convolutional Codes for Viterbi and Sequential Decoding.” IEEE Transactions on Communications 38, no. 11 (November 1990): 1922–28. https://doi.org/10.1109/26.61470.
[7] Moision, B. "A Truncation Depth Rule of Thumb for Convolutional Codes." In Information Theory and Applications Workshop (January 27 2008-February 1 2008, San Diego, California), 555-557. New York: IEEE, 2008.
拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
メモ
打ち切られたモードまたは終了したモード、またはパンクチャされた符号で符号化されたデータを復号化する場合、Viterbi Decoder (Wireless HDL Toolbox) ブロックを使用します。Wireless HDL Toolbox™ ブロックは、ハードウェアと親和性の高い制御信号を使用する HDL 最適化アルゴリズムを提供し、Simulink で HDL アルゴリズムのレイテンシをシミュレートします。
HDL Coder は、HDL の実装および合成ロジックに影響を与える、追加の構成オプションを提供します。
HDL Coder は、Viterbi Decoder ブロックの以下の機能をサポートします。
フィードフォワード トレリスとシンプル シフト レジスタ生成構成がある非再帰の符号化器/復号化器
連続モード
サンプル ベースの入力
1/2 から 1/7 への復号化器レート
3 から 9 への拘束長
[Decision type] を [Soft decision]
に設定すると、固定小数点の入力データ型および出力データ型に対して HDL コード生成がサポートされます。入力の固定小数点データ型は ufixN
でなければなりません。N
は軟判定ビットの数です。HDL コード生成は、符号付き組み込みデータ型 (int8
、int16
、int32
) ではサポートされていません。
[Decision type] を [Hard decision]
に設定すると、データ型が ufix1
および Boolean
の入力に対して HDL コード生成がサポートされます。HDL コード生成は double および single の入力データ型ではサポートされていません。
Viterbi Decoder ブロックは、ブロックに定義されたトレースバック長をトレースバックすることによって各ビットを復号化します。このブロックは各判定ビットに完全なトレースバックを実装します。このとき、トレースバック復号化ユニットに最小状態インデックスと分岐判定を保存するためにレジスタを使用します。トレースバック ロジックを最適化する 2 つの方法として、パイプライン化されたレジスタ ベースの実装と RAM ベースのアーキテクチャがあります。ビタビ復号化器用の HDL コードの生成の例を参照してください。
生成された回路の速度を向上させるために、トレースバック復号化ユニットのパイプライン化を指定できます。パイプライン レジスタごとにトレースバック ステージの数を指定することにより、パイプライン レジスタをトレースバック ユニットに追加できます。
TracebackStagesPerPipeline
実装パラメーターを使用すると、システム要件に基づいて回路性能のバランスをとることができます。小さいパラメーター値は、トレースバック回路の速度を向上させるためにレジスタを追加する必要があることを示します。パラメーター値を大きくすると、回路速度の低下に加えて、必要なレジスタの数が少なくなります。
レジスタを使用する代わりに、RAM を使用して生き残りパス情報を保存できます。RAM ベースのトレースバックを使用する場合、符号化器は [Enable reset input port] をサポートしません。
ブロックを右クリックし、[HDL コード] 、 [HDL ブロック プロパティ] を開きます。[Architecture] プロパティを
[RAM-based Traceback]
に設定します。ブロックをダブルクリックし、Viterbi Decoder ブロック マスクの [Traceback depth] を設定します。
RAM ベースのトレースバックとレジスタ ベースのトレースバックには、次のような違いがあります。
RAM ベースの実装では、データの 1 つのセットがトレースバックされ、データの以前のセットを復号化するための初期状態が検索されます。レジスタ ベースの実装では、トレースバックと復号化オプションが 1 つのステップに組み合わされます。最小の操作で見つかった最良の状態が復号化初期状態として使用されます。
RAM ベースの実装では、M 個のサンプルがトレース バックされ、逆の順序で以前の M ビットが復号化されます。その後、各クロック サイクルで 1 ビットが順に解放されます。レジスタ ベースの実装では、完全なトレースバックの後に 1 ビットが復号化されます。
2 つのトレースバック アルゴリズムの違いにより、RAM ベースの実装では、レジスタ ベースのトレースバックとは異なる数値結果が得られます。RAM ベースのトレースバックでは、長いトレースバック長 (拘束長の 10 倍など) が推奨されます。それにより、レジスタ ベースの実装と同様のビット エラー レート (BER) が得られます。実装に必要な RAM のサイズは、トレリスとトレースバック長により異なります。
ConstrainedOutputPipeline | 設計内で既存の遅延を移動することによって出力に配置するレジスタの数。分散型パイプラインは、これらのレジスタを再分散しません。既定の設定は |
InputPipeline | 生成コードに挿入する入力パイプライン ステージの数。分散型パイプラインと制約付き出力パイプラインは、これらのレジスタを移動できます。既定の設定は |
OutputPipeline | 生成コードに挿入する出力パイプライン ステージの数。分散型パイプラインと制約付き出力パイプラインは、これらのレジスタを移動できます。既定の設定は |
TracebackStagesPerPipeline | レジスタ ベースのトレースバックを参照してください。 |
Punctured code: このオプションは選択しないでください。パンクチャド符号では、HDL Coder でサポートされていないフレームベースの入力が必要です。
Decision type: 符号化器は
[Unquantized]
判定タイプをサポートしていません。Error if quantized input values are out of range: 符号化器はこのオプションをサポートしていません。
Operation mode: 符号化器は
[Continuous]
モードのみをサポートしています。Enable reset input port: [Enable reset input port] と [Delay reset action to next time step] をどちらも有効にすると、HDL サポートが提供されます。
[Continuous]
操作モードを選択し、レジスタ ベースのトレースバックを使用しなければなりません。Resettable Synchronous Subsystem (HDL Coder) 内で Viterbi Decoder ブロックを使用することはできません。
バージョン履歴
R2006a より前に導入R2022b: バージョン履歴
[–1012, 1012] の範囲外の量子化されていない入力値はそれぞれ –1012 と 1012 にクリップされます。
参考
ブロック
関数
オブジェクト
トピック
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)