Create Reed-Solomon code from integer vector data
Communications Toolbox / Error Detection and Correction / Block
The Integer-Input RS Encoder block creates a Reed-Solomon code.
The symbols for the code are integers between 0 and
2M-1, which represent elements of the finite field
GF(2M). The default value of
M is the smallest integer that is greater than or equal to
log2(N+1), that is, ceil(log2(N+1))
. You can change the
default value of M by specifying the primitive polynomial for
GF(2M), as described in Specify the Primitive Polynomial below. Restrictions on
M and N are described in Restrictions on M and the Codeword Length N.
The input and output are integer-valued signals that represent messages and codewords, respectively. For more information, see Input and Output Signal Length in RS Blocks.
An (N, K) Reed-Solomon code can correct up to
floor((N-K)/2)
symbol errors (not bit errors) in each codeword.
Suppose M = 3, N = 23-1 = 7, and K = 5. Then a message is a
vector of length 5 whose entries are integers between 0 and 7. A corresponding codeword is a
vector of length 7 whose entries are integers between 0 and 7. The following figure illustrates
possible input and output signals to this block when Codeword length N is
set to 7
, Message length K is set to
5
, and the default primitive and generator polynomials are used.
In
— MessageMessage, specified as one of the following:
When there is no message shortening, a (NC×K)-by-1 integer column vector.
When there is message shortening, a (NC×S)-by-1 integer column vector.
NC is the number of message words, K is the Message length K, and S is the Shortened message length S.
Note
The number of decoded message words equals the number of codewords.
For more information, see Input and Output Signal Length in RS Blocks.
Data Types: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
Out
— Reed-Solomon codewordReed-Solomon codeword, returned as an (NC×(N – K + S – P)-by-1 integer column vector. NC is the number of codewords, N is the Codeword length N, K is the Message length K, S is the Shortened message length S, P is the number of punctures per codeword.
For more information, see Input and Output Signal Length in RS Blocks.
Data Types: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
For more information, see Supported Data Types.
Codeword length N
— Codeword length7
(default) | integerCodeword length, specified as an integer.
For more information, see Restrictions on M and the Codeword Length N and Input and Output Signal Length in RS Blocks.
Message length K
— Message word length3
(default) | integerMessage word length, specified as an integer in the range [1, N–2], where N is the codeword length.
Shortened message length S
— Shortened message word length3
(default) | integerShortened message word length, specified as an integer, such that S ≤ K. When Shortened message length S < Message length K, the Reed-Solomon code is shortened.
You still specify N and K values for the full-length (N, K) code but the decoding is shortened to an (N–K+S, S) code.
To enable this parameter, select Specify shortened message length.
Generator polynomial
— Generator polynomialrsgenpoly(7, 3, [], [], 'double')
(default) | polynomial character vector | binary row vector | binary Galois row vector Generator polynomial with values in the range [0 to 2M–1], in order of descending power, specified as one of the following:
A polynomial character vector. For more information, see Character Representation of Polynomials.
An integer row vector that represents the coefficients of the generator polynomial in order of descending power.
An integer Galois row vector that represents the coefficients of the generator polynomial in order of descending power.
Each coefficient is an element of the Galois field defined by the primitive polynomial. For more information, see Specify the Generator Polynomial.
Example: [1 3 1 2 3]
, which is equivalent to
rsgenpoly(7,3)
To enable this parameter, select Specify generator polynomial.
Primitive polynomial
— Primitive polynomial'X^3 + X + 1'
(default) | polynomial character vector | binary row vectorPrimitive polynomial in order of descending power. This polynomial is of order M and defines the finite Galois field GF(2M) corresponding to the integers that form message words and codewords. Specify the primitive polynomial as one of the following:
A polynomial character vector. For more information, see Character Representation of Polynomials.
A binary row vector that represents the coefficients of the generator polynomial.
For more information, see Specify the Primitive Polynomial.
Example: 'X^3 + X + 1'
, which is the primitive polynomial used for a
(7,3) code, de2bi(primpoly(3,'nodisplay'),'left-msb')
To enable this parameter, select Specify primitive polynomial.
Puncture vector
— Puncture vector[ones(2,1); zeros(2,1)]
(default) | binary column vectorPuncture vector, specified as an (N–K)-by-1 binary
column vector. Element indices with 1
s represent data
symbol indices that pass through the block unaltered. Element indices
with 0
s represent data symbol indices that get
punctured, or removed, from the data stream. For more information, see Puncturing and Erasures.
Note
If the encoder is processing multiple codewords per frame, then the same puncture pattern holds for all codewords.
To enable this parameter, select Puncture code.
Data Types |
|
Multidimensional Signals |
|
Variable-Size Signals |
|
The Reed-Solomon code has a message word length, K, or shortened message word length, S. The codeword length is N – K + S – P, where N is the full codeword length and P is the number of punctures per codeword. When there is no message shortening, the codeword length expression reduces to N – P, because K = S. If the decoder is processing multiple codewords per frame, then the same puncture pattern holds for all codewords.
This table provides expressions for the input and output signal lengths for the Reed-Solomon encoder and decoder.
The notation y = NC × x denotes that y is an integer multiple of x.
Input, Erasure, and Output Vector Lengths | ||
---|---|---|
RS Block Coder | No Message Shortening Used | Message Shortening Used |
Integer-Input RS Encoder |
Input Length (symbols): NC × K Output Length (symbols): NC × (N–P) |
Input Length (symbols): NC × S Output Length (symbols): NC × (N–K+S–P) |
Integer-Output RS Decoder |
Input Length (symbols): NC × (N–P) Erasures Length (symbols): NC × (N–P) Output Length (symbols): NC × K |
Input Length (symbols): NC × (N–K+S–P) Erasures Length (symbols): NC × (N–K+S–P) Output Length (symbols): NC × S |
N is the codeword length.
K is the message word length.
S is the shortened message word length.
NC is the number of codewords (and message words).
P is the number of punctures, and 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
2M–1
that belongs to the finite Galois field
GF(2M)
.
For more information on representing data for Reed-Solomon codes, see Integer Format (Reed-Solomon Only).
If you do not select Specify primitive polynomial, valid values
for the codeword length, N, are from 7 to 65535. In this case, the
block uses the default primitive polynomial of degree M =
ceil(log2(N+1))
. You can display the default primitive polynomial by
running primpoly(ceil(log2(N+1)))
.
If you select Specify primitive polynomial, valid values for the primitive polynomial degree, M, are from 3 to 16. The valid values for N in this case are from 7 to 2M–1. Selecting Specify primitive polynomial enables you to specify the primitive polynomial that defines the finite field GF(2M), which corresponds to the values that form message words and codewords.
You can specify the primitive polynomial that defines the finite field
GF(2M),
corresponding to the integers that form messages and codewords. To do so, first select
Specify primitive polynomial. Then, in the Primitive
polynomial text box, enter a binary row vector that represents a primitive
polynomial over GF(2M), in
descending order of powers. For example, to specify the polynomial
x3+x+1, enter the vector [1 0 1 1]
.
If you do not select Specify primitive polynomial, the block uses the default primitive polynomial of degree M = ceil(log2(N+1)). You can display the default polynomial by entering primpoly(ceil(log2(N+1)))
at the MATLAB® prompt.
Select Specify generator polynomial to enable the Generator polynomial parameter for specifying the generator polynomial of the Reed-Solomon code. Enter an integer row vector with element values from 0 to 2M-1. The vector represents a polynomial, in descending order of powers, whose coefficients are elements of GF(2M) represented in integer format. For more information about integer and binary format, see Integer Format (Reed-Solomon Only). The generator polynomial must be equal to a polynomial with this factored form:
g(x) = (x+αb)(x+αb+1)(x+αb+2)...(x+αb+N-K-1)
α is the primitive element of the Galois field over which the input message is defined, and b is an integer.
If you do not select Specify generator polynomial, the block uses the
default generator polynomial, corresponding to b=1, for Reed-Solomon
encoding. You can display the default generator polynomial by running rsgenpoly
.
If you are using the default primitive polynomial (Specify primitive
polynomial is not selected), the default generator polynomial is
rsgenpoly(N,K)
, where N =
2M-1
.
If you are not using the default primitive polynomial (Specify
primitive polynomial is selected) and you specify the primitive
polynomial as poly
, the generator polynomial is
rsgenpoly(N,K,poly)
.
Note
The degree of the generator polynomial is N − K, where N is the codeword length and K is the message word length.
1
s and 0
s have
precisely opposite meanings for the puncture and erasure vectors.
In a puncture vector,
1
means that the data symbol is passed through the block
unaltered.
0
means that the data symbol is to be punctured, or
removed, from the data stream.
In an erasure vector,
1
means that the data symbol is to be replaced with an
erasure symbol.
0
means that the data symbol is passed through the block
unaltered.
These conventions apply to both the encoder and the decoder. For more information, see Shortening, Puncturing, and Erasures.
Port | Supported Data Types |
---|---|
In |
|
Out |
|
This object implements the algorithm, inputs, and outputs described in Algorithms for BCH and RS Errors-only Decoding.