メインコンテンツ

tpcdec

ターボ積符号 (TPC) 復号化器

説明

decoded = tpcdec(llr,N,K) は、コードワード長 N とメッセージ長 K により指定される 2 つの線形ブロック符号を使用して、入力対数尤度比 llr で 2 次元 TPC 復号化を実行します。2 次元 TPC 復号化の詳細については、ターボ積符号の復号化を参照してください。

decoded = tpcdec(llr,N,K,S) は、コードワード長 (NK+S) とメッセージ長 S により指定される 2 次元 TPC 復号化器を使用して、短縮形の llr で 2 次元 TPC 復号化を実行します。

decoded = tpcdec(llr,N,K,S,maxnumiter) は、maxnumiter 回反復する 2 次元 TPC 復号化を実行します。フルレングスのメッセージで maxnumiter を使用するには、S を空 [ ] として指定します。

decoded = tpcdec(llr,N,K,S,maxnumiter,earlyterm) は 2 次元 TPC 復号化を実行し、maxnumiter 復号化反復の前にコンポーネント符号の計算されたシンドロームまたはパリティ チェックがゼロと評価された場合は、早期終了します。フルレングスのメッセージで maxnumiter および earlyterm を使用するには、S を空 [ ] として指定します。

[decoded,actualnumiter] = tpcdec(___) は、上記のいずれかの構文を使用して 2 次元 TPC 復号化を実行した後に、復号化の実際の反復回数も返します。

すべて折りたたむ

16-QAM 復調から近似対数尤度比出力信号を復号化します。

はじめに、拡張されたハミング符号と拡張 BCH 符号で 2 次元ターボ積符号化 (TPC) を使用して、ランダム ビット ベクトルを符号化します。

TPC 符号化で使用する (N,K) 符号ペアを指定します。

N = [32;16]; 
K = [21;11]; 

ランダム メッセージ ビットの列ベクトルを生成し、メッセージを TPC 符号化します。メッセージ ビットを、K の要素の積に等しい長さのベクトルとして指定します。

msg = randi([0 1],prod(K),1);
code = tpcenc(msg,N,K);

16-QAM 変調を適用します。信号に AWGN を追加します。信号を復調して、近似 LLR を出力します。

M = 16;
snr = 10;

txsig = qammod(code,M,'InputType','bit', ...
    'UnitAveragePower',true);

rxsig = awgn(txsig,snr,'measured');

llr = qamdemod(rxsig,M,'OutputType','approxllr', ...
    'UnitAveragePower',true,'NoiseVariance',10.^(-snr/10));

3 回の反復を使用する TPC 復号化を実行します。復調器の出力は負のバイポーラ マッピングされていて、TPC 復号化器は正のバイポーラ マッピングされた入力を予期しているため、復調した信号出力は復号化器入力時に反転されなければなりません。復号化した信号のビット エラー数をチェックします。

iterations = 3;
decoded = tpcdec(-llr,N,K,[],iterations);

numerr = biterr(msg,decoded)
numerr = 
0

短縮形の TPC 符号を復号化します。QPSK 変調を適用し、QPSK 復調から得られた近似対数尤度比信号を出力します。

はじめに、拡張されたハミング符号と拡張 BCH 符号で 2 次元ターボ積符号化 (TPC) を使用して、ランダム ビット ベクトルを符号化します。

TPC 符号化用の (N,K) 符号ペアと S を指定します。

N = [32;32];
K = [21;26];
S = [19;24];

ランダム メッセージ ビットの列ベクトルを生成し、メッセージを TPC 符号化します。短縮メッセージ ビットを、S の要素の積に等しい長さのベクトルとして指定します。

msg = randi([0 1],prod(S),1);
code = tpcenc(msg,N,K,S);

QPSK 変調を適用します。信号に AWGN を追加します。信号を復調して、近似 LLR を出力します。

M = 4;
snr = 3;

txsig = qammod(code,M,'InputType','bit', ...
    'UnitAveragePower',true);

rxsig = awgn(txsig,snr,'measured');

llr = qamdemod(rxsig,M,'OutputType','approxllr', ...
    'UnitAveragePower',true,'NoiseVariance',10.^(-snr/10));

2 回の反復を使用する TPC 復号化を実行します。復調器の出力は負のバイポーラ マッピングされていて、TPC 復号化器は正のバイポーラ マッピングされた入力を予期しているため、復調した信号出力は復号化器入力時に反転されなければなりません。復号化した信号のビット エラー レートをチェックします。

iterations = 2;
decoded = tpcdec(-llr,N,K,S,iterations);

[~,ber] = biterr(msg,decoded)
ber = 
0

短縮形の TPC 符号を復号化し、復号化の早期終了を指定します。QPSK 変調を適用し、QPSK 復調から得られた近似対数尤度比信号を出力します。

はじめに、拡張されたハミング符号と拡張 BCH 符号で 2 次元ターボ積符号化 (TPC) を使用して、ランダム ビット ベクトルを符号化します。TPC 符号化用の (N,K) 符号ペアと S を指定し、最大 10 回の復号化反復を指定します。信号に対して QPSK 変調を実行します。

n = [64; 32];
k = [51; 26];
s = [49; 24];
maxnumiter = 10;
M = 4;

msg = randi([0 1],prod(s),1);  % Random bits
code = tpcenc(msg,n,k,s);

txsig = qammod(code,M,'InputType','bit', ...
    'UnitAveragePower',true);

送信信号にノイズを付加します。

snr = 5;
rxsig = awgn(txsig,snr,'measured');

近似 LLR デマッピングを使用して、受信信号を復調します。

llr = qamdemod(rxsig,M,'OutputType', ...
    'approxllr','UnitAveragePower',true, ...
    'NoiseVariance',10.^(-snr/10));

TPC 復号化の最大反復回数を指定し、実行された実際の反復回数を返します。TPC 復号化の早期終了は既定でオンになっています。誤り数と実行された反復回数を表示します。

[decoded,actualNumIter] = tpcdec(-llr,n,k,s,maxnumiter);
numErr = biterr(msg,decoded);
disp(['Terminated after ' num2str(actualNumIter) ' iterations.' ...
    ' Number of errors = ' num2str(numErr) '.']);
Terminated after 10 iterations. Number of errors = 0.

入力引数

すべて折りたたむ

対数尤度比。列ベクトルとして指定します。

  • フルレングスの符号では、入力列ベクトルの長さは、N の要素の積です。

  • 短縮符号では、入力列ベクトルの長さは、(NK+S) の要素の積です。

データ型: double | single

コードワード長。2 要素の整数ベクトル [NR; NC] として指定します。NR は、積符号行列の行数を表します。NC は、積符号行列の列数を表します。NR および NC の詳細については、ターボ積符号の復号化を参照してください。有効な (N(i),K(i)) 符号ペアの一覧については、詳細を参照してください。

データ型: double

メッセージ長。2 要素の整数ベクトル [KR; KC] として指定します。フルレングスのメッセージの場合、入力 LLR を含む入力列ベクトルは、KRKC 列の行列に調整されます。KR は、メッセージ行列の行数を表します。KC は、メッセージ行列の列数を表します。KR および KC の詳細については、ターボ積符号の復号化を参照してください。有効な (N(i),K(i)) 符号ペアの一覧については、詳細を参照してください。

データ型: double

短縮メッセージ長。2 要素の整数ベクトル [SR; SC] として指定します。短縮メッセージの場合、入力 LLR を含む入力列ベクトルは、SRSC 列の行列に調整されます。SR は、行列の行数を表します。SC は、行列の列数を表します。SR および SC の詳細については、ターボ積符号の復号化を参照してください。

このパラメーターを指定する場合は、(N(i) – K(i) + S(i), S(i)) 符号に短縮されたフルレングスの TPC 符号の N ベクトルと K ベクトルを指定します。

データ型: double

復号化の最大反復回数。正の整数を指定します。

データ型: double

復号化の早期終了を有効にします。logical として指定します。earlytermtrue にすると、maxnumiter 復号化反復の前にコンポーネント符号の計算されたシンドロームまたはパリティ チェックがゼロと評価された場合は、復号化が早期終了します。

データ型: double

出力引数

すべて折りたたむ

TPC 復号化されたメッセージ。列ベクトルとして返されます。

  • フルレングスの符号では、返される列ベクトルの長さは、K の要素の積です。

  • 短縮符号では、返される列ベクトルの長さは、S の要素の積です。

データ型: logical

実行された復号化の実際の反復回数。正の整数として返されます。

データ型: double

詳細

すべて折りたたむ

参照

[1] Chase, D. "Class of Algorithms for Decoding Block Codes with Channel Measurement Information." IEEE Transactions on Information Theory, Volume 18, Number 1, January 1972, pp. 170–182.

[2] Pyndiah, R. M. "Near-Optimum Decoding of Product Codes: Block Turbo Codes." IEEE Transactions on Communications. Volume 46, Number 8, August 1998, pp. 1003–1010.

拡張機能

すべて展開する

バージョン履歴

R2018a で導入

参考

関数

オブジェクト

ブロック