In
this lab, you will implement maximum likelihood sequence estimation using the Viterbi algorithm and the TMS320C55x DSP. The Viterbi algorithm finds wide use in the equalization of
simple one or two sample-delay channels (e.g., in hard drives) as well as in
the decoding of convolutional codes.
Section 7.4 - Viterbi
Algorithm for Channel Decoding
Download EE265Viterbi.m file and run in MATLAB. This script
does the following operations.
With
this script, you can compare symbol-by-symbol decoding (undotted
lines) and viterbi decoding (dotted lines) with alpha ranging 0 to 0.9 and standard deviation
of Gaussian nosie ranging 0 to 10.

This shows that viterbi decoding performs far better than symbol-by-symbol
decoding in the presence of ISI and Gaussian noise. Note that the viterbi decoding in this script is just using mlseeq function. So it will be much easier to write your
own Viterbi decoder in Matlab
first.
Now,
you will implement viterbi decoder in C55x DSP and
compare it's performance with symbol-by-symbol
decoding and viterbi decoding performed in matlab.
In order to do, you should generate ISI-corrupted nosiy
data. You can use MATLAB to generate ISI-corrupted noisy data.
So, your role is to implement viterbi decoder for the
given ISI-corrupted nosiy data for a specific value
of alpha. The verification could be done using Matlab
and Matlab / CCS interface. Your implementation
should use different value of traceback length.
You can start with a template project viterbi_tmpl.
C55x DSP has special instructions for viterbi
decoding, which are MINDIFF, DMINDIFF, MAXDIFF and MAXDIFF, hence we recommend
you to use those instructions for efficient implementation. Other things you
need to consider is signal accuracy. Since you are
going to use fixed point arithmetic, there are a couple of issues; how many
bits for your arithmetic - 16bits or 32bits? how many
bits for integer portion of fixed point representation?
Required questions to answer:
(a) How does the bit-error-rate performance of a symbol-by-symbol detector compare
with the performance of the Viterbi decoder?
(b) How does the latency of the decoder affect performance?
Optional questions/implementations:
(a) How does the performance of soft-decoding compare with hard decoding?
(b) Implement a Viterbi decoder for a system with 2
bits per symbol.
(c) Implement a quadrature-modulated system.
(d) Convolutionally encode your transmitted data and
then decode it.
Last
modified: 9:00 am 3/07/2007