Control Resource Set

The modules provides the classes and functions that implement Control Resource Set or CORESET. [3GPPTS38211coreset] The CORESET defines the set of Resource Blocks (RBs) and the number of symbols that are designed to transmit PDCCH/DCI.

  • The Base Station (BS) transmits the PDCCH using Resource Elements (REs) which belong to a CORESET. The REs which belong to CORESET are defined as Control Channel Elements (CCEs).

  • The PDCCH occupies a specific number of REs according to its aggregation level. An aggregation level is quantified in terms of the number of CCEs that it occupies.

  • The link adaption algorithm within the Base Station assigns a specific aggregation level according to the size of the DCI payload and the UE coverage conditions.

    • Small payloads can be accommodated using lower aggregation levels.

    • UEs which experience poor coverage conditions are normally allocated higher aggregation levels.

  • The RBs allocated to the CORESET are specified using a higher layer parameter frequencyDomainResources.

    • This information element provides a bit string of 45 bits where each bit corresponds to 6 contiguous RBs with in the active DL BWP. i.e., A maximum of 6*45 = 270 RBs can be allocated.

    • A set of 6 contiguous RBs is included with in the CORESET if the corresponding bit with in the bit string is set to 1.

  • The number of symbols allocated to CORESET is specified using a higher layer parameter duration. A CORESET can be configured with a duration of 1,2 or 3 symbols.

  • 3GPP has specified both non-interleaved and interleaved mappings between REGs and CCEs.

  • The higher layer parameter cce-REG-MappingType is used to select between the non-interleaved and interleaved options.

    • When using interleaved mapping, REG bundles (number of REGs bundled together) are generated from 2, 3 or 6 REGs, as specified by reg-BundleSize or L.

    • REG bundle size of 2 and 6 are permitted when duration is either 1 or 2.

    • REG bundle size of 3 and 6 are permitted when duration is 3.

    • For non-interleaved, L always equals 6.

  • CCE are generated by grouping the REG bundles. For example, 2 REG bundles are grouped to generate a CCE when L = 3 for interleaved mapping.

  • Higher layer parameter interleaverSize or R is configured to determine the number of sections that the CORESET bandwith is divided into when applying interleaving.

  • Higher layer paramter shiftlndex or nshift can be used to apply a cyclic shift to the interleaving pattern. It can take any value from the set {0,1,…,274}.

Note

The Resource Elements (REs) belonging to CORESET are organised into Resource Element Groups (REGs).

  • 1 REG = 1 RB in frequency domain and 1 symbol in time domain.

  • 1 REG = 12 REs, since 1 RB = 12 REs.

  • 1 CCE = 6 REGs = 6*12 = 72 REs.

class toolkit5G.ResourceMapping.CORESET(duration, frequencyDomainResources, bwpStartPRBindex=0)[source]

A class for generating Control Resource Set (CORESET).

  • A control-resource set consists of numRBinCORESET resource blocks in the frequency domain and duration of either {1,2,3} symbols in the time domain.

  • Note that a control-channel element (CCE) consists of 6 resource-element groups (REGs) where a resource-element group (REG) equals one resource block (RB) during one OFDM symbol. i.e., 1 REG = 1 RB with duration of one OFDM symbol. 1 CCE = 6*REGs.

  • REGs within a CORESET are numbered in increasing order in a time-first manner, starting with 0 for the first OFDM symbol and the lowest-numbered RB in the CORESET.

  • A UE can be configured with multiple CORESETs. Each CORESET is associated with one CCE-to-REG mapping only.

  • The CCE-to-REG mapping for a CORESET can be interleaved or non-interleaved and is described by REG bundles.

Parameters:
  • duration (int) – Number of symbols configured for CORESET. Contiguous time duration of the CORESET in number of symbols. Must be a positive int and takes value from the set {1,2,3}.

  • frequencyDomainResources (numpy.ndarray of binary int (i.e., from the set {0,1}) with size (45,).) – Defines frequency domain resources which must be a 45 length array whose each bit allocates 6 contiguous RBs, with grouping starting from PRB 0, to CORESET within the bandwidth part within which the CORESET is configured. The 0th entry points to the lowest RB in the configured BWP. The number of RBs allocated to CORESET/PDCCH is given by 6*np.sum(frequencyDomainResources).

  • bwpStartPRBindex (int or numpy.integer) – Specifies the start PRB index of BWP.

Input:
  • cce_REG_MappingType (str) – Specifies the type of REG to CCE mapping type. i.e, how Resource Element Groups (REGs) are being mapped to CCEs. cce_REG_MappingType from 3GPP TS 38.211 Section 7.3.2 Must be a string. Supported mapping types are {“non-interleaved”, “interleaved”}. Defaults to “interleaved”. For “interleaved” mapping, interleaverSize, reg_BundleSize and shiftIndex parameters are expected. For “non-interleaved”, no additional parameter is expected.

  • reg_BundleSize (int) – Specifies reg_BundleSize or ‘L’ from 3GPP TS 38.211 Section 7.3.2. This parameter indicates the number of REGs bundled together to form an REG bundle for “interleaving” type. Supported reg_BundleSize are {2,3,6}. It can take a value from the set {2,6} for duration = 1 and 2 and {3,6} for duration = 3. Must be a positive int and defaults to 6.

  • interleaverSize (int or None) – Specifies interleaverSize or ‘R’ from 3GPP TS 38.211 Section 7.3.2. This parameters indicates the size of interleaver. THe CORESET interleaver divides the available frequency resources into R parts. Each part has C RBs. Interleaver reads the RBs along columns or ‘C’ first and rows or ‘R’ second. It can take a value from the set {2,3,6}. But the configured value should be chosen such that ‘C’ must in an integer or in other words R*C = NumberOfRBs configured for CORESET. Must be a positive int and defaults to None. In the default case it takes value of 6.

  • shiftIndex (int) – Specifies shiftIndex or ‘nshift’ from 3GPP TS 38.211 Section 7.3.2. Indicates the circular shift value while interleaving. It can take any integer value from the interval [0, 274]. Must be a positive int and defaults to 0.

Output:

[numPRBsInCoreset,], int, where numPRBsInCoreset = int(np.sum(frequencyDomainResources)*6). – PRB indices configured for transmisson of PDCCH.

Raises:
  • ValueError – If the following condition is false. Where the condition is that C = numREGinCORESET%(reg_BundleSize*interleaverSize)==0 must be true. i.e., Number of columns ‘C’ in the interleaver must be an integer. Where numREGinCORESET = numPRBsInCoreset*duration

  • ValueError – If frequencyDomainResources is not a binary integer array of size 45!

  • ValueError – If duration is not 1, 2 or 3 ofdm symbols!

  • ValueError – If interleaverSize takes any integer value other than [2, 3, 6]!

  • ValueError – If reg_BundleSize does not take integer values from [2, 3, 6]!

  • ValueError – If shiftIndex is not from the interval [0, 274]!

displayCoresetREG_CCE_Mapping()[source]

Method to display CCE-REG mapping of a CORESET.

An example of CORESET is given below. The REG to CCE mapping is displayed using a method displayCORESET()

Example:

Interleaved mapping

######################################
# importing necessary python libraries
######################################
 import os
 os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

 %matplotlib widget
 import matplotlib.pyplot  as plt
 import matplotlib.patches as mpatches
 import matplotlib as mpl

 import numpy      as np
##########################################
# importing necessary toolkit5G libraries
##########################################

 from toolkit5G.ResourceMapping import CORESET
#######################
# Simulation Parameters
#######################

 ###############################################
 # duration of CORESET in number of OFDM symbol
 ###############################################
 duration = 3
 ##########################################
 # frequecyDomainResources, a 45 bit vector.
 # Number of PRBs allocated in CORESET are 6*np.sum(frequecyDomainResources) = 18 PRBs
 frequencyDomainResources = np.array([1,1,1,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0], dtype=int)
 ##################
 # CCE-REG-Mapping
 ##################
 cce_reg_mapping = "interleaved"
 ##################
 # REG bundle Size
 ##################
 L = 3
 ##################
 # Interleaver Size
 ##################
 R = 6
 ######################
 # circular shift value
 ######################
 nshift = 0
########################
# Instanstiating CORESET
########################
coresetObj = CORESET(duration,frequencyDomainResources)
coresetPRBIndices = coresetObj(cce_reg_mapping,L,R,nshift)

print()
print("PRB indices allocated to CORESET:", coresetPRBIndices)
print()
print("Number of CCEs in CORESET:", coresetObj.numCCESInCoreset)

#########################
# Display REG-CCE mapping
#########################
coresetObj.displayCoresetREG_CCE_Mapping()
PRB indices allocated to CORESET are: [ 0  3  6  9 12 15  1  4  7 10 13 16  2  5  8 11 14 17]

Number of CCEs in CORESET: 9
Figure

Non-Interleaved mapping

######################################
# importing necessary python libraries
######################################
 import os
 os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
 os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'

 %matplotlib widget
 import matplotlib.pyplot  as plt
 import matplotlib.patches as mpatches
 import matplotlib as mpl

 import numpy      as np
##########################################
# importing necessary toolkit5G libraries
##########################################

 from toolkit5G.ResourceMapping import CORESET
#######################
# Simulation Parameters
#######################

 ###############################################
 # duration of CORESET in number of OFDM symbol
 ###############################################
 duration = 3
 ##########################################
 # frequecyDomainResources, a 45 bit vector.
 # Number of PRBs allocated in CORESET are 6*np.sum(frequecyDomainResources) = 18 PRBs
 frequencyDomainResources = np.array([1,1,1,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0,
                                      0,0,0,0,0], dtype=int)
 ##################
 # CCE-REG-Mapping
 ##################
 cce_reg_mapping = "non-interleaved"
########################
# Instanstiating CORESET
########################
coresetObj = CORESET(duration,frequencyDomainResources)
coresetPRBIndices = coresetObj(cce_reg_mapping)

print()
print("PRB indices allocated to CORESET:", coresetPRBIndices)
print()
print("Number of CCEs in CORESET:", coresetObj.numCCESInCoreset)

#########################
# Display REG-CCE mapping
#########################
coresetObj.displayCoresetREG_CCE_Mapping()
PRB indices allocated to CORESET: [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17]

Number of CCEs in CORESET: 6
Figure
References:
[3GPPTS38211coreset]

(3GPP TS 38.211 version 17.1.0 Release 17) 5G;NR;Physical channels and modulation ‘7.3.2.2 Control-Resource Set (CORESET)’