Professional Documents
Culture Documents
ECC-handouts lecture8-LDPC
ECC-handouts lecture8-LDPC
Lecture Notes
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 243 / 385
Low-Density Parity Check (LDPC) Codes
• Gallager invented LDPC codes in 1963
• LDPC codes are simple linear block codes with certain properties
• Specific iterative soft-in decoding makes them very powerful
• Comprehensive overviews can be found in
• R.M. Tanner: „A Recursive Approach to Low Complexity Codes“, IEEE Transactions on
Information Theory, vol. 27, pp. 533-547, September 1981
• S.Y. Chung, G.D. Forney, T.J. Richardson, R. Urbanke: „On the Design of Low Density
Parity Check Codes within 0.0045 dB of the Shannon Limit“, IEEE Communication
Letters,vol. 5, pp. 58-60, February 2001
• D.J.C. MacKay: „Good Error Correcting Codes Based on Very Sparse Matrices“, IEEE
Transactions on Information Theory, vol. 45, pp. 399-432, March 1999
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 246 / 385
Construction of LDPC Codes
• Various approaches for constructing powerful LDPC codes exist
2. If new column has more than single 1 in common with old columns or
violates row norm Nr , it is rejected
• For very long codes, powerful permutations have been found leading
to performance very close to Shannon limits
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 248 / 385
Construction of Regular LDPC Codes
Example for code construction by Gallager with n = 20, Nr = 4, J = 3
• Each row has Nr = 4 ones, each column only a single 1
• J = 3 sub-matrices each of size k × kNr = 5 × 20
• First 5 rows represent H1 with consecutive 1’s in each row
(non-overlapping)
• Sub-matrices H2 and H3 obtained by permuting columns of H1
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
− − − − − − − − − − − − − − − − − − − −
1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0
0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0
0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1
− − − − − − − − − − − − − − − − − − − −
1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0
0 1 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0
0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 249 / 385
LDPC Encoding
• Encoding requires generator matrix G
H = 0 0 1 1 0 1 → 0 1 1 0 1 0
e =
H
1 0 0 1 1 0 1 1 0 0 0 1
1 1 0 0 1 0 1 0 0 1 0 1
G = 0 1 0 1 1 1 ← G = 0 1 0 1 1 1
e
0 1 1 0 0 1 0 0 1 1 1 0
• Hard decision decoding algorithms are very efficient but have quite
poor performance
• Majority logic decoding
• Soft decision decoding algorithms are more complex with very high
performance
• MAP decoding (generally extremely complex)
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 251 / 385
Example and Representation by Bipartite Factor Graph
1 1 1 1 0 0 n = 6 columns (code word length)
y0 y1 y2 y3 y4 y5
variable nodes
check nodes
s1 s2 s3
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 252 / 385
Message Passing Algorithm
Operation at check nodes
1 1 1 1 0 0
H= 0 0 1 1 0 1
1 0 0 1 1 0
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 253 / 385
Example: Operation at Check Node s1
y0 y1 y2 y3 y4 y5
variable nodes
check nodes
s1 s2 s3
(1)
Le (c0 ) = 2 · artanh[tanh(Lch y1 /2) · tanh(Lch y2 /2) · tanh(Lch y3 /2)]
(1)
Le (c1 ) = 2 · artanh[tanh(Lch y0 /2) · tanh(Lch y2 /2) · tanh(Lch y3 /2)]
(1)
Le (c2 ) = 2 · artanh[tanh(Lch y0 /2) · tanh(Lch y1 /2) · tanh(Lch y3 /2)]
(1)
Le (c3 ) = 2 · artanh[tanh(Lch y0 /2) · tanh(Lch y1 /2) · tanh(Lch y2 /2)]
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 254 / 385
Example: Operation at Check Node s2
y0 y1 y2 y3 y4 y5
variable nodes
check nodes
s1 s2 s3
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 255 / 385
Example: Operation at Check Node s3
y0 y1 y2 y3 y4 y5
variable nodes
check nodes
s1 s2 s3
(3)
Le (c0 ) = 2 · artanh[tanh(Lch y3 /2) · tanh(Lch y4 /2)]
(3)
Le (c3 ) = 2 · artanh[tanh(Lch y0 /2) · tanh(Lch y4 /2)]
(3)
Le (c4 ) = 2 · artanh[tanh(Lch y0 /2) · tanh(Lch y3 /2)]
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 256 / 385
Passing Information back to Variable Nodes
• Extrinsic LLRs are passed from check nodes back to variable nodes
• Each variable node receives number of messages according to its
degree
• Messages contribute to new estimate of bit ci
L(ci ) = Lch · yi + L(1) (2) (3)
e (ci ) + Le (ci ) + Le (ci )
y0 y1 y2 y3 y4 y5
variable nodes
(3)
(1)
Le (c0 ) Le (c0 )
check nodes
s1 s2 s3
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 257 / 385
Passing Improved Information to Check Nodes
• Improved estimates at variable nodes are passed again to check
nodes which calculate extrinsic LLRs
• Check nodes must not receive their own extrinsic LLRs
• Check node receive sum of extrinsic LLRs excluding their own LLRs
• Example for check node 3
y0 y1 y2 y3 y4 y5
variable nodes
Lch y4
(1)
Lch y0 + Le (c0 ) (1) (2)
Lch y3 + Le (c3 ) + Le (c3 )
check nodes
s1 s2 s3
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 258 / 385
Message Passing Algorithm
Also known as Sum-Product or Belief Propagation Algorithm
• Iterative exchange of messages between variable and check nodes
• Similar to turbo decoding, extrinsic LLRs are exchanged for binary
LDPC codes
1. First iteration: Variable nodes pass LLRs of channel observations yi
to check nodes
2. Check nodes compute extrinsic LLR for each bit connected to it
3. Extrinsic LLRs are fed back to variable nodes
4. Each variable node computes sums of received extrinsic LLRs
(assuming their statistical independence), each sum excludes LLR of
one particular check node
5. Sums are passed back to check nodes (check node sj only gets
sums not containing its own LLRs)
V. Kühn | 6. Continue with stepError
| Modern
Error Control Coding 2. Correcting
until convergence
Codes → LDPCcriterion
codes is met 259 / 385
Convergence of Sum Product Algorithm
• After each iteration, syndrome can be checked to verify if valid code
word has been obtained
• Iterative sum product algorithm might get stuck far away from ML
solution
#10
10−3
#15
#5
10−4 #20
10−5
0 1 2 3 4 5 6
10 log10 (Eb /N0 ) in dB →
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 261 / 385
Improving Convergence of Sum Product Algorithm
Column and Row Splitting of Parity Check Matrix
V. Kühn | Error Control Coding | Modern Error Correcting Codes → LDPC codes 262 / 385