diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 227e8d8..6cd7151 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -661,7 +661,8 @@ function main() {
   if [ "$SIMUS_PHY" = "1" ] ; then
     echo_info "Compiling physical unitary tests simulators"
     # TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
-    simlist="dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim"
+    #simlist="dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim"
+    simlist="nr_ulsim nr_dlsim"
     for f in $simlist ; do
       compilations \
         phy_simulators $f \
diff --git a/executables/nr-ru.c b/executables/nr-ru.c
index b96fc9e..4ab9fce 100644
--- a/executables/nr-ru.c
+++ b/executables/nr-ru.c
@@ -2330,7 +2330,7 @@ void RCconfig_RU(void)
       RC.ru[j]->nb_tx                             = *(RUParamList.paramarray[j][RU_NB_TX_IDX].uptr);
       RC.ru[j]->nb_rx                             = *(RUParamList.paramarray[j][RU_NB_RX_IDX].uptr);
       RC.ru[j]->att_tx                            = *(RUParamList.paramarray[j][RU_ATT_TX_IDX].uptr);
-      RC.ru[j]->att_rx                            = *(RUParamList.paramarray[j][RU_ATT_RX_IDX].uptr);
+      RC.ru[j]->att_rx                            = 4;//*(RUParamList.paramarray[j][RU_ATT_RX_IDX].uptr);
     }// j=0..num_rus
   } else {
     RC.nb_RU = 0;
diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c
index fff1245..66d6e09 100644
--- a/openair1/PHY/INIT/nr_init.c
+++ b/openair1/PHY/INIT/nr_init.c
@@ -403,12 +403,47 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,
   gNB->mac_enabled   = 1;
   fp->dl_CarrierFreq = 3500000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value);
   fp->ul_CarrierFreq = 3500000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000);
-  fp->threequarter_fs= 0;
+  fp->threequarter_fs= 1;
   nr_init_frame_parms(gNB_config, fp);
   gNB->configured    = 1;
   LOG_I(PHY,"gNB configured\n");
 }
 
+void nr_phy_config_request_sim_ulsim(PHY_VARS_gNB *gNB,
+                               int N_RB_DL,
+                               int N_RB_UL,
+                               int mu,
+                               int Nid_cell,
+                               uint64_t position_in_burst,
+                               uint8_t threequarter_fs)
+{
+  NR_DL_FRAME_PARMS *fp                                   = &gNB->frame_parms;
+  nfapi_nr_config_request_t *gNB_config                   = &gNB->gNB_config;
+  //overwrite for new NR parameters
+  gNB_config->nfapi_config.rf_bands.rf_band[0]            = 78;
+  gNB_config->nfapi_config.nrarfcn.value                  = 620000;
+  gNB_config->subframe_config.numerology_index_mu.value   = mu;
+  gNB_config->subframe_config.duplex_mode.value           = TDD;
+  gNB_config->rf_config.dl_carrier_bandwidth.value        = N_RB_DL;
+  gNB_config->rf_config.ul_carrier_bandwidth.value        = N_RB_UL;
+  gNB_config->sch_config.half_frame_index.value           = 0;
+  gNB_config->sch_config.ssb_subcarrier_offset.value      = 0;
+  gNB_config->sch_config.n_ssb_crb.value                  = (N_RB_DL-20);
+  gNB_config->sch_config.ssb_subcarrier_offset.value      = 0;
+  gNB_config->sch_config.physical_cell_id.value           = Nid_cell;
+  gNB_config->sch_config.ssb_scg_position_in_burst.value  = position_in_burst;
+  gNB_config->subframe_config.dl_cyclic_prefix_type.value = (fp->Ncp == NORMAL) ? NFAPI_CP_NORMAL : NFAPI_CP_EXTENDED;
+
+  gNB->mac_enabled   = 1;
+  fp->dl_CarrierFreq = 3500000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value);
+  fp->ul_CarrierFreq = 3500000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000);
+  fp->threequarter_fs= threequarter_fs;
+  nr_init_frame_parms(gNB_config, fp);
+  nr_dump_frame_parms(fp);
+  gNB->configured    = 1;
+  LOG_I(PHY,"gNB configured\n");
+}
+
 
 void nr_phy_config_request(NR_PHY_Config_t *phy_config)
 {
diff --git a/openair1/PHY/INIT/phy_init.h b/openair1/PHY/INIT/phy_init.h
index 7e0500b..4209413 100644
--- a/openair1/PHY/INIT/phy_init.h
+++ b/openair1/PHY/INIT/phy_init.h
@@ -387,6 +387,7 @@ void nr_dump_frame_parms(NR_DL_FRAME_PARMS *frame_parms);
 int phy_init_nr_gNB(PHY_VARS_gNB *gNB, unsigned char is_secondary_gNB, unsigned char abstraction_flag);
 void nr_phy_config_request(NR_PHY_Config_t *gNB);
 void nr_phy_config_request_sim(PHY_VARS_gNB *gNB,int N_RB_DL,int N_RB_UL,int mu,int Nid_cell,uint64_t position_in_burst);
+void nr_phy_config_request_sim_ulsim(PHY_VARS_gNB *gNB,int N_RB_DL,int N_RB_UL,int mu,int Nid_cell,uint64_t position_in_burst, uint8_t threequarter_fs);
 void phy_free_nr_gNB(PHY_VARS_gNB *gNB);
 int l1_north_init_gNB(void);
 void init_nr_transport(PHY_VARS_gNB *gNB);
diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
index 0656091..9e5fcb1 100644
--- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
@@ -140,7 +140,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
                                          ul_ch,
                                          8);
       pil+=2;
-      re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
+      re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
       rxF   = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
       //for (int i= 0; i<8; i++)
       //printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
@@ -156,7 +156,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
                                          ul_ch,
                                          8);
       pil+=2;
-      re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
+      re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
       rxF   = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
       //printf("ul_ch addr %p\n",ul_ch);
       
@@ -175,7 +175,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
       //printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
       
       pil+=2;
-      re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
+      re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
       rxF   = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
       ul_ch+=8;
 
@@ -193,7 +193,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
                                            8);
 
         pil+=2;
-        re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
+        re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
         rxF   = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
       
         ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
@@ -206,7 +206,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
                                            ul_ch,
                                            8);
         pil+=2;
-        re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
+        re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
         rxF   = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
         ul_ch+=8;
 
@@ -227,7 +227,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
       //printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
 
       pil+=2;
-      re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
+      re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
       rxF   = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
              
       ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15);
@@ -242,7 +242,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
                                          8);
                                          
       pil+=2;
-      re_offset = (re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
+      re_offset = (re_offset+2)%gNB->frame_parms.ofdm_symbol_size;//(re_offset+2)&(gNB->frame_parms.ofdm_symbol_size-1);
       rxF   = (int16_t *)&rxdataF[aarx][(symbol_offset+nushift+re_offset)];
       ul_ch+=8;
       
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch.c
index 2bc623a..e78842d 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch.c
@@ -54,5 +54,8 @@ void nr_ulsch_unscrambling(int16_t* llr,
     }
     if (((s>>(i&0x1f))&1)==1)
       llr[i] = -llr[i];
+
+    //if (i<10)
+      //printf("llr[%d] = %d\n", i, llr[i]);
   }
 }
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
index 19ca123..68a54b3 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c
@@ -346,7 +346,7 @@ uint32_t nr_ulsch_decoding(PHY_VARS_gNB *phy_vars_gNB,
 
   G = nr_get_G(nb_rb, number_symbols, nb_re_dmrs, length_dmrs, Qm, n_layers);
 
-  LOG_D(PHY,"ULSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_symb_sch %d nb_rb %d\n",harq_pid,A,G, mcs, n_layers, nb_symb_sch,nb_rb);
+  LOG_I(PHY,"ULSCH Decoding, harq_pid %d TBS %d G %d mcs %d Nl %d nb_symb_sch %d nb_rb %d\n",harq_pid,A,G, mcs, n_layers, nb_symb_sch,nb_rb);
 
   if (harq_process->round == 0) {
 
diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
index e1b3c5c..0369e73 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
@@ -365,9 +365,9 @@ void nr_ulsch_channel_level(int **ul_ch_estimates_ext,
       ul_ch128=(__m128i *)&ul_ch_estimates_ext[(aatx<<1)+aarx][symbol*nb_rb*12];
 
       for (rb = 0; rb < nb_rb; rb++) {
-        avg128U = _mm_add_epi32(avg128U, _mm_srai_epi32(_mm_madd_epi16(ul_ch128[0], ul_ch128[0]), x));
-        avg128U = _mm_add_epi32(avg128U, _mm_srai_epi32(_mm_madd_epi16(ul_ch128[1], ul_ch128[1]), x));
-        avg128U = _mm_add_epi32(avg128U, _mm_srai_epi32(_mm_madd_epi16(ul_ch128[2], ul_ch128[2]), x));
+        avg128U = _mm_add_epi32(avg128U, _mm_srai_epi16(_mm_madd_epi16(ul_ch128[0], ul_ch128[0]), x));
+        avg128U = _mm_add_epi32(avg128U, _mm_srai_epi16(_mm_madd_epi16(ul_ch128[1], ul_ch128[1]), x));
+        avg128U = _mm_add_epi32(avg128U, _mm_srai_epi16(_mm_madd_epi16(ul_ch128[2], ul_ch128[2]), x));
         ul_ch128+=3;
       }
 
@@ -977,6 +977,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
   uint32_t nb_re_pusch, bwp_start_subcarrier;
   int avgs;
   int avg[4];
+  char filename[40];
 
   pilots = 0;
   first_symbol_flag = 0;
@@ -1062,6 +1063,16 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
                                 rel15_ul->number_rbs,
                                 gNB->pusch_vars[UE_id]->log2_maxh);
 
+  if (symbol == 3){
+    printf("log2_maxh = %d\n", gNB->pusch_vars[UE_id]->log2_maxh);
+    sprintf(filename,"rxdataF_gnb_ext.m");
+    LOG_M(filename,"rxdataF_gnb_v",&gNB->pusch_vars[UE_id]->rxdataF_ext[0][symbol*NR_NB_SC_PER_RB*rel15_ul->number_rbs],NR_NB_SC_PER_RB*rel15_ul->number_rbs, 1, 1);
+    sprintf(filename,"rxdataF_comp_gnb.m");
+    LOG_M(filename,"rxdataF_comp_gnb_v",&gNB->pusch_vars[UE_id]->rxdataF_comp[0][symbol*NR_NB_SC_PER_RB*rel15_ul->number_rbs],NR_NB_SC_PER_RB*rel15_ul->number_rbs, 1, 1);
+    sprintf(filename,"ul_ch_est_ext_gnb.m");
+    LOG_M(filename,"ul_ch_est_ext_gnb_v",&gNB->pusch_vars[UE_id]->ul_ch_estimates_ext[0][symbol*NR_NB_SC_PER_RB*rel15_ul->number_rbs], NR_NB_SC_PER_RB*rel15_ul->number_rbs, 1, 1);
+  }
+
 #ifdef NR_SC_FDMA
   nr_idft(&((uint32_t*)gNB->pusch_vars[UE_id]->rxdataF_ext[0])[symbol * rel15_ul->number_rbs * NR_NB_SC_PER_RB], nb_re_pusch);
 #endif
diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
index 79b5c8d..c96a9a6 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
@@ -155,6 +155,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
   uint16_t n_tx=1, n_rx=1;
   int32_t median[16];
   uint32_t len;
+  char filename[40];
   
   switch (type) {
   case SI_PDSCH:
@@ -592,6 +593,17 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
 
     }
 
+  if (symbol == 3){
+    printf("log2_maxh = %d\n", pdsch_vars[eNB_id]->log2_maxh);
+    sprintf(filename,"rxdataF_ue_ext.m");
+    LOG_M(filename,"rxdataF_ue_ext_v",&pdsch_vars[eNB_id]->rxdataF_ext[0][symbol*NR_NB_SC_PER_RB*nb_rb],NR_NB_SC_PER_RB*nb_rb, 1, 1);
+    sprintf(filename,"rxdataF_comp_ue.m");
+    LOG_M(filename,"rxdataF_comp_ue_v",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*NR_NB_SC_PER_RB*nb_rb],NR_NB_SC_PER_RB*nb_rb, 1, 1);
+    sprintf(filename,"dl_ch_est_ext_ue.m");
+    LOG_M(filename,"dl_ch_est_ext_ue",&pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][symbol*NR_NB_SC_PER_RB*nb_rb], NR_NB_SC_PER_RB*nb_rb, 1, 1);
+  }
+
+
 #if UE_TIMING_TRACE
     stop_meas(&ue->generic_stat_bis[ue->current_thread_id[nr_tti_rx]][slot]);
 #if DISABLE_LOG_X
@@ -636,6 +648,15 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
     dl_ch_mag_ptr = pdsch_vars[eNB_id_i]->dl_ch_mag0;
     //i_mod should have been passed as a parameter
   }
+
+
+  if (symbol == 3){
+    printf("log2_maxh = %d\n", pdsch_vars[eNB_id]->log2_maxh);
+    sprintf(filename,"rxdataF_comp_ue.m");
+    LOG_M(filename,"rxdataF_comp_ue_v",&pdsch_vars[eNB_id]->rxdataF_comp0[0][symbol*NR_NB_SC_PER_RB*nb_rb],NR_NB_SC_PER_RB*nb_rb, 1, 1);
+    sprintf(filename,"dl_ch_est_ext_ue.m");
+    LOG_M(filename,"dl_ch_est_ext_ue",&pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][symbol*NR_NB_SC_PER_RB*nb_rb], NR_NB_SC_PER_RB*nb_rb, 1, 1);
+  }
   
 #if UE_TIMING_TRACE
     stop_meas(&ue->generic_stat_bis[ue->current_thread_id[nr_tti_rx]][slot]);
diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c
index 3ac808f..9ab539a 100644
--- a/openair1/SCHED_NR/nr_ru_procedures.c
+++ b/openair1/SCHED_NR/nr_ru_procedures.c
@@ -395,6 +395,7 @@ void nr_fep_full(RU_t *ru, int slot) {
   RU_proc_t *proc = &ru->proc;
   int l, aa;
   NR_DL_FRAME_PARMS *fp = ru->nr_frame_parms;
+  char filename[40];
 
   // if ((fp->frame_type == TDD) && 
      // (subframe_select(fp,proc->tti_rx) != SF_UL)) return;
@@ -405,6 +406,9 @@ void nr_fep_full(RU_t *ru, int slot) {
   // remove_7_5_kHz(ru,proc->tti_rx<<1);
   // remove_7_5_kHz(ru,1+(proc->tti_rx<<1));
 
+  //sprintf(filename,"rxdata_gnb.m");
+  //LOG_M(filename,"rxdata_gnb_v",&ru->common.rxdata[0][proc->tti_rx*fp->samples_per_slot], 2*fp->samples_per_slot, 1, 0);
+
   for (l = 0; l < fp->symbols_per_slot; l++) {
     for (aa = 0; aa < fp->nb_antennas_rx; aa++) {
       nr_slot_fep_ul(fp,
diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
index ccf5343..bbd0c65 100644
--- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
@@ -4143,6 +4143,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
   uint8_t ssb_periodicity = 10;// ue->ssb_periodicity; // initialized to 5ms in nr_init_ue for scenarios where UE is not configured (otherwise acquired by cell configuration from gNB or LTE)
   uint8_t dci_cnt = 0;
   fapi_nr_pbch_config_t *pbch_config = &ue->nrUE_config.pbch_config;
+
+  char filename[40];
   
   LOG_D(PHY," ****** start RX-Chain for Frame.Slot %d.%d ******  \n", frame_rx%1024, nr_tti_rx);
 
@@ -4200,6 +4202,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
   }
 
   dci_cnt = nr_ue_pdcch_procedures(eNB_id, ue, proc);
+  dci_cnt = 1;
 
   if (dci_cnt > 0) {
 
@@ -4215,17 +4218,32 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
 						 16384);
     }
   } else {
-    LOG_D(PHY,"[UE  %d] Frame %d, nr_tti_rx %d: No DCIs found\n",ue->Mod_id,frame_rx,nr_tti_rx);
+    LOG_I(PHY,"[UE  %d] Frame %d, nr_tti_rx %d: No DCIs found\n",ue->Mod_id,frame_rx,nr_tti_rx);
   }
 #endif //NR_PDCCH_SCHED
 
   
   if (dci_cnt > 0){
-    LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR Frame.slot %d.%d ------  \n", frame_rx%1024, nr_tti_rx);
+
+    ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 1;
+    dlsch0_harq->nb_rb = 50;
+    dlsch0_harq->start_rb = 0;
+    dlsch0_harq->nb_symbols = 12;//dlsch_config_pdu->number_symbols;
+    dlsch0_harq->start_symbol = 2;//dlsch_config_pdu->start_symbol;
+    dlsch0_harq->mcs = 9;
+    dlsch0_harq->DCINdi = 1;
+    dlsch0_harq->rvidx = 0;
+    dlsch0_harq->Nl=1;
+    dlsch0_harq->status = ACTIVE;
+
+    LOG_I(PHY," ------ --> PDSCH ChannelComp/LLR Frame.slot %d.%d ------  \n", frame_rx%1024, nr_tti_rx);
     //to update from pdsch config
     nr_gold_pdsch(ue,nb_symb_pdcch,0, 1);
 
     nb_symb_sch = dlsch0_harq->nb_symbols;
+
+    sprintf(filename,"rxdata_ue_test.m");
+    LOG_M(filename,"rxdata_ue_test_v",&ue->common_vars.rxdata[0][nr_tti_rx*ue->frame_parms.samples_per_slot],ue->frame_parms.samples_per_slot, 1, 1);
     
     for (uint16_t m=nb_symb_pdcch;m<=(nb_symb_sch+nb_symb_pdcch-1) ; m++){
       nr_slot_fep(ue,
@@ -4237,7 +4255,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
       
     }
     //set active for testing, to be removed
-    ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 1;
+    
   }
   else
     ue->dlsch[ue->current_thread_id[nr_tti_rx]][eNB_id][0]->active = 0;
diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c
index a471062..cd64e53 100644
--- a/openair1/SIMULATION/NR_PHY/dlsim.c
+++ b/openair1/SIMULATION/NR_PHY/dlsim.c
@@ -173,7 +173,7 @@ int main(int argc, char **argv)
   //unsigned char frame_type = 0;
   unsigned char pbch_phase = 0;
 
-  int frame=0,slot=1;
+  int frame=0,slot=2;
   int frame_length_complex_samples;
   int frame_length_complex_samples_no_prefix;
   int slot_length_complex_samples_no_prefix;
@@ -188,7 +188,7 @@ int main(int argc, char **argv)
   int run_initial_sync=0;
   int do_pdcch_flag=1;
 
-  int loglvl=OAILOG_WARNING;
+  int loglvl=OAILOG_INFO;
 
   float target_error_rate = 0.01;
 
@@ -398,6 +398,7 @@ int main(int argc, char **argv)
   logInit();
   set_glog(loglvl);
   T_stdout = 1;
+  FILE *in_file;
 
   if (snr1set==0)
     snr1 = snr0+10;
@@ -695,8 +696,13 @@ int main(int argc, char **argv)
 
   nr_ue_phy_config_request(&UE_mac->phy_config);
 
+  int16_t *rxdata_ue;
+  rxdata_ue = &((short*) UE->common_vars.rxdata[0])[2*slot*frame_parms->samples_per_slot];
+
   for (SNR = snr0; SNR < snr1; SNR += .2) {
 
+    in_file = fopen("rxdata_gnb.m", "r");
+
     n_errors = 0;
     //n_errors2 = 0;
     //n_alamouti = 0;
@@ -710,14 +716,22 @@ int main(int argc, char **argv)
       sigma2_dB = 10 * log10((double)txlev) - SNR;
       sigma2    = pow(10, sigma2_dB/10);
       // printf("sigma2 %f (%f dB)\n",sigma2,sigma2_dB);
-
+/*
       for (i=0; i<frame_length_complex_samples; i++) {
 	for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
 	  ((short*) UE->common_vars.rxdata[aa])[2*i]   = (short) ((r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
 	  ((short*) UE->common_vars.rxdata[aa])[2*i+1] = (short) ((r_im[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)));
 	}
       }
-
+*/
+      for (i = 0; i < 2*frame_parms->samples_per_slot; i++){
+        fscanf(in_file, "%d", &rxdata_ue[i]);
+      }
+/*
+      char filename[40];
+      sprintf(filename,"rxdata_ue_test.m");
+      LOG_M(filename,"rxdata_ue_test_v",&UE->common_vars.rxdata[0][slot*frame_parms->samples_per_slot],frame_parms->samples_per_slot, 1, 1);
+*/
       if (n_trials == 1) {
 
         LOG_M("rxsig0.m","rxs0", UE->common_vars.rxdata[0], frame_length_complex_samples, 1, 1);
diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c
index 00ba0bb..3e31fa0 100644
--- a/openair1/SIMULATION/NR_PHY/ulsim.c
+++ b/openair1/SIMULATION/NR_PHY/ulsim.c
@@ -99,7 +99,7 @@ int main(int argc, char **argv)
   double sigma, sigma_dB;
   double snr_step = 0.1;
   uint8_t snr1set = 0;
-  int slot = 0;
+  int slot = 1;
   FILE *output_fd = NULL;
   //uint8_t write_output_file = 0;
   int trial, n_trials = 1, n_errors = 0, n_false_positive = 0, delay = 0;
@@ -116,10 +116,10 @@ int main(int argc, char **argv)
   int number_of_frames = 1;
   int frame_length_complex_samples;
   NR_DL_FRAME_PARMS *frame_parms;
-  int loglvl = OAILOG_WARNING;
+  int loglvl = OAILOG_INFO;
   uint64_t SSB_positions=0x01;
-  uint16_t nb_symb_sch = 12;
-  int start_symbol = NR_SYMBOLS_PER_SLOT - nb_symb_sch;
+  uint16_t nb_symb_sch = 9;
+  int start_symbol = 2;
   uint16_t nb_rb = 50;
   uint8_t Imcs = 9;
   uint8_t precod_nbr_layers = 1;
@@ -130,6 +130,7 @@ int main(int argc, char **argv)
   int32_t txlev;
   int start_rb = 0;
   int UE_id =0; // [hna] only works for UE_id = 0 because NUMBER_OF_NR_UE_MAX is set to 1 (phy_init_nr_gNB causes segmentation fault)
+  uint8_t threequarter_fs = 0;
 
   cpuf = get_cpu_freq_GHz();
 
@@ -144,7 +145,7 @@ int main(int argc, char **argv)
   //logInit();
   randominit(0);
 
-  while ((c = getopt(argc, argv, "d:f:g:h:i:j:l:m:n:p:r:s:y:z:F:M:N:P:R:S:")) != -1) {
+  while ((c = getopt(argc, argv, "d:f:g:h:i:j:l:m:n:pr:s:y:z:F:M:N:P:R:S:E")) != -1) {
     switch (c) {
 
       /*case 'd':
@@ -303,6 +304,10 @@ int main(int argc, char **argv)
         printf("Setting SNR1 to %f\n", snr1);
         break;
 
+      case 'E':
+        threequarter_fs = 1;
+        break;
+
       default:
         case 'h':
           printf("%s -h(elp) -p(extended_prefix) -N cell_id -f output_filename -F input_filename -g channel_model -n n_frames -t Delayspread -s snr0 -S snr1 -x transmission_mode -y TXant -z RXant -i Intefrence0 -j Interference1 -A interpolation_file -C(alibration offset dB) -N CellId\n", argv[0]);
@@ -330,6 +335,7 @@ int main(int argc, char **argv)
           printf("-O oversampling factor (1,2,4,8,16)\n");
           printf("-R N_RB_DL\n");
           printf("-S Ending SNR, runs from SNR0 to SNR1\n");
+          printf("-E enable threequarter sampling\n");
           exit(-1);
           break;
     }
@@ -338,6 +344,7 @@ int main(int argc, char **argv)
   logInit();
   set_glog(loglvl);
   T_stdout = 1;
+  FILE *in_file;
 
   if (snr1set == 0)
     snr1 = snr0 + 10;
@@ -367,7 +374,7 @@ int main(int argc, char **argv)
 
   crcTableInit();
 
-  nr_phy_config_request_sim(gNB, N_RB_DL, N_RB_UL, mu, Nid_cell, SSB_positions);
+  nr_phy_config_request_sim_ulsim(gNB, N_RB_DL, N_RB_UL, mu, Nid_cell, SSB_positions, threequarter_fs);
 
   phy_init_nr_gNB(gNB, 0, 0);
   //init_eNB_afterRU();
@@ -511,20 +518,42 @@ int main(int argc, char **argv)
       sigma_dB = 10*log10(txlev_float)-SNR;
       sigma    = pow(10,sigma_dB/10);
 
+      int16_t *rxdata_gnb;
+      rxdata_gnb = &((short*) gNB->common_vars.rxdata[0])[2*slot*frame_parms->samples_per_slot];
+
       for (trial = 0; trial < n_trials; trial++) {
 
         errors_scrambling  = 0;
         errors_decoding    = 0;
 
+        in_file = fopen("rxdata_ue.m", "r");
+
+        if (in_file == NULL)
+        {
+            printf("Can't open file for reading.\n");
+            return -1;
+        }
+
         //----------------------------------------------------------
         //------------------------ add noise -----------------------
         //----------------------------------------------------------
+        /*
         for (i=0; i<frame_length_complex_samples; i++) {
           for (ap=0; ap<frame_parms->nb_antennas_rx; ap++) {
-            ((short*) gNB->common_vars.rxdata[ap])[(2*i) + (delay*2)]   = (((int16_t *)UE->common_vars.txdata[ap])[(i<<1)])   + (int16_t)(sqrt(sigma/2)*gaussdouble(0.0,1.0)*(double)AMP); // convert to fixed point
-            ((short*) gNB->common_vars.rxdata[ap])[2*i+1 + (delay*2)]   = (((int16_t *)UE->common_vars.txdata[ap])[(i<<1)+1]) + (int16_t)(sqrt(sigma/2)*gaussdouble(0.0,1.0)*(double)AMP);
+            ((short*) gNB->common_vars.rxdata[ap])[(2*i) + (delay*2)]   = 0.5*((((int16_t *)UE->common_vars.txdata[ap])[(i<<1)])   + (int16_t)(sqrt(sigma/2)*gaussdouble(0.0,1.0)*(double)AMP)); // convert to fixed point
+            ((short*) gNB->common_vars.rxdata[ap])[2*i+1 + (delay*2)]   = 0.5*((((int16_t *)UE->common_vars.txdata[ap])[(i<<1)+1]) + (int16_t)(sqrt(sigma/2)*gaussdouble(0.0,1.0)*(double)AMP));
           }
         }
+        */
+
+        for (i = 0; i < 2*frame_parms->samples_per_slot; i++){
+          fscanf(in_file, "%d", &rxdata_gnb[i]);
+        }
+
+        char filename[40];
+        sprintf(filename,"rxdata_ue_ulsim.m");
+        LOG_M(filename,"rxdata_ue_v",&gNB->common_vars.rxdata[0][slot*frame_parms->samples_per_slot], frame_parms->samples_per_slot, 1, 1);
+        
         ////////////////////////////////////////////////////////////
 
         //----------------------------------------------------------
@@ -628,5 +657,8 @@ int main(int argc, char **argv)
   if (input_fd)
     fclose(input_fd);
 
+  if (in_file)
+    fclose(in_file);
+
   return (n_errors);
 }
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
index a11bf9d..86dc080 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf
@@ -255,7 +255,6 @@ RUs = (
          max_rxgain                    = 114;
          eNB_instances  = [0];
          sdr_addrs = "type=x300";
-
     }
 );