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

Procedures to parse/make RIV(resource indication value):

def parseRiv(self, riv, N_BWP_Size):
        div = riv // N_BWP_Size
        rem = riv % N_BWP_Size
        
        L_RBs = [div + 1, N_BWP_Size + 1 - div]
        RB_start = [rem, N_BWP_Size - 1 - rem]
        #self.ngwin.logEdit.append('Info: RIV = %d, L_RBs = [%d,%d], RB_start = [%d,%d], N_BWP_Size = %d.' % (riv, L_RBs[0], L_RBs[1], RB_start[0], RB_start[1], N_BWP_Size))
        if L_RBs[0] >= 1 and L_RBs[0] <= (N_BWP_Size - RB_start[0]) and L_RBs[0] <= math.floor(N_BWP_Size / 2):
            return (L_RBs[0], RB_start[0])
        elif L_RBs[1] >= 1 and L_RBs[1] <= (N_BWP_Size - RB_start[1]) and L_RBs[1] > math.floor(N_BWP_Size / 2):
            return (L_RBs[1], RB_start[1])
        else:
            #invalid RIV
            return (None, None)
 def makeRiv(self, L_RBs, RB_start, N_BWP_Size):
        if L_RBs < 1 or L_RBs > (N_BWP_Size - RB_start):
            #self.ngwin.logEdit.append('ERROR: L_RBs = %d, RB_start = %d, N_BWP_Size = %d.' % (L_RBs, RB_start, N_BWP_Size))
            return None 
        
        if (L_RBs - 1) <= math.floor(N_BWP_Size / 2):
            riv = N_BWP_Size * (L_RBs - 1) + RB_start
        else:
            riv = N_BWP_Size * (N_BWP_Size - L_RBs + 1) + (N_BWP_Size - 1 - RB_start)
        
        return riv

Interpretation of locationAndBandwidth field in BWP:

L_RBs, RB_start= self.parseRiv(riv, 275)

Note 1: According to 38.213 12:

and the value range of locationAndBandwidth is 0~37949.

Note 2: locationAndBandwidth range [37675, 37812] is invalid, aka, L_RBs = 139, RB_start=[137, 274]. For example, let locationAndBandwidth=37675:

parseRiv: riv=37675, L_RBs=139, RB_start=274
ERROR: L_RBs = 139, RB_start = 274, N_BWP_Size = 275.

 

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