EE265 Lab 6: Viterbi Algorithm and Sequence Equalization

Winter 2007-2008
Instructor: Teresa Meng


I. Introduction

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.

II. Readings

Section 7.4 - Viterbi Algorithm for Channel Decoding 

 

III. Lab Exercises

In this lab, you will implement the Viterbi algorithm for the equalization of a simple 1 + alpha*z^(-1) channel, and compare the decoding accuracy of your implementation to symbol-by-symbol decoding at various levels of SNR.

A. MATLAB preparation

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.

B. DSP Implementation

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