Fixing UE OFDM symbol generation
The CP length was hard coded for numerology 1
This commit is contained in:
@@ -49,7 +49,7 @@ void PHY_ofdm_mod(int *input,
|
||||
|
||||
|
||||
void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRAME_PARMS *frame_parms);
|
||||
void nr_normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,NR_DL_FRAME_PARMS *frame_parms);
|
||||
void nr_normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,NR_DL_FRAME_PARMS *frame_parms, uint32_t slot);
|
||||
|
||||
void do_OFDM_mod(int32_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms);
|
||||
|
||||
|
||||
@@ -63,20 +63,62 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
|
||||
|
||||
}
|
||||
|
||||
void nr_normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,NR_DL_FRAME_PARMS *frame_parms)
|
||||
void nr_normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,NR_DL_FRAME_PARMS *frame_parms, uint32_t slot)
|
||||
{
|
||||
PHY_ofdm_mod(txdataF, // input
|
||||
txdata, // output
|
||||
frame_parms->ofdm_symbol_size,
|
||||
1, // number of symbols
|
||||
frame_parms->nb_prefix_samples0, // number of prefix samples
|
||||
CYCLIC_PREFIX);
|
||||
PHY_ofdm_mod(txdataF+frame_parms->ofdm_symbol_size, // input
|
||||
txdata + frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples0, // output
|
||||
frame_parms->ofdm_symbol_size,
|
||||
nsymb - 1,
|
||||
frame_parms->nb_prefix_samples, // number of prefix samples
|
||||
CYCLIC_PREFIX);
|
||||
// This function works only slot wise. For more generic symbol generation refer nr_feptx0()
|
||||
if (frame_parms->numerology_index != 0) { // case where numerology != 0
|
||||
if (!(slot%(frame_parms->slots_per_subframe/2))) {
|
||||
PHY_ofdm_mod(txdataF,
|
||||
txdata,
|
||||
frame_parms->ofdm_symbol_size,
|
||||
1,
|
||||
frame_parms->nb_prefix_samples0,
|
||||
CYCLIC_PREFIX);
|
||||
PHY_ofdm_mod(txdataF+frame_parms->ofdm_symbol_size,
|
||||
txdata + frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples0,
|
||||
frame_parms->ofdm_symbol_size,
|
||||
nsymb - 1,
|
||||
frame_parms->nb_prefix_samples,
|
||||
CYCLIC_PREFIX);
|
||||
}
|
||||
else {
|
||||
PHY_ofdm_mod(txdataF,
|
||||
txdata,
|
||||
frame_parms->ofdm_symbol_size,
|
||||
nsymb,
|
||||
frame_parms->nb_prefix_samples,
|
||||
CYCLIC_PREFIX);
|
||||
}
|
||||
}
|
||||
else { // numerology = 0, longer CP for every 7th symbol
|
||||
PHY_ofdm_mod(txdataF,
|
||||
txdata,
|
||||
frame_parms->ofdm_symbol_size,
|
||||
1,
|
||||
frame_parms->nb_prefix_samples0,
|
||||
CYCLIC_PREFIX);
|
||||
PHY_ofdm_mod(txdataF+frame_parms->ofdm_symbol_size,
|
||||
txdata + frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples0,
|
||||
frame_parms->ofdm_symbol_size,
|
||||
6,
|
||||
frame_parms->nb_prefix_samples,
|
||||
CYCLIC_PREFIX);
|
||||
PHY_ofdm_mod(txdataF + 7*frame_parms->ofdm_symbol_size,
|
||||
txdata + 6*(frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples) +
|
||||
frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples0,
|
||||
frame_parms->ofdm_symbol_size,
|
||||
1,
|
||||
frame_parms->nb_prefix_samples0,
|
||||
CYCLIC_PREFIX);
|
||||
PHY_ofdm_mod(txdataF + 8*frame_parms->ofdm_symbol_size,
|
||||
txdata + 6*(frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples) +
|
||||
2*(frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples0),
|
||||
frame_parms->ofdm_symbol_size,
|
||||
6,
|
||||
frame_parms->nb_prefix_samples,
|
||||
CYCLIC_PREFIX);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void PHY_ofdm_mod(int *input, /// pointer to complex input
|
||||
|
||||
@@ -525,7 +525,8 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE,
|
||||
nr_normal_prefix_mod(txdataF[ap],
|
||||
&txdata[ap][tx_offset],
|
||||
14,
|
||||
frame_parms);
|
||||
frame_parms,
|
||||
slot);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -122,6 +122,7 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
|
||||
fp->nb_prefix_samples,
|
||||
CYCLIC_PREFIX);
|
||||
slot_offset += fp->nb_prefix_samples+fp->ofdm_symbol_size;
|
||||
slot_offsetF += fp->ofdm_symbol_size;
|
||||
}
|
||||
else {
|
||||
PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot_offsetF],
|
||||
@@ -131,6 +132,7 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
|
||||
fp->nb_prefix_samples0,
|
||||
CYCLIC_PREFIX);
|
||||
slot_offset += fp->nb_prefix_samples0+fp->ofdm_symbol_size;
|
||||
slot_offsetF += fp->ofdm_symbol_size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1046,7 +1046,8 @@ int main(int argc, char **argv)
|
||||
nr_normal_prefix_mod(&gNB->common_vars.txdataF[aa][txdataF_offset],
|
||||
&txdata[aa][tx_offset],
|
||||
14,
|
||||
frame_parms);
|
||||
frame_parms,
|
||||
slot);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user