NG Toolset开发笔记--5GNR Resource Grid(30)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jeffyko/article/details/83110733

开始Data Structure设计工作。

2018/10/20号更新:

*NrCoreset0增加precoderGranularity参数;

*新增Dedicated Coreset and searchSpace章节;

(1)resource grids

struct NrCarrierGrid
{
	int band;	//can be n1~n256 as defined in 38.104 Table 5.2-1 and Table 5.2-2
	NrSubcarrierSpacing scs;		//can be 15k/30k/60k for FR1 and 60k/120k for FR2
	int bw;		//transmission bandwidth(MHz) as defined in 38.104 Table 5.3.5-1/Table 5.3.5-1 for FR1, and Table 5.3.2-2/Table 5.3.5-2 for FR2. Note 30K scs+5M is not supported!
	int numRb;	//N_RB as defined in 38.104 Table 5.3.2-1 and Table 5.3.2-2. Note 30K scs+5M is not supported!
	int minGuardBand;	//minimum guard band in PRB as defined in Table 5.3.3-1 and Table 5.3.3-2. Note 30K scs+5M is not supported!
};

struct NrSsbGrid
{
	NrSubcarirerSpacing ssbScs;	//can be 15k/30k for FR1 and 120k/240k for FR2, as defined in 38.104 Table 5.4.3.3-1 and Table 5.4.3.3-2
	int ssbPattern;	//can be case{A/B/C} for FR1 and case{D/E} for FR2, as defined in 38.104 Table 5.4.3.3-1 and Table 5.4.3.3-2
	int ssbMinGuardBandScs240k;	//minimum guard band in PRB as defined in Table Table 5.3.3-3.
	int kSsb;	//the k_SSB, value range is [0,31] for FR1 and [0,15] for FR2
	int nCrbSsb;	//the N_CRB_SSB,  related to offsetToPointA of FrequencyInfoDL-SIB IE
};

(2)SSB

struct NrSsbConfig
{
	std::vector<bool> inOneGrp;	//length=8
	std::vector<bool> grpPresence;	//length=8
	NrSsbPeriodicity period;	//periodicity of SSB
	int pci;	//NR cell PCI, can be 0~1007
	NrMibConfig mib;
};

enum NrSsbPeriodicity
{
	//{ms5, ms10, ms20, ms40, ms80, ms160}
}

struct NrMibConfig
{
	int sfn;	//SFN, can be 0~1023	
	NrDmrsTypeAPosition	dmrsTypeAPos;
	NrSubcarrierSpacing scsCommon;	//can be 15K/30K for FR1 and 60K/120K for FR2
	int rmsiCoreset0;	// can be 0~15, 4MSB of RMSI-PDCCH-Config
	int rmsiCss0;	// can be 0~15, 4LSB of RMSI-PDCCH-Config
};

enum NrDmrsTypeAPosition
{
	//{pos2, pos3}
}

enum NrSubcarrierSpacing
{
	//{15khz, 30khz, 60khz, 120khz, 240khz}
}

(3)Frame structure and UL/DL pattern

struct NrFrameStructure
{
    	int subfPerRf;	//constant, 10 subframes per frame
	int slotPerSubf;	//as defined in 38.211 Table 4.3.2-1 and Table 4.3.2-2
        int slotPerRf;	//nrSlotPerRf = nrSlotPerSubf * nrSubfPerRf
	int symbPerSlot;	//as defined in 38.211 Table 4.3.2-1 and Table 4.3.2-2
	int symbPerSubf;	//nrSymbPerSubf = nrSymbPerSlot * nrSlotPerSubf
	int symbPerRf;	//nrSymbPerRf =nrSymbPerSlot * nrSlotPerRf
};

struct NrTddUlDlConfig
{
	SubcarrierSpacing refScs;
	NrTddUlDlPattern pattern1;
	NrTddUlDlPattern pattern2;
};

struct NrTddUlDlPattern
{
	NrTddUlDlPatternPeriodicity period;
	int numDlSlots;
	int numDlSymbs; 
	int numUlSymbs;
	int numUlSlots;
};

enum NrTddUlDlPatternPeriodicity
{
	//{0.5ms, 0.625ms, 1ms, 1.25ms, 2ms, 2.5ms, 3ms, 4ms, 5ms, 10ms}
}

(4)initial active DL BWP Coreset 0 and CSS 0

struct NrCoreset0
{
	int id;	//=0 for CORESET0
	NrCyclicPrefix cp;	//cyclic prefix, default to normal CP?
        int multiplexingPattern;	//SSB and CORESET0 multiplexing pattern, can be 1/2/3
	int numRbs;	//can be 24/48/96 for coreset0
	int numSymbs;	//can be 1~3; 3 is supported only if dmrsTypeAPos = 3 
	int offset;	//as specified in 38.213 Table 13-1~Table 13-10
	NrCceRegMappingType mappingType;	//use interleaved mapping for CORESET0
	int regBundleSizeL;	//L=6 for CORESET0
	int interleaverSizeR;	//R=2 for CORESET0
	int nShift;	//=pci for CORESET0
        NrCoresetPrecoderGranularity precoderGranularity;	//=sameAsREG-bundle for CORESET0
};

enum NrCyclicPrefix
{
	//{normal, extended}
}

enum NrCceRegMappingType
{
	//{interleaved, nonInterleaved}
}

enum NrCoresetPrecoderGranularity
{
	//{sameAsREG-bundle, allContiguousRBs}
}

struct NrCss0
{
	int id;	//=0 for CSS0
	int coresetId;	//CORESET0
	int aggLevel;	//can be 4/8/16
	int numOfCandidates;	//as specified in 38.213 Table 10.1-1
};

(5) Dedicated Coreset and searchSpace

struct NrCoreset
{
	int id;	//coreset id, at most 3 Coresets per BWP(including common coreset0)
	std::vector<bool> freqResources;	//length=45, per 6 PRB bitmap
	int duration;	//can be 1~3; 3 is supported only if dmrsTypeAPos = 3 
	NrCceRegMappingType mappingType;
	int regBundleSizeL;
	int interleaverSizeR;
	int nShift;
	NrCoresetPrecoderGranularity percoderGranularity;
};
struct NrSearchSpace
{
	int id;	//search space id, at most 10 SSs per BWP(including common CSS0)
	int coresetId;	//assume coresetId=1 for CORESET1
	NrSearchSpacePeriodicity period;
	int offset;	//depends on period, valid value is [0, period-1]
	int duration;	//can be 1~2559, and maximum valid value=max(1, period-1)
	std::vector<bool> firstSymbs;	//length=14
	int aggLevel;	//can be 1/2/4/8/16
	int numOfCandidates;	//can be n1/n2/n3/n4/n5/n6/n8
	NrSearchSpaceType type;
	NrSearchSpaceDciFormats dciFormats;
};

enum NrSearchSpacePeriodicity
{
	//{sl1, sl2, sl4, sl5, sl8, sl10, sl16, sl20, sl40, sl80, sl160, sl320, sl640, sl1280, sl2560}
}

enum NrSearchSpaceType
{
	//{CSS, USS}
}

enum NrSearchSpaceDciFormats
{
	//{DCI00_DCI10, DCI01_DCI11}
}

(to be continued)

猜你喜欢

转载自blog.csdn.net/jeffyko/article/details/83110733
今日推荐