NG Toolset開發筆記--5GNR Resource Grid(46)

Procedures to determine PDCCH candidate of CSS0/CORESET0:

1, CCE-to-REG mapping procedure

Note1: For 'contents of regBundles/cces', horizontal is freq-domain and vertical is time-domain.

Configurations:
contents of ["freqBand"]: {'opBand': 'n257', 'duplexMode': 'TDD', 'maxDlFreq': 29500, 'freqRange': 'FR2'}
contents of ["ssbGrid"]: {'scs': '120KHz', 'pattern': 'Case D', 'minGuardBand240k': 'NA', 'kSsb': '0', 'nCrbSsb': '4'}
contents of ["ssbBurst"]: {'maxL': 64, 'inOneGroup': '11111111', 'groupPresence': '11111111', 'period': '20ms'}
contents of ["mib"]: {'sfn': '0', 'hrf': '0', 'dmrsTypeAPos': 'pos2', 'commonScs': '120KHz', 'rmsiCoreset0': '4', 'rmsiCss0': '0', 'coreset0MultiplexingPat': 3, 'coreset0NumRbs': 24, 'coreset0NumSymbs': 2, 'coreset0OffsetList': (-20, -21), 'coreset0Offset': -20}
contents of ["carrierGrid"]: {'scs': '60KHz', 'bw': '100MHz', 'numRbs': '132', 'minGuardBand': '4'}
contents of ["pci"]: 0
contents of ["numUeAp"]: 4Tx
contents of ["tddCfg"]: {'refScs': '60KHz', 'pat1Period': '5ms', 'pat1NumDlSlots': '3', 'pat1NumDlSymbs': '10', 'pat1NumUlSymbs': '2', 'pat1NumUlSlots': '1', 'pat2Period': 'not used', 'pat2NumDlSlots': '', 'pat2NumDlSymbs': '', 'pat2NumUlSymbs': '', 'pat2NumUlSlots': ''}
contents of ["css0"]: {'aggLevel': '4', 'numCandidates': 'n4'}
calling coresetCce2RegMapping with: numRbs=24,numSymbs=2,interleaved=True,L=6,R=2,nShift=0
contents of regBundles:
0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7
0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7
contents of cces:
0,0,0,2,2,2,4,4,4,6,6,6,1,1,1,3,3,3,5,5,5,7,7,7
0,0,0,2,2,2,4,4,4,6,6,6,1,1,1,3,3,3,5,5,5,7,7,7

2, SSB index, associated PDCCH occasions and PDCCH candidate are selected ramdomly

#for simplicity, assume SSB index is randomly selected!
            while True:
                bestSsb = np.random.randint(0, len(self.ssbFirstSymbInBaseScsTd[dn]))
                if self.ssbFirstSymbInBaseScsTd[dn][bestSsb] is not None:
                    break
            
            #determine pdcch candidate randomly
            oc, firstSymb, valid = self.coreset0Occasions[bestSsb]
            if len(valid) == 2 and valid[0] == 'OK' and valid[1] == 'OK':
                pdcchSlot = np.random.randint(0, 2)
            else:
                if len(valid) == 1:
                    pdcchSlot = 0
                else:
                    pdcchSlot = 0 if valid[0] == 'OK' else 1
                    
            numCandidates = min(self.nrCss0MaxNumCandidates, self.coreset0NumCces // self.nrCss0AggLevel)
            pdcchCandidate = np.random.randint(0, numCandidates)
            
            self.ngwin.logEdit.append('randomly selecting pdcch candidate: bestSsb=%d(hrf=%d,issb=%d), pdcchSlot=%d, pdcchCandidate=%d' % (bestSsb, self.nrMibHrf if self.nrSsbPeriod >= 10 else bestSsb // self.nrSsbMaxL, bestSsb % self.nrSsbMaxL, pdcchSlot, pdcchCandidate))

3, Set of CCEs w.r.t. CSS0/CORESET0 with certain aggregation level and certain PDCCH candidate

scaleTd = self.baseScsTd // self.nrMibCommonScs
scaleFd = self.nrMibCommonScs // self.baseScsFd
coreset0FirstSc = self.ssbScRangeInBaseScsFd[0] - self.nrCoreset0Offset * self.nrScPerPrb * scaleFd
hsfn, sfnc, nc = oc[pdcchSlot]
            dn2 = '%s_%s' % (hsfn, sfnc)
            firstSymbInBaseScsTd = (nc * self.nrSymbPerSlotNormCp + firstSymb) * scaleTd
            cceSet = [pdcchCandidate * self.nrCss0AggLevel + k for k in range(self.nrCss0AggLevel)]
            for i in range(self.coreset0Cces.shape[0]):
                for j in range(self.coreset0Cces.shape[1]):
                    if self.coreset0Cces[i, j] in cceSet:
                        if self.nrDuplexMode == 'TDD':
                            self.gridNrTdd[dn2][coreset0FirstSc+i*self.nrScPerPrb*scaleFd:coreset0FirstSc+(i+1)*self.nrScPerPrb*scaleFd, firstSymbInBaseScsTd+j*scaleTd:firstSymbInBaseScsTd+(j+1)*scaleTd] = NrResType.NR_RES_PDCCH.value
                        else:
                            self.gridNrFddDl[dn2][coreset0FirstSc+i*self.nrScPerPrb*scaleFd:coreset0FirstSc+(i+1)*self.nrScPerPrb*scaleFd, firstSymbInBaseScsTd+j*scaleTd:firstSymbInBaseScsTd+(j+1)*scaleTd] = NrResType.NR_RES_PDCCH.value

4, Examples for SSB and associated CSS0/CORESET0:

Here are three examples corresponding to 3 multiplexing patterns, and exported Excels can be accessed at:

鏈接:https://pan.baidu.com/s/1lfqaPOwWJHnPYw2m2NkFvg
提取碼:x2qh

For 'multiplexing pattern 1':

Configurations(for multiplexing pattern 1):
contents of ["freqBand"]: {'opBand': 'n77', 'duplexMode': 'TDD', 'maxDlFreq': 4200, 'freqRange': 'FR1'}
contents of ["ssbGrid"]: {'scs': '30KHz', 'pattern': 'Case C', 'minGuardBand240k': 'NA', 'kSsb': '0', 'nCrbSsb': '4'}
contents of ["ssbBurst"]: {'maxL': 8, 'inOneGroup': '11111111', 'groupPresence': 'NA', 'period': '20ms'}
contents of ["mib"]: {'sfn': '0', 'hrf': '0', 'dmrsTypeAPos': 'pos2', 'commonScs': '15KHz', 'rmsiCoreset0': '0', 'rmsiCss0': '0', 'coreset0MultiplexingPat': 1, 'coreset0NumRbs': 48, 'coreset0NumSymbs': 1, 'coreset0OffsetList': (2,), 'coreset0Offset': 2}
contents of ["carrierGrid"]: {'scs': '15KHz', 'bw': '10MHz', 'numRbs': '52', 'minGuardBand': '2'}
contents of ["pci"]: 0
contents of ["numUeAp"]: 4Tx
contents of ["tddCfg"]: {'refScs': '15KHz', 'pat1Period': '5ms', 'pat1NumDlSlots': '3', 'pat1NumDlSymbs': '10', 'pat1NumUlSymbs': '2', 'pat1NumUlSlots': '1', 'pat2Period': 'not used', 'pat2NumDlSlots': '', 'pat2NumDlSymbs': '', 'pat2NumUlSymbs': '', 'pat2NumUlSlots': ''}
contents of ["css0"]: {'aggLevel': '4', 'numCandidates': 'n4'}
Part of debug info:
---->inside recvPdcch(hsfn=0, sfn=0, dci="dci10",rnti="si-rnti", scaleTdSsb=2, scaleTdRmsiScs=4)
PDCCH monitoring occasion for SSB index=0(hrf=0): [[(0, 0, 0), (0, 0, 1)], 0, ['OK', 'OK']]
PDCCH monitoring occasion for SSB index=1(hrf=0): [[(0, 0, 1), (0, 0, 2)], 0, ['OK', 'OK']]
PDCCH monitoring occasion for SSB index=2(hrf=0): [[(0, 0, 2), (0, 0, 3)], 0, ['OK', 'OK']]
PDCCH monitoring occasion for SSB index=3(hrf=0): [[(0, 0, 3), (0, 0, 4)], 0, ['OK', 'NOK']]
PDCCH monitoring occasion for SSB index=4(hrf=0): [[(0, 0, 4), (0, 0, 5)], 0, ['NOK', 'OK']]
PDCCH monitoring occasion for SSB index=5(hrf=0): [[(0, 0, 5), (0, 0, 6)], 0, ['OK', 'OK']]
PDCCH monitoring occasion for SSB index=6(hrf=0): [[(0, 0, 6), (0, 0, 7)], 0, ['OK', 'OK']]
PDCCH monitoring occasion for SSB index=7(hrf=0): [[(0, 0, 7), (0, 0, 8)], 0, ['OK', 'OK']]
calling coresetCce2RegMapping with: numRbs=48,numSymbs=1,interleaved=True,L=6,R=2,nShift=0
contents of regBundles:
0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7
contents of cces:
0,0,0,0,0,0,2,2,2,2,2,2,4,4,4,4,4,4,6,6,6,6,6,6,1,1,1,1,1,1,3,3,3,3,3,3,5,5,5,5,5,5,7,7,7,7,7,7
randomly selecting pdcch candidate: bestSsb=2(hrf=0,issb=2), pdcchSlot=1, pdcchCandidate=1

 

For 'multiplexing pattern 2':

Configurations(for multiplexing pattern 2):
contents of ["freqBand"]: {'opBand': 'n257', 'duplexMode': 'TDD', 'maxDlFreq': 29500, 'freqRange': 'FR2'}
contents of ["ssbGrid"]: {'scs': '120KHz', 'pattern': 'Case D', 'minGuardBand240k': 'NA', 'kSsb': '0', 'nCrbSsb': '4'}
contents of ["ssbBurst"]: {'maxL': 64, 'inOneGroup': '11111111', 'groupPresence': '11111111', 'period': '20ms'}
contents of ["mib"]: {'sfn': '0', 'hrf': '0', 'dmrsTypeAPos': 'pos2', 'commonScs': '60KHz', 'rmsiCoreset0': '8', 'rmsiCss0': '0', 'coreset0MultiplexingPat': 2, 'coreset0NumRbs': 48, 'coreset0NumSymbs': 1, 'coreset0OffsetList': (-41, -42), 'coreset0Offset': -41}
contents of ["carrierGrid"]: {'scs': '60KHz', 'bw': '100MHz', 'numRbs': '132', 'minGuardBand': '4'}
contents of ["pci"]: 0
contents of ["numUeAp"]: 4Tx
contents of ["tddCfg"]: {'refScs': '60KHz', 'pat1Period': '5ms', 'pat1NumDlSlots': '3', 'pat1NumDlSymbs': '10', 'pat1NumUlSymbs': '2', 'pat1NumUlSlots': '1', 'pat2Period': 'not used', 'pat2NumDlSlots': '', 'pat2NumDlSymbs': '', 'pat2NumUlSymbs': '', 'pat2NumUlSlots': ''}
contents of ["css0"]: {'aggLevel': '4', 'numCandidates': 'n4'}
Part of debug info:
PDCCH monitoring occasion for SSB index=56(hrf=0): [[(0, 0, 17)], 0, ['OK']]
PDCCH monitoring occasion for SSB index=57(hrf=0): [[(0, 0, 17)], 1, ['OK']]
PDCCH monitoring occasion for SSB index=58(hrf=0): [[(0, 0, 17)], 6, ['OK']]
PDCCH monitoring occasion for SSB index=59(hrf=0): [[(0, 0, 17)], 7, ['OK']]
PDCCH monitoring occasion for SSB index=60(hrf=0): [[(0, 0, 18)], 0, ['OK']]
PDCCH monitoring occasion for SSB index=61(hrf=0): [[(0, 0, 18)], 1, ['OK']]
PDCCH monitoring occasion for SSB index=62(hrf=0): [[(0, 0, 18)], 6, ['OK']]
PDCCH monitoring occasion for SSB index=63(hrf=0): [[(0, 0, 18)], 7, ['OK']]
calling coresetCce2RegMapping with: numRbs=48,numSymbs=1,interleaved=True,L=6,R=2,nShift=0
contents of regBundles:
0,0,0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7
contents of cces:
0,0,0,0,0,0,2,2,2,2,2,2,4,4,4,4,4,4,6,6,6,6,6,6,1,1,1,1,1,1,3,3,3,3,3,3,5,5,5,5,5,5,7,7,7,7,7,7
randomly selecting pdcch candidate: bestSsb=58(hrf=0,issb=58), pdcchSlot=0, pdcchCandidate=1

 

For 'multiplexing pattern 3':

Configurations(for multiplexing pattern 3):
contents of ["freqBand"]: {'opBand': 'n257', 'duplexMode': 'TDD', 'maxDlFreq': 29500, 'freqRange': 'FR2'}
contents of ["ssbGrid"]: {'scs': '120KHz', 'pattern': 'Case D', 'minGuardBand240k': 'NA', 'kSsb': '0', 'nCrbSsb': '4'}
contents of ["ssbBurst"]: {'maxL': 64, 'inOneGroup': '11111111', 'groupPresence': '11111111', 'period': '20ms'}
contents of ["mib"]: {'sfn': '0', 'hrf': '0', 'dmrsTypeAPos': 'pos2', 'commonScs': '120KHz', 'rmsiCoreset0': '4', 'rmsiCss0': '0', 'coreset0MultiplexingPat': 3, 'coreset0NumRbs': 24, 'coreset0NumSymbs': 2, 'coreset0OffsetList': (-20, -21), 'coreset0Offset': -20}
contents of ["carrierGrid"]: {'scs': '60KHz', 'bw': '100MHz', 'numRbs': '132', 'minGuardBand': '4'}
contents of ["pci"]: 0
contents of ["numUeAp"]: 4Tx
contents of ["tddCfg"]: {'refScs': '60KHz', 'pat1Period': '5ms', 'pat1NumDlSlots': '3', 'pat1NumDlSymbs': '10', 'pat1NumUlSymbs': '2', 'pat1NumUlSlots': '1', 'pat2Period': 'not used', 'pat2NumDlSlots': '', 'pat2NumDlSymbs': '', 'pat2NumUlSymbs': '', 'pat2NumUlSlots': ''}
contents of ["css0"]: {'aggLevel': '4', 'numCandidates': 'n4'}
Part of debug info:
PDCCH monitoring occasion for SSB index=21(hrf=0): [[(0, 0, 12)], 8, ['OK']]
PDCCH monitoring occasion for SSB index=22(hrf=0): [[(0, 0, 13)], 2, ['OK']]
PDCCH monitoring occasion for SSB index=23(hrf=0): [[(0, 0, 13)], 6, ['OK']]
PDCCH monitoring occasion for SSB index=24(hrf=0): [[(0, 0, 14)], 4, ['OK']]
PDCCH monitoring occasion for SSB index=25(hrf=0): [[(0, 0, 14)], 8, ['OK']]
PDCCH monitoring occasion for SSB index=26(hrf=0): [[(0, 0, 15)], 2, ['OK']]
PDCCH monitoring occasion for SSB index=27(hrf=0): [[(0, 0, 15)], 6, ['OK']]
PDCCH monitoring occasion for SSB index=28(hrf=0): [[(0, 0, 16)], 4, ['OK']]
PDCCH monitoring occasion for SSB index=29(hrf=0): [[(0, 0, 16)], 8, ['OK']]
PDCCH monitoring occasion for SSB index=30(hrf=0): [[(0, 0, 17)], 2, ['OK']]
calling coresetCce2RegMapping with: numRbs=24,numSymbs=2,interleaved=True,L=6,R=2,nShift=0
contents of regBundles:
0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7
0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7
contents of cces:
0,0,0,2,2,2,4,4,4,6,6,6,1,1,1,3,3,3,5,5,5,7,7,7
0,0,0,2,2,2,4,4,4,6,6,6,1,1,1,3,3,3,5,5,5,7,7,7
randomly selecting pdcch candidate: bestSsb=25(hrf=0,issb=25), pdcchSlot=0, pdcchCandidate=1

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章