Main Content

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 vec2matcerr 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.

Introduced before R2006a