Main Content

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

comm.APPDecoder

APP 法を使用した畳み込み符号の復号化

説明

APPDecoder System object は、畳み込み符号の事後確率 (APP) 復号化を実行します。

APP 法を使用して畳み込み符号を復号化するには、次を行います。

  1. comm.APPDecoder オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

appDec = comm.APPDecoder は、APP 法を使用して畳み込み符号を復号化する、APP 復号化器 System object™ appDec を作成します。

appDec = comm.APPDecoder(Name,Value) は、1 つ以上の名前と値のペアを使用してプロパティを設定します。たとえば、comm.APPDecoder('Algorithm','True APP') は、真の事後確率復号化を実装するように System object appDec を構成します。各プロパティ名を引用符で囲みます。

appDec = comm.APPDecoder(trellis,Name,Value) は、TrellisStructure プロパティが trellis に設定された APP 復号化器オブジェクト appDec を作成します。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

トレリス表現。符号化率 K/N の符号に対するトレリス表現を含む MATLAB® 構造体として指定します。K は入力ビット ストリーム数を表し、N は出力ビット ストリーム数を表します。

トレリス構造体は、関数 poly2trellis を使用して作成するか、手動で作成することができます。この構造体の詳細については、畳み込み符号のトレリス表現および関数 istrellis を参照してください。

トレリス構造体には次のフィールドがあります。

符号化器への入力シンボルの数。2K と等しい整数として指定します。ここで、K は入力ビット ストリームの数です。

データ型: double

符号化器からの出力シンボルの数。2N と等しい整数として指定します。ここで、N は出力ビット ストリームの数です。

データ型: double

符号化器内の状態の数。2 のべき乗として指定します。

データ型: double

現在の状態と現在の入力のすべての組み合わせの次の状態。整数の行列として指定します。最大サイズは numStates 行 2 K 列でなければなりません。

データ型: double

現在の状態と現在の入力のすべての組み合わせの出力。8 進数の行列として指定します。最大サイズは numStates 行 2 K 列でなければなりません。

データ型: double

データ型: struct

符号化フレームの終了方法。'Truncated' または 'Terminated' として指定します。プロパティが 'Truncated' に設定された場合、この System object は、符号化器が入力フレームの最後のシンボルの符号化後に停止するものとします。プロパティが 'Terminated' に設定された場合、この System object は、符号化器が追加のシンボルを符号化することで、トレリスに各フレームをすべてゼロの状態にして終了させるようにするものとします。符号化フレームを comm.ConvolutionalEncoder System object を使用して生成する場合、このプロパティ値は、畳み込み符号化器およびこの System object のプロパティ値と一致しなければなりません。

データ型: char | string

復号化アルゴリズム。'Max*''True APP' または 'Max' として指定します。プロパティが 'True APP' に設定された場合、この System object は真の APP 復号化を実装します。プロパティが他のいずれかの値に設定された場合、この System object は計算速度を向上させるため近似を行います。詳細については、アルゴリズムを参照してください。

データ型: char | string

スケーリング ビット数。範囲 [0, 8] の整数として指定します。このプロパティは、計算中の精度低下を避けるため、復号化器が入力データのスケーリングに使用するビット数を指定します。

依存関係

このプロパティを有効にするには、Algorithmプロパティを 'Max*' に設定します。

データ型: double

コード化ビット対数尤度比 (LLR) 出力を有効にするオプション。数値または logical 1 (true) または 0 (false) として指定します。この System object を呼び出す際に 2 番目の出力を無効にするには、このプロパティを 0 (false) に設定します。

データ型: logical

使用法

説明

[LUD,LCD] = appDec(LU,LC) は、符号化器入力ビットの LLR シーケンス LU および符号化されたビットの LLR シーケンス LC に対して APP 復号化を実行します。System object は LUD および LCD を返します。これらの出力値はそれぞれ LU および LC の更新バージョンで、符号化器情報に基づいて取得されます。

LUD = appDec(LU,LC) は、LCD の出力を無効にして APP 復号化を実行します。LCD の出力を無効にするには、CodedBitLLROutputPortプロパティを 0 (false) に設定します。

入力引数

すべて展開する

符号化器入力データの LLR シーケンス。実数値の列ベクトルとして指定します。正の軟入力は logical 1、負の軟入力は logical 0 として解釈されます。

データ型: single | double

符号化されたデータの LLR シーケンス。実数値の列ベクトルとして指定します。正の軟入力は logical 1、負の軟入力は logical 0 として解釈されます。

データ型: single | double

出力引数

すべて展開する

LU の更新された値。実数値の列ベクトルとして返されます。

データ型: single | double

LC の更新された値。実数値の列ベクトルとして返されます。

データ型: single | double

メモ

畳み込み符号が 2n シンボル候補のアルファベットを使用する場合 (n は入力シンボルあたりのビット数)、LC および LCD のベクトル長はある正の整数 L に対して L × n になります。同様に、復号化されたデータが 2k 出力シンボルのアルファベットを使用する場合 (k は出力シンボルあたりのビット数)、LU および LUD のベクトル長は L × k になります。

この System object は、L の正の整数値のある列ベクトル入力信号を受け入れます。可変サイズの入力の場合、L は複数回の呼び出し中に変化する可能性があります。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

ノイズ分散とビット単位のフレーム長を指定します。畳み込み符号化器、PSK 変調器、AWGN チャネルの各 System object を作成します。

noiseVar = 2e-1;
frameLength = 300;
convEncoder = comm.ConvolutionalEncoder('TerminationMethod','Truncated');
pskMod = comm.PSKModulator('BitInput',true,'PhaseOffset',0);
awgnChan = comm.AWGNChannel('NoiseMethod','Variance', ...
    'Variance',noiseVar);

畳み込み APP 復号化器、PSK 変調器、誤り率の各 System object を作成します。

appDecoder = comm.APPDecoder(...
    'TrellisStructure',poly2trellis(7,[171 133]), ...
    'Algorithm','True APP','CodedBitLLROutputPort',false);
pskDemod = comm.PSKDemodulator('BitOutput',true,'PhaseOffset',0, ...
    'DecisionMethod','Approximate log-likelihood ratio', ...
    'Variance',noiseVar);     
errRate = comm.ErrorRate;

畳み込み符号化され、8-PSK 変調されたビット ストリームを AWGN チャネル経由で送信します。軟判定を使用して、受信した信号を復調します。APP 復号化器を使用して、復調した信号を復号化します。

for counter = 1:5
     data = randi([0 1],frameLength,1);
     encodedData = convEncoder(data);
     modSignal = pskMod(encodedData);
     receivedSignal = awgnChan(modSignal);
     demodSignal = pskDemod(receivedSignal);
     % The APP decoder assumes a polarization of the soft inputs that is
     % inverse to that of the demodulator soft outputs. Change the sign of
     % demodulated signal.
     receivedSoftBits = appDecoder(zeros(frameLength,1),-demodSignal);
     % Convert from soft-decision to hard-decision.
     receivedBits = double(receivedSoftBits > 0);
     % Count errors
     errorStats = errRate(data,receivedBits);
end

誤り率情報を表示します。

fprintf('Error rate = %f\nNumber of errors = %d\n', ...
     errorStats(1), errorStats(2))
Error rate = 0.000000
Number of errors = 0

アルゴリズム

この System object は、[1]および[2]に従って軟入力軟出力 APP 復号化アルゴリズムを実装します。

Algorithm プロパティの 'True APP' オプションは、[1] のセクション V にある方程式 20 ~ 23 に従って APP 復号化を実装します。速度を上げるために、Algorithm プロパティの 'Max*''Max' の値は、logiexp(ai) のような式を他の量で近似します。'Max' オプションは、max(ai) を近似として使用します。'Max*' オプションは、max(ai) に式 ln(1+exp(|ai1ai|)) によって求められる補正項を加えて使用します。

Algorithm プロパティを 'Max*' に設定すると、この System object の NumScalingBits プロパティが有効になります。このプロパティは、この System object が内部で処理するデータ (入力と 2NumScalingBits を乗算し、同じ係数で事前出力を除算する) をスケーリングするビット数を表します。このプロパティを使用すると、計算中の精度低下を避けることができます。

参照

[1] Benedetto, S., G. Montorsi, D. Divsalar, and F. Pollara. "A Soft-Input Soft-Output Maximum A Posterior (MAP) Module to Decode Parallel and Serial Concatenated Codes." Jet Propulsion Lab TDA Progress Report, 42–127, (November 1996).

[2] Viterbi, A.J. “An Intuitive Justification and a Simplified Implementation of the MAP Decoder for Convolutional Codes.” IEEE Journal on Selected Areas in Communications 16, no. 2 (February 1998): 260–64. https://doi.org/10.1109/49.661114.

[3] Benedetto, S., and G. Montorsi. “Performance of Continuous and Blockwise Decoded Turbo Codes.” IEEE Communications Letters 1, no. 3 (May 1997): 77–79. https://doi.org/10.1109/4234.585802.

拡張機能

R2012a で導入