0% found this document useful (0 votes)
30 views

Viterbi Decoder

This document discusses the Viterbi decoding algorithm for convolutional codes. It begins by explaining the key assumptions of the Viterbi algorithm, including that any state can be reached from two possible previous states, and that only one transition is valid. It then describes the process of computing branch metrics, path metrics, and survivor paths over multiple time steps to decode the received codeword. Finally, it notes that the algorithm traces back through the survivor path to estimate the transmitted input sequence.

Uploaded by

Fetsum Lakew
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views

Viterbi Decoder

This document discusses the Viterbi decoding algorithm for convolutional codes. It begins by explaining the key assumptions of the Viterbi algorithm, including that any state can be reached from two possible previous states, and that only one transition is valid. It then describes the process of computing branch metrics, path metrics, and survivor paths over multiple time steps to decode the received codeword. Finally, it notes that the algorithm traces back through the survivor path to estimate the transmitted input sequence.

Uploaded by

Fetsum Lakew
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

Viterbi decoder

Coding is a technique where redundancy is added to original bit sequence to increase the reliability of
the communication. Lets discuss a simple binary convolutional coding scheme at the transmitter and the
associated Viterbi (maximum likelihood) decoding scheme at the receiver.

Update: For some reason, the blog is unable to display the article which discuss both Convolutional
coding and Viterbi decoding. As a work around, the article was broken upto into two posts.

This post descrbes the Viterbi decoding algorithm for a simple Binary Convolutional Code with rate 1/2,

constraint length and having generator polynomial . For more details on the Binary
convolutional code, please refer to the post Convolutional code

Viterbi algorithm

As explained in Chapter 5.1.4 of Digital Communications by John Proakis for optimal decoding
for a modulation scheme with memory (as is the case here), if there are coded bits, we need
to search from possible combinations. This becomes prohibitively complex as becomes
large. However, Mr. Andrew J Viterbi in his landmark paper Error bounds for convolutional
codes and an asymptotically optimum decoding algorithm, IEEE Transactions on Information
Theory 13(2):260269, April 1967 described a scheme for reducing the complexity to more
managable levels. Some of the key assumptions are as follows:

(a) As shown in Table 1 and Figure 2 (in the article Convoutional Code) any state can be
reached from only 2 possible previous state.

(b) Though we reach each state from 2 possible states, only one of the transition in valid. We can
find the transition which is more likely (based on the received coded bits) and ignore the other
transition.

(c) The errors in the received coded sequence are randomly distributed and the probability of
error is small.

Based on the above assumptions, the decoding scheme proceed as follows: Assume that there are
coded bits. Take two coded bits at a time for processing and compute Hamming distance,
Branch Metric, Path Metric and Survivor Path index for times. Let be the index
varying from 1 till .
Hamming Distance Computation

For decoding, consider two received coded bits at a time and compute the Hamming distance
between all possible combinations of two bits. The number of differing bits can be computed by
XOR-ing with 00, 01, 10, 11 and then counting the number of ones.

is the number of 1s in

is the number of 1s in

is the number of 1s in

is the number of 1s in

Branch Metric and Path Metric Computation

As stated prior, each state can be reached from two possible states (shown by red and blue lines
respectively). Branch metric is the sum of the path metric of the previous state and the hamming
distance required for the transition. From the two avaiable branch metrices, the one with
minimum branch metric value is chosen. This operation is also referred to as Add Compare and
Select (ACS) unit.

Note:

1. Typically, Convolutional coder always starts from State 00. The Viterbi decoder also assumes
the same.

2. For index = 1, branch metric for State 00 (from State 00) branch and State 10 (from State 00)
can only be computed. In this case, path metric for each state is equal to branch metric as the
other branch is not valid.

3. For index = 2, branch metric for State 00 (from State 00) branch, State 01 (from State 10),
State 10 (from State 00) and State 11 (from State 10) can only be computed. In this case too, path
metric for each state is equal to branch metric as the other branch is not valid.

4. Starting from index =3, each state has two branches and the need to do Add Compare and
Select arises.

5. Its possible that two branch metrices might have the same value. In that scenario, we can
chose one among the the branches and proceed.
Branch Metric and Path Metric computation for Viterbi decoder

Figure: Branch Metric and Path Metric computation for Viterbi decoder

State 00 can be reached from two branches

(a) State 00 with output 00. The branch metric for this transition is,

(b) State 01 with output 11. The branch metric for this transition is,

The path metric for state 00 is chosen based which is minimum out of the two.

The survivor path for state 00 is stored in survivor path metric.

State 01 can be reached from two branches:

(c) State 10 with output 10. The branch metric for this transition is,
(d) State 11 with output 01. The branch metric for this transition is,

The path metric for state 01 is chosen based which is minimum out of the two.

The survivor path for state 01 is stored in survivor path metric.

State 10 can be reached from two branches:

(e) State 00 with output 11. The branch metric for this transition is,

(f) State 01 with output 00. The branch metric for this transition is,

The path metric for state 10 is chosen based which is minimum out of the two.

The survivor path for state 10 is stored in survivor path metric.

State 11 can be reached from two branches:

(g) State 10 with output 01. The branch metric for this transition is,

(h) State 11 with output 10. The branch metric for this transition is,

The path metric for state 11 is chosen based which is minimum out of the two.
The survivor path for state 11 is stored in survivor path metric.

Traceback Unit

Once the survivor path is computed times, the decoding algorithm can start trying to
estimate the input sequence. Thanks to presence of tail bits (additional zeros) , it is known
that the final state following Convolutional code is State 00.

So, start from the last computed survivor path at index for State 00. From the survivor
path, find the previous state corresponding to the current state. From the knowledge of current
state and previous state, the input sequence can be determined (Ref: Table 2 Input given
current state and previous state). Continue tracking back through the survivor path and
estimate the input sequence till index = 1.

ip, if
previous
state

current state 00 01 10 11

00 0 0 x x

01 x x 0 0

10 1 1 x x

11 x x 1 1

Table 2: Input given current state and previous state

Simulation Model

Octave/Matlab source code for computing the bit error rate for BPSK modulation in AWGN
using the convolutional coding and Viterbi decoding is provided. Refer to the post on Bit Error
Rate (BER) for BPSK modulation for signal and channel model.

Note: Since 2 coded bits are required for transmission of each data bit, the relation between

coded bits to noise ratio with bits to noise ratio is


.

The simulation model performs the following:

(a) Generation of random BPSK modulated symbols +1s and -1s

(b) Convolutionally encode them using rate -1/2, generator polynomial [7,5] octal code

(c) Passing them through Additive White Gaussian Noise channel

(d) Hard decision demodulation on the received coded symbols

(e) Received coded bits are passed to Viterbi decoder

(f) Counting the number of errors from the output of Viterbi decoder

(g) Repeating the same for multiple Eb/No value.

Soft Input Viterbi decoder


In two previous posts, we have discussed Convolutional Coding and the associated hard decision
Viterbi decoding. In this post lets extent Viterbi decoding algorithm to soft input decision
scheme. The modulation used is BPSK and the channel is assumed to be AWGN alone.

System Model

The received coded sequence is

, where

is the modulated coded sequence taking values if the coded bit is 1 and if the
coded bit is 0,

is the Additive White Gaussian Noise following the probability distribution function,

with mean and variance .


The conditional probability distribution function (PDF) of if the coded bit is 0 is,

Conditional probability distribution function (PDF) of if the coded bit is 1 is,

Euclidean distance

In the hard decision Viterbi decoding, based on the location of the received coded symbol, the
coded bit was estimated if the received symbol is greater than zero, the received coded bit is 1;
if the received symbol is less than or equal to zero, the received coded bit is 0.

In Soft decision decoding, rather than estimating the coded bit and finding the Hamming
distance, the distance between the received symbol and the probable transmitted symbol is found
out.

Euclidean distance if transmitted coded bit is 0 is,

Euclidean distance if transmitted coded bit is 1 is,


.

As the terms , , and are common in both the equations they can be ignored. The
simplified Euclidean distance is,

and

As the Viterbi algorithm takes two received coded bits at a time for processing, we need to find
the Euclidean distance from both the bits.
Summarizing, in Soft decision decoding, Euclidean distance is used instead of Hamming
distance for branch metric and path metric computation.

Note:

For details on branch metric, path metric computation and trace back unit refer to the post on
hard decision Viterbi decoding.

Simulation Model

Octave/Matlab source code for computing the bit error rate for BPSK modulation in AWGN
using the convolutional coding and soft decision Viterbi decoding is provided.

The simulation model performs the following:

(a) Generation of random BPSK modulated symbols +1s and -1s

(b) Convolutionally encode them using rate -1/2, generator polynomial [7,5] octal code

(c) Passing them through Additive White Gaussian Noise channel

(d) Received soft bits and hard bits are passed to Viterbi decoder

(e) Counting the number of errors from the output of Viterbi decoder

(f) Repeating the same for multiple Eb/No value.

You might also like