Analyzing the effect of Number of Candidates on Blocking Probability

  • In this notebook, we simulate the blocking probability as a function of number of PDCCH candidates.

  • In NR the number of PDCCH candidates can be configurable for each Aggregation Level (AL) among {1,2,3,4,5,6,8} in the USS.

  • We seperately evaluate the impact of number of candidates for AL 1, AL 2, and AL 4 by changing the number of candidates for one of the ALs (from the set above), while setting the number of candidates for other ALs to 1.

  • The AL distribution considered for simulation is [0.4, 0.3, 0.2, 0.05, 0.05] for ALs 1,2,4,8,16 respectively.

  • The CORESET size Nccep is 54 CCEs for this simulation.

[1]:
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
[2]:
import sys
sys.path.append("../../")
from toolkit5G.Scheduler import PDCCHScheduler

Simulation Parameters

The following parameters are used for this simulation: - coresetID denotes the coreset ID. - slotNumber denotes the slot-number carrying the PDCCH. - searchSpaceType denotes the search space type. UE specific search space (USS) or Common search space (CSS). - nci denotes the variable corresponding to carrier aggregation. Current simulation does not assume carrier aggregation.

[3]:
mu               = np.random.randint(4)    # numerlogy for sub-carrier spacing
numSlotsPerFrame = 2**mu * 10              # number of slots per radio frame
coresetID        = 1                       # coreset ID
slotNumber       = 0
searchSpaceType  = "USS"                   # search space type. UE specific search space
nci              = 0                       # variable corresponding to carrier aggregation
numIterations    = 5000
numUEs           = 20


PDCCH Scheduling Parameters

Following parameters are crucial for PDCCH scheduling performance: - Nccep denotes coreset size or number of CCEs available for scheduling UEs. - strategy denotes the scheduling strategy. - numCandidates denotes number of PDCCH candidates per each Aggregation Level.

[4]:
aggLevelProbDistribution = np.array([0.4, 0.3, 0.2, 0.05, 0.05])
Nccep                    = 54
supportedNumCand         = np.array([1,2,3,4,5,6,7,8], dtype = int)
strategy                 = "Conservative"

pdcchSchedulerObj = PDCCHScheduler(mu, slotNumber, coresetID, nci)

[5]:
#########
# AL1
#########

probOfBlockingForAL1 = np.zeros((supportedNumCand.size,))
for n in range(supportedNumCand.size):
    print("Simulating number of candidates : "+str(n)+", "+str(supportedNumCand[n]))
    x = supportedNumCand[n]
    numCandidates  = np.array([x,1,1,1,1], dtype=int)
    prob = 0
    for i in range(numIterations):
        ueALdistribution  = np.random.multinomial(numUEs, aggLevelProbDistribution)
        rnti              = np.random.choice( np.arange(1,65519+1), size = (numUEs,), replace=False)
        count             = pdcchSchedulerObj(Nccep,searchSpaceType,ueALdistribution,numCandidates,rnti,strategy)[0]
        numBlockedUEs     = np.sum(count)
        prob              = prob + numBlockedUEs/numUEs
    probOfBlockingForAL1[n] = prob/numIterations
Simulating number of candidates : 0, 1
Simulating number of candidates : 1, 2
Simulating number of candidates : 2, 3
Simulating number of candidates : 3, 4
Simulating number of candidates : 4, 5
Simulating number of candidates : 5, 6
Simulating number of candidates : 6, 7
Simulating number of candidates : 7, 8
[6]:
#########
# AL2
#########
probOfBlockingForAL2 = np.zeros((supportedNumCand.size,))
for n in range(supportedNumCand.size):
    print("Simulating number of candidates : "+str(n)+", "+str(supportedNumCand[n]))
    x = supportedNumCand[n]
    numCandidates  = np.array([1,x,1,1,1], dtype=int)
    prob = 0
    for i in range(numIterations):
        ueALdistribution  = np.random.multinomial(numUEs, aggLevelProbDistribution)
        rnti              = np.random.choice( np.arange(1,65519+1), size = (numUEs,), replace=False)
        count             = pdcchSchedulerObj(Nccep,searchSpaceType,ueALdistribution,numCandidates,rnti,strategy)[0]
        numBlockedUEs     = np.sum(count)
        prob              = prob + numBlockedUEs/numUEs
    probOfBlockingForAL2[n] = prob/numIterations
Simulating number of candidates : 0, 1
Simulating number of candidates : 1, 2
Simulating number of candidates : 2, 3
Simulating number of candidates : 3, 4
Simulating number of candidates : 4, 5
Simulating number of candidates : 5, 6
Simulating number of candidates : 6, 7
Simulating number of candidates : 7, 8
[7]:
#########
# AL4
#########
probOfBlockingForAL4 = np.zeros((supportedNumCand.size,))
for n in range(supportedNumCand.size):
    print("Simulating number of candidates : "+str(n)+", "+str(supportedNumCand[n]))
    x = supportedNumCand[n]
    numCandidates  = np.array([1,1,x,1,1], dtype=int)
    prob = 0
    for i in range(numIterations):
        ueALdistribution  = np.random.multinomial(numUEs, aggLevelProbDistribution)
        rnti              = np.random.choice( np.arange(1,65519+1), size = (numUEs,), replace=False)
        count             = pdcchSchedulerObj(Nccep,searchSpaceType,ueALdistribution,numCandidates,rnti,strategy)[0]
        numBlockedUEs     = np.sum(count)
        prob              = prob + numBlockedUEs/numUEs
    probOfBlockingForAL4[n] = prob/numIterations
Simulating number of candidates : 0, 1
Simulating number of candidates : 1, 2
Simulating number of candidates : 2, 3
Simulating number of candidates : 3, 4
Simulating number of candidates : 4, 5
Simulating number of candidates : 5, 6
Simulating number of candidates : 6, 7
Simulating number of candidates : 7, 8

Plot the Variation in Blocking Probability with number of PDCCH candidates

  • Its the recreation of Fig. 6: Blocking probability versus Number of PDCCH candidatesfrom the reference paper referenced below [1].

  • From the figure we see that incresing the number of PDCCH candidates for each AL results in a lower Blocking Probability.

  • With more PDCCH candidates, the Base Station has more flexibility to avoid overlapping between candidates of different UEs, thus reducing the blocking probability.

  • The results in figure shows that a higher blocking probability reduction for AL 2, compared to ALs 1 and 4. This is because of the AL distribution considered. We see the overall impact of AL 2 on the blocking probability is more than that of ALs 1 and 4.

  • Note that having more PDCCH candidates is beneficial for blocking probaility reduction, it increases the number of BDs and CCE monitoring which can increase the UE complexity and power consumption.

[8]:
fig, ax = plt.subplots()
ax.plot(supportedNumCand, probOfBlockingForAL1, marker  = "*",linestyle = "solid",ms = 12, c = 'b', label = "AL1")
ax.plot(supportedNumCand, probOfBlockingForAL2, marker  = "o",linestyle = "solid",ms = 12, c = 'm', label = "AL2")
ax.plot(supportedNumCand, probOfBlockingForAL4, marker  = "+",linestyle = "solid",ms = 12, c = 'k', label = "AL4")

ax.legend()
ax.set_xlabel('Number of PDCCH Candidates for an AL')
ax.set_ylabel('Blocking Probability')
ax.set_title('Blocking Probability vs Number of PDCCH Candidates', fontsize=12)
ax.set_xticks(supportedNumCand)
ax.grid()
plt.show()
../../../_images/api_Projects_Project2_Blocking_Probability_vs_Number_of_Candidates_per_Aggregation_Level_11_0.png

References

[1] Blocking Probability Analysis for 5G New Radio (NR) Physical Downlink Control Channel. Mohammad Mozaffari, Y.-P. Eric Wang, and Kittipong Kittichokechai

[ ]: