Main Content


Produce generator polynomials for BCH code



genpoly = bchgenpoly(N,K) returns the narrow-sense generator polynomial of a BCH code with codeword length N and message length K. For more information, see Generator Polynomial of a BCH Code.


genpoly = bchgenpoly(N,K,prim_poly) also specifies the primitive polynomial.


genpoly = bchgenpoly(N,K,prim_poly,outputFormat) also specifies the output format of genpoly as a Galois field array or double-precision array.


[genpoly,T] = bchgenpoly(___) also returns T, the error-correction capability of the code when using any of the previous syntaxes.


collapse all

Create two BCH generator polynomials based on different primitive polynomials.

Set the codeword and message lengths, n and k.

n = 15;
k = 11;

Create the generator polynomial and return the error correction capability, t.

[genpoly,t] = bchgenpoly(15,11)
genpoly = GF(2) array. 
Array elements = 
   1   0   0   1   1
t = 1

Create a generator polynomial for a (15,11) BCH code using a different primitive polynomial expressed as a character vector. Note that genpoly2 differs from genpoly, which uses the default primitive.

genpoly2 = bchgenpoly(15,11,'D^4 + D^3 + 1')
genpoly2 = GF(2) array. 
Array elements = 
   1   1   0   0   1

Input Arguments

collapse all

Codeword length, specified as an integer of the form N = 2M – 1, where M is an integer in the range [3, 16]. For more information, see Limitations.

Example: 15 for M=4

Message length, specified as an integer. N and K must produce a narrow-sense BCH code. To generate the list of valid (N,K) pairs along with the corresponding values of the error-correction capability, run bchnumerr(N). For more information, see Limitations.

Example: 5 specifies a Galois array with five elements

Primitive polynomial, specified as:

Example: 'D^4+D+1' specifies the primitive polynomial D4+D+1.

Example: 19 specifies the primitive polynomial D4+D+1 because its binary representation is 10011.

Output format of genpoly, specified as:

  • 'gf' — to output a Galois field array.

  • 'double' — to output a double-precision array of the Galois field values.

For more information, see Working with Galois Fields.

Output Arguments

collapse all

Generator polynomial coefficients, returned as a row vector that represents the coefficients of the narrow-sense generator polynomial of an [N,K] BCH code in order of descending powers. Specify the output datatype with the outputFormat property.

Data Types: gf | double

Error correction capability, returned as a positive integer.


  • Valid values for N = 2M – 1, where M is an integer in the range [3, 16]. The maximum allowable value of N = 216 – 1 = 65,535.

  • Valid values for K = [1, (N – 1)].


collapse all

For a description of Bose–Chaudhuri–Hocquenghem (BCH) coding, see [1]. Although bchgenpoly performs intermediate computations in GF(N + 1), the output form is a Galois vector in GF(2).

Generator Polynomial of a BCH Code

The narrow-sense generator polynomial of a BCH code with codeword length N and message length K is LCM[m1(x), m2(x), ..., m2T(x)], where:

  • LCM represents the least common multiple,

  • mi(x) represents the minimum polynomial corresponding to αi, α is a root of the default primitive polynomial for the field GF(N + 1),

  • T represents the error-correcting capability of the code.

Default Primitive Polynomials

This table lists the default primitive polynomial used for each Galois field array GF(2m). To use a different primitive polynomial, specify prim_poly as an input argument. prim_poly must be in the range [(2m + 1), (2m+1 – 1)] and must indicate an irreducible polynomial. For more information, see Primitive Polynomials and Element Representations.

Value of mDefault Primitive PolynomialInteger Representation
1D + 13
2D2 + D + 17
3D3 + D + 111
4D4 + D + 119
5D5 + D2 + 137
6D6 + D + 167
7D7 + D3 + 1137
8D8 + D4 + D3 + D2 + 1285
9D9 + D4 + 1529
10D10 + D3 + 11033
11D11 + D2 + 12053
12D12 + D6 + D4 + D + 14179
13D13 + D4 + D3 + D + 18219
14D14 + D10 + D6 + D + 117475
15D15 + D + 132771
16D16 + D12 + D3 + D + 169643


[1] Peterson, W. Wesley, and E. J. Weldon. Error-correcting Codes.1972.

Version History

Introduced before R2006a