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 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);
|
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
|
// This function works only slot wise. For more generic symbol generation refer nr_feptx0()
|
||||||
txdata, // output
|
if (frame_parms->numerology_index != 0) { // case where numerology != 0
|
||||||
frame_parms->ofdm_symbol_size,
|
if (!(slot%(frame_parms->slots_per_subframe/2))) {
|
||||||
1, // number of symbols
|
PHY_ofdm_mod(txdataF,
|
||||||
frame_parms->nb_prefix_samples0, // number of prefix samples
|
txdata,
|
||||||
CYCLIC_PREFIX);
|
frame_parms->ofdm_symbol_size,
|
||||||
PHY_ofdm_mod(txdataF+frame_parms->ofdm_symbol_size, // input
|
1,
|
||||||
txdata + frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples0, // output
|
frame_parms->nb_prefix_samples0,
|
||||||
frame_parms->ofdm_symbol_size,
|
CYCLIC_PREFIX);
|
||||||
nsymb - 1,
|
PHY_ofdm_mod(txdataF+frame_parms->ofdm_symbol_size,
|
||||||
frame_parms->nb_prefix_samples, // number of prefix samples
|
txdata + frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples0,
|
||||||
CYCLIC_PREFIX);
|
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
|
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],
|
nr_normal_prefix_mod(txdataF[ap],
|
||||||
&txdata[ap][tx_offset],
|
&txdata[ap][tx_offset],
|
||||||
14,
|
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,
|
fp->nb_prefix_samples,
|
||||||
CYCLIC_PREFIX);
|
CYCLIC_PREFIX);
|
||||||
slot_offset += fp->nb_prefix_samples+fp->ofdm_symbol_size;
|
slot_offset += fp->nb_prefix_samples+fp->ofdm_symbol_size;
|
||||||
|
slot_offsetF += fp->ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot_offsetF],
|
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,
|
fp->nb_prefix_samples0,
|
||||||
CYCLIC_PREFIX);
|
CYCLIC_PREFIX);
|
||||||
slot_offset += fp->nb_prefix_samples0+fp->ofdm_symbol_size;
|
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],
|
nr_normal_prefix_mod(&gNB->common_vars.txdataF[aa][txdataF_offset],
|
||||||
&txdata[aa][tx_offset],
|
&txdata[aa][tx_offset],
|
||||||
14,
|
14,
|
||||||
frame_parms);
|
frame_parms,
|
||||||
|
slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user