diff --git a/openair1/PHY/NR_REFSIG/nr_gold_ue.c b/openair1/PHY/NR_REFSIG/nr_gold_ue.c index 6c48cf1b73..abcdae5a33 100644 --- a/openair1/PHY/NR_REFSIG/nr_gold_ue.c +++ b/openair1/PHY/NR_REFSIG/nr_gold_ue.c @@ -103,7 +103,7 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue, } void nr_init_pusch_dmrs(PHY_VARS_NR_UE* ue, - uint16_t *N_n_scid, + uint16_t N_n_scid, uint8_t n_scid) { uint32_t x1, x2, n; @@ -116,7 +116,7 @@ void nr_init_pusch_dmrs(PHY_VARS_NR_UE* ue, for (symb=0; symbsymbols_per_slot; symb++) { reset = 1; - x2 = ((1<<17) * (fp->symbols_per_slot*slot+symb+1) * ((N_n_scid[n_scid]<<1)+1) +((N_n_scid[n_scid]<<1)+n_scid)); + x2 = ((1<<17) * (fp->symbols_per_slot*slot+symb+1) * ((N_n_scid<<1)+1) +((N_n_scid<<1)+n_scid)); for (n=0; nNid_cell,fp->Nid_cell}; - int n_scid = 0; // This quantity is indicated by higher layer parameter dmrs-SeqInitialization - nr_init_pusch_dmrs(ue, N_n_scid, n_scid); + for (int i=0; i<2; i++) { + ue->scramblingID_ulsch[i]=fp->Nid_cell; + nr_init_pusch_dmrs(ue, ue->scramblingID_ulsch[i], i); + } + // we also need to take into account the shift by samples_per_frame in case the if is true if (ue->ssb_offset < sync_pos_frame){ diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c index 41cf9c2ffa..e019077efd 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c @@ -32,6 +32,7 @@ #include #include "PHY/NR_REFSIG/dmrs_nr.h" #include "PHY/NR_REFSIG/ptrs_nr.h" +#include "PHY/NR_REFSIG/refsig_defs_ue.h" #include "PHY/NR_UE_TRANSPORT/nr_transport_ue.h" #include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h" #include "PHY/MODULATION/nr_modulation.h" @@ -220,6 +221,11 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, /////////////////////////DMRS Modulation///////////////////////// /////////// + if(pusch_pdu->ul_dmrs_scrambling_id != UE->scramblingID_ulsch[pusch_pdu->scid]) { + UE->scramblingID_ulsch[pusch_pdu->scid] = pusch_pdu->ul_dmrs_scrambling_id; + nr_init_pusch_dmrs(UE, pusch_pdu->scid, pusch_pdu->ul_dmrs_scrambling_id); + } + uint32_t ***pusch_dmrs = UE->nr_gold_pusch_dmrs[slot]; uint16_t n_dmrs = (pusch_pdu->bwp_start + start_rb + nb_rb)*((dmrs_type == pusch_dmrs_type1) ? 6:4); int16_t mod_dmrs[n_dmrs<<1] __attribute((aligned(16))); diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index b0568ebff5..e2777cfd4b 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -861,6 +861,9 @@ typedef struct { // Scrambling IDs used in PDSCH DMRS uint16_t scramblingID_dlsch[2]; + // Scrambling IDs used in PUSCH DMRS + uint16_t scramblingID_ulsch[2]; + /// PDCCH DMRS uint32_t ***nr_gold_pdcch[NUMBER_OF_CONNECTED_eNB_MAX]; diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 44bd8f0ce3..eaafbebbbf 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -732,6 +732,11 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, ? pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup : pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup; } + pusch_config_pdu->scid = 0; + pusch_config_pdu->ul_dmrs_scrambling_id = mac->physCellId; + if(*dci_format == NR_UL_DCI_FORMAT_0_1) + pusch_config_pdu->scid = dci->dmrs_sequence_initialization.val; + /* TRANSFORM PRECODING ------------------------------------------------------------------------------------------*/ if (pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled) { @@ -757,6 +762,14 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, LOG_D(NR_MAC,"TRANSFORM PRECODING IS ENABLED. CDM groups: %d, U: %d \n", pusch_config_pdu->num_dmrs_cdm_grps_no_data, pusch_config_pdu->dfts_ofdm.low_papr_group_number); } + else { + if (pusch_config_pdu->scid == 0 && + NR_DMRS_ulconfig->transformPrecodingDisabled->scramblingID0) + pusch_config_pdu->ul_dmrs_scrambling_id = *NR_DMRS_ulconfig->transformPrecodingDisabled->scramblingID0; + if (pusch_config_pdu->scid == 1 && + NR_DMRS_ulconfig->transformPrecodingDisabled->scramblingID1) + pusch_config_pdu->ul_dmrs_scrambling_id = *NR_DMRS_ulconfig->transformPrecodingDisabled->scramblingID1; + } /* TRANSFORM PRECODING --------------------------------------------------------------------------------------------------------*/