Decode BCH code to recover binary vector data
Block sublibrary of Error Detection and Correction
The BCH Decoder block recovers a binary message vector from a binary BCH codeword vector. For proper decoding, the first two parameter values in this block must match the parameters in the corresponding BCH Encoder block.
The full length values of N and K must produce a valid narrowsense BCH code.
If the decoder is processing multiple codewords per frame, then the same puncture pattern holds for all codewords.
For a given codeword length, N, only specific message length Ks are valid for a BCH code. For a fulllength BCH code, N must be of the form 2^{M}1, where $$3\le M\le 16$$.
No known analytic formula describes the relationship among the codeword length, message length, and errorcorrection capability. For a list of some valid values of K corresponding to values of N up to 511, see the table on the BCH Encoder reference page.
You can specify the shortened message length, the primitive polynomial, and generator polynomial in their respective text boxes, which appear after selecting their corresponding check boxes.
To output error information from the block, select Output number of corrected errors. Selecting this option creates a second output port, which outputs the number of errors detected during decoding of the codeword. A negative integer indicates that the block detected more errors than it could correct using the coding scheme.
If decoding fails, the message portion of the decoder input is returned unchanged as the decoder output.
The sample times of all input and output signals are equal.
For information about the data types each block port supports, see the Supported Data Type table on this page.
This block supports puncturing when you select Punctured
code. This selection enables the Puncture vector parameter,
which takes in a binary vector to specify the puncturing pattern.
For a puncture vector, 1
represents that the data
symbol passes unaltered, and 0
represents that
the data symbol gets punctured, or removed, from the data stream.
This convention applies for both the encoder and the decoder. For
more information, see Shortening, Puncturing, and Erasures.
1
s and 0
s have precisely
opposite meanings for the puncture and erasure vectors. For an erasure
vector, 1
means that the data symbol is to be replaced
with an erasure symbol, and 0
means that the data
symbol is passed unaltered. This convention is carried for both the
encoder and the decoder.
The notation y = c * x
denotes that y
is
an integer multiple of x
.
The number of punctures value is equal to the number of zeros in the puncture vector.
M is the degree of the primitive polynomial.
Each group of M bits represents an integer between 0
and 2^{M}–1
that
belongs to the finite Galois field GF(2^{M})
.
Specify shortened message length  BCH Encoder IntegerInput RS Encoder  BCH Decoder IntegerOutput RS Decoder  BinaryInput RS Encoder  BinaryOutput RS Decoder 

off 




on 




The codeword length.
The message length.
Selecting this check box enables the Shortened message length, S text box.
The shortened message length. When you specify this parameter, provide fulllength N and K values to specify the (N,K) code that is shortened to an (N–K+S,S) code.
Selecting this check box enables the Generator polynomial text box.
A row vector that represents the generator polynomial as a character vector or as binary coefficients in order of descending powers.
The length of the Generator polynomial must be N–K+1.
This field defaults to 'X^10 + X^8 + X^5 + X^4 + X^2
+ X + 1'
, which is equivalent to bchgenpoly(15,5)
.
This parameter appears only when you select Specify generator polynomial.
Each time a model initializes, the block performs a polynomial check. This check verifies that X ^{N} + 1 is divisible by the userdefined generator polynomial, where N represents the full code word length. Selecting this check box disables the polynomial check. For larger codes, disabling the check speeds up the simulation process. You should always run the check at least once before disabling this feature.
This check box appears only when you select Specify generator polynomial.
Selecting this check box enables the Primitive polynomial text box.
A row vector that represents the binary coefficients of the primitive polynomial in order of descending powers.
This field defaults to 'X^4 + X + 1'
. This
is the primitive polynomial used for a (15,5) code, de2bi(primpoly(4,'nodisplay'),'leftmsb')
.
This parameter appears only when you select Specify primitive polynomial.
Selecting this check box enables the Puncture vector text box.
This parameter appears only when you select Puncture code.
A column vector of length N–K.
In the Puncture vector, a value of 1
represents
that the data symbol passes unaltered, and 0
represents
that the data symbol gets punctured, or removed, from the data stream.
The default value is [ones(8,1); zeros(2,1)]
.
Selecting this check box opens the erasures port, Era
.
Through the port, you can input a binary column vector the same size as the codeword input.
Erasure values of 1
correspond to erased
bits in the same position in the codeword. Values of 0
correspond
to bits that are not erased.
Selecting this check box gives the block an additional output
port, Err
, which indicates the number of errors
the block corrected in the input codeword.
Port  Supported Data Types 

In 

Out 

Era 

Err 

This object implements the algorithm, inputs, and outputs described in Algorithms for BCH and RS Errorsonly Decoding.
[1] Wicker, Stephen B., Error Control Systems for Digital Communication and Storage, Upper Saddle River, N.J., Prentice Hall, 1995.
[2] Berlekamp, Elwyn R., Algebraic Coding Theory, New York, McGrawHill, 1968.
[3] Clark, George C., Jr., and J. Bibb Cain, ErrorCorrection Coding for Digital Communications, New York, Plenum Press, 1981.