490 likes | 697 Views
Part 1: Overview of Low Density Parity Check(LDPC) codes. 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 .
E N D
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
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
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
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 code can get within ~.005 db of channel capacity
Low density parity check codes • Low density parity check - H matrix has a large number of columns (n> 1000 or 10,000) - Number of 1’s in H is small ( <<1%) - H is constructed pseudorandomly subject to some constraints
Low density parity check codes • Low density parity check - H is constructed pseudorandomly subject to some constraints: - fixed number of rows and columns - this fixes the rate - randomly fill H with 1’s - e.g. fixed number of 1’s per row/column
Encoding (Cont’d) • Encoding in graph
Decoding • Message passing decoder • Iterative algorithm • Amenable to highly parallelized hardware implementation
Code design ‘Optimal’ LPDC codes can be described by distributions (x) and (x)
Optimization • Basic idea • Optimize the triple ( r(x), l(x), p(x) ) x) x)
Optimization recursion x) x)
Simulation Results 2-IID capacity One encoder/one decoder
Simulation Results 2-IID capacity One encoder/one decoder A single LDPC code designed for one rate and then punctured for a range of rates can be optimal for “all rates”
Part 2:Details of Low Density Parity Check(LDPC) codes: binary symmetric channels
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
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
Low density parity check codes Consider the MAP rule discussed in the context of convolutional codes
Low density parity check codes Transmit Receive
Bit flipping decoder 0 1 0 ••• 1 0 0 0 ••• 0 Receive
Motivating example • Hard decoder: bit flipping decoder Bit (variable) nodes Check nodes
Motivating example • All 0’s codeword is sent 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Bit (variable) nodes Check nodes
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Example 1: single error Assume all 0’s codeword and a single error 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Rec’d
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Example 1: single error Step 1: Check node: Identify which parity checks are in error 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Rec’d
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Example 1: single error Step 1: Parity node check: Identify which parity checks are in error 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error Step 1: Parity node check: Identify bits that are connected to those checks 0 1 0 000 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error Step 2: Bit node check: For each bit node that is potentially in error - identify number of unsatisfied checks for that bit node 0 1 0 000 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error Step 2: Bit node check: For each bit node that is potentially in error - identify number of unsatisfied checks for that bit node 0 1 0 000 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error Step 2: Bit node check: For each bit node that is potentially in error - identify number of unsatisfied checks for that bit node Number of unsatisfied checks for this bit 0 2 0 1 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 000 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error Step 2: Bit node check: For each bit node that is potentially in error - identify number of unsatisfied checks for that bit node Number of unsatisfied checks for this bit 0 2 0 1 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 000 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error Step 2: Bit node check: For each bit node that is potentially in error - identify number of unsatisfied checks for that bit node Number of unsatisfied checks for all bits 0 2 0 1 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 000 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error 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 0 1 0 000 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error 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 0 1 0 000 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error Step 3: parity node check: Check if all parities are satisfied 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error Step 3: parity node check: Check if all parities are satisfied 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 1: single error Step 3: parity node check: Check if all parities are satisfied Done! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Rec’d
Example 2: Double error Iteration #1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Example 2: Double error Iteration #1 1 0 00 0 000 0 00 0 0 001
Example 2: Double error Iteration #1 2 0 1 1 0 1 1 1 0 2 1 1 0 1 1 2 1 0 00 0 000 0 00 0 0 001
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 1 0 0 0 0 1 1 0 0 2 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
Example 2: Double error Iteration #2 1 0 0 0 0 1 1 0 0 2 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Example 2: Double error Iteration #2 Done 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0