Vous êtes sur la page 1sur 40

LDPC

(LOW DENSITY PARITY CHECK CODES)


Oleh :
Agung Ageyadi
Ridwan NM
Dianthy Marya

EVOLUSI
ERROR CORRECTING CODES

ERROR CODING FAMILIES
BLOCK CODES
BHC
BOSE-CHAUDHURI
&
RS
REED SOLOMON
BLOCK TURBO CODE
LDPC
LOW DENSITY PARITY
CODE
CONVOLUTIONAL CODES
ODS
OPTIMUM DISTANCE SPECTRUM
RCC
RATE COMPATIBLE CONVOLUTIONAL
NESTED CONVOLUTIONAL CODES
RCPC
RATE COMPATIBLE PUNCTURED

WHAT IS AN LDPC CODE ?
Kode LDCP merupakan kode blok linier
yang diperoleh dari sparse bipartite
graph (Tanner graph).
H (n-k, n) is the Parity Check Matrix and
it is SPARSE.
Variable Nodes ( in the left) correspond
to the columns of H, there are n of them.
Check Nodes( in the right) correspond to
the rows, there are n-k in number.
Valid code words are those vectors
(c
1
,c
2
,,c
n
) such that for all check nodes
the sum of the neighboring positions
among the message nodes is zero.
Hence LDPC Code ~ H
.
c
T
= 0
Low Density Parity Check Codes
0
5 2 1
= c c c
0
6 4 1
= c c c
0
6 3 2 1
= c c c c
Consider the 6 bit long codeword in the form
which satisfies 3 parity check equations as shown below.
| |
6 5 4 3 2 1
, , , , , c c c c c c c =
We can now define 3x6 parity check matrix as,
(
(
(

=
1 0 0 1 1 1
1 0 1 0 0 1
0 1 0 0 1 1
H
5 2 1
c c c
The density of 1s in LDPC code parity check matrix is very low
Column weight - number of 1s in a column
Number of times a symbol taking part in parity checks
( )
c
w
Row weight - number of 1s in a row Number of
Number of symbols taking part in a parity check
( )
r
w
If the parity check matrix has uniform row weight and uniform column weight (same number of 1 in a
column and same number of 1 in a row) we call that a regular parity check matrix.
and changes, therefore this is an irregular
parity check matrix
r
w
c
w
Low Density Parity Check Codes
(
(
(

=
1 0 0 1 1 1
1 0 1 0 0 1
0 1 0 0 1 1
H
The parity check matrix defines a rate , code
where
N K R = ( ) K N,
M N K =
N M
H

Codeword is said to be valid if it satisfies the syndrome calculation
0 . = =
T
H c z
We can generate the codeword in by multiplying message with generator matrix m
G
G m c . =
We can obtain the generator matrix from parity check matrix by, G H
1.) Arranging the parity check matrix in systematic form
using row and column operations

2.) Rearranging the systematic parity check matrix

3.) We can verify our results as
(
(
(

=
1 1 0 1 0 0
1 1 1 0 1 0
1 0 1 0 0 1
sys
H | |
K M
M sys
P I H

=
| |
K
T
M K
I P G

=
(
(
(

=
1 0 0 1 1 1
0 1 0 1 1 0
0 0 1 0 1 1
G
0 . =
T
H G
Low Density Parity Check Codes
(
(
(

=
1 0 0 1 1 1
1 0 1 0 0 1
0 1 0 0 1 1
H
Tanner graph is a graphical representation of parity check matrix
specifying parity check equations.
Tanner graph consists of N number of variable nodes and M number
of check nodes
In Tanner graph m
th
check node is connected to n
th
variable node if and only if n
th
element in
m
th
row in parity check matrix is a 1.
mn
h
H
1
c
3
c
2
c
4
c
5
c
6
c
1
z
3
z
2
z
The marked path z
2
c
1
z
3
c
6
z
2
is an example for short cycle of 4
The number of steps needed to return to the original position is known as the girth of
the code
Low density parity check codes
R. G. Gallager, Low-Density Parity Check Codes, in 1962,
Simple parity-check code specified by a parity-check matrix or Tanner graph.
An optimal LDPC can get within ~.005 db of channel capacity
Details: Encoding
Encoder is derived from the the parity check matrix H
Row reduction of H into systematic form -- get G from this
If H is sparse then with high probability G will be dense
Not addressed here, but this continues to be a topic of great
concern

r
n
Details: Decoding
the channel output can be either hard
or soft information
Use the properties of the graph to decode
Decoding will be done in an iterative way: iterate between
variable (bit) nodes and checks nodes

r
n
= (r
1
, r
2
,..., r
n
)

r
n
Low density parity check codes

r
n
= (r
1
, r
2
,..., r
n
)

If p(x
j
= 0 | r
n
) > p(x
j
=1| r
n
) choose x
j
= 0
If p(x
j
=1| r
n
) > p(x
j
= 0 | r
n
) choose x
j
=1
Consider the MAP rule discussed in the context of
convolutional codes
Low density parity check codes
Transmit

c
n
= (c
1
, c
2
,..., c
n
)

r
n
= (r
1
, r
2
,..., r
n
)
Receive

r
n
Bit flipping decoder

c
n
= (c
1
, c
2
,..., c
n
)

r
n
= (r
1
, r
2
,..., r
n
)
Receive

r
n
0 0 0 0
0 1 0 1
example
All 0s codeword is sent


0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bit
(variable)
nodes
Check
nodes
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Assume all 0s codeword and a single error
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 1: Check node: Identify which parity checks are in error
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 1: Parity node check:
Identify which parity checks are in error
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 1: Parity node check:
Identify bits that are connected to those checks
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 2: Bit node check:
For each bit node that is potentially in error -
identify number of unsatisfied checks for that bit node
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 2: Bit node check:
For each bit node that is potentially in error -
identify number of unsatisfied checks for that bit node
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 2: Bit node check:
For each bit node that is potentially in error -
identify number of unsatisfied checks for that bit node
0 2 0 1 1 1 0 0 0 0 1 0 1 1 0 0
Number of unsatisfied checks for this bit
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 2: Bit node check:
For each bit node that is potentially in error -
identify number of unsatisfied checks for that bit node
0 2 0 1 1 1 0 0 0 0 1 0 1 1 0 0
Number of unsatisfied checks for this bit
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 2: Bit node check:
For each bit node that is potentially in error -
identify number of unsatisfied checks for that bit node
0 2 0 1 1 1 0 0 0 0 1 0 1 1 0 0
Number of unsatisfied checks for all bits
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 2: Bit node check:
Flip the bits with the most unsatisfied checks
0 2 0 1 1 1 0 0 0 0 1 0 1 1 0 0
Example 1: single error
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 2: Bit node check:
Flip the bits with the most unsatisfied checks
0 2 0 1 1 1 0 0 0 0 1 0 1 1 0 0
Example 1: single error
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 2: Bit node check:
Flip the bits with the most unsatisfied checks
0 2 0 1 1 1 0 0 0 0 1 0 1 1 0 0
Example 1: single error
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 3: parity node check:
Check if all parities are satisfied
Example 1: single error
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 3: parity node check:
Check if all parities are satisfied
Example 1: single error
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Step 3: parity node check:
Check if all parities are satisfied
Done!
Example 2: Double error
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Iteration #1
Example 2: Double error
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Iteration #1
Example 2: Double error
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Iteration #1
2 0 1 1 0 1 1 1 0 2 1 1 0 1 1 2
Example 2: Double error
Iteration #1
2 0 1 1 0 1 1 1 0 2 1 1 0 1 1 2
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
Example 2: Double error
Iteration #2
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
Example 2: Double error
Iteration #2
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
Example 2: Double error
Iteration #2
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
Example 2: Double error
Iteration #2
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
Example 2: Double error
Iteration #2
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
1 0 0 0 0 1 1 0 0 2 0 1 0 1 0 1
Example 2: Double error
Iteration #2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 1 1 0 0 2 0 1 0 1 0 1
Example 2: Double error
Iteration #2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Done

Vous aimerez peut-être aussi