Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

bchdec

説明

decoded = bchdec(code,N,K) は、狭義の生成多項式で (N,K) BCH 復号化器を使用して、code の受信信号を復号化しようとします。パリティ シンボルが末尾にあり、左端のシンボルが最上位シンボルです。

ガロア体配列 decoded では、各行は code 内の対応する行を復号化する試みを表します。

decoded = bchdec(code,N,K,paritypos) は、paritypos に、code 内のパリティ シンボルが符号化処理時にメッセージの末尾に追加されたのかそれとも先頭に追加されたのかを指定します。

[decoded,cnumerr] = bchdec(___) は、列ベクトル cnumerr を返します。各要素は code の対応する行で訂正された誤りの数です。前述の構文のいずれでも cnumerr を返せます。

[decoded,cnumerr,ccode] = bchdec(___) は、ccode を返します。これは、訂正されたバージョンの code です。

すべて折りたたむ

コードワードあたりの誤りの数が BCH 復号化器の誤り訂正能力を超える入力を BCH 復号化します。単一の誤りを訂正する BCH 復号化器を使用して、コードワードあたり 2 つの誤りがある BCH 符号化されたメッセージを復号化します。出力コードワード上の誤り不一致の影響を表示します。

[63,57] で BCH 復号化器が訂正できる、コードワードあたりの誤り数を確認します。

n = 63; 
k = 57;
t = bchnumerr(n,k)
t = 1

この [63,57] では、BCH 復号化器は、コードワードあたり 1 つの誤りを訂正できます。

乱数ストリームを作成し、それを使用して GF 配列を生成します。メッセージを符号化します。

s = RandStream('swb2712','Seed',9973);
msg = gf(randi(s,[0 1],1,k));
code = bchenc(msg,n,k);

コードワードあたり 2 つの誤りを追加し、誤りのある符号を復号化します。

cnumerr2 = zeros(nchoosek(n,2),1);
nErrs = zeros(nchoosek(n,2),1);
cnumerrIdx = 1;
for idx1 = 1 : n-1
    %sprintf('idx1 for 2 errors = %d', idx1)
    for idx2 = idx1+1 : n
        errors = zeros(1,n);
        errors(idx1) = 1;
        errors(idx2) = 1;
        erroredCode = code + gf(errors);
        [decoded2, cnumerr2(cnumerrIdx)] ...
          = bchdec(erroredCode,n,k);

復号化されたメッセージを符号化します。再符号化したメッセージが、誤りのあるメッセージから 1 ビットだけ異なることを確認します。

        if cnumerr2(cnumerrIdx) == 1
            code2 = bchenc(decoded2,n,k);
            nErrs(cnumerrIdx) = biterr(double(erroredCode.x), ...
              double(code2.x));
        end        
        cnumerrIdx = cnumerrIdx + 1;    
    end
end

2 つの誤りのある符号と、最初に復号化したものを再符号化したバージョンの差に基づいて、計算した誤り数をプロットします。

plot(nErrs)
title('Number of Actual Errors')

Figure contains an axes object. The axes object with title Number of Actual Errors contains an object of type line.

2 つの誤りのあるすべての入力は、再符号化したバージョンと正確に 1 ビットだけ異なるコードワードに復号化されました。

GF(2) のガロア配列の BCH パラメーターを設定します。

M = 4;
n = 2^M-1;   % Codeword length
k = 5;       % Message length
nwords = 10; % Number of words to encode

メッセージを作成します。

msgTx = gf(randi([0 1],nwords,k));

誤り訂正能力を求めます。

t = bchnumerr(n,k)
t = 3

メッセージを符号化します。

enc = bchenc(msgTx,n,k);

最大 t ビットまで各コードワードを破損させます。

noisycode = enc + randerr(nwords,n,1:t);

ノイズを含む符号を復号化します。

msgRx = bchdec(noisycode,n,k);

メッセージが適切に復号化されたことを検証します。

isequal(msgTx,msgRx)
ans = logical
   1

可能な誤りの数を増やし、ノイズを含む別のコードワードを生成します。

t2 = t + 1;
noisycode2 = enc + randerr(nwords,n,1:t2);

新規に受信したコードワードを復号化します。

[msgRx2,numerr] = bchdec(noisycode2,n,k);

訂正された誤り数 numerr を調べ、メッセージが適切に復号化されたかどうかを判定します。-1 のエントリは復号化失敗に相当します。これは、指定した [n,k] ペアで訂正できるよりも多くの誤りがコードワードにあった場合に発生します。

numerr
numerr = 10×1

     1
     2
    -1
     2
     3
     1
    -1
     4
     2
     3

送信された 10 個のコードワードのうちの 2 個を適切に受信しませんでした。

入力引数

すべて折りたたむ

符号化されたメッセージ。GF(2) 上のシンボルのガロア体配列として指定します。code の各 N 要素行は、破損している組織的コードワードを表します。

詳細については、ガロア体配列の作成を参照してください。

コードワード長。形式 N = 2M–1 の整数として指定します。ここで M は 3 ~ 16 の整数です。有効な N 値、有効な (N,K) ペア、および与えられた BCH 符号の誤り訂正能力に関する情報については、ヒントを参照してください。

例: M=4 の場合は 15

メッセージ長。整数として指定します。N および K は、狭義の BCH 符号を生成しなければなりません。

例: 5 は 5 つの要素をもつガロア体配列を指定します。

パリティ位置。'end' または 'beginning' として指定します。パリティ シンボルは、出力ガロア体配列の各ワードの末尾または先頭にあります。paritypos'beginning' である場合、復号化失敗により、bchdecN-K 個のシンボルを行の末尾ではなく先頭から削除します。

出力引数

すべて折りたたむ

復号化されたメッセージ。GF(2) 上のシンボルのガロア体配列として返されます。各行は code 内の対応する行を復号化する試みを表します。bchdeccode 内の 1 行に T 個を超える誤りを検出すると、復号化失敗が発生します。ここで、T は復号化器が訂正できるコードワードあたりの誤り数です。復号化失敗が発生した場合、bchdecN-K 個のシンボルを code の行の末尾から削除することで、decoded の対応する行を作成します。詳細については、誤り訂正能力を参照してください。

code の対応する行で訂正された誤り数。列ベクトルとして返されます。cnumerr の値 -1 は、code 内の該当する行における 1 件の復号化失敗を示します。

訂正されたバージョンの code。ガロア体配列として返されます。ccode は入力 code と同じ形式をもちます。復号化失敗が code の特定の行で発生すると、ccode 内の対応する行にその行が変更されずに格納されます。

詳細

すべて折りたたむ

誤り訂正能力

BCH 復号化器は、そのメッセージの BCH 符号化に使用された (N,K) ペアに基づいて、コードワードあたりの指定された数までの誤りを訂正します。与えられた (N,K) ペアの誤り訂正能力 T は、bchnumerr によって返されます。有効な N 値、有効な (N,K) ペア、および与えられた BCH 符号の誤り訂正能力に関する情報については、ヒントを参照してください。

符号化されたメッセージに含まれるコードワードあたりの誤りが復号化器の誤り訂正能力を超えている場合、復号化器は正しいコードワードを復号化しない可能性が高くなります。たとえば、単一誤り訂正 BCH 復号化器 (T=1) にコードワードあたり 2 つの誤りを含む入力が与えられると、有効なコードワードに復号化されますが、正しいコードワードにはなりません。二重誤り訂正 BCH 復号化器 (T=2) にコードワードあたり 3 つの誤りを含む入力が与えられると、復号化器は無効なコードワードに復号化する場合もあります。cnumerr および ccode の出力は、復号化されたメッセージの正確さを解析するためのフィードバックを提供します。

ヒント

  • 有効な (N,K) ペアと誤り訂正能力の対応する値の一覧を生成するには、bchnumerr(N) を実行します。

  • 有効な値は N = 2M–1 です。ここで、M は 3 ~ 16 の整数です。N の最大許容値は 65,535 です。

アルゴリズム

bchdec は、Berlekamp-Massey 復号化アルゴリズムを使用します。このアルゴリズムの詳細については、参照にある文献を参照してください。

参照

[1] Wicker, Stephen B. Error Control Systems for Digital Communication and Storage. Upper Saddle River, NJ: Prentice Hall, 1995.

[2] Berlekamp, Elwyn R. Algebraic Coding Theory. New York: McGraw-Hill, 1968.

バージョン履歴

R2006a より前に導入

参考

関数

オブジェクト

トピック