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
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