Main Content

comm.BCHDecoder

BCH 復号化器を使用したデータの復号化

説明

BCHDecoder オブジェクトは、バイナリ BCH コードワード ベクトルからバイナリ メッセージ ベクトルを復元します。適切に復号化するには、このオブジェクトのコードワードおよびメッセージの長さは、対応する comm.BCHEncoder System object™ のプロパティに一致しなければなりません。

BCH コードワードからバイナリ メッセージを復号化するには、以下の手順に従います。

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

  2. step を呼び出して、comm.BCHDecoder のプロパティに従い、バイナリ BCH コードワード ベクトルからバイナリ メッセージ ベクトルを復元します。step の動作は、ツールボックスの各オブジェクト固有のものです。

メモ

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

構築

dec = comm.BCHDecoder は、BCH 復号化を実行する BCH 復号化器 System object dec を作成します。

dec = comm.BCHDecoder(N,K) は、CodewordLength プロパティを NMessageLength プロパティを K に設定して、BCH 復号化器オブジェクト dec を作成します。

dec = comm.BCHDecoder(N,K,GP) は、CodewordLength プロパティを NMessageLength プロパティを KGeneratorPolynomial プロパティを GP に設定して、BCH 復号化器オブジェクト dec を作成します。

dec = comm.BCHDecoder(N,K,GP,S) は、CodewordLength プロパティを NMessageLength プロパティを KGeneratorPolynomial プロパティを GPShortMessageLength プロパティを S に設定して、BCH 復号化器オブジェクト dec を作成します。

dec = comm.BCHDecoder(N,K,GP,S,Name,Value) は、CodewordLength プロパティを NMessageLength プロパティを KGeneratorPolynomial プロパティを GPShortMessageLength プロパティを S に設定し、さらに指定の各 Name プロパティを指定の Value に設定して、BCH 復号化器オブジェクト dec を作成します。

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

プロパティ

CodewordLength

コードワード長

BCH 符号のコードワード長を、倍精度の正の整数スカラーとして指定します。既定の設定は 15 です。CodewordLength プロパティおよび MessageLength プロパティの値は、狭義の有効な BCH 符号を生成しなければなりません。フルレングスの BCH 符号の場合、このプロパティの値は 2M1 の形式でなければなりません。ここで、M は 3M16 となる整数です。既定の設定は 15 です。

MessageLength

メッセージ長

メッセージ長を、倍精度の正の整数スカラーとして指定します。CodewordLength プロパティおよび MessageLength プロパティの値は、狭義の有効な BCH 符号を生成しなければなりません。既定の設定は 5 です。

ShortMessageLengthSource

短縮メッセージ長のソース

短縮メッセージのソースを Auto または Property のいずれかに指定します。このプロパティが Auto に設定されている場合、BCH 符号は CodewordLengthMessageLengthGeneratorPolynomial および PrimitivePolynomial プロパティによって定義されます。ShortMessageLengthSourceProperty に設定されている場合は、ShortMessageLength プロパティを指定しなければなりません。これは他のプロパティとともに BCH 符号の定義に使用されます。既定の設定は Auto です。

ShortMessageLength

短縮メッセージ長

短縮メッセージの長さを、倍精度の正の整数スカラーとして指定します。この値は MessageLength 以下でなければなりません。ShortMessageLength < MessageLength の場合、BCH 符号は短縮されます。既定の設定は 5 です。

GeneratorPolynomialSource

生成多項式のソース

生成多項式のソースを Auto または Property のいずれかに指定します。このプロパティを Auto に設定すると、生成多項式が自動的に作成されます。GeneratorPolynomial プロパティを使用して生成多項式を指定するには、GeneratorPolynomialSourceProperty に設定します。既定の設定は Auto です。

GeneratorPolynomial

生成多項式

生成多項式を、倍精度のバイナリ行ベクトル、降べきの順の生成多項式の係数を表すバイナリ ガロア体の行ベクトルまたは多項式の文字ベクトルとして指定します。生成多項式の長さは、CodewordLengthMessageLength+1 の値でなければなりません。このプロパティは GeneratorPolynomialSourceProperty に設定した場合に適用されます。既定の設定は 'X^10 + X^8 + X^5 + X^4 + X^2 + X + 1' ですが、これは bchgenpoly(15,5,[],'double') の結果であり、15,5 符号に対応します。

CheckGeneratorPolynomial

生成多項式の検証を有効にする

このプロパティを true に設定すると、step メソッドを最初に呼び出すときに生成多項式のチェックを実行します。既定の設定は true です。このチェックにより、指定した生成多項式が有効であることを検証できます。大きいコードの場合、チェックを無効にすることで処理時間が短縮されます。最も良い方法は、少なくとも 1 回チェックを実行してからこのプロパティを false に設定することです。このプロパティは GeneratorPolynomialSourceProperty に設定した場合に適用されます。既定の設定は true です。

PrimitivePolynomialSource

原始多項式のソース

原始多項式のソースを Auto または Property のいずれかに指定します。このプロパティを Auto に設定すると、次数 M=ceil(log2(CodewordLength+1)) の原始多項式が作成されます。PrimitivePolynomial プロパティを使用して多項式を指定するには、PrimitivePolynomialSourceProperty に設定します。既定の設定は Auto です。

PrimitivePolynomial

原始多項式

有限ガロア体 GF(2) を定義する、M 次原始多項式を指定します。降べきの順での多項式の係数をもつ倍精度のバイナリ行ベクトルまたは多項式の文字ベクトルを使用します。このプロパティは、PrimitivePolynomialSource プロパティを Property に設定した場合に適用されます。既定の設定は 'X^4 + X + 1' ですが、これは int2bit(primpoly(4),5)' の結果です。

PuncturePatternSource

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

パンクチャ パターンのソースを None または Property のいずれかに指定します。パンクチャを無効にするにはこのプロパティを None に設定します。パンクチャされたコードワードを復号化するには、Property に設定します。この復号化は、PuncturePattern プロパティで指定するパンクチャ パターン ベクトルに基づいています。既定の設定は None です。

PuncturePattern

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

オブジェクトが符号化データをパンクチャするために使用するパターンを指定します。長さ CodewordLengthMessageLength の倍精度のバイナリ列ベクトルを使用します。パンクチャ パターン ベクトルのゼロは、オブジェクトがパンクチャするか、あるいは各コードワードから除外するパリティ ビットの位置を示します。このプロパティは PuncturePatternSourceProperty に設定した場合に適用されます。既定の設定は [ones(8,1); zeros(2,1)] です。

ErasuresInputPort

消去入力を有効にする

消去のベクトルを step メソッド入力として指定するには、このプロパティを true に設定します。消去ベクトルは、入力コードワードのどのビットを消去または無視するかを示す、倍精度または論理値のバイナリ列ベクトルです。消去ベクトルの 1 の値は、(パンクチャされると思われる) 入力コードワードと同じ位置にある消去されるビットに対応します。このプロパティを false に設定すると、消去が無効になります。既定の設定は false です。

NumCorrectedErrorsOutputPort

Output number of corrected errors

step メソッドに修正した誤りの数を出力させるには、このプロパティを true に設定します。既定の設定は true です。

BCH System object と RS System object の入出力信号長

表記 y = c * x は、yx の整数倍であることを表します。

"パンクチャ数" は、パンクチャ ベクトルの 0 の数と等しくなります。

M は原始多項式の次数です。M ビットの各グループは、有限ガロア体 GF(2M) に属する 02M–1 の間の整数を表します。

ShortMessageLengthSource

comm.BCHEncoder

comm.RSEncoder (BitInput = false)

comm.BCHDecoder

comm.RSDecoder (BitInput = false)

comm.RSEncoder (BitInput = true)

comm.RSDecoder (BitInput = true)

自動

Input Length:

c * MessageLength

Output Length:

c * ( CodewordLength – number of punctures)

Input Length:

c * (CodewordLength – number of punctures)

Output Length:

c * MessageLength

Erasures Length:

c * ( CodewordLength – number of punctures)

Input Length:

c * (MessageLength * M)

Output Length:

c * (( CodewordLength – number of punctures) * M)

Input Length:

c * ( (CodewordLength – number of punctures) * M)

Output Length:

c * (MessageLength * M)

Erasures Length:

c * (CodewordLength – number of punctures)

Property

Input Length:

c * ShortMessageLength

Output Length:

c * (CodewordLength - MessageLength + ShortMessageLength - number of punctures)

Input Length:

c * (CodewordLength - MessageLength + ShortMessageLength - number of punctures)

Output Length:

c * ShortMessageLength

Erasures Length:

c * (CodewordLength - MessageLength + ShortMessageLength - number of punctures)

Input Length:

c * (ShortMessageLength * M)

Output Length:

c * ( (CodewordLength - MessageLength + ShortMessageLength - number of punctures) * M)

Input Length:

c * ((CodewordLength - MessageLength + ShortMessageLength - number of punctures) * M)

Output Length:

c * (ShortMessageLength * M)

Erasures Length:

c * (CodewordLength - MessageLength + ShortMessageLength - number of punctures)

メソッド

stepBCH 復号化器を使用したデータの復号化
すべての System object に共通
release

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

すべて折りたたむ

BCH 符号化され 8-DPSK 変調されたビット ストリームを AWGN チャネル経由で送信し、受信信号の復調、復号化、誤りのカウントを行います。

enc = comm.BCHEncoder;
mod = comm.DPSKModulator('BitInput',true);
chan = comm.AWGNChannel( ...
    'NoiseMethod','Signal to noise ratio (SNR)', ...
    'SNR',10);
demod = comm.DPSKDemodulator('BitOutput',true);
dec = comm.BCHDecoder;
errorRate = comm.ErrorRate('ComputationDelay',3);

for counter = 1:20
  data = randi([0 1],30,1);
  encodedData = enc(data);
  modSignal = mod(encodedData);
  receivedSignal = chan(modSignal);
  demodSignal = demod(receivedSignal);
  receivedBits = dec(demodSignal);
  errorStats = errorRate(data,receivedBits);
end
fprintf('Error rate = %f\nNumber of errors = %d\n', ...
  errorStats(1),errorStats(2))
Error rate = 0.015075
Number of errors = 9

短縮 BCH 符号で符号化された BPSK 変調信号を送受信後、誤りをカウントします。

コードワード長、メッセージ長、および短縮メッセージ長を指定します。

N = 255;
K = 239;
S = 63;

BCH (255,239) 生成多項式を作成します。生成多項式を使用して、BCH 符号化器と復号化器のペアを作成します。BCH 符号は AMR 標準に基づきます。

gp = bchgenpoly(255,239);
bchEncoder = comm.BCHEncoder(N,K,gp,S);
bchDecoder = comm.BCHDecoder(N,K,gp,S);

エラー レート カウンターを作成します。

errorRate = comm.ErrorRate('ComputationDelay',3);

主処理ループ。

for counter = 1:20
  data = randi([0 1],630,1);                 % Generate binary data
  encodedData = bchEncoder(data);            % BCH encode data
  modSignal = pskmod(encodedData,2);         % BPSK modulate
  receivedSignal = awgn(modSignal,5);        % Pass through AWGN channel
  demodSignal = pskdemod(receivedSignal,2);  % BSPK demodulate
  receivedBits = bchDecoder(demodSignal);    % BCH decode data
  errorStats = errorRate(data,receivedBits); % Compute error statistics
end

誤りの統計を表示します。

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

(31,26) BCH 符号を (11,6) BCH 符号に短縮して、ランダムなバイナリ データの符号化と復号化に使用します。

(31,26) 符号用の BCH 符号化器および復号化器のペアを作成します。生成多項式 x5+x2+1 と短縮メッセージ長 6 を指定します。

enc = comm.BCHEncoder(31,26,'x5+x2+1',6);
dec = comm.BCHDecoder(31,26,'x5+x2+1',6);

ランダムなバイナリ データの符号化と復号化を行い、復号化されたビット ストリームが元のデータと一致することを確認します。

x = randi([0 1],60,1);
y = step(enc,x);
z = step(dec,y);
isequal(x,z)
ans = logical
   1

参考文献

[1] Clark, George C. Jr., and J. Bibb Cain, Error-Correction Coding for Digital Communications. New York, Plenum Press, 1981.

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

アルゴリズム

このオブジェクトは、BCH と RS の誤りのみの復号化のアルゴリズムで説明されているアルゴリズム、入力および出力を実装しています。

拡張機能