Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

comm.ViterbiDecoder

ビタビ アルゴリズムを使用した畳み込み符号化されたデータの復号化

説明

ViterbiDecoder オブジェクトは、入力シンボルを復号化して、バイナリの出力シンボルを生成します。このオブジェクトは、高速パフォーマンスを実現するために複数のシンボルを一度に処理できます。このオブジェクトは可変サイズの信号を処理しますが、可変サイズの信号は消去入力には利用できません。

入力シンボルを復号化して、バイナリの出力シンボルを生成するには、以下の手順に従います。

  1. ビタビ復号化器オブジェクトを定義および設定します。構築を参照してください。

  2. step を呼び出して、comm.ViterbiDecoder のプロパティに従い、入力シンボルを復号化します。step の動作は、ツールボックスの各オブジェクト固有のものです。

メモ

R2016b 以降では、step メソッドを使用して、System object™ によって定義された演算を実行する代わりに、引数を関数であるかのように使ってオブジェクトを呼び出すことができます。たとえば、y= step(obj,x)y = obj(x) は同等の演算を実行します。

構築

H = comm.ViterbiDecoder は、ビタビ復号化器 System object H を作成します。このオブジェクトは、ビタビ アルゴリズムを使用して、畳み込み符号化された入力データを復号化します。

H = comm.ViterbiDecoder(Name,Value) は、指定された各プロパティ セットを指定された値に設定して、ビタビ復号化器オブジェクト H を作成します。(Name1,Value1,...,NameN,ValueN) のように、追加の名前と値のペアの引数を任意の順番で指定できます。

H = comm.ViterbiDecoder(TRELLIS,Name,Value) はビタビ復号化器オブジェクト H を作成します。このオブジェクトは、TrellisStructure プロパティを TRELLIS に設定しており、指定の他のプロパティは指定の値に設定しています。

プロパティ

TrellisStructure

畳み込み符号のトレリス構造体

トレリスを、畳み込み符号のトレリス表現を含む MATLAB® 構造体として指定します。既定の設定は、poly2trellis(7,[171 133]) の結果です。構造体が有効なトレリスかどうかを確認するには、関数 istrellis を使用します。

InputFormat

入力形式

復号化器への入力形式を UnquantizedHard または Soft として指定します。既定の設定は Unquantized です。

このプロパティを Unquantized に設定した場合、入力は量子化されていない倍精度または単精度の軟判定値の実数ベクトルでなければなりません。オブジェクトは負の数を 1 とみなし、正の数を 0 とみなします。

このプロパティを Hard に設定した場合、入力は 0 または 1 の硬判定値のベクトルでなければなりません。入力のデータ型は、倍精度、単精度、論理、8、16、および 32 ビットの符号付き整数にできます。8、16、および 32 ビット符号なし整数も使用できます。

このプロパティを Soft に設定した場合、入力は 0 と の間の整数として表される量子化された軟判定値のベクトルでなければなりません。入力のデータ型は、倍精度、単精度、論理、8、16、および 32 ビットの符号付き整数にできます。8、16、および 32 ビット符号なし整数も使用できます。あるいは、データ型を、語長が SoftInputWordLength プロパティで指定する語長に等しい符号なしおよびスケーリングなしの固定小数点オブジェクト (fi) に指定することもできます。オブジェクトは負の数を 0 とみなし、正の数を 1 とみなします。

SoftInputWordLength

軟入力の語長

それぞれの量子化された軟入力値を表すビットの数を正の整数スカラー値として指定します。既定の設定は 4 ビットです。このプロパティは、InputFormat プロパティを Soft に設定した場合に適用されます。

InvalidQuantizedInputAction

入力値が範囲外の場合のアクション

入力値が範囲外の場合にオブジェクトが取るアクションを Ignore または Error として指定します。既定の設定は Ignore です。このプロパティを Error に設定すると、量子化された入力値が範囲外の場合、オブジェクトはエラーを生成します。このプロパティは、InputFormat プロパティを Hard または Soft に設定した場合に適用されます。

TracebackDepth

Traceback depth

各トレースバック パスを構築するために使用されるトレリス分岐の数を、数値、整数スカラー値として指定します。既定の設定は 34 です。トレースバック長は復号化の精度と遅延に影響を与えます。最初に復号化される出力のシンボルよりも前のゼロ シンボルの数が復号化遅延を表します。

TerminationMethod プロパティを Continuous に設定した場合、復号化遅延は符号化率 K/N の畳み込み符号の TracebackDepth×K ゼロ ビットで構成されます。

TerminationMethod プロパティを Truncated または Terminated に設定した場合、出力遅延はありません。

詳細は、トレースバックと復号化の遅延トレースバック長の推定値を参照してください。

TerminationMethod

符号化フレームの終了方法

終了手法を ContinuousTruncated または Terminated のいずれかとして指定します。既定の設定は Continuous です。

Continuous モードでは、オブジェクトは次のフレームで使用するために、各フレームの最後で内部状態メトリクスを保存します。オブジェクトは、各トレースバック パスを個別に扱います。

Truncated モードの場合、オブジェクトは各フレームを個別に扱います。トレースバック パスは最良のメトリクスで始まり、常にすべて 0 の状態で終了します。Terminated モードでは、オブジェクトは各フレームを個別に扱い、トレースバック パスはすべて 0 の状態で開始し、終了します。

ResetInputPort

復号化器リセット入力を有効にする

このプロパティを true に設定すると、追加の step メソッド入力が有効になります。既定の設定は false です。このリセット入力が非ゼロ値の場合、オブジェクトは復号化器の内部状態を初期条件にリセットします。このプロパティは、TerminationMethod プロパティを Continuous に設定した場合に適用されます。

DelayedResetAction

Reset on nonzero input via port

オブジェクト出力のリセットを遅延させるには、このプロパティを true に設定します。既定値は偽です。このプロパティを true に設定すると、オブジェクトが復号化されたデータを計算した後に、復号化器の内部状態のリセットが行われます。このプロパティを false に設定すると、オブジェクトが復号化されたデータを計算する前に、復号化器の内部状態のリセットが行われます。このプロパティは、ResetInputPort プロパティを true に設定した場合に適用されます。

PuncturePatternSource

パンクチャ パターンのソース

パンクチャ パターンのソースを None または Property として指定します。既定の設定は None です。

このプロパティを None に設定すると、オブジェクトはパンクチャを行いません。PuncturePattern プロパティで指定したパンクチャ パターン ベクトルに基づいてパンクチャされた符号語を復号化するには、このプロパティを Property に設定します。

PuncturePattern

パンクチャ パターン ベクトル

符号化されたデータをパンクチャするパンクチャ パターンを指定します。既定の設定は [1; 1; 0; 1; 0; 1] です。パンクチャ パターンは 10 からなる列ベクトルです。0 はダミーのビットの挿入位置です。パンクチャ パターンは符号化器によって使用されるパンクチャ パターンと一致しなければなりません。このプロパティは、PuncturePatternSource プロパティを Property に設定した場合に適用されます。

ErasuresInputPort

消去入力を有効にする

消去のベクトルを step メソッド入力として指定するには、このプロパティを true に設定します。既定の設定は false です。消去入力は、倍精度または論理、バイナリ列ベクトルでなければなりません。このベクトルは、消去する入力符号語のシンボルを示します。1 の値は消去されたビットを示します。受信するデータ ストリームで消去する場合、復号化器は分岐メトリクスを更新しません。

step メソッドの消去入力の長さと step メソッドのデータ入力の長さは同じでなければなりません。このプロパティを false に設定すると、オブジェクトは消去を行いません。

OutputDataType

出力のデータ型

出力のデータ型を Full precisionSmallestunsigned integerdoublesingleint8uint8int16uint16int32uint32 または logical として指定します。既定の設定は Full precision です。

入力信号が整数データ型であると、Smallestunsigned integer または Full precision モードでこのプロパティを使用するには Fixed-Point Designer™ ユーザー ライセンスがなければなりません。

 固定小数点プロパティ

メソッド

resetビタビ復号化器オブジェクトの状態のリセット
stepビタビ アルゴリズムを使用した畳み込み符号化されたデータの復号化
すべての System object に共通
release

System object のプロパティ値の変更の許可

すべて折りたたむ

畳み込み符号化され、8-DPSK 変調されたビット ストリームを AWGN チャネル経由で送信します。次に、ビタビ復号化器を使用して復調と復号化を行います。

必要な System object を作成します。

hConEnc = comm.ConvolutionalEncoder;
hMod = comm.DPSKModulator('BitInput',true);
hChan = comm.AWGNChannel('NoiseMethod', ...
    'Signal to noise ratio (SNR)',...
    'SNR',10);
hDemod = comm.DPSKDemodulator('BitOutput',true);
hDec = comm.ViterbiDecoder('InputFormat','Hard');
hError = comm.ErrorRate('ComputationDelay',3,'ReceiveDelay', 34);

次の手順を使用して、データを処理します。

  1. ランダムなビットの生成

  2. データの畳み込み符号化

  3. DPSK 変調の適用

  4. 変調した信号の AWGN 経由の引き渡し

  5. ノイズを含む信号の復調

  6. ビタビ アルゴリズムを使用したデータの復号化

  7. 誤り統計の収集

for counter = 1:20
    data = randi([0 1],30,1);
    encodedData = step(hConEnc, data);
    modSignal = step(hMod, encodedData);
    receivedSignal = step(hChan, modSignal);
    demodSignal = step(hDemod, receivedSignal);
    receivedBits = step(hDec, demodSignal);
    errors = step(hError, data, receivedBits);
end

誤り数を表示します。

errors(2)
ans = 3

定義されたパンクチャ パターンで畳み込み符号化器およびビタビ復号化器を使用し、ビットのシーケンスを符号化して復号化します。入力ビットと出力ビットが同一であることを確認します

パンクチャ パターン行列を定義し、符号化器オブジェクトと復号化器オブジェクトで使用するためにベクトル形式に変更します。

pPatternMat = [1 0 1;1 1 0];
pPatternVec = reshape(pPatternMat,6,1);

内部で pPatternVec によってパンクチャ パターンを定義する、畳み込み符号化器およびビタビ復号化器を作成します。

ENC = comm.ConvolutionalEncoder(...
    'PuncturePatternSource','Property', ...
    'PuncturePattern',pPatternVec);

DEC = comm.ViterbiDecoder('InputFormat','Hard', ...
    'PuncturePatternSource','Property',...
    'PuncturePattern',pPatternVec);

適切な受信遅延を適用して誤り率カウンターを作成します。

ERR = comm.ErrorRate('ReceiveDelay',DEC.TracebackDepth);

ランダムなビットのシーケンスを符号化して復号化します。

dataIn = randi([0 1],600,1);

dataEncoded = step(ENC,dataIn);

dataOut = step(DEC,dataEncoded);

出力データに誤りがないことを確認します。

errStats = step(ERR,dataIn,dataOut);
errStats(2)
ans = 0

詳細

すべて展開する

アルゴリズム

このオブジェクトは、Viterbi Decoder ブロックのリファレンス ページで説明されているアルゴリズム、入力、および出力を実装しています。オブジェクト プロパティはブロック パラメーターに対応しますが、以下の場合を除きます。

  • [Decision type] パラメーターは InputFormat プロパティに対応します。

  • [Operation mode] パラメーターは TerminationMethod プロパティに対応します。

参照

[1] 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.

拡張機能

R2012a で導入