Main Content

nrLDPCDecode

低密度パリティチェック (LDPC) 復号化

説明

[out,actNumIter,finalParityChecks] = nrLDPCDecode(in,bgn,maxNumIter) は、入力データ行列 in、ベース グラフ番号 bgn、および復号化反復の最大回数 maxNumIter について、LDPC 復号化された出力行列 out を返します。この関数は、実際の反復回数 actNumIter と、コードワードごとの最終パリティ チェック finalParityChecks も返します。

この復号化器は、sum-product メッセージ伝達法アルゴリズムを使用します。データ ビットは、TS 38.212 の Section 5.3.2 [1]の定義に従って LDPC 符号化されなければなりません。

[out,actNumIter,finalParityChecks] = nrLDPCDecode(___,Name,Value) は、前述の構文の入力引数に加えて、オプションの名前と値からなるペアの引数を指定します。

すべて折りたたむ

長さが 2560 の 2 つのコード ブロック セグメントと末尾の 36 個のフィラー ビットで構成される送信データを作成します。

C = 2;          
K = 2560;       
F = 36;    
txcbs = ones(K-F,C);
fillers = -1*ones(F,C);
txcbs = [txcbs;fillers];                

送信データの LDPC コードワードを生成します。ベース グラフ番号 2 を使用します。

bgn = 2; 
txcodedcbs = nrLDPCEncode(txcbs,bgn);   

送信データをソフト ビットに変換します。送信データのフィラーは、対数尤度比 (LLR) のソフト ビットをもちません。

rxcodedcbs = double(1-2*txcodedcbs);    
FillerIndices = find(txcodedcbs(:,1) == -1);
rxcodedcbs(FillerIndices,:) = 0;        

符号化されたコードワードを最大 25 回の反復で復号化します。

[rxcbs,actualniters] = nrLDPCDecode(rxcodedcbs,bgn,25);  

送信データのフィラー ビットをゼロに置き換え、符号化と復号化の結果を比較します。

txcbs(end-F+1:end,:) = 0;    
isequal(rxcbs,txcbs)                
ans = logical
   1

actualniters
actualniters = 1×2

     1     1

入力引数

すべて折りたたむ

入力コード ブロック セグメントに対してレート リカバリされるソフト ビット。実数行列として指定します。in の列数は、スケジュールされたコード ブロック セグメントの数と同じです。in の行数は、コードワードの長さと同じで、組織的ビットの一部がパンクチャされます。

データ型: double | single

ベース グラフ番号。1 または 2 として指定します。この値には、TS 38.212 の Section 5.3.2 [1]で定義されている 2 つのベース グラフのいずれかを選択します。

データ型: double

復号化反復の最大回数。正の整数スカラーとして指定します。復号化は、すべてのパリティ チェックが達成されたとき、または maxNumIter 回の反復の後に終了します。

データ型: double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は関係ありません。

R2021a より前では、コンマを使用して名前と値の各ペアを区切り、Name を引用符で囲みます。

例: [out,actNumIter,finalParityChecks] = nrLDPCDecode(in,bgn,maxNumIter,'DecisionType','hard')

出力形式。'OutputFormat' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'info'out の行数は、情報ビットの長さと同じです。

  • 'whole'out の行数は、コードワードの長さと同じです。

データ型: char | string

復号化に使用する判定方法。'DecisionType' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'hard'out のデータ型は int8 です。

  • 'soft' — 出力 out には、in と同じデータ型の対数尤度比が含まれます。

データ型: char | string

LDPC 復号化アルゴリズム。'Algorithm' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'Belief propagation' — このオプションを使用して、確率伝達 (メッセージ伝達) アルゴリズムを指定します。詳細については、確率伝播復号化を参照してください。

  • 'Layered belief propagation' — このオプションを使用して、階層的確率伝達アルゴリズムを指定します。これは、準巡回パリティチェック行列 (PCM) に適しています。詳細については、階層的確率伝播復号化を参照してください。

  • 'Normalized min-sum' — このオプションを使用して、正規化 min-sum 近似を使用する階層的確率伝播アルゴリズムを指定します。詳細については、正規化 Min-Sum 復号化を参照してください。

  • 'Offset min-sum' — このオプションを使用して、オフセット min-sum 近似を使用する階層的確率伝播アルゴリズムを指定します。詳細については、オフセット Min-Sum 復号化を参照してください。

メモ

この名前と値のペアの引数の値を 'Normalized min-sum' または 'Offset min-sum' として指定すると、関数は復号化前に入力 (対数尤度比) LLR 値を [-1e10 1e10] の範囲にクリップします。

データ型: char | string

正規化 min-sum 復号化のスケーリング係数。'ScalingFactor' と範囲 (0, 1] の実数スカラーで構成されるコンマ区切りのペアとして指定します。

依存関係

この名前と値のペアの引数を有効にするには、名前と値のペアの引数 'Algorithm''Normalized min-sum' に設定します。

データ型: double

オフセット min-sum 復号化のオフセット。'Offset' と非負で有限の実数スカラーで構成されるコンマ区切りのペアとして指定します。

依存関係

この名前と値のペアの引数を有効にするには、名前と値のペアの引数 'Algorithm''Offset min-sum' に設定します。

データ型: double

復号化の終了基準。'Termination' と次の値のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'early' — 復号化は、すべてのパリティ チェックが達成されたとき、または maxNumIter 回の反復の後に終了します。

  • 'max' — 復号化は、maxNumIter 回の反復の後に終了します。

データ型: char | string

出力引数

すべて折りたたむ

復号化された LDPC コードワードまたは情報ビット。実数行列として返されます。out の列数は、スケジュールされたコード ブロック セグメントの数と同じです。out の行数は、名前と値のペアの引数 'OutputFormat' によって異なります。out のデータ型は、名前と値のペアの引数 'DecisionType' によって異なります。

データ型: single | double | int8

実際の反復回数。正の整数の行ベクトルとして返されます。actNumIter の長さは in の列数と同じです。actNumIteri 番目の要素は、ini 列目に対して実行された実際の反復回数に対応します。

データ型: double

最終パリティ チェック。行列として返されます。finalParityChecks の行数は、LDPC コードワードのパリティチェック ビットの数と同じです。finalParityChecksi 列目は、i 番目のコードワードの最終パリティ チェックに対応します。

データ型: double

アルゴリズム

すべて折りたたむ

関数 nrLDPCDecode は、以下の 4 つの LDPC 復号化アルゴリズムをサポートしています。

確率伝播復号化

確率伝播アルゴリズムの実装は、[2]に示されている復号化アルゴリズムに基づいています。送信された LDPC 符号化コードワード c (ここで c=(c0,c1,...,cn1)) について、LDPC 復号化器への入力は、対数尤度比 (LLR) 値 L(ci)=log(Pr(ci=0|channel output for ci)Pr(ci=1|channel output for ci)) です。

各反復において、アルゴリズムの主なコンポーネントは、以下の方程式に基づいて更新されます。

L(rji)=2atanh(iVj\itanh(12L(qij))),

L(qij)=L(ci)+jCi\jL(rji) (最初の反復の前に L(qij)=L(ci) として初期化)、および

L(Qi)=L(ci)+jCiL(rji).

各反復の終わりにおいて、L(Qi) は、送信されたビット ci に対する LLR 値の更新された推定です。値 L(Qi) は、ci の軟判定出力です。L(Qi)<0 の場合、ci の硬判定出力は 1 です。それ以外の場合、出力は 0 です。

インデックス セット Ci\j および Vj\i は、パリティチェック行列 (PCM) に基づいています。インデックス セット Ci および Vj は、それぞれ PCM の列 i と行 j のすべての非ゼロ要素に対応します。

次の図は、特定の PCM において i = 5 かつ j = 3 の場合の、これらインデックス セットの計算を強調表示したものです。

アルゴリズム方程式において無限数を回避するため、atanh(1) と atanh(-1) はそれぞれ 19.07 と –19.07 に設定されます。精度が有限であるため、MATLAB® は tanh(19.07) に対して 1 を、tanh(–19.07) に対して –1 を返します。

名前と値のペアの引数 'Termination''max' に設定されている場合、復号化は maxNumIter 回の反復後に終了します。'Termination''early' に設定されている場合、復号化は、すべてのパリティ チェックが達成されたとき (HcT=0)、または maxNumIter 回の反復の後に終了します。

階層的確率伝播復号化

階層的確率伝播アルゴリズムの実装は、[3]の Section II.A に示されている復号化アルゴリズムに基づいています。復号化ループは、PCM の行のサブセット (レイヤー) を反復処理します。レイヤー内の各行 m と各ビット インデックス j に対して、実装は以下の方程式に基づいてアルゴリズムの主要成分を更新します。

(1) L(qmj)=L(qj)Rmj

(2) Amj=n  N(m)njψ(L(qmn))

(3) smj=n  N(m)njsign(L(qmn))

(4) Rmj=smjψ(Amj)、および

(5) L(qj)=L(qmj)+Rmj

各レイヤーについて、復号化方程式 (5) は、現在の LLR 入力 L(qmj) と前のレイヤーの更新 Rmj から取得された、結合済みの入力に対して機能します。

ノードのサブセットのみがレイヤーで更新されるため、階層的確率伝播アルゴリズムは確率伝播アルゴリズムよりも高速です。確率伝播復号化で得られるのと同じエラー レートを達成するには、階層的確率伝播アルゴリズムを使用するときに半分の復号化反復回数を使用します。

正規化 Min-Sum 復号化

正規化 min-sum 復号化アルゴリズムの実装は、階層的確率伝播アルゴリズムに従いますが、方程式 (2) を次で置き換えます。

Amj=minn  N(m)nj(|L(qmn) |α),

ここで α は、(0, 1] の範囲にあり、ScalingFactor で指定されたスケーリング係数です。この方程式は、[4]に記載されている方程式 (4) を適応させたものです。

オフセット Min-Sum 復号化

オフセット min-sum 復号化アルゴリズムの実装は、階層的確率伝播アルゴリズムに従いますが、方程式 (2) を次で置き換えます。

Amj =  max(minn  N(m)nj (|L(qmn)| β), 0),

ここでは、β ≥ 0 で、Offset によって指定されたオフセットです。この方程式は、[4]に記載されている方程式 (5) を適応させたものです。

参照

[1] 3GPP TS 38.212. “NR; Multiplexing and channel coding.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

[2] Gallager, Robert G. Low-Density Parity-Check Codes, Cambridge, MA, MIT Press, 1963.

[3] Hocevar, D.E. "A reduced complexity decoder architecture via layered decoding of LDPC codes." In IEEE Workshop on Signal Processing Systems, 2004. SIPS 2004. doi: 10.1109/SIPS.2004.1363033

[4] Chen, Jinghu, R.M. Tanner, C. Jones, and Yan Li. "Improved min-sum decoding algorithms for irregular LDPC codes." In Proceedings. International Symposium on Information Theory, 2005. ISIT 2005. doi: 10.1109/ISIT.2005.1523374

拡張機能

バージョン履歴

R2018b で導入