点击上方蓝字关注「网优小兵玩Python」
◆ ◆ ◆
换算原理
NR-ARFCN和实际频点计算公式如下:
FREF = FREF-Offs +ΔFGlobal (NREF –NREF-Offs)
栅格步长查询表:
NRB查询表:
GSCN计算公式:
各频段GSCN范围:
项目展示

通过中心频率计算频点:
通过中心频点计算频率:

#5G各种带宽在不同Scs下的RB数scs_15 = {'5':25,'10':52,'15':79,'20':106,'25':133 ,'30':160,'40':216,'50':270}scs_30 = {'5':11,'10':24,'15':38,'20':51,'25':65 ,'30':78,'40':106,'50':133,'60':162 ,'70':189,'80':217,'90':245,'100':273}scs_60 = {'10':11,'15':18,'20':24,'25':31 ,'30':38,'40':51,'50':65,'60':79 ,'70':93,'80':107,'90':121,'100':135 ,'200':264}scs_120 ={'50':32,'100':66,'200':132,'400':264}#---------------------GSCN输出----------------------def gscn_print(Fref): if Fref < 3000 and Fref > 0: n = int((Fref-0.15)/1.2) return 3*n if Fref < 24250 and Fref > 0: n = int((Fref-3000)/1.44) return 7499+n if Fref < 100000 and Fref > 0: n = int((Fref-24250.08)/17.28) return 22256+n return 'NA'#--------------------RB数据输出---------------------def rb_print(scs,bandwidth): if scs == 120: return scs_120[bandwidth] if scs == 60: return scs_60[bandwidth] if scs == 30: return scs_30[bandwidth] return scs_15[bandwidth]#--------------------SSB频点输出--------------------def ssb_print(Rb_number,Nref,scs,F_global): if Rb_number % 2 == 0: return Nref else: return Nref-(6*scs)/(F_global*10**3) #-----------------中心频点步长输出------------------def step_print(scs,band): if band == 'Band-41': if scs == 30: return 6 else: return 3 if band == 'Band-77' or band == 'Band-78' or band == 'Band-79': if scs == 30: return 2 else: return 1 return 20 #---------------------Band输出----------------------def Band_print(Nref): if Nref > 402000 and Nref < 405000: return 'Band-34' if Nref > 514000 and Nref < 524000: return 'Band-38' if Nref > 376000 and Nref < 384000: return 'Band-39' if Nref > 460000 and Nref < 480000: return 'Band-40' if Nref > 499200 and Nref < 537999: return 'Band-41' if Nref > 285400 and Nref < 286400: return 'Band-51' if Nref > 42200 and Nref < 440000: return 'Band-66' if Nref > 399000 and Nref < 404000: return 'Band-70' if Nref > 123400 and Nref < 130400: return 'Band-71' if Nref > 286400 and Nref < 303400: return 'Band-75' if Nref > 285400 and Nref < 286400: return 'Band-76' if Nref > 620000 and Nref < 653333: return 'Band-78' if Nref > 620000 and Nref < 680000: return 'Band-77' if Nref > 693334 and Nref < 733333: return 'Band-79' if Nref > 422000 and Nref < 434000: return 'Band-1' if Nref > 386000 and Nref < 398000: return 'Band-2' if Nref > 361000 and Nref < 376000: return 'Band-3' if Nref > 173800 and Nref < 178800: return 'Band-5' if Nref > 524000 and Nref < 538000: return 'Band-7' if Nref > 185000 and Nref < 192000: return 'Band-8' if Nref > 145800 and Nref < 149200: return 'Band-12' if Nref > 158200 and Nref < 164200: return 'Band-20' if Nref > 386000 and Nref < 399000: return 'Band-25' if Nref > 151600 and Nref < 160600: return 'Band-28' return 'NA'#---------------------频率转频点----------------------def Nref_point(): #判断用户输入的中心频率是否合法 while True: Fref = input('\n请输入中心频率:') try: if int(float(Fref)) > 0: break else: print('不合规请重新输入') except: print('不合规请重新输入') #判断用户输入的小区带宽是否合法 while True: bandwidth = input('请输入小区带宽(单位MHz):') if bandwidth.isdigit(): if int(bandwidth) in [5,15,20,25,30,40,50,60,70,80,90,100,200,400]: break else: print('不合规请重新输入') else: print('不合规请重新输入') #判断用户输入的子载波间隔是否合法 while True: Scs = input('请输入子载波间隔(单位KHz):') if Scs.isdigit(): if int(bandwidth) < 51 and int(Scs) == 15: break if int(bandwidth) < 101 and int(Scs) == 30: break if int(bandwidth) > 11 and int(bandwidth) < 101 and int(Scs) == 60: break if int(bandwidth) > 51 and int(bandwidth) <101 and int(Scs) == 120: break else: print('不合规请重新输入') else: print('不合规请重新输入') if int(Fref) < 100000: F_global = 60*10**-3 Fref_offs = 24250 Nref_offs = 2016667 if int(Fref) < 24250: F_global = 15*10**-3 Fref_offs = 3000 Nref_offs = 600000 if int(Fref) < 3000: F_global = 5*10**-3 Fref_offs = 0 Nref_offs = 0 Nref = (int(Fref)-Fref_offs)/F_global+Nref_offs #中心频点计算 print(Nref) Band = Band_print(Nref) #频带获取 print(Band) Step_size = int(step_print(int(Scs),Band)) #频点栅格步长获取 print(Step_size) #中心频点修正 while int(Nref) % Step_size != 0: Nref+=1 Rb_number = rb_print(int(Scs),str(int(bandwidth))) #NRB数据获取 SSB_ref = ssb_print(Rb_number,Nref,int(Scs),F_global) #SSB频点获取 Gscn = gscn_print(int(Fref)) #GSCN获取 print('\n计算结果如下:') print(' 中心频率:',Fref,'MHz') print(' 小区带宽:',bandwidth,'MHz') print(' 载波间隔:',Scs,'KHz') print(' NRB个数:',Rb_number) print(' 频点栅格:',int(F_global*10**3),'KHz') print(' 中心频点:',int(Nref)) print(' SSB频点:',int(SSB_ref)) print(' GSCN频点:',Gscn) print(' 小区频带:',Band) print(' 频点步长:',Step_size)#---------------------频点转频率----------------------def Fref_point(): #判断用户输入的中心频点是否合法 while True: Nref = input('\n请输入中心频点:') if Nref.isdigit(): if int(Nref) > 0: break else: print('不合规请重新输入') else: print('不合规请重新输入') #判断用户输入的小区带宽是否合法 while True: bandwidth = input('请输入小区带宽(单位MHz):') if bandwidth.isdigit(): if int(bandwidth) in [5,15,20,25,30,40,50,60,70,80,90,100,200,400]: break else: print('不合规请重新输入') else: print('不合规请重新输入') #判断用户输入的子载波间隔是否合法 while True: Scs = input('请输入子载波间隔(单位KHz):') if Scs.isdigit(): if int(bandwidth) < 51 and int(Scs) == 15: break if int(bandwidth) < 101 and int(Scs) == 30: break if int(bandwidth) > 11 and int(bandwidth) < 101 and int(Scs) == 60: break if int(bandwidth) > 51 and int(bandwidth) <101 and int(Scs) == 120: break else: print('不合规请重新输入') else: print('不合规请重新输入') if int(Nref) < 3279167: F_global = 60*10**-3 Fref_offs = 24250 Nref_offs = 2016667 if int(Nref) < 2016666: F_global = 15*10**-3 Fref_offs = 3000 Nref_offs = 600000 if int(Nref) < 599999: F_global = 5*10**-3 Fref_offs = 0 Nref_offs = 0 Band = Band_print(int(Nref)) #频带获取 Step_size = int(step_print(int(Scs),Band)) #频点栅格步长获取 Fref = int(Fref_offs + F_global*(int(Nref) - Nref_offs)) #中心频率计算 Rb_number = rb_print(int(Scs),str(int(bandwidth))) #NRB数据获取 SSB_ref = ssb_print(Rb_number,int(Nref),int(Scs),F_global) #SSB频点获取 Gscn = gscn_print(int(Fref)) #GSCN获取 print('\n计算结果如下:') print(' 中心频率:',Fref,'MHz') print(' 小区带宽:',bandwidth,'MHz') print(' 载波间隔:',Scs,'KHz') print(' NRB个数:',Rb_number) print(' 频点栅格:',int(F_global*10**3),'KHz') print(' 中心频点:',int(Nref)) print(' SSB频点:',int(SSB_ref)) print(' GSCN频点:',Gscn) print(' 小区频带:',Band) print(' 频点步长:',Step_size)#-----------------------程序入口------------------------ if __name__ == '__main__': print('5G子载波间隔与小区带宽对应规则:') print(' 15KHz间隔:5M 10M 15M 20M 25M 30M 40M 50M') print(' 30KHz间隔:5M 10M 15M 20M 25M 30M 40M 50M 60M 70M 80M 90M 100M') print(' 60KHz间隔:10M 15M 20M 25M 30M 40M 50M 60M 70M 80M 90M 100M 200M') print(' 120KHz间隔:50M 100M 200M 400M') while True: sele = input('\n请选择计算方式:1、频率转频点;2、频点转频率;3、退出程序:') if sele.isdigit(): if int(sele) == 3: print('\n欢迎再次使用!') exit(0) if int(sele) == 1: Nref_point() continue if int(sele) == 2: Fref_point() continue else: print('输入有误请重新输入') else: print('输入有误请重新输入'
网优苦短,我用Python

网优小工具传送门
自动扩容
号码归属地查询
站间距计算工具
图片相似度核查工具
载频配置统计工具
活动保障