# decode

## Syntax

```msg = decode(code,n,k,'hamming/fmt',prim_poly) msg = decode(code,n,k,'linear/fmt',genmat,trt) msg = decode(code,n,k,'cyclic/fmt',genpoly,trt) msg = decode(code,n,k) [msg,err] = decode(...) [msg,err,ccode] = decode(...) [msg,err,ccode,cerr] = decode(...) ```

## Optional Inputs

InputDefault Value
`fmt` `binary`
`prim_poly` `gfprimdf(m)` where `n = 2^m-1`
`genpoly` `cyclpoly``(n,k)`
`trt `Uses `syndtable` to create the syndrome decoding table associated with the method's parity-check matrix

## Description

### For All Syntaxes

The `decode` function aims to recover messages that were encoded using an error-correction coding technique. The technique and the defining parameters must match those that were used to encode the original signal.

The `encode` reference page explains the meanings of `n` and `k`, the possible values of `fmt`, and the possible formats for `code` and `msg`. You should be familiar with the conventions described there before reading the rest of this section. Using the `decode` function with an input argument `code` that was not created by the `encode` function might cause errors.

### For Specific Syntaxes

`msg = decode(code,n,k,'hamming/fmt',prim_poly)` decodes `code` using the Hamming method. For this syntax, `n` must have the form 2m-1 for some integer m greater than or equal to 3, and `k` must equal `n`-m. `prim_poly` is a polynomial character vector or a row vector that gives the binary coefficients, in order of ascending powers, of the primitive polynomial for GF(2m) that is used in the encoding process. The default value of `prim_poly` is `gfprimdf`(m). The decoding table that the function uses to correct a single error in each codeword is `syndtable`(`hammgen`(m)).

`msg = decode(code,n,k,'linear/fmt',genmat,trt)` decodes `code`, which is a linear block code determined by the `k`-by-`n` generator matrix `genmat`. `genmat` is required as input. `decode` tries to correct errors using the decoding table `trt`, where `trt` is a `2^(n-k)`-by-`n` matrix.

`msg = decode(code,n,k,'cyclic/fmt',genpoly,trt)` decodes the cyclic code `code` and tries to correct errors using the decoding table `trt`, where `trt` is a `2^(n-k)`-by-`n` matrix. `genpoly` is a polynomial character vector or a row vector that gives the coefficients, in order of ascending powers, of the binary generator polynomial of the code. The default value of `genpoly` is `cyclpoly``(n,k)`. By definition, the generator polynomial for an [`n`, `k`] cyclic code must have degree `n-k` and must divide xn`-1`.

`msg = decode(code,n,k)` is the same as `msg = decode(code,n,k,'hamming/binary')`.

`[msg,err] = decode(...)` returns a column vector `err` that gives information about error correction. If the code is a convolutional code, `err` contains the metric calculations used in the decoding decision process. For other types of codes, a nonnegative integer in the rth row of `err` indicates the number of errors corrected in the rth message word; a negative integer indicates that there are more errors in the rth word than can be corrected.

`[msg,err,ccode] = decode(...)` returns the corrected code in `ccode`.

`[msg,err,ccode,cerr] = decode(...)` returns a column vector `cerr` whose meaning depends on the format of `code`:

• If `code` is a binary vector, a nonnegative integer in the rth row of `vec2mat``cerr` indicates the number of errors corrected in the rth codeword; a negative integer indicates that there are more errors in the rth codeword than can be corrected.

• If `code` is not a binary vector, ```cerr = err```.

## Examples

collapse all

Set the values of the codeword length and message length.

```n = 15; % Codeword length k = 11; % Message length```

Create a random binary message with length equal to the message length.

`data = randi([0 1],k,1);`

Encode the message.

`encData = encode(data,n,k,'hamming/binary');`

Corrupt the encoded message sequence by introducing an error in the fourth bit.

`encData(4) = ~encData(4);`

Decode the corrupted sequence. Observe that the decoder has correctly recovered the message.

```decData = decode(encData,n,k,'hamming/binary'); numerr = biterr(data,decData)```
```numerr = 0 ```

## Algorithms

Depending on the decoding method, `decode` relies on such lower-level functions as `hammgen`, `syndtable`, and `cyclgen`.

## Version History

Introduced before R2006a