5G-NR DL-SCH LDPC Channel Coding Base Graph selection and Coding Procedure
Based on my interpretation from 3GPP Specification 38.212 Rel 15 (Multiplexing and channel coding), i had put together the procedure on how LDPC Base Graph selection and coding happens.
5G-NR DL-SCH Low Density Parity Code (LDPC) Channel coding
- For transmission of a DL transport block , a transport block CRC is first appended to provide error detection, followed by a LDPC base graph selection.
- NR supports two LDPC base graphs, one for small transport blocks and one for larger transport blocks.
- Then transport block is segmented into code blocks and code block CRC attachment is performed.
- Each code block is individually LDPC encoded. The LDPC coded blocks are then individually rate matched.
- Finally, code block concatenation is performed to create a codeword for transmission on the PDSCH. Up to 2 code words can be transmitted simultaneously on the PDSCH.
LDCP Base Graph
There are two types of Base Graphs standardized in the specification, 38.212 (Multiplexing and channel coding)
Base Graph is a Matrix where each of the entries can be further expanded based on the expansion factor Zc.
Base Graph 1 (BG1) : With Matrix size 46X68 entries --> For Large Transport Block
Base Graph 2(BG2): With matrix size 42X52 entries--> For Smaller Transport Block
High Level visualization of fully populated BG1 Matrix.
High Level visualization of fully populated BG2 Matrix.
LDPC Base Graph selection procedure, Ref: 3GPP 38.212
I have put together the following example of constructing the LDCP parity check matrix for a given information block size K and code rate R = K/N.
For simplicity I have considered a small TBS of size 20bits to illustrate below example, K=20 & R=0.25
Step 1: Obtain the base graph BG1 or BG2 for the given K (Transport Block )and R (Code Rate)--> Ref 3GPP 38.212, 7.2.2 LDPC base graph selection
As per the specification
- if K<=3824 and R<=0.67 then BG2 is selected.
- If K<= 292 then BG2 is selected
- if R<=0.25 then BG2 is selected.
- Else BG1 is selected
Since K<292 , BG2 is selected.
Step 2: Determine the value of Kb for the given K (Transport Block) and R (Code Rate)--> Ref 3GPP 38.212, 5.2.2
Kb denotes the number of information bit columns for the lifting size Zc.
As per Specification
For LDPC BG1
- Kb = 22
For LDPC BG2
- if K > 640 then Kb = 10
- if K is between 560 < K <= 640 then Kb = 9
- if K is between 192 < K <= 560 then Kb =8
- If K is <= 192 then Kb is = 6
Since K<192 , Kb = 6
Step 3: Determine the base matrix expansion factor Zc by selecting the minimum Zc value in below Table, such that Kb × Zc ≥K
Based on the Table 5.3.2-1: Sets of LDPC lifting size Z in the specification I have populated below Zc table
For K=20 , Zc = 4, this satisfies the condition Kb*Zc >= K , 6*4 = 24 , 24> 20 and this is the minimum Zc value from the above table that satisfies this condition.
Zc=4
Step 4: After Zc is determined, the corresponding shift coefficient matrix set need to be selected from below Table., Ref for this table is 3GPP 38.212,5.3.2
Since Zc = 4, Set Index (iLS) "0" is considered.
Step 5: Determine the entries values in the base matrix based on the Zc, Calculate the shifting coefficient value P(i,j) by the modular Z operation. P(i,j) = f(Vi,j , z) = mod(Vi,j , z)
Referral tables to calculate P(i,j) are available in the specification 38.212, 5.3.2
Table 5.3.2-2: LDPC base graph 1 ( BG 1 ) and its parity check matrices ( i j V , ) (Full table is not posted here. (Full Table available in the spec)
Table 5.3.2-3: LDPC base graph 2 ( BG 2 ) and its parity check matrices ( i j V , ) (Full table is not posted here, (Full Table available in the spec)
For K=20 , Base Graph = 2, Zc= 4 & SetIndex " iLS" = 0, from above Table 5.3.2-3: LDPC base graph 2 Using the equation "P(i,j) = f(Vi,j , z) = mod(Vi,j , z)" all the possible base graph matrix entries with the shifting coefficient are determined,
Below I have illustrated how the Base Matrix entries P(i.j) are populated, I have considered only the first row for below illustration, like wise the full matrix is built.
From Step 3 & 4 Set Index iLS = 0 & Zc =4
Using the above principal remaining all entries of the matrix can be populated based on the Row index “i" and Column Index “j” & iLS SetIndex
I populated the below full base graph2 matrix with Zc = 4
Step 6: Replace each entry in the final exponent matrix with the corresponding circulant permutation matrix or zero matrix of size Z × Z. The LDPC code construction is completed and a parity check matrix H of size mbZ × nbZ is obtained
As per LDCP construction model each entry in the Base Matrix is further expanded based on the expansion factor "Zc" with a shifting coefficient.
In following example I have considered only the first Row#1 upto 12 columns as column 13 to 52 are -1 (all zeros)
With Zc = 4,
All -1 values in the Base Matrix are replaced with a "4X4 All Zeros matrix"
All 0 values in the Base Matrix are replaced with a " 4x4 Identity matrix with 1's located diagonal "
All 1 values in the Base Matrix are replaced with a " 4x4 matrix with 1's shifted to right by one position "
All 2 values in the Base Matrix are replaced with a " 4x4 matrix with 1's shifted to right by two position's "
All 3 values in the Base Matrix are replaced with a " 4x4 matrix with 1's shifted to right by three position "
Below is the Row#1 expanded matrix upto column 12
On the Receiver side, After decoder decodes and if The sum of all 1's mod 2 =0 condition is meet then it is passed and original data bits are retrieved.
In above case first message sum of 1's including Parity check bit is 8 mod 2 = 0 which Is a pass.
In order to decode faster the whole Base Matrix is not required to be transmitted, only the required part of the matrix can be transmitted this can be achieved by puncturing and rate matching mechanisms specified in specification 38.212
Quantum Package MATLAB| FPGA | HDL Coder | HDL Verifier| PQC | Quantum Control | MATLAB & SIMULINK | Transforming Education
8 个月Hi Naveen Chelikani Sir, I have a doubt in the last part where you wrote LDPC channel coded codeword "C", in that you mentioned 44 bits as message bits but as per your previous considerations, I am assuming it to be Kb × Zc as per Step2. Please clarify. Thanks for well written post!
Doctoral Student at University of Oulu
9 个月Could you explain how you used the code rate R in the steps? Block length N should depend on R right?
Member Of Technical Staff at Altiostar, A Rakuten Symphony Company
10 个月Hi Naveen sir, can you please check the following statement: Step 3:?Determine?the base matrix expansion factor Zc by selecting the minimum Zc value in below Table, such that Kb × Zc ≥K As I understand from the 38.212, Kb × Zc ≥K is applied where K is ~(TB/no. of code blocks) size but here K is mentioned as TB, which is a special case (i.e one code block if formed from the TB). can you please clear this? am I missing something here?
Member Of Technical Staff at Altiostar, A Rakuten Symphony Company
10 个月thank you sir for the explanation. can you please expain the polar code also
Electronics Enthusiast | (Embedded + ASIC) Engineering | NITW
1 年thank you for the clear explanation