Amarisoft

LTE PDSCH/PUSCH Resource Allocation

 

The purpose of this tutorial is to show you how to allocate resources for PDSCH/PUSCH manually instead of letting gNB/eNB automatically schedule them depending on the situation (e.g, depending on amount the data from higher layer, radio link quality etc).

In default configuration, Amarisoft eNB/gNB schedule PHY/MAC resources automatically based on various factors like IP layer throughput and radio link quality (e.g, amount of CRC(i.e, retx), CSI report from UE (i.e, CQI, RI), phr report from UE). But sometimes you may want to allocate the PHY/MAC resources as you like regardless of other conditions mentioned above. You can specify following PHY / MAC resources manually as you want.

NOTE : Personally I am using this tricks for following cases (you may have different perpose for this).

 

 

Table of Contents

 

 

Test Setup

Test setup for this tutorial is as shown below.  This is just for low layer testing, you may not need any complicated IP layer setup.

TestSetup Callbox UE 1sdr 01

 

 

Key Configuration Parameters

Followings are important configuration parameters for this tutorial. You may click on the items for the descriptions from Amarisoft documents.

 

 

Test 1 : PDSCH Resource Allocation

This test is to show how to allocates PDSCH resource manually in which you can allocate PDSCH resources in configuration file.

 

Configuration

The configuration shown here is common configuration for all the subtests belonging to Test 1 and I will not show this configuration repeatedly for every subtest.

I have used enb-pdsch-resources.cfg which is copied and modified from enb.default.cfg

LTE PHY ResourceAllocation Test 1 Config 01

I am using the default mme, ims config as shown below.

NR BWP Test1 Configuration 02

In enb-pdsch-resources.cfg, it is configured as follows.

The bandwidth is set to 20 Mhz by setting N_RB_DL to 100.

LTE PHY ResourceAllocation Test 1 Config 02

In cell configuration, the PDSCH resource is allocated manually by setting force_dl_schedule, pdsch_mcs, pdsch_fixed_rb_alloc, pdsch_fixed_rb_start, pdsch_fixed_l_crb.

LTE PHY ResourceAllocation Test 1 Config 03

 

Perform the Test

Check out cell configuration with 'cell phy' and 'cell', and make it sure that the cell is configured as intended.

LTE PHY ResourceAllocation Test 1 Run 01

Start printing trace log with 't' command.

LTE PHY ResourceAllocation Test 1 Run 02

 

Log Analysis

Sample Log

You can confirm the resource allocation either in the log print text and in graphical format.

You can check out the physical layer scheduling and resource allocation for SIB PDSCH. In case of SIB PDSCH, harq is marked as 'si'

LTE PHY ResourceAllocation Test 1 Log 01

You can also check out user traffic PDSCH in PHY log. Even though the number of RBs for the user traffic PDSCH is configured to max value, it gets reduced a little bit when it is transmitted in the same subframe as SIB PDSCH.

LTE PHY ResourceAllocation Test 1 Log 02

You can visualize the physical resource allocation for SIB PDSCH easily by RB plot.

LTE PHY ResourceAllocation Test 1 Log 03

You can also visualize the physical resource allocation for SIB PDSCH easily by RB plot.

LTE PHY ResourceAllocation Test 1 Log 04

 

Sub Test 1 :  PDSCH Resource Allocation per Subframe

This subtest shows how to allocate different physical resources for every subframe of PDSCH transmission.

I have used enb-pdsch-resources-subframe.cfg which is copied and modified from enb.default.cfg

In cell configuration, the PDSCH resource is allocated manually by setting force_dl_schedule, pdsch_mcs, pdsch_fixed_rb_alloc, pdsch_fixed_rb_start, pdsch_fixed_l_crb.  The main point for this test is that pdsch_mcs, pdsch_fixed_rb_alloc, pdsch_fixed_rb_start, pdsch_fixed_l_crb are in array format. Each elements in the array applies to each subframe.

LTE PHY ResourceAllocation Test 1 SubTest 1 Config 01

 

Sample Log

The allocated resources for PDSCH in this subtest is visualized in RB plot.

LTE PHY ResourceAllocation Test 1 SubTest 1 Log 01

 

 

Test 2 : PUSCH Resource Allocation

This test is to show how to allocates PUSCH resource manually in which you can allocate PUSCH resources in configuration file.

 

Configuration

The configuration shown here is common configuration for all the subtests belonging to Test 1 and I will not show this configuration repeatedly for every subtest.

I have used enb-pusch-resources.cfg which is copied and modified from enb.default.cfg

LTE PHY ResourceAllocation Test 2 Config 01

I am using the default mme, ims config as shown below.

NR BWP Test1 Configuration 02

In enb-pusch-resources.cfg, it is configured as follows.

The bandwidth is set to 20 Mhz by setting N_RB_DL to 100.

LTE PHY ResourceAllocation Test 1 Config 02

Set force_full_bsr : true which means 'schedule PUSCH at every possible UL subframe'. Since other parameters (e.g, mcs) is not configured, the different mcs will be applied depending on radio link quality.

LTE PHY ResourceAllocation Test 2 Config 02

 

Perform the Test

Check out cell configuration with 'cell phy' and 'cell', and make it sure that the cell is configured as intended.

LTE PHY ResourceAllocation Test 2 Run 01

Start printing trace log with 't' command.

LTE PHY ResourceAllocation Test 2 Run 02

 

Log Analysis

Sample Log

You can confirm the resource allocation either in the log print text. You would notice that the RB is never allocated to max possible value because PUCCH resources is reserved and not used for PUSCH.

LTE PHY ResourceAllocation Test 2 Log 01

You can check on uplink resourace allocation in RB map. You see here that a certain range of the resource blocks at both end of the frequency domain is not scheduled for PUSCH. This is because eNB wants to reserve the region for PUCCH or UL number of RB should be 2^a * 3^b * 5^c where a,b,c is 0 or positive integers.

LTE PHY ResourceAllocation Test 2 Log 02

 

Sub Test 1 :  PUSCH Resource Allocation with Fixed RB

This subtest shows how to allocate same physical resources for every subframe of PUSCH transmission

I have used enb-pusch-resources-fixedRB.cfg which is copied and modified from enb.default.cfg

Same physical resources will be applied to every PUSCH transmission by pusch_mcs, pusch_fixed_rb_alloc, pusch_fixed_rb_start, pusch_fixed_l_crb with single value (not Array). You need to pay attention to pusch_fixed_l_crb since it should meet the criteria of 2^a * 3^b * 5^c where a,b,c are 0 or positive integers.

LTE PHY ResourceAllocation Test 2 SubTest 1 Config 01

 

Sample Log

The allocated resources for PUSCH in this subtest is in RB map plot. You see that every PUSCH is allocated with the same number of RBs as set in the configuration file.

LTE PHY ResourceAllocation Test 2 SubTest 1 Log 01

 

Sub Test 2 :  PUSCH Resource Allocation with Fixed RB per Subframe

This subtest shows how to allocate different physical resources for every subframe of PUSCH transmission

I have used enb-pusch-resources-subframe.cfg which is copied and modified from enb.default.cfg

Different physical resources can be applied to every PUSCH transmission by pusch_mcs, pusch_fixed_rb_alloc, pusch_fixed_rb_start, pusch_fixed_l_crb with an array (not a single value). You need to pay attention to pusch_fixed_l_crb since it should meet the criteria of 2^a * 3^b * 5^c where a,b,c are 0 or positive integers.

LTE PHY ResourceAllocation Test 2 SubTest 2 Config 01

 

Sample Log

The allocated resources for PUSCH in this subtest is in RB map plot. You see that every PUSCH is allocated with the same number of RBs as set in the configuration file.

LTE PHY ResourceAllocation Test 2 SubTest 2 Log 01

 

Sub Test 3 :  PUSCH Resource Allocation with Full RB

This subtest shows how to allocate full physical resources for PUSCH. 'Full Physical Resource' mean the full UL RBs including the resources reserved for PUCCH.  Main purpose of this configuration is to provide the maximun possible UL throughput as you can achieve from other callbox which supports single UE only. It implies that this configuration would work only when single UE is connected.

I have used enb-ul-full-rb.cfg which is copied and modified from enb.default.cfg

Same physical resources will be applied to every PUSCH transmission by pusch_mcs, pusch_fixed_rb_alloc, pusch_fixed_rb_start, pusch_fixed_l_crb with single value (not Array). The key point in this configuration is that you need to set pusch_fixed_rb_forced: true which enables the full RB allocation including the area reserved for PUCCH and set pusch_fixed_l_crb to max RB for the channel bandwidth.

LTE PHY ResourceAllocation Test 2 SubTest 3 Config 01

 

Sample Log

The allocated resources for PUSCH in this subtest is in RB map plot. You see that every PUSCH is allocated with the same number of RBs as set in the configuration file which is full RB(100 RB in this case).

LTE PHY ResourceAllocation Test 2 SubTest 3 Log 01

 

 

Tips

 

Interpretation of Resource Allocation Array in TDD

It may be a little bit confusing to interpret the resource schedule array in TDD. So I want to clarify a few things with an example here. Note that this example is for PUSCH scheduling.

Let me explain a few things in Q&A form.

Q1 :  Is the index of the array maps to absolute slot number ? or relative available slot ? For example, the 'false' (the third slot) of pusch_fixed_rb_alloc in this example mean 'slot #2 within the continguous 10 slots(size of the array)' or 'third available slot regardless of absolute position' ?

A1: It indicates absolute position. So the 'false' (the third slot) of pusch_fixed_rb_alloc in this example indicates the slot #2 of the contiguous 10 slots(size of the array)

 

Q2 : Then what would happen for the array index mapped to downlink slot ?  For example, How the first element of  pusch_fixed_rb_alloc, pusch_fixed_rb_start, pusch_fixed_l_crb of the array works (assuming that the first slot is configured as downlink in TDD pattern).

A2 : It is get ignored.

 

Q3 : What would happen for the array index mapped to special slot(partial slot) ?

A3 : PUSCH in partial slot is not scheduled in default configuration. If you want to schedule PUSCH in special slot (or special subframe), you need to set the parameter partial_slots

 

Q4 :  Is value 0 in pusch_fixed_l_crb allowed ?

A4 : It is allowed for LTE, but not allowed in NR  with this parameter. (NOTE : If you want to disable scheduling PDSCH, you may use slot_enable to enable / disable scheduling)

 

Q5 : What does each element in the array indicates ? Does it indicates 'slot' or 'subframe' ?

A5 : In LTE, it indicates 'subframe', in NR it indicates 'slot'. Simply put, it indicates a TTI.

 

Q6: what is the meaning of 'false' in pusch_fixed_rb_alloc ? For example, in this example pusch_fixed_rb_alloc: [ true,true,false,true,true,true,true,true,true,true ] what eNB/gNB would do at slot #2 ('false') ?  does it stop PUSCH scheduling ? or it DOES schedule PUSCH with the best fit available RBs ?

A6 :  It DOES schedule PUSCH with the best fit available RBs (NOTE : 'false' for this configuration DOES NOT mean that it will stop PUSCH. It just mean it does not apply fixed_rb implying that eNB/gNB determines RBs whatever it wants)