Soft channel bits are the memory a UE keeps for HARQ. When a transport block fails its CRC, the UE does not discard what it received. It stores the soft values, and it combines them with the retransmission. The size of this memory is a UE category parameter, and 36.212 turns it into a soft buffer size per transport block and then per code block.
I'll start from the category table, then follow one number down to a single code block. On the way you will see why the same UE gets a smaller buffer per transport block when it is configured for spatial multiplexing.
- What is the Total Number of Soft Channel Bits ?
- How is the Soft Buffer per Transport Block calculated ?
- How is the Soft Buffer split into Code Blocks ?
- Reference
What is the Total Number of Soft Channel Bits ?
Let's first see where the number comes from. The UE reports its category, and the category fixes the total soft buffer that the eNB can assume. The eNB needs this value, because the rate matching at the transmitter has to fit what the receiver can store.
The picture below puts the two ends of that chain side by side. At the top is 36.306 Table 4.1-1, with the Total number of soft channel bits column highlighted. An arrow carries this value, Nsoft, into the NIR formula of 36.212 clause 5.1.4.1.2. The notes under the formula list the values that each factor can take.

Nsoft comes from the UE category. The formula divides it by KC, KMIMO and min(MDL_HARQ, Mlimit) to give the soft buffer of one transport block.
- The table rows show 250368 bits for Category 1, 1237248 bits for Category 2 and Category 3, 1827072 bits for Category 4, 3667200 bits for Category 5 and 7308288 bits for Category 12. The row of dots hides Category 6 to Category 11.
- NIR is the soft buffer size for the transport block, as the label on the left says.
- KMIMO is 2 for transmission mode 3, 4, 8, 9 and 10, and 1 otherwise.
- MDL_HARQ is 8 for FDD. For TDD it is 4 to 15, from 36.213 Table 7-1.
- Mlimit is fixed at 8.
- KC is listed as 5 for Nsoft = 35982720, 3 for Nsoft = 3654144 with no more than two spatial layers, and 1 otherwise.
I checked the table part against 36.306 v19.3.0, and the values in the picture are unchanged. The hidden rows are Category 6 and Category 7 with 3654144 bits, Category 8 with 35982720 bits, Category 9 and Category 10 with 5481216 bits, and Category 11 with 7308288 bits.
One value in the KC note needs a correction. In 36.212 v19.3.0, Nsoft = 3654144 with no more than two spatial layers gives KC = 2, not 3. You can check this with the numbers. 3654144 is exactly twice the Category 4 value of 1827072, so KC = 2 gives a two-layer Category 6 or Category 7 UE the same per transport block buffer as Category 4.
Also note which category Nsoft comes from. A UE usually reports more than one category, for example Category 6 together with Category 4. 36.212 picks the category field by configuration. The UE uses the ue-Category-v1020 value only when it is configured with transmission mode 9 or 10, or with transmission mode 3 or 4 and maxLayersMIMO-r10 set to fourLayers. In other cases it uses the category without suffix, and the newer fields such as ue-CategoryDL-r12 follow the same pattern.
Compare Category 2 and Category 3 in the table. Both have 1237248 soft channel bits, but Category 3 receives twice as many DL-SCH bits per TTI. So a Category 3 UE has about half the soft memory per received bit, and the rate matching limit in the last section matters more for it.
Nsoft is a category value : 36.306 Table 4.1-1 gives it, and the values in the picture still match v19.3.0.Several category fields exist : the configured transmission mode and layers decide which one sets Nsoft.The picture has one stale number : KC for Nsoft = 3654144 with up to two layers is 2 in the current 36.212.
How is the Soft Buffer per Transport Block calculated ?
The total Nsoft is shared by all DL HARQ processes. With spatial multiplexing it is also shared by two transport blocks in each process. So 36.212 divides it before any code block sees it, and each factor in the denominator stands for one way of sharing the memory.
For DL-SCH and PCH, the formula is NIR = floor( Nsoft / ( KC x KMIMO x min(MDL_HARQ, Mlimit) ) ). The current version also multiplies this by a coefficient for short TTI. The coefficient is 1 for subframe duration and 0.5 for slot duration, and subslot duration has its own value.
Let's go through the factors as 36.212 v19.3.0 defines them. The list of KC cases is much longer than the picture shows, because each new category with 256QAM or 1024QAM added its own case.
- KC is 5 for Nsoft = 35982720 or 47431680, and 32 for Nsoft = 303562752.
- For Nsoft = 14616576, KC is 3/2 with altCQI-Table-r12 and 2 otherwise.
- For Nsoft = 19488768, KC is 8/5 with altCQI-Table-1024QAM-r15, 2 with altCQI-Table-r12, and 8/3 otherwise.
- For Nsoft = 7308288 with altCQI-Table-r12, KC is 3 with up to two layers and 3/2 otherwise. With altCQI-Table-1024QAM-r15 it is 12/5 or 6/5 in the same way.
- For Nsoft = 3654144 with up to two layers, KC is 2. In every other case KC is 1.
- KMIMO is 2 for an initial PDSCH transmission of subframe duration in transmission mode 3, 4, 8, 9 or 10. It is 1 otherwise, and it is always 1 for a BL/CE UE and for slot or subslot duration.
- MDL_HARQ is the maximum number of DL HARQ processes from 36.213 clause 7. It is 8 for FDD in the normal case, and 4 to 15 for TDD from Table 7-1.
- Mlimit is a constant equal to 8.
Now let's put numbers in. The table below uses a Category 4 UE with Nsoft = 1827072, so KC = 1. Only the transmission mode and the duplex mode change from row to row.
Case | KMIMO | min(MDL_HARQ, Mlimit) | NIR in bits |
FDD, transmission mode 2 | 1 | min(8, 8) = 8 | 228384 |
FDD, transmission mode 3 or 4 | 2 | min(8, 8) = 8 | 114192 |
TDD configuration 5, transmission mode 3 | 2 | min(15, 8) = 8 | 114192 |
TDD configuration 0, transmission mode 3 | 2 | min(4, 8) = 4 | 228384 |
The second row shows the cost of spatial multiplexing. The UE now holds two transport blocks per HARQ process, so each one gets half the buffer. The third row shows what Mlimit does. TDD configuration 5 has 15 DL HARQ processes, but the divisor stops at 8. So 15 x NIR is almost twice Nsoft, and the formula does not reserve a full NIR for every process in this case. In the last row there are only 4 processes, so each transport block gets twice the FDD buffer.
Carrier aggregation adds one more rule. 36.213 v19.4.0 clause 7.1.8 describes how the UE stores soft channel bits when it is configured with more than one serving cell or with a SCG. The storage is then shared over the number of configured serving cells, and the UE gives priority to the soft bits with the lower index k in the circular buffer.
Three factors share the buffer : KC for the category case, KMIMO for two transport blocks, and the HARQ process count.Mlimit caps the divisor at 8 : a TDD configuration with more processes does not get a smaller NIR.Spatial multiplexing halves NIR : a Category 4 UE drops from 228384 to 114192 bits per transport block.
How is the Soft Buffer split into Code Blocks ?
NIR is still a buffer for the whole transport block. The turbo coder works on code blocks, so the last step divides NIR again. This step decides how much of each code block's circular buffer the eNB is allowed to use.
Each code block of size K goes through the turbo coder at rate 1/3. After the sub-block interleavers, the systematic bits and the two parity streams fill a circular buffer of length Kw = 3 x KΠ. Here KΠ is the interleaver size, which is K + 4 rounded up to a multiple of 32. The size Ncb of the part in use depends on the transport channel.
- For DL-SCH and PCH, Ncb = min( floor(NIR / C), Kw ), where C is the number of code blocks from 36.212 clause 5.1.2.
- For UL-SCH, Ncb = Kw. The receiver is the eNB, and no UE category limit applies.
- For a Category 0 UE, Ncb is always Kw for DL-SCH with SI-RNTI or RA-RNTI and for PCH.
So the limit only matters when floor(NIR / C) is smaller than Kw. Let's take the largest Category 4 transport block, 75376 bits, and work it through. With 24 CRC bits per code block and the 6144 bit limit, the block is split into C = 13 code blocks of K = 5824 bits. So KΠ = 5856 and Kw = 17568.
Configuration | NIR | floor(NIR / 13) | Kw | Ncb |
FDD, transmission mode 2 | 228384 | 17568 | 17568 | 17568 |
FDD, transmission mode 3 or 4 | 114192 | 8784 | 17568 | 8784 |
The first row gives an exact match. The per code block share is exactly Kw, so the full rate 1/3 mother code fits in the buffer. In the second row the UE can store only half of it. The eNB then selects bits from the first 8784 positions of each circular buffer, and the four redundancy versions start at points spread over Ncb rather than over Kw.
This is called limited buffer rate matching. With Ncb = 8784 and K = 5824, the lowest code rate the eNB can reach is about 5824 / 8784, or 0.66. A retransmission therefore adds fewer new parity bits than it would with a full buffer. In practice, a Category 4 UE with two large transport blocks gains less from incremental redundancy than the same UE with one transport block.
You can see the same logic in the category table. A higher category usually carries a larger Nsoft because it receives more bits per TTI, not because it keeps more redundancy per bit. When you compare HARQ gains between two UEs, check Ncb for the actual transport block size first.
Ncb is the usable circular buffer : it is the smaller of the per code block share of NIR and Kw.Only the downlink is limited : UL-SCH always uses the full Kw, because the eNB is the receiver.A full buffer is not guaranteed : a Category 4 UE in transmission mode 3 or 4 keeps only half of Kw for its largest transport block, which limits the code rate to about 0.66.
Reference
- 3GPP TS 36.306 v19.3.0 - clause 4.1, Table 4.1-1 Downlink physical layer parameter values set by the field ue-Category
- 3GPP TS 36.212 v19.3.0 - clause 5.1.2 Code block segmentation, clause 5.1.4.1 Rate matching for turbo coded transport channels
- 3GPP TS 36.213 v19.4.0 - clause 7 Physical downlink shared channel related procedures, Table 7-1, clause 7.1.8 Storing soft channel bits