fix alignment issues in case of odd number of PRBs
This commit is contained in:
@@ -359,16 +359,29 @@ void apply_nr_rotation(NR_DL_FRAME_PARMS *fp,
|
|||||||
symbol_rotation[sidx + first_symbol + symb_offset].r,
|
symbol_rotation[sidx + first_symbol + symb_offset].r,
|
||||||
symbol_rotation[sidx + first_symbol + symb_offset].i);
|
symbol_rotation[sidx + first_symbol + symb_offset].i);
|
||||||
|
|
||||||
rotate_cpx_vector(((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size,
|
if (fp->N_RB_DL & 1) {
|
||||||
symbol_rotation + sidx + first_symbol + symb_offset,
|
rotate_cpx_vector(((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size,
|
||||||
((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size,
|
symbol_rotation + sidx + first_symbol + symb_offset,
|
||||||
fp->N_RB_DL * 6,
|
((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size,
|
||||||
15);
|
(fp->N_RB_DL + 1) * 6,
|
||||||
rotate_cpx_vector(((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size + fp->first_carrier_offset,
|
15);
|
||||||
symbol_rotation + sidx + first_symbol + symb_offset,
|
rotate_cpx_vector(((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size + fp->first_carrier_offset - 6,
|
||||||
((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size + fp->first_carrier_offset,
|
symbol_rotation + sidx + first_symbol + symb_offset,
|
||||||
fp->N_RB_DL * 6,
|
((c16_t*) txdataF) + sidx * fp->ofdm_symbol_size + fp->first_carrier_offset - 6,
|
||||||
15);
|
(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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,31 +107,55 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
|
|||||||
symbol+symb_offset,rot2.r,rot2.i);
|
symbol+symb_offset,rot2.r,rot2.i);
|
||||||
#endif
|
#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->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);
|
|
||||||
|
|
||||||
c16_t *shift_rot = frame_parms->timeshift_symbol_rotation;
|
c16_t *shift_rot = frame_parms->timeshift_symbol_rotation;
|
||||||
|
|
||||||
multadd_cpx_vector((int16_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) {
|
||||||
(int16_t *)shift_rot,
|
rotate_cpx_vector((c16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],
|
||||||
(int16_t *)&common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF[aa][frame_parms->ofdm_symbol_size*symbol],
|
&rot2,
|
||||||
1,
|
(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,
|
(frame_parms->N_RB_DL + 1) * 6,
|
||||||
15);
|
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],
|
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],
|
||||||
(int16_t *)(shift_rot + frame_parms->first_carrier_offset),
|
&rot2,
|
||||||
(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],
|
(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],
|
||||||
1,
|
(frame_parms->N_RB_DL + 1) * 6,
|
||||||
frame_parms->N_RB_DL * 6,
|
15);
|
||||||
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);
|
||||||
|
} 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],
|
||||||
|
&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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_FEP
|
#ifdef DEBUG_FEP
|
||||||
@@ -322,30 +346,55 @@ void apply_nr_rotation_ul(NR_DL_FRAME_PARMS *frame_parms,
|
|||||||
c16_t rot2 = frame_parms->symbol_rotation[1][symbol + symb_offset];
|
c16_t rot2 = frame_parms->symbol_rotation[1][symbol + symb_offset];
|
||||||
rot2.i=-rot2.i;
|
rot2.i=-rot2.i;
|
||||||
LOG_D(PHY,"slot %d, symb_offset %d rotating by %d.%d\n",slot,symb_offset,rot2.r,rot2.i);
|
LOG_D(PHY,"slot %d, symb_offset %d rotating by %d.%d\n",slot,symb_offset,rot2.r,rot2.i);
|
||||||
rotate_cpx_vector((c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)],
|
|
||||||
&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);
|
|
||||||
|
|
||||||
c16_t *shift_rot = frame_parms->timeshift_symbol_rotation;
|
c16_t *shift_rot = frame_parms->timeshift_symbol_rotation;
|
||||||
|
|
||||||
multadd_cpx_vector((int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)],
|
if (frame_parms->N_RB_UL & 1) {
|
||||||
(int16_t *)shift_rot,
|
rotate_cpx_vector((c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)],
|
||||||
(int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)],
|
&rot2,
|
||||||
1,
|
(c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)],
|
||||||
frame_parms->N_RB_UL * 6,
|
(frame_parms->N_RB_UL + 1) * 6,
|
||||||
15);
|
15);
|
||||||
multadd_cpx_vector((int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset],
|
rotate_cpx_vector((c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset-6],
|
||||||
(int16_t *)(shift_rot + frame_parms->first_carrier_offset),
|
&rot2,
|
||||||
(int16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset],
|
(c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)+frame_parms->first_carrier_offset-6],
|
||||||
1,
|
(frame_parms->N_RB_UL + 1) * 6,
|
||||||
frame_parms->N_RB_UL * 6,
|
15);
|
||||||
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);
|
||||||
|
} else {
|
||||||
|
rotate_cpx_vector((c16_t *)&rxdataF[soffset+(frame_parms->ofdm_symbol_size*symbol)],
|
||||||
|
&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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -603,16 +603,29 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE,
|
|||||||
s + symb_offset,
|
s + symb_offset,
|
||||||
rot.r, rot.i);
|
rot.r, rot.i);
|
||||||
|
|
||||||
rotate_cpx_vector((c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s],
|
if (frame_parms->N_RB_UL & 1) {
|
||||||
&rot,
|
rotate_cpx_vector((c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s],
|
||||||
(c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s],
|
&rot,
|
||||||
frame_parms->N_RB_UL * 6,
|
(c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s],
|
||||||
15);
|
(frame_parms->N_RB_UL + 1) * 6,
|
||||||
rotate_cpx_vector((c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s + frame_parms->first_carrier_offset],
|
15);
|
||||||
&rot,
|
rotate_cpx_vector((c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s + frame_parms->first_carrier_offset - 6],
|
||||||
(c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s + frame_parms->first_carrier_offset],
|
&rot,
|
||||||
frame_parms->N_RB_UL * 6,
|
(c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s + frame_parms->first_carrier_offset - 6],
|
||||||
15);
|
(frame_parms->N_RB_UL + 1) * 6,
|
||||||
|
15);
|
||||||
|
} else {
|
||||||
|
rotate_cpx_vector((c16_t *)&txdataF[ap][frame_parms->ofdm_symbol_size * s],
|
||||||
|
&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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user