02.11.2014 Views

Channel Coding Part II - Digital Communication Chapter 6 & 7 - Unik

Channel Coding Part II - Digital Communication Chapter 6 & 7 - Unik

Channel Coding Part II - Digital Communication Chapter 6 & 7 - Unik

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

<strong>Channel</strong> <strong>Coding</strong> <strong>Part</strong> <strong>II</strong><br />

<strong>Digital</strong> <strong>Communication</strong><br />

<strong>Chapter</strong> 6 & 7<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

Ola Jetlund<br />

November 1, 2007


Last Week<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

◮ <strong>Channel</strong> <strong>Coding</strong><br />

Decoding<br />

Decisions<br />

Viterbi<br />

◮ Linear Block Codes<br />

◮ Convolutional Codes


Linear Block Codes (n, k), I<br />

<strong>Coding</strong> is a mapping from one space to another:<br />

mapping<br />

e<br />

U r<br />

m G H T s<br />

<strong>Channel</strong><br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

Data block<br />

Codeword<br />

k bits<br />

n bits<br />

s = r · H T r = U + e U = m · G G · H T = 0<br />

s = r · H T = (U + e) · H T = (m · G + e) · H T m · G · H T + e · H T<br />

= m · 0 + e · H T = 0 + e · H T = e · H T .


Hamming distance and weight<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

◮ Hamming weight: w(U i ) = the number of non-zero<br />

elements in U i .<br />

◮ Hamming distance: d(U i , U j ) = w(U i ⊕ U j )<br />

◮ Minimum distance:<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

d min = min d(U i , U j ) = min w(U i )<br />

i≠j<br />

i


Convolutional codes<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

0/000<br />

0/011<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

1/111<br />

b<br />

1/100<br />

0/011<br />

0/001<br />

1/100<br />

0/001<br />

0/000<br />

a<br />

0/010<br />

1/111<br />

c<br />

0/010<br />

1/110<br />

1/110<br />

d<br />

1/101<br />

1/101


Today<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

More details on the Convolutional codes<br />

◮ State diagram and trellis representation of the code<br />

- another example.<br />

◮ How the decoding is performed for Convolutional<br />

codes?<br />

◮ What is a Maximum likelihood decoder?<br />

◮ What are the soft decisions and hard decisions?<br />

◮ How does the Viterbi algorithm work?<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi


Block Diagram of the DCS<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

Introduction<br />

Information<br />

source<br />

Rate 1/n<br />

Conv. encoder<br />

Modulator<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

<strong>Channel</strong><br />

Decoding<br />

Decisions<br />

Viterbi<br />

Information<br />

sink<br />

Rate 1/n<br />

Conv. decoder<br />

Demodulator


The encoder today<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

A Rate 1 2<br />

Input data bits<br />

Convolutional encoder<br />

First coded bit<br />

(Branch word)<br />

Output coded bits<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

Second coded bit


State Diagram<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1/11<br />

10 01<br />

0/10<br />

1/01<br />

0/00<br />

00<br />

1/00<br />

11<br />

Input<br />

0/11<br />

Output<br />

(Branch word)<br />

0/01<br />

Current<br />

state<br />

00<br />

01<br />

10<br />

11<br />

input<br />

Next<br />

state<br />

output<br />

0 0<br />

1 11<br />

0 11<br />

1 0<br />

0 10<br />

1 1<br />

0 1<br />

1 10<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi


Effective code rate<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

◮ Initialize the memory before encoding the first bit<br />

(all-zero)<br />

◮ Clear out the memory after encoding the last bit<br />

(all-zero)<br />

◮ Hence, a tail of zero-bits is appended to data bits.<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

data tail<br />

Encoder codeword<br />

◮ Effective code rate :<br />

◮ L is the number of data bits and k = 1 is assumed:<br />

R eff =<br />

L<br />

n(K + K − 1) < R c


Trellis I<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

Trellis diagram is an extension of the state diagram that<br />

shows the passage of time.<br />

Example of a section of trellis for the rate code<br />

State<br />

0/00<br />

1/11<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0/11<br />

1/00<br />

0/10<br />

1/01<br />

0/01<br />

1/10<br />

Time


Trellis <strong>II</strong><br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

Example sequence:<br />

Input bits<br />

Tail bits<br />

1 0 1 0 0<br />

Output bits<br />

11 10 00 10 11<br />

0/00 0/00 0/00 0/00 0/00<br />

1/11 1/11 1/11 1/11 1/11<br />

0/11 0/11 0/11 0/11 0/11<br />

1/00 1/00 1/00 1/00 1/00<br />

0/10<br />

1/01<br />

0/01<br />

0/10<br />

1/01<br />

0/01<br />

0/10<br />

1/01<br />

0/01<br />

0/10<br />

1/01<br />

0/01<br />

0/10<br />

1/01<br />

0/01<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi


Trellis <strong>II</strong>I<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

Input bits<br />

Tail bits<br />

1 0 1 0 0<br />

Output bits<br />

11 10 00 10 11<br />

1/11<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0/10 1/00<br />

0/10<br />

0/11


Optimum decoding<br />

Maximum likelihood decoder<br />

◮ is optimum if all the input sequence messages are<br />

equally likely<br />

◮ minimizes the probability of error<br />

◮ selects a codeword among all the possible<br />

codewords which ...<br />

◮ ... maximizes the likelihood function<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

p(Z|U (m′) )<br />

◮<br />

◮<br />

Z is the received sequence<br />

U (m′) is one of the possible codewords


ML-Decoding Rule<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

Choose U (m′) if p(Z|U (m′) ) =<br />

max p(Z|U (m) )<br />

over all U (m′ )<br />

NOTE! There are 2 L codewords.


Soft and Hard Decisions I<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

◮ In hard decision:<br />

◮ The demodulator makes a firm or hard decision<br />

◮ Its output is only zero or one (“hard-bits”)<br />

◮ Provides no information on how reliable the<br />

decision is.<br />

◮ Decoding based on hard-bits is called the<br />

“hard-decision decoding”.<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi


Soft and Hard Decisions <strong>II</strong><br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

◮ In Soft decision:<br />

◮ Demodulator provides the decoder with some side<br />

information.<br />

◮ The side information is a measure of confidence<br />

for the decision.<br />

◮ The demodulator outputs are called “soft-bits”.<br />

◮ Soft-bits are quantized to more than two levels.<br />

◮ Decoding based on soft-bits, is called<br />

the“soft-decision decoding”.<br />

On AWGN channels 2 dB gain is obtained by using<br />

soft-decoding over hard-decoding.<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi


The Viterbi Algorithm - by example (i)<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

0/00<br />

1/11<br />

0/00<br />

1/11<br />

0/00<br />

1/11<br />

0/11<br />

1/00<br />

0/00<br />

1/11<br />

0/11<br />

1/00<br />

0/00<br />

1/11<br />

0/11<br />

1/00<br />

0/10<br />

1/01<br />

0/10<br />

1/01<br />

0/01<br />

0/10<br />

1/01<br />

0/01<br />

0/10<br />

1/01<br />

0/01<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0<br />

2<br />

1<br />

1<br />

1 1 1<br />

1<br />

1<br />

1<br />

1 1<br />

1<br />

1 1 1<br />

2<br />

2<br />

0<br />

2<br />

0<br />

0<br />

0<br />

2<br />

2<br />

0<br />

0<br />

2<br />

0<br />

2


The Viterbi Algorithm - by example (ii)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

2<br />

2<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0<br />

0


The Viterbi Algorithm - by example (iii)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

2<br />

0<br />

2<br />

0<br />

1<br />

1<br />

2<br />

0<br />

3<br />

3<br />

2<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0


The Viterbi Algorithm - by example (iv)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

0<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

3<br />

2<br />

0<br />

0<br />

1<br />

1<br />

0<br />

1<br />

2<br />

1<br />

4<br />

4 3<br />

3<br />

2<br />

5<br />

0<br />

3<br />

2<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi


The Viterbi Algorithm - by example (v)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

2<br />

1<br />

0<br />

1<br />

2<br />

0<br />

3<br />

3<br />

2<br />

0<br />

1<br />

1<br />

0<br />

0<br />

2<br />

3<br />

3<br />

0<br />

2<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi


The Viterbi Algorithm - by example (vi)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

2<br />

3<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0<br />

1<br />

1<br />

3<br />

2<br />

0<br />

2<br />

0<br />

0<br />

0<br />

0<br />

2<br />

2


The Viterbi Algorithm - by example (vii)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

3<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0<br />

1<br />

1<br />

3<br />

2<br />

0<br />

2<br />

0<br />

0<br />

0<br />

0<br />

2<br />

2


The Viterbi Algorithm - by example (viii)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

0<br />

0<br />

2<br />

0<br />

1 1<br />

1 1<br />

2<br />

3<br />

3<br />

0<br />

2<br />

1<br />

2<br />

2<br />

0<br />

1<br />

4<br />

1<br />

4<br />

1<br />

0 3<br />

4<br />

5<br />

2<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi


The Viterbi Algorithm - by example (ix)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

1<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0<br />

1 1<br />

1 1<br />

1<br />

0<br />

2<br />

0<br />

3<br />

0<br />

2<br />

0<br />

2


The Viterbi Algorithm - by example (x)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

1<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0<br />

1<br />

1 1<br />

1<br />

0<br />

2<br />

0<br />

3<br />

0<br />

2<br />

0<br />

2


The Viterbi Algorithm - by example (xi)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

1<br />

0<br />

1<br />

1<br />

1 1<br />

2<br />

0<br />

0<br />

0<br />

0<br />

0<br />

2<br />

0<br />

2<br />

2<br />

2<br />

1<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi


The Viterbi Algorithm - by example (xii)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

1<br />

0<br />

1<br />

1<br />

1<br />

2<br />

2<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0<br />

0<br />

2<br />

0<br />

0<br />

0<br />

2<br />

1


The Viterbi Algorithm - by example (xiii)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

2<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

0<br />

1<br />

2<br />

0<br />

0<br />

0<br />

2<br />

1


The Viterbi Algorithm - by example (xiv)<br />

<strong>Channel</strong> <strong>Coding</strong><br />

<strong>Part</strong> <strong>II</strong><br />

Ola Jetlund<br />

1 1<br />

Input bits<br />

0 1 1<br />

Received Sequence<br />

11 01 01 10 01<br />

Introduction<br />

Linear Block Codes<br />

Hamming<br />

Convolutional Codes<br />

Example<br />

Decoding<br />

Decisions<br />

Viterbi<br />

1/11<br />

1/01<br />

0/01<br />

1/00 1/01

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!