Main Content

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

comm.BCHEncoder

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

説明

comm.BCHEncoder System object™ は、指定したメッセージ長とコードワード長で BCH 符号を作成します。詳細については、アルゴリズムを参照してください。

BCH 符号化方式を使用してデータを符号化するには、次のようにします。

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

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

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

作成

説明

enc = comm.BCHEncoder は、BCH 符号化を適用する BCH 符号化器 System object enc を作成します。

enc = comm.BCHEncoder(N,K) は、CodewordLengthN に設定し、MessageLengthK に設定します。たとえば、comm.BCHEncoder(7,3) は (7,3) BCH 符号化器オブジェクトを作成します。

enc = comm.BCHEncoder(N,K,GP) はさらに、GeneratorPolynomialGP に設定し、GeneratorPolynomialSource'Property' に設定します。

enc = comm.BCHEncoder(N,K,GP,S) はさらに、ShortMessageLengthS に設定し、ShortMessageLengthSource'Property' に設定します。

enc = comm.BCHEncoder(___,Name=Value) は、前の構文の入力引数に加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、comm.BCHEncoder(7,3,PuncturePatternSource="Property",PuncturePattern=[ones(7,1); zeros(3,1)]) は、パンクチャ パターンを [1;1;1;1;1;1;1;0;0;0] に設定して (7, 3) BCH 符号化器オブジェクトを作成します。

プロパティ

すべて展開する

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

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

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

シンボル内の BCH 符号のコードワード長。正の整数として指定します。CodewordLength プロパティおよび MessageLength プロパティの値は、狭義の有効な BCH 符号を生成しなければなりません。フルレングスの BCH 符号では、このプロパティの値は (2M – 1) の形式でなければなりません。ここで、M は [3, 16] の範囲の整数です。

シンボル内のメッセージ長。正の整数として指定します。CodewordLength プロパティおよび MessageLength プロパティの値は、狭義の有効な BCH 符号を生成しなければなりません。

短縮メッセージ長のソース。"Auto" または "Property" として指定します。

  • このプロパティを "Auto" に設定すると、オブジェクトは CodewordLengthMessageLength から短縮形を導出します。このオブジェクトは、CodewordLengthMessageLengthGeneratorPolynomial、および PrimitivePolynomial プロパティに基づいて BCH 符号を定義します。

  • このプロパティを "Property" に設定すると、オブジェクトは ShortMessageLength と他のプロパティを使用して BCH 符号を定義します。

シンボル内の短縮メッセージ長。正の整数として指定します。この値は MessageLength 以下でなければなりません。ShortMessageLength < MessageLength の場合、オブジェクトは BCH 符号を短縮します。

依存関係

このプロパティは ShortMessageLengthSource"Property" に設定した場合に適用されます。

生成多項式のソース。"Auto" または "Property" として指定します。

  • このプロパティを "Auto" に設定すると、オブジェクトは PrimitivePolynomial の値に基づいて生成多項式を計算します。

  • このプロパティを "Property" に設定すると、オブジェクトは GeneratorPolynomial を使用して生成多項式を定義します。

生成多項式。多項式の string、整数の行ベクトル、またはガロア体の行ベクトルとして指定します。指定された行ベクトルは、メッセージとコードワードを形成する整数に対応する降べきの順の有限体 gf(2M) を定義します。生成多項式の長さは (N – K + 1) でなければなりません。ここで、N は CodewordLength、K は MessageLength です。

多項式は次のオプションのいずれかとして表現します。

  • 定数項が 1 の多項式の文字ベクトルまたは string スカラー。詳細については、Communications Toolbox での多項式の表現を参照してください。

  • バイナリ値行ベクトル。降べきの順に並べた多項式の係数を表します。このベクトルの長さは (M + 1) でなければなりません。ここで、M は多項式の次数です。最初と最後のエントリは 1 でなければなりません。これは、次数 M の最初の項と、定数項 1 を示します。

  • 整数値の行ベクトル。降べきの順に並べた多項式の非ゼロの項の指数を表す要素からなります。最後のエントリは 0 でなければなりません。これは定数項 1 を示します。

既定の設定 'X^10 + X^8 + X^5 + X^4 + X^2 + X + 1' は、bchgenpoly(15,5,[],'double') の結果であり、(15,5) 符号に対応します。

依存関係

このプロパティは GeneratorPolynomialSource"Property" に設定した場合に適用されます。

データ型: double | string | char

生成多項式をチェックするオプション。logical の 1 (true) または 0 (false) として指定します。指定された生成多項式が有効であるか確認するには、このプロパティを true に設定します。

ヒント

高次の生成多項式を使用する符号の場合、このチェックを無効にすると処理が高速化されます。最も良い方法は、少なくとも 1 回チェックを実行してからこのプロパティを false に設定することです。

依存関係

このプロパティは、GeneratorPolynomialSource"Property" に設定されている場合に適用されます。

データ型: logical

原始多項式のソース。"Auto" または "Property" として指定します。

  • このプロパティを "Auto" に設定すると、オブジェクトは次数 M = ceil(log2(CodewordLength + 1)) の原始多項式を使用します。

  • このプロパティを "Property" に設定すると、オブジェクトは PrimitivePolynomial を使用して原始多項式を定義します。

原始多項式。メッセージおよびコードワードを形成する整数に対応する降べきの順の有限体 gf(2M) を定義するバイナリ行ベクトルとして指定します。

多項式は次のオプションのいずれかとして表現します。

  • 定数項が 1 の多項式の文字ベクトルまたは string スカラー。詳細については、Communications Toolbox での多項式の表現を参照してください。

  • バイナリ値行ベクトル。降べきの順に並べた多項式の係数を表します。このベクトルの長さは M + 1 でなければなりません。ここで M は多項式の次数です。最初と最後のエントリは 1 でなければなりません。これは、次数 M の最初の項と、定数項 1 を示します。

  • 整数値の行ベクトル。降べきの順に並べた多項式の非ゼロの項の指数を表す要素からなります。最後のエントリは 0 でなければなりません。これは定数項 1 を示します。

既定の 'X^4 + X + 1'int2bit(primpoly(4),5)' の結果です。

依存関係

このプロパティは PrimitivePolynomialSource"Property" に設定した場合に適用されます。

パンクチャ パターンのソース。"None" または "Property" として指定します。

  • このプロパティを "None" に設定すると、オブジェクトは符号にパンクチャを適用しません。

  • このプロパティを "Property" に設定すると、オブジェクトは PuncturePattern で定義されたパンクチャ パターン ベクトルを使用して符号をパンクチャします。

パンクチャ パターン。長さが (N – K) のバイナリ列ベクトルとして指定します。ここで、N は CodewordLength、K は MessageLength です。パンクチャ パターン ベクトルのゼロは、パンクチャされる、つまり各コードワードから除外されるパリティ シンボルの位置を示します。

依存関係

このプロパティは PuncturePatternSource"Property" に設定した場合に適用されます。

使用法

説明

Y = enc(X) は、対応する狭義の生成多項式で (CodewordLength,MessageLength) BCH 符号化器を使用して、入力メッセージを符号化します。オブジェクトを実行する際の入力および出力の長さについては、BCH System object と RS System object の入出力信号長を参照してください。

入力引数

すべて展開する

符号化するメッセージ。長さが MessageLength の整数倍と等しい、数値または logical の列ベクトルとして指定します。入力要素の MessageLength のグループ 1 つが、符号化されるメッセージ ワード 1 つを表します。

データ型: double | single | logical | int8 | int16 | int32 | uint8 | uint16 | uint32

出力引数

すべて展開する

BCH 符号化されたコードワード。バイナリ値の列ベクトルとして返されます。符号化されるデータ出力ベクトルの長さは、(CodewordLength – Npunctures) の整数倍になります。ここで、Npunctures はパンクチャの数です。パンクチャの数は、PuncturePatternSource プロパティと PuncturePattern プロパティで指定します。

データ型: single | logical

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

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

enc = comm.BCHEncoder;
mod = comm.DPSKModulator(BitInput=true);
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 = awgn(modSignal,snr);
  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.011725
Number of errors = 7

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

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

N = 31;        % Codeqword length
K = 26;        % Message length
S = 6;         % Shortened message length
gp = 'x5+x2+1' % Generator polynomial
gp = 
'x5+x2+1'
enc = comm.BCHEncoder(N,K,gp,S);
dec = comm.BCHDecoder(N,K,gp,S);

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

X = randi([0 1],60,1);
Y = enc(X);
Z = dec(Y);
isequal(X,Z)
ans = logical
   1

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

AMR 標準に基づいて符号化構成の変数を定義します。

N = 255;              % Codeword length
K = 239;              % Message length
S = 63;               % Shortened message length
gp = bchgenpoly(N,K); % BCH (255,239) generator polynomial

BCH 符号化器と復号化器のペアを作成します。

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

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

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

主処理ループを実行します。

snr = 5;
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,snr);      % 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.000238
Number of errors = 3

アルゴリズム

すべて展開する

このオブジェクトは、[1]およびBCH と RS の誤りのみの復号化のアルゴリズムで説明されている Bose-Chaudhuri-Hocquenghem (BCH) 符号化を実装します。

参照

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

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

拡張機能

バージョン履歴

R2012a で導入

参考

オブジェクト

関数