有时看问题时,需要确认下行NPDCCH是否有漏解周期的情况,手动计算时间稍有麻烦,所以搞了个python脚本来产生NPDCCH的解码周期,没考虑映射到非锚载波上的情形。
NPDCCH子帧的计算参数
NPDCCH的子帧计算是根据配置的Rmax、周期,并排除周期内的公共子帧来得到。亦即NPDCCH按照周期映射到除了同步信号、MIB、SIB1、SI以外的子帧上。
NPDCCH的参数
- NPDCCH 子帧最大重复次数Rmax
- 因子G 周期为Rmax*G
- 配置的offset,即每个周期内第一个NPDCCH子帧的起始位置
公共信道子帧参数
- 同步信号NPSS 固定在每个子帧5
- 同步信号NSSS 固定在每个偶数SFN的子帧9
- NPBCH固定发送在每10ms的子帧0,承载了MIB信息
- SIB1的配置根据PCI(小区ID)及MIB中SIB相关的ValueOfSchedule计算得到
- ValueOfSchedule可以得到SIB1(2560ms中)的repeat次数及size大小
- PCI和repeat次数得到哪些SFN(10ms周期)的subframe4用于发送SIB1信息
- SI的子帧通过SIB1中的信息得到,包括
- SI的个数列表
- 每个SI的周期、重复周期及传输数据块大小
- SI window大小
- offset 偏移
产生格式脚本
产生方式:修改脚本中公共信道信息,运行后产生txt文件
class cellInfoClass:
def __init__(self):
self.cellId = 32
self.valueOfSchedule = 2 # sechudle value % 3 = 0,1,2 equal to 4,8,16
self.SI_WinLen = 64 #in frames
self.SI_Offset = 3 #in frames
self.SI_ListCnt = 2
self.SI_Period = [512,512] #radio frames
self.SI_RepeatPatter = [8,8] #radioframes
self.SI_TbSize = [680,680]
self.npdcchRmax = 8
self.startSF = 2
self.npdcchPeriod = self.npdcchRmax*self.startSF
self.npdcchOffset = self.npdcchPeriod/8 #1/8
subTypeHash = {
}
subDpcchPerHash = {
}
subDpcchDataHash = {
}
def genSubframeFormat(cellInfo):
npdcchR = cellInfo.npdcchRmax #64 #1
startSF = cellInfo.startSF #1.5
npdcchPeriod = npdcchR*startSF #8
npdcchOffset = cellInfo.npdcchOffset
print("npdcch Rmax:%d,G:%f,Peroid:%f,offset:%f",npdcchR,startSF,npdcchPeriod,npdcchOffset)
#change configuration here
cellId = cellInfo.cellId #260
#SIB1 configuration
SIB1_RepeatNum = cellInfo.valueOfSchedule<<(2+cellInfo.valueOfSched