10 Altera Corporation
Specifications Viterbi Compiler MegaCore Function User Guide
The rate and the generating polynomials describe the encoder. The rate is
the number of extra bits per input bit, e.g., a rate 1/2 encodes 1 bit and
produces 2 bits for transmission. Similarly, a rate 2/3 encodes 2 bits and
produces 3 bits for transmission. A code can be punctured to increase its
rate, by deleting some of the encoded bits according to a deterministic
pattern.
The generating polynomials are bit patterns that denote the bits of the
input data stream, which are mathematically combined to produce an
encoded bit. There is one generating polynomial per encoded bit. The
length in bits of the generating polynomial is called the constraint length;
systems with higher constraint lengths are generally more robust.
However, the complexity of the Viterbi decoder increases exponentially
with the constraint length, so it is unusual to find constraint lengths
greater than nine.
Bit errors can occur at the receiver if the transmission channel is noisy. The
Viterbi algorithm is efficient at decoding the data stream and correcting
errors. The Viterbi decoder uses the redundancy, which the convolutional
encoder imparted, to decode the bit stream and remove the errors.
When encoded with the generating polynomials, the Viterbi algorithm
finds the most likely sequence of bits that is closest to the actual received
sequence. The decoding is highly mathematical, and uses a state machine
to describe how the received sequence could have resulted from all
possible sequences of bits. While processing bits the decoder retains
information on the likelihood of the possible sequences, which are stored
as ‘accumulated branch metrics’.
The receiver can deliver either hard or soft symbols to the Viterbi decoder.
A hard symbol is equivalent to a binary ±1. A soft symbol is multi-leveled
to represent the confidence in the bit being positive or negative. For
instance, if the channel is non-fading and Gaussian, the output of a
matched filter quantized to a given number of bits is a suitable soft input.
In both cases 0 is used to represent a punctured bit. The Viterbi algorithm
has better performance with soft input symbols.
The Viterbi decoder works on blocks of data, or continuous streams. It
takes in n symbols at a time for processing, where n is the number of
encoded symbols. The traceback length is the delay before the decoder
makes a decision on a bit. For blocks of data, the best performance is
achieved if decoding decisions are delayed until all input symbols have
been processed. For continuous streams this is not possible, and for
practical purposes the traceback length should be limited to several times
the constraint length.