mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-14 05:00:31 +00:00
Compare commits
9 Commits
fix-tutori
...
nonzeroKSS
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eaa9f672bc | ||
|
|
9aaa3ed334 | ||
|
|
d63f43c69a | ||
|
|
367a03cd67 | ||
|
|
ba8bad1f2b | ||
|
|
183f9588b4 | ||
|
|
165b8d18d5 | ||
|
|
1d48718840 | ||
|
|
75fdfbe263 |
@@ -267,7 +267,7 @@ int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
|
||||
else
|
||||
pbch->pbch_a |= ((config->ssb_table.ssb_subcarrier_offset.value>>4)&1)<<29; //MSB of k_SSB (bit index 4)
|
||||
|
||||
LOG_D(PHY,"After extra byte: pbch_a = 0x%08x\n",pbch->pbch_a);
|
||||
LOG_D(PHY,"After extra byte: pbch_a = 0x%08x (ssb_subcarrier_offset %d)\n",pbch->pbch_a,config->ssb_table.ssb_subcarrier_offset.value);
|
||||
|
||||
// Payload interleaving
|
||||
|
||||
|
||||
@@ -72,8 +72,8 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
|
||||
ssb_start_symbol = ssb_start_symbol_abs % fp->symbols_per_slot; // start symbol wrt slot
|
||||
|
||||
// setting the first subcarrier
|
||||
fp->ssb_start_subcarrier = (12 * cfg->ssb_table.ssb_offset_point_a.value + ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset);
|
||||
LOG_D(PHY, "SSB first subcarrier %d (%d,%d)\n", fp->ssb_start_subcarrier,cfg->ssb_table.ssb_offset_point_a.value,ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset);
|
||||
fp->ssb_start_subcarrier = (12 * cfg->ssb_table.ssb_offset_point_a.value + (ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset>>cfg->ssb_config.scs_common.value));
|
||||
LOG_D(PHY, "SSB first subcarrier %d (%d,%d)\n", fp->ssb_start_subcarrier,cfg->ssb_table.ssb_offset_point_a.value,ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset>>cfg->ssb_config.scs_common.value);
|
||||
|
||||
LOG_D(PHY,"SS TX: frame %d, slot %d, start_symbol %d\n",frame,slot, ssb_start_symbol);
|
||||
nr_generate_pss(&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);
|
||||
|
||||
@@ -3886,7 +3886,7 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD
|
||||
|
||||
type0_PDCCH_CSS_config->n_0 = ((uint32_t)(big_o*(1<<scs_pdcch)) + (uint32_t)(type0_PDCCH_CSS_config->ssb_index*big_m))%num_slot_per_frame;
|
||||
type0_PDCCH_CSS_config->cset_start_rb = ssb_offset_point_a - type0_PDCCH_CSS_config->rb_offset;
|
||||
|
||||
LOG_D(NR_MAC,"Setting cset_start_rb to %d (%d,%d,%d)\n",type0_PDCCH_CSS_config->cset_start_rb,ssb_offset_point_a,scs_ssb,type0_PDCCH_CSS_config->rb_offset);
|
||||
}
|
||||
|
||||
void fill_coresetZero(NR_ControlResourceSet_t *coreset0, NR_Type0_PDCCH_CSS_config_t *type0_PDCCH_CSS_config) {
|
||||
|
||||
@@ -335,22 +335,20 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts,
|
||||
cfg->num_tlv++;
|
||||
|
||||
// SSB Table Configuration
|
||||
int scs_scaling = 1<<(cfg->ssb_config.scs_common.value);
|
||||
int scs_scaling = 1; // value for FR1 >= 3 GHz (15 kHz steps)
|
||||
if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA < 600000)
|
||||
scs_scaling = scs_scaling*3;
|
||||
scs_scaling = scs_scaling*3; // conversion for FR1 < 3GHz, 5 kHz steps)
|
||||
if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA > 2016666)
|
||||
scs_scaling = scs_scaling>>2;
|
||||
scs_scaling = scs_scaling>>2; // conversion for FR2, 60 kHz steps)
|
||||
uint32_t absolute_diff = (*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB - scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
|
||||
|
||||
RC.nrmac[Mod_idP]->ssb_SubcarrierOffset = absolute_diff%(12*scs_scaling);
|
||||
RC.nrmac[Mod_idP]->ssb_SubcarrierOffset = (absolute_diff*scs_scaling)%24;
|
||||
int sco = 31; // no SIB1
|
||||
if(get_softmodem_params()->sa) {
|
||||
sco = RC.nrmac[Mod_idP]->ssb_SubcarrierOffset;
|
||||
if(frequency_range == FR1)
|
||||
sco <<= cfg->ssb_config.scs_common.value; // 38.211 section 7.4.3.1 in FR1 it is expresses in terms of 15kHz SCS
|
||||
}
|
||||
|
||||
cfg->ssb_table.ssb_offset_point_a.value = absolute_diff/(12*scs_scaling) - 10; //absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
|
||||
cfg->ssb_table.ssb_offset_point_a.value = absolute_diff/(12*(scs_scaling<<cfg->ssb_config.scs_common.value)) - 10; //absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
|
||||
cfg->ssb_table.ssb_offset_point_a.tl.tag = NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG;
|
||||
cfg->num_tlv++;
|
||||
cfg->ssb_table.ssb_period.value = *scc->ssb_periodicityServingCell;
|
||||
|
||||
@@ -1121,6 +1121,7 @@ void fill_msg3_pusch_pdu(nfapi_nr_pusch_pdu_t *pusch_pdu,
|
||||
|
||||
pusch_pdu->mcs_index = mcsindex;
|
||||
pusch_pdu->pusch_data.tb_size = TBS;
|
||||
AssertFatal(mcsindex<10, "msg3 mcs got to 10 cannot get TBS = 7: pusch_pdu->rb_size %d, pusch_pdu->nr_of_symbols %d\n",pusch_pdu->rb_size,pusch_pdu->nr_of_symbols);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -134,7 +134,7 @@ void schedule_ssb(frame_t frame, sub_frame_t slot,
|
||||
dl_config_pdu->ssb_pdu.ssb_pdu_rel15.precoding_and_beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = beam_index;
|
||||
dl_req->nPDUs++;
|
||||
|
||||
LOG_D(MAC,"Scheduling ssb %d at frame %d and slot %d\n",i_ssb,frame,slot);
|
||||
LOG_D(NR_MAC,"Scheduling ssb %d at frame %d and slot %d, scoffset %d, offset_pointa %d\n",i_ssb,frame,slot,scoffset,offset_pointa);
|
||||
|
||||
}
|
||||
|
||||
@@ -198,7 +198,6 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
|
||||
const BIT_STRING_t *longBitmap = &scc->ssb_PositionsInBurst->choice.longBitmap;
|
||||
|
||||
uint16_t ssb_start_symbol;
|
||||
|
||||
switch (scc->ssb_PositionsInBurst->present) {
|
||||
case 1:
|
||||
// short bitmap (<3GHz) max 4 SSBs
|
||||
@@ -207,8 +206,9 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
|
||||
ssb_start_symbol = get_ssb_start_symbol(band,scs,i_ssb);
|
||||
// if start symbol is in current slot, schedule current SSB, fill VRB map and call get_type0_PDCCH_CSS_config_parameters
|
||||
if ((ssb_start_symbol/14) == rel_slot){
|
||||
LOG_D(NR_MAC,"Generating SSB in %d.%d (%d,%d)\n",frameP,slotP,offset_pointa,ssbSubcarrierOffset);
|
||||
schedule_ssb(frameP, slotP, scc, dl_req, i_ssb, ssbSubcarrierOffset, offset_pointa, (*(uint32_t*)cc->MIB_pdu.payload) & ((1<<24)-1));
|
||||
fill_ssb_vrb_map(cc, offset_pointa, ssb_start_symbol, CC_id);
|
||||
fill_ssb_vrb_map(cc, offset_pointa, ssbSubcarrierOffset, ssb_start_symbol, CC_id);
|
||||
if (get_softmodem_params()->sa == 1) {
|
||||
get_type0_PDCCH_CSS_config_parameters(&gNB->type0_PDCCH_CSS_config[i_ssb],
|
||||
frameP,
|
||||
@@ -236,7 +236,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
|
||||
// if start symbol is in current slot, schedule current SSB, fill VRB map and call get_type0_PDCCH_CSS_config_parameters
|
||||
if ((ssb_start_symbol/14) == rel_slot){
|
||||
schedule_ssb(frameP, slotP, scc, dl_req, i_ssb, ssbSubcarrierOffset, offset_pointa, (*(uint32_t*)cc->MIB_pdu.payload) & ((1<<24)-1));
|
||||
fill_ssb_vrb_map(cc, offset_pointa, ssb_start_symbol, CC_id);
|
||||
fill_ssb_vrb_map(cc, offset_pointa, ssbSubcarrierOffset,ssb_start_symbol, CC_id);
|
||||
if (get_softmodem_params()->sa == 1) {
|
||||
get_type0_PDCCH_CSS_config_parameters(&gNB->type0_PDCCH_CSS_config[i_ssb],
|
||||
frameP,
|
||||
@@ -265,7 +265,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
|
||||
// if start symbol is in current slot, schedule current SSB, fill VRB map and call get_type0_PDCCH_CSS_config_parameters
|
||||
if ((ssb_start_symbol/14) == rel_slot){
|
||||
schedule_ssb(frameP, slotP, scc, dl_req, i_ssb, ssbSubcarrierOffset, offset_pointa, (*(uint32_t*)cc->MIB_pdu.payload) & ((1<<24)-1));
|
||||
fill_ssb_vrb_map(cc, offset_pointa, ssb_start_symbol, CC_id);
|
||||
fill_ssb_vrb_map(cc, offset_pointa, ssbSubcarrierOffset, ssb_start_symbol, CC_id);
|
||||
const NR_TDD_UL_DL_Pattern_t *tdd = &scc->tdd_UL_DL_ConfigurationCommon->pattern1;
|
||||
const int n_slots_frame = nr_slots_per_frame[*scc->ssbSubcarrierSpacing];
|
||||
// FR2 is only TDD, to be fixed for flexible TDD
|
||||
@@ -306,7 +306,7 @@ void schedule_nr_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframe
|
||||
//----------------------------------------
|
||||
}
|
||||
|
||||
void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, uint16_t symStart, int CC_id) {
|
||||
void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, int ssb_subcarrier_offset, uint16_t symStart, int CC_id) {
|
||||
|
||||
AssertFatal(*cc->ServingCellConfigCommon->ssbSubcarrierSpacing !=
|
||||
NR_SubcarrierSpacing_kHz240,
|
||||
@@ -314,7 +314,9 @@ void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, uint16_t symStart
|
||||
|
||||
uint16_t *vrb_map = cc[CC_id].vrb_map;
|
||||
|
||||
for (int rb = 0; rb < 20; rb++)
|
||||
int extra_prb = ssb_subcarrier_offset > 0 ? 1 : 0;
|
||||
LOG_D(NR_MAC,"Filling SSB positions in VRBMAP starting at rb %d for %d PRBs\n",rbStart,(20+extra_prb));
|
||||
for (int rb = 0; rb < (20+extra_prb); rb++)
|
||||
vrb_map[rbStart + rb] = SL_to_bitmap(symStart, 4);
|
||||
|
||||
}
|
||||
@@ -405,9 +407,10 @@ uint32_t schedule_control_sib1(module_id_t module_id,
|
||||
rbSize, nrOfSymbols, N_PRB_DMRS * dmrs_length,0, 0,1) >> 3;
|
||||
} while (TBS < gNB_mac->sched_ctrlCommon->num_total_bytes);
|
||||
|
||||
AssertFatal(TBS>=gNB_mac->sched_ctrlCommon->num_total_bytes,"Couldn't allocate enough resources for %d bytes in SIB1 PDSCH\n",
|
||||
gNB_mac->sched_ctrlCommon->num_total_bytes);
|
||||
AssertFatal(TBS>=gNB_mac->sched_ctrlCommon->num_total_bytes,"Couldn't allocate enough resources for %d bytes in SIB1 PDSCH (start PRB %d)\n",
|
||||
gNB_mac->sched_ctrlCommon->num_total_bytes,rbStart);
|
||||
|
||||
LOG_D(NR_MAC,"Allocated PDSCH for SIB1 (rbStart %d (absolute), rbSize %d, startSymbolIndex %d, nrOfSymbols %d)\n",rbStart,rbSize,startSymbolIndex,nrOfSymbols);
|
||||
gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize = rbSize;
|
||||
gNB_mac->sched_ctrlCommon->sched_pdsch.rbStart = 0;
|
||||
|
||||
|
||||
@@ -434,7 +434,7 @@ int binomial(int n, int k);
|
||||
|
||||
bool is_xlsch_in_slot(uint64_t bitmap, sub_frame_t slot);
|
||||
|
||||
void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, uint16_t symStart, int CC_id);
|
||||
void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, int ssb_subcarrier_offset, uint16_t symStart, int CC_id);
|
||||
|
||||
|
||||
/* \brief Function to indicate a received SDU on ULSCH.
|
||||
|
||||
@@ -226,17 +226,16 @@ uint8_t do_MIB_NR(gNB_RRC_INST *rrc,uint32_t frame) {
|
||||
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 scs_scaling = 1<<*scc->ssbSubcarrierSpacing;
|
||||
int scs_scaling = 1; // this is the default value for FR1 > 3 GHz
|
||||
if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA < 600000)
|
||||
scs_scaling = scs_scaling*3;
|
||||
scs_scaling = scs_scaling*3; // this is FR1 < 3 GHz
|
||||
if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA > 2016666)
|
||||
scs_scaling = scs_scaling>>2;
|
||||
scs_scaling = scs_scaling>>2; // this is FR2
|
||||
uint32_t absolute_diff = (*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB - scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
|
||||
int ssb_subcarrier_offset = 31; // default value for NSA
|
||||
if (get_softmodem_params()->sa) {
|
||||
ssb_subcarrier_offset = absolute_diff%(12*scs_scaling);
|
||||
if(frequency_range == FR1)
|
||||
ssb_subcarrier_offset <<= *scc->ssbSubcarrierSpacing;
|
||||
ssb_subcarrier_offset = (absolute_diff*scs_scaling)%24;
|
||||
LOG_I(NR_RRC,"Set ssb_subcarrier_offset to %d, absolute_diff %d, scs_scaling %d\n",ssb_subcarrier_offset,absolute_diff, scs_scaling);
|
||||
}
|
||||
mib->message.choice.mib->ssb_SubcarrierOffset = ssb_subcarrier_offset&15;
|
||||
|
||||
@@ -294,6 +293,9 @@ uint8_t do_MIB_NR(gNB_RRC_INST *rrc,uint32_t frame) {
|
||||
mib->message.choice.mib->cellBarred = NR_MIB__cellBarred_notBarred;
|
||||
// assign_enum
|
||||
mib->message.choice.mib->intraFreqReselection = NR_MIB__intraFreqReselection_notAllowed;
|
||||
|
||||
LOG_I(NR_RRC,"MIB cellBarred %d intraFreqReselection %d\n",mib->message.choice.mib->cellBarred,mib->message.choice.mib->intraFreqReselection);
|
||||
|
||||
//encode MIB to data
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_BCCH_BCH_Message,
|
||||
NULL,
|
||||
|
||||
Reference in New Issue
Block a user