开始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 inOneGrp; //length=8
std::vector 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 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 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)