diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 0d2c95a926..0f79c4532b 100644 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -348,39 +348,33 @@ void apply_nr_rotation(NR_DL_FRAME_PARMS *fp, { int symb_offset = (slot%fp->slots_per_subframe)*fp->symbols_per_slot; - c16_t *symbol_rotation = fp->symbol_rotation[0]; + c16_t *symbol_rotation = fp->symbol_rotation[0] + symb_offset; - for (int sidx=0;sidxofdm_symbol_size; LOG_D(PHY,"Rotating symbol %d, slot %d, symbol_subframe_index %d (%d,%d)\n", - first_symbol + sidx, + sidx, slot, - sidx + first_symbol + symb_offset, - symbol_rotation[sidx + first_symbol + symb_offset].r, - symbol_rotation[sidx + first_symbol + symb_offset].i); + sidx + symb_offset, + this_rotation->r, + this_rotation->i); if (fp->N_RB_DL & 1) { - rotate_cpx_vector(((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size, - symbol_rotation + sidx + first_symbol + symb_offset, - ((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size, - (fp->N_RB_DL + 1) * 6, - 15); - rotate_cpx_vector(((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size + fp->first_carrier_offset - 6, - symbol_rotation + sidx + first_symbol + symb_offset, - ((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size + fp->first_carrier_offset - 6, - (fp->N_RB_DL + 1) * 6, - 15); + rotate_cpx_vector(this_symbol, this_rotation, this_symbol, + (fp->N_RB_DL + 1) * 6, 15); + rotate_cpx_vector(this_symbol + fp->first_carrier_offset - 6, + this_rotation, + this_symbol + fp->first_carrier_offset - 6, + (fp->N_RB_DL + 1) * 6, 15); } else { - rotate_cpx_vector(((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size, - symbol_rotation + sidx + first_symbol + symb_offset, - ((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size, - fp->N_RB_DL * 6, - 15); - rotate_cpx_vector(((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size + fp->first_carrier_offset, - symbol_rotation + sidx + first_symbol + symb_offset, - ((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size + fp->first_carrier_offset, - fp->N_RB_DL * 6, - 15); + rotate_cpx_vector(this_symbol, this_rotation, this_symbol, + fp->N_RB_DL * 6, 15); + rotate_cpx_vector(this_symbol + fp->first_carrier_offset, + this_rotation, + this_symbol + fp->first_carrier_offset, + fp->N_RB_DL * 6, 15); } } } diff --git a/openair1/PHY/MODULATION/slot_fep_nr.c b/openair1/PHY/MODULATION/slot_fep_nr.c index 58711777ae..71be5ba6ed 100644 --- a/openair1/PHY/MODULATION/slot_fep_nr.c +++ b/openair1/PHY/MODULATION/slot_fep_nr.c @@ -108,53 +108,34 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue, #endif c16_t *shift_rot = frame_parms->timeshift_symbol_rotation; + c16_t *this_symbol = (c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol]; if (frame_parms->N_RB_DL & 1) { - rotate_cpx_vector((c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], + rotate_cpx_vector(this_symbol, &rot2, this_symbol, + (frame_parms->N_RB_DL + 1) * 6, 15); + rotate_cpx_vector(this_symbol + frame_parms->first_carrier_offset - 6, &rot2, - (c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], - (frame_parms->N_RB_DL + 1) * 6, - 15); - rotate_cpx_vector((c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol + frame_parms->first_carrier_offset - 6], - &rot2, - (c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol + frame_parms->first_carrier_offset - 6], - (frame_parms->N_RB_DL + 1) * 6, - 15); - multadd_cpx_vector((int16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], - (int16_t *)shift_rot, - (int16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], - 1, - (frame_parms->N_RB_DL + 1) * 6, - 15); - multadd_cpx_vector((int16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol + frame_parms->first_carrier_offset - 6], - (int16_t *)(shift_rot + frame_parms->first_carrier_offset - 6), - (int16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol + frame_parms->first_carrier_offset - 6], - 1, - (frame_parms->N_RB_DL + 1) * 6, - 15); + this_symbol + frame_parms->first_carrier_offset - 6, + (frame_parms->N_RB_DL + 1) * 6, 15); + multadd_cpx_vector((int16_t *)this_symbol, (int16_t *)shift_rot, (int16_t *)this_symbol, + 1, (frame_parms->N_RB_DL + 1) * 6, 15); + multadd_cpx_vector((int16_t *)(this_symbol + frame_parms->first_carrier_offset - 6), + (int16_t *)(shift_rot + frame_parms->first_carrier_offset - 6), + (int16_t *)(this_symbol + frame_parms->first_carrier_offset - 6), + 1, (frame_parms->N_RB_DL + 1) * 6, 15); } else { - rotate_cpx_vector((c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], + rotate_cpx_vector(this_symbol, &rot2, this_symbol, + frame_parms->N_RB_DL * 6, 15); + rotate_cpx_vector(this_symbol + frame_parms->first_carrier_offset, &rot2, - (c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], - frame_parms->N_RB_DL * 6, - 15); - rotate_cpx_vector((c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol + frame_parms->first_carrier_offset], - &rot2, - (c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol + frame_parms->first_carrier_offset], - frame_parms->N_RB_DL * 6, - 15); - multadd_cpx_vector((int16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], - (int16_t *)shift_rot, - (int16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], - 1, - frame_parms->N_RB_DL * 6, - 15); - multadd_cpx_vector((int16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol + frame_parms->first_carrier_offset], - (int16_t *)(shift_rot + frame_parms->first_carrier_offset), - (int16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol + frame_parms->first_carrier_offset], - 1, - frame_parms->N_RB_DL * 6, - 15); + this_symbol + frame_parms->first_carrier_offset, + frame_parms->N_RB_DL * 6, 15); + multadd_cpx_vector((int16_t *)this_symbol, (int16_t *)shift_rot, (int16_t *)this_symbol, + 1, frame_parms->N_RB_DL * 6, 15); + multadd_cpx_vector((int16_t *)(this_symbol + frame_parms->first_carrier_offset), + (int16_t *)(shift_rot + frame_parms->first_carrier_offset), + (int16_t *)(this_symbol + frame_parms->first_carrier_offset), + 1, frame_parms->N_RB_DL * 6, 15); } } @@ -258,11 +239,8 @@ int nr_slot_fep_init_sync(PHY_VARS_NR_UE *ue, symbol+symb_offset,rot2.r,rot2.i); #endif - rotate_cpx_vector((c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], - &rot2, - (c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol], - frame_parms->ofdm_symbol_size, - 15); + c16_t *this_symbol = (c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol]; + rotate_cpx_vector(this_symbol, &rot2, this_symbol, frame_parms->ofdm_symbol_size, 15); } #ifdef DEBUG_FEP @@ -348,53 +326,34 @@ void apply_nr_rotation_ul(NR_DL_FRAME_PARMS *frame_parms, LOG_D(PHY,"slot %d, symb_offset %d rotating by %d.%d\n",slot,symb_offset,rot2.r,rot2.i); c16_t *shift_rot = frame_parms->timeshift_symbol_rotation; + c16_t *this_symbol = (c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)]; if (frame_parms->N_RB_UL & 1) { - rotate_cpx_vector((c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)], + rotate_cpx_vector(this_symbol, &rot2, this_symbol, + (frame_parms->N_RB_UL + 1) * 6, 15); + rotate_cpx_vector(this_symbol + frame_parms->first_carrier_offset - 6, &rot2, - (c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)], - (frame_parms->N_RB_UL + 1) * 6, - 15); - rotate_cpx_vector((c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset-6], - &rot2, - (c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset-6], - (frame_parms->N_RB_UL + 1) * 6, - 15); - multadd_cpx_vector((int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)], - (int16_t *)shift_rot, - (int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)], - 1, - (frame_parms->N_RB_UL+1) * 6, - 15); - multadd_cpx_vector((int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset-6], - (int16_t *)(shift_rot + frame_parms->first_carrier_offset - 6), - (int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset-6], - 1, - (frame_parms->N_RB_UL+1) * 6, - 15); + this_symbol + frame_parms->first_carrier_offset - 6, + (frame_parms->N_RB_UL + 1) * 6, 15); + multadd_cpx_vector((int16_t *)this_symbol, (int16_t *)shift_rot, (int16_t *)this_symbol, + 1, (frame_parms->N_RB_UL+1) * 6, 15); + multadd_cpx_vector((int16_t *)(this_symbol + frame_parms->first_carrier_offset - 6), + (int16_t *)(shift_rot + frame_parms->first_carrier_offset - 6), + (int16_t *)(this_symbol + frame_parms->first_carrier_offset - 6), + 1, (frame_parms->N_RB_UL+1) * 6, 15); } else { - rotate_cpx_vector((c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)], + rotate_cpx_vector(this_symbol, &rot2, this_symbol, + frame_parms->N_RB_UL * 6, 15); + rotate_cpx_vector(this_symbol + frame_parms->first_carrier_offset, &rot2, - (c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)], - frame_parms->N_RB_UL * 6, - 15); - rotate_cpx_vector((c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset], - &rot2, - (c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset], - frame_parms->N_RB_UL * 6, - 15); - multadd_cpx_vector((int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)], - (int16_t *)shift_rot, - (int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)], - 1, - frame_parms->N_RB_UL * 6, - 15); - multadd_cpx_vector((int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset], - (int16_t *)(shift_rot + frame_parms->first_carrier_offset), - (int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset], - 1, - frame_parms->N_RB_UL * 6, - 15); + this_symbol + frame_parms->first_carrier_offset, + frame_parms->N_RB_UL * 6, 15); + multadd_cpx_vector((int16_t *)this_symbol, (int16_t *)shift_rot, (int16_t *)this_symbol, + 1, frame_parms->N_RB_UL * 6, 15); + multadd_cpx_vector((int16_t *)(this_symbol + frame_parms->first_carrier_offset), + (int16_t *)(shift_rot + frame_parms->first_carrier_offset), + (int16_t *)(this_symbol + frame_parms->first_carrier_offset), + 1, frame_parms->N_RB_UL * 6, 15); } } } diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c index 10fd8e9e8a..dba1fd194d 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c @@ -597,34 +597,27 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE, int symb_offset = (slot%frame_parms->slots_per_subframe)*frame_parms->symbols_per_slot; for(ap = 0; ap < n_antenna_ports; ap++) { for (int s=0;ssymbol_rotation[1])[s + symb_offset]; + c16_t *this_symbol = (c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s]; + c16_t rot=frame_parms->symbol_rotation[1][s + symb_offset]; LOG_D(PHY,"rotating txdataF symbol %d (%d) => (%d.%d)\n", s, s + symb_offset, rot.r, rot.i); if (frame_parms->N_RB_UL & 1) { - rotate_cpx_vector((c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s], + rotate_cpx_vector(this_symbol, &rot, this_symbol, + (frame_parms->N_RB_UL + 1) * 6, 15); + rotate_cpx_vector(this_symbol + frame_parms->first_carrier_offset - 6, &rot, - (c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s], - (frame_parms->N_RB_UL + 1) * 6, - 15); - rotate_cpx_vector((c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s + frame_parms->first_carrier_offset - 6], - &rot, - (c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s + frame_parms->first_carrier_offset - 6], - (frame_parms->N_RB_UL + 1) * 6, - 15); + this_symbol + frame_parms->first_carrier_offset - 6, + (frame_parms->N_RB_UL + 1) * 6, 15); } else { - rotate_cpx_vector((c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s], + rotate_cpx_vector(this_symbol, &rot, this_symbol, + frame_parms->N_RB_UL * 6, 15); + rotate_cpx_vector(this_symbol + frame_parms->first_carrier_offset, &rot, - (c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s], - frame_parms->N_RB_UL * 6, - 15); - rotate_cpx_vector((c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s + frame_parms->first_carrier_offset], - &rot, - (c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s + frame_parms->first_carrier_offset], - frame_parms->N_RB_UL * 6, - 15); + this_symbol + frame_parms->first_carrier_offset, + frame_parms->N_RB_UL * 6, 15); } } }