adressing the comments
This commit is contained in:
@@ -706,3 +706,27 @@ void SLIV2SL(int SLIV,int *S,int *L) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int get_ssb_subcarrier_offset(uint32_t absoluteFrequencySSB, uint32_t absoluteFrequencyPointA)
|
||||||
|
{
|
||||||
|
uint32_t absolute_diff = (absoluteFrequencySSB - absoluteFrequencyPointA);
|
||||||
|
const int scaling_5khz = absoluteFrequencyPointA < 600000 ? 3 : 1;
|
||||||
|
return ((absolute_diff / scaling_5khz) % 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB,
|
||||||
|
uint32_t absoluteFrequencyPointA,
|
||||||
|
int ssbSubcarrierSpacing,
|
||||||
|
int frequency_range)
|
||||||
|
{
|
||||||
|
uint32_t absolute_diff = (absoluteFrequencySSB - absoluteFrequencyPointA);
|
||||||
|
const int scaling_5khz = absoluteFrequencyPointA < 600000 ? 3 : 1;
|
||||||
|
int sco = get_ssb_subcarrier_offset(absoluteFrequencySSB, absoluteFrequencyPointA);
|
||||||
|
const int scs_scaling = frequency_range == FR2 ? 1 << (ssbSubcarrierSpacing - 2) : 1 << ssbSubcarrierSpacing;
|
||||||
|
const int scaled_abs_diff = absolute_diff / scaling_5khz;
|
||||||
|
const int ssb_offset_point_a =
|
||||||
|
(scaled_abs_diff - sco) / 12
|
||||||
|
- 10 * scs_scaling; // absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
|
||||||
|
AssertFatal(ssb_offset_point_a % scs_scaling == 0, "PRB offset %d can create frequency offset\n", ssb_offset_point_a);
|
||||||
|
AssertFatal(sco % scs_scaling == 0, "ssb offset %d can create frequency offset\n", sco);
|
||||||
|
return ssb_offset_point_a;
|
||||||
|
}
|
||||||
|
|||||||
@@ -101,7 +101,11 @@ void get_samplerate_and_bw(int mu,
|
|||||||
unsigned int *samples_per_frame,
|
unsigned int *samples_per_frame,
|
||||||
double *tx_bw,
|
double *tx_bw,
|
||||||
double *rx_bw);
|
double *rx_bw);
|
||||||
|
uint32_t get_ssb_offset_to_pointA(uint32_t absoluteFrequencySSB,
|
||||||
|
uint32_t absoluteFrequencyPointA,
|
||||||
|
int ssbSubcarrierSpacing,
|
||||||
|
int frequency_range);
|
||||||
|
int get_ssb_subcarrier_offset(uint32_t absoluteFrequencySSB, uint32_t absoluteFrequencyPointA);
|
||||||
#define CEILIDIV(a,b) ((a+b-1)/b)
|
#define CEILIDIV(a,b) ((a+b-1)/b)
|
||||||
#define ROUNDIDIV(a,b) (((a<<1)+b)/(b<<1))
|
#define ROUNDIDIV(a,b) (((a<<1)+b)/(b<<1))
|
||||||
|
|
||||||
|
|||||||
@@ -352,7 +352,8 @@ void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_Antenn
|
|||||||
|
|
||||||
// SSB Table Configuration
|
// SSB Table Configuration
|
||||||
|
|
||||||
cfg->ssb_table.ssb_offset_point_a.value = get_ssb_offset_to_pointA(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
|
cfg->ssb_table.ssb_offset_point_a.value =
|
||||||
|
get_ssb_offset_to_pointA(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
|
||||||
scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA,
|
scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA,
|
||||||
*scc->ssbSubcarrierSpacing,
|
*scc->ssbSubcarrierSpacing,
|
||||||
frequency_range);
|
frequency_range);
|
||||||
@@ -361,7 +362,8 @@ void config_common(gNB_MAC_INST *nrmac, int pdsch_AntennaPorts, int pusch_Antenn
|
|||||||
cfg->ssb_table.ssb_period.value = *scc->ssb_periodicityServingCell;
|
cfg->ssb_table.ssb_period.value = *scc->ssb_periodicityServingCell;
|
||||||
cfg->ssb_table.ssb_period.tl.tag = NFAPI_NR_CONFIG_SSB_PERIOD_TAG;
|
cfg->ssb_table.ssb_period.tl.tag = NFAPI_NR_CONFIG_SSB_PERIOD_TAG;
|
||||||
cfg->num_tlv++;
|
cfg->num_tlv++;
|
||||||
cfg->ssb_table.ssb_subcarrier_offset.value = get_ssb_subcarrier_offset(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
|
cfg->ssb_table.ssb_subcarrier_offset.value =
|
||||||
|
get_ssb_subcarrier_offset(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
|
||||||
scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
|
scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
|
||||||
cfg->ssb_table.ssb_subcarrier_offset.tl.tag = NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG;
|
cfg->ssb_table.ssb_subcarrier_offset.tl.tag = NFAPI_NR_CONFIG_SSB_SUBCARRIER_OFFSET_TAG;
|
||||||
cfg->num_tlv++;
|
cfg->num_tlv++;
|
||||||
|
|||||||
@@ -1642,8 +1642,6 @@ NR_BCCH_BCH_Message_t *get_new_MIB_NR(const NR_ServingCellConfigCommon_t *scc)
|
|||||||
mib->message.choice.mib->spare.bits_unused = 7; // This makes a spare of 1 bits
|
mib->message.choice.mib->spare.bits_unused = 7; // This makes a spare of 1 bits
|
||||||
|
|
||||||
AssertFatal(scc->ssbSubcarrierSpacing != NULL, "scc->ssbSubcarrierSpacing is null\n");
|
AssertFatal(scc->ssbSubcarrierSpacing != NULL, "scc->ssbSubcarrierSpacing is null\n");
|
||||||
int band = *scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
|
|
||||||
frequency_range_t frequency_range = band < 100 ? FR1 : FR2;
|
|
||||||
int ssb_subcarrier_offset = 31; // default value for NSA
|
int ssb_subcarrier_offset = 31; // default value for NSA
|
||||||
if (get_softmodem_params()->sa) {
|
if (get_softmodem_params()->sa) {
|
||||||
ssb_subcarrier_offset = get_ssb_subcarrier_offset(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
|
ssb_subcarrier_offset = get_ssb_subcarrier_offset(*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB,
|
||||||
|
|||||||
Reference in New Issue
Block a user