Procedures for SLIV(Start and Length Indication Value):
def makeSliv(self, S, L):
if L <= 0 or L > 14 - S:
return None
if (L - 1) <= 7:
sliv = 14 * (L - 1) + S
else:
sliv = 14 * (14 - L + 1) + (14 - 1 - S)
return sliv
Valid SLIVs for PDSCH and PUSCH are generated as below:
def initPdschSliv(self):
#prefix
#'00': mapping type A + normal cp
#'01': mapping type A + extended cp
#'10': mapping type B + normal cp
#'11': mapping type B + extended cp
self.nrPdschToSliv = dict()
self.nrPdschFromSliv = dict()
#case1: prefix='00'
prefix = '00'
for S in range(4):
for L in range(3, 15):
if S+L in range(3, 15):
sliv = self.makeSliv(S, L)
if sliv is not None:
keyToSliv = '%s_%s_%s' % (prefix, S, L)
self.nrPdschToSliv[keyToSliv] = sliv
keyFromSliv = '%s_%s' % (prefix, sliv)
self.nrPdschFromSliv[keyFromSliv] = (S, L)
#case2: prefix='01'
prefix = '01'
for S in range(4):
for L in range(3, 13):
if S+L in range(3, 13):
sliv = self.makeSliv(S, L)
if sliv is not None:
keyToSliv = '%s_%s_%s' % (prefix, S, L)
self.nrPdschToSliv[keyToSliv] = sliv
keyFromSliv = '%s_%s' % (prefix, sliv)
self.nrPdschFromSliv[keyFromSliv] = (S, L)
#case2: prefix='10'
prefix = '10'
for S in range(13):
for L in (2,4,7):
if S+L in range(2, 15):
sliv = self.makeSliv(S, L)
if sliv is not None:
keyToSliv = '%s_%s_%s' % (prefix, S, L)
self.nrPdschToSliv[keyToSliv] = sliv
keyFromSliv = '%s_%s' % (prefix, sliv)
self.nrPdschFromSliv[keyFromSliv] = (S, L)
#case2: prefix='11'
prefix = '11'
for S in range(11):
for L in (2,4,6):
if S+L in range(2, 13):
sliv = self.makeSliv(S, L)
if sliv is not None:
keyToSliv = '%s_%s_%s' % (prefix, S, L)
self.nrPdschToSliv[keyToSliv] = sliv
keyFromSliv = '%s_%s' % (prefix, sliv)
self.nrPdschFromSliv[keyFromSliv] = (S, L)
def initPuschSliv(self):
#prefix
#'00': mapping type A + normal cp
#'01': mapping type A + extended cp
#'10': mapping type B + normal cp
#'11': mapping type B + extended cp
self.nrPuschToSliv = dict()
self.nrPuschFromSliv = dict()
#case1: prefix='00'
prefix = '00'
for S in (0,):
for L in range(4, 15):
if S+L in range(4, 15):
sliv = self.makeSliv(S, L)
if sliv is not None:
keyToSliv = '%s_%s_%s' % (prefix, S, L)
self.nrPuschToSliv[keyToSliv] = sliv
keyFromSliv = '%s_%s' % (prefix, sliv)
self.nrPuschFromSliv[keyFromSliv] = (S, L)
#case2: prefix='01'
prefix = '01'
for S in (0,):
for L in range(4, 13):
if S+L in range(4, 13):
sliv = self.makeSliv(S, L)
if sliv is not None:
keyToSliv = '%s_%s_%s' % (prefix, S, L)
self.nrPuschToSliv[keyToSliv] = sliv
keyFromSliv = '%s_%s' % (prefix, sliv)
self.nrPuschFromSliv[keyFromSliv] = (S, L)
#case2: prefix='10'
prefix = '10'
for S in range(14):
for L in range(1, 15):
if S+L in range(1, 15):
sliv = self.makeSliv(S, L)
if sliv is not None:
keyToSliv = '%s_%s_%s' % (prefix, S, L)
self.nrPuschToSliv[keyToSliv] = sliv
keyFromSliv = '%s_%s' % (prefix, sliv)
self.nrPuschFromSliv[keyFromSliv] = (S, L)
#case2: prefix='11'
prefix = '11'
for S in range(13):
for L in range(1, 13):
if S+L in range(1, 13):
sliv = self.makeSliv(S, L)
if sliv is not None:
keyToSliv = '%s_%s_%s' % (prefix, S, L)
self.nrPuschToSliv[keyToSliv] = sliv
keyFromSliv = '%s_%s' % (prefix, sliv)
self.nrPuschFromSliv[keyFromSliv] = (S, L)
Helper functions for 'convert into' and 'convert from' SLIV:
def toSliv(self, S, L, sch='pdsch', type='Type A', cp='normal'):
if type == 'Type A':
if cp == 'normal':
prefix = '00'
elif cp == 'extended':
prefix = '01'
else:
return None
elif type == 'Type B':
if cp == 'normal':
prefix = '10'
elif cp == 'extended':
prefix = '11'
else:
return None
else:
return None
key = '%s_%s_%s' % (prefix, S, L)
if sch == 'pdsch':
if not key in self.nrPdschToSliv.keys():
return None
else:
sliv = self.nrPdschToSliv[key]
elif sch == 'pusch':
if not key in self.nrPuschToSliv.keys():
return None
else:
sliv = self.nrPuschToSliv[key]
else:
return None
return sliv
def fromSliv(self, sliv, sch='pdsch', type='Type A', cp='normal'):
if type == 'Type A':
if cp == 'normal':
prefix = '00'
elif cp == 'extended':
prefix = '01'
else:
return (None, None)
elif type == 'Type B':
if cp == 'normal':
prefix = '10'
elif cp == 'extended':
prefix = '11'
else:
return (None, None)
else:
return (None, None)
key = '%s_%s' % (prefix, sliv)
if sch == 'pdsch':
if not key in self.nrPdschFromSliv.keys():
return (None, None)
else:
S, L = self.nrPdschFromSliv[key]
elif sch == 'pusch':
if not key in self.nrPuschFromSliv.keys():
return (None, None)
else:
S, L = self.nrPuschFromSliv[key]
else:
return (None, None)
return (S, L)
All valid (Prefix,S,L,SLIV) combinations can be found:
鏈接: https://pan.baidu.com/s/1hMJeD8jGF0Ldd_BoVqPY5A
提取碼: 712u