Main Content

# rsdec

Reed-Solomon decoder

## Syntax

``decoded = rsdec(code,n,k)``
``decoded = rsdec(code,n,k,genpoly)``
``decoded = rsdec(___,paritypos)``
``[decoded,cnumerr] = rsdec(___)``
``[decoded,cnumerr,ccode] = rsdec(___)``

## Description

````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. `n` is the codeword length and `k` is the message length. Output `decoded` is the decoded Reed-Solomon encoded signal.```

example

````decoded = rsdec(code,n,k,genpoly)` specifies the generator polynomial for the code for a nonzero value.```
````decoded = rsdec(___,paritypos)` specifies the position of the parity symbols in `code`.```
````[decoded,cnumerr] = rsdec(___)` also returns the number of corrected errors as a column vector.```
````[decoded,cnumerr,ccode] = rsdec(___)` additionally returns the corrected version of `code`.```

## Examples

collapse all

Set the RS code parameters.

```m = 3; % Number of bits per symbol n = 2^m-1; % Codeword length k = 3; % Message length```

Generate three codewords composed of 3-bit symbols. Encode the message with a (7,3) RS code.

```msg = gf([2 7 3; 4 0 6; 5 1 1],m); code = rsenc(msg,n,k);```

Introduce one error on the first codeword, two errors on the second codeword, and three errors on the third codeword.

```errors = gf([2 0 0 0 0 0 0; 3 4 0 0 0 0 0; 5 6 7 0 0 0 0],m); noisycode = code + errors;```

Decode the corrupted codeword.

`[rxcode,cnumerr] = rsdec(noisycode,n,k);`

Observe that the number of corrected errors matches the introduced errors for the first two rows. In row three, the number of corrected errors is `-1` because a (7,3) RS code cannot correct more than two errors.

`cnumerr`
```cnumerr = 3×1 1 2 -1 ```

## Input Arguments

collapse all

Received corrupted Reed-Solomon encoded codeword, specified as a matrix with all values greater than or equal to zero. `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.

Data Types: `double`

Codeword length, specified as an integer of the form 2m–1, where m is in the range [3, 16]. `n` must be in the range [7, 65535].

If `n` is not exactly 2m-1, `rsdec` assumes that `code` is a corrupted version of a shortened code.

Note

`n` and `k` must differ by a positive even integer.

Data Types: `double`

Message length, specified as a positive integer.

Data Types: `double`

Generator polynomial coefficients in descending order, returned as a Galois row vector. `genpoly` represents the coefficients of the narrow-sense generator polynomial in order of descending powers. To use the default narrow-sense generator polynomial, set `genpoly` to `[]`.

The generator polynomial must have degree of `n``-``k`.

Data Types: `double`

Indicates position of the parity symbols in `code`, specified as one of these options.

• `"end"` — Appends the parity symbols to the input message in the coding operation to form `code`.

• `"beginning"` — Prepends the parity symbols to the input message in the coding operation to form `code`.

Data Types: `double`

## Output Arguments

collapse all

Decoded Reed-Solomon encoded signal, returned as a matrix. Each row of the matrix 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. If you set the `paritypos` argument to `"beginning"`, a decoding failure causes `rsdec` to remove `n``-``k` symbols from the beginning rather than the end of the row.

Data Types: `double`

Number of corrected errors, returned as a column vector. Each element of this vector represents the corrected errors in the corresponding row of `code`.

A value of `-1` indicates a decoding failure in that row in code.

Data Types: `double`

Corrected version of input code `code`, returned as a matrix with all values greater than or equal to zero. `ccode` is a Galois array that 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.

Data Types: `double`

## Algorithms

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

## References

[1] Blahut, Richard E. Algebraic Codes for Data Transmission. Cambridge University Press, 2003.

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

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

[4] Berlekamp, Elwyn R., Algebraic Coding Theory, New York, McGraw-Hill, 1968.

## Version History

Introduced before R2006a