Main Content

Reed-Solomon decoder

`decoded = rsdec(code,n,k)`

decoded = rsdec(code,n,k,genpoly)

decoded = rsdec(...,* paritypos*)

[decoded,cnumerr] = rsdec(...)

[decoded,cnumerr,ccode] = rsdec(...)

`decoded = rsdec(code,n,k)`

attempts
to decode the received signal in `code`

using an
[`n`

,`k`

] Reed-Solomon decoding
process with the narrow-sense generator polynomial. `code`

is
a Galois
array of symbols having m bits each. Each `n`

-element
row of `code`

represents a corrupted systematic codeword,
where the parity symbols are at the end and the leftmost symbol is
the most significant symbol. `n`

is at most 2^{m}-1.
If `n`

is not exactly 2^{m}-1, `rsdec`

assumes
that `code`

is a corrupted version of a shortened
code.

In the Galois array `decoded`

, each row represents
the attempt at decoding the corresponding row in `code`

.
A *decoding failure* occurs if `rsdec`

detects
more than `(n-k)/2`

errors in a row of `code`

.
In this case, `rsdec`

forms the corresponding row
of `decoded`

by merely removing `n-k`

symbols
from the end of the row of `code`

.

`decoded = rsdec(code,n,k,genpoly)`

is
the same as the syntax above, except that a nonempty value of `genpoly`

specifies
the generator polynomial for the code. In this case, `genpoly`

is
a Galois row vector that lists the coefficients, in order of descending
powers, of the generator polynomial. The generator polynomial must
have degree `n-k`

. To use the default narrow-sense
generator polynomial, set `genpoly`

to `[]`

.

`decoded = rsdec(...,`

specifies whether the parity symbols in * paritypos*)

`code`

were appended or
prepended to the message in the coding operation. `paritypos`

`'end'`

or `'beginning'`

. The default is
`'end'`

. If `paritypos`

`'beginning'`

, a decoding failure causes `rsdec`

to remove `n-k`

symbols from the beginning rather than the end of the
row.`[decoded,cnumerr] = rsdec(...)`

returns
a column vector `cnumerr`

, each element of which
is the number of corrected errors in the corresponding row of `code`

.
A value of `-1`

in `cnumerr`

indicates
a decoding failure in that row in `code`

.

`[decoded,cnumerr,ccode] = rsdec(...)`

returns `ccode`

,
the corrected version of `code`

. The Galois array `ccode`

has
the same format as `code`

. If a decoding failure
occurs in a certain row of `code`

, the corresponding
row in `ccode`

contains that row unchanged.

`n`

and `k`

must differ by
an even integer. `n`

must be between 3 and 65535.

`rsdec`

uses the Berlekamp-Massey decoding
algorithm. For information about this algorithm, see the works listed
in References below.

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

[2] Berlekamp, E. R., *Algebraic
Coding Theory*, New York, McGraw-Hill, 1968.