Académique Documents
Professionnel Documents
Culture Documents
=
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