moving the OFDM phase rotation from RU to DU
This commit is contained in:
@@ -208,6 +208,14 @@ static inline int rxtx(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int frame_t
|
|||||||
L1_nr_prach_procedures(gNB,frame_rx,slot_rx,&gNB->prach_vars.list[prach_id].pdu);
|
L1_nr_prach_procedures(gNB,frame_rx,slot_rx,&gNB->prach_vars.list[prach_id].pdu);
|
||||||
gNB->prach_vars.list[prach_id].frame=-1;
|
gNB->prach_vars.list[prach_id].frame=-1;
|
||||||
}
|
}
|
||||||
|
//apply the rx signal rotation here
|
||||||
|
apply_nr_rotation_ul(&gNB->frame_parms,
|
||||||
|
gNB->common_vars.rxdataF[0],
|
||||||
|
slot_rx,
|
||||||
|
0,
|
||||||
|
gNB->frame_parms.Ncp==EXTENDED?12:14,
|
||||||
|
gNB->frame_parms.ofdm_symbol_size);
|
||||||
|
|
||||||
phy_procedures_gNB_uespec_RX(gNB, frame_rx, slot_rx);
|
phy_procedures_gNB_uespec_RX(gNB, frame_rx, slot_rx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -861,9 +861,9 @@ void *ru_thread_prach( void *param ) {
|
|||||||
|
|
||||||
if (wait_on_condition(&proc->mutex_prach,&proc->cond_prach,&proc->instance_cnt_prach,"ru_prach_thread") < 0) break;
|
if (wait_on_condition(&proc->mutex_prach,&proc->cond_prach,&proc->instance_cnt_prach,"ru_prach_thread") < 0) break;
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_RU_PRACH_RX, 1 );
|
/*VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_RU_PRACH_RX, 1 );
|
||||||
|
|
||||||
/*if (ru->gNB_list[0]){
|
if (ru->gNB_list[0]){
|
||||||
prach_procedures(
|
prach_procedures(
|
||||||
ru->gNB_list[0],0
|
ru->gNB_list[0],0
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -112,4 +112,10 @@ void apply_nr_rotation(NR_DL_FRAME_PARMS *fp,
|
|||||||
|
|
||||||
void init_symbol_rotation(NR_DL_FRAME_PARMS *fp,uint64_t CarrierFreq);
|
void init_symbol_rotation(NR_DL_FRAME_PARMS *fp,uint64_t CarrierFreq);
|
||||||
|
|
||||||
|
void apply_nr_rotation_ul(NR_DL_FRAME_PARMS *frame_parms,
|
||||||
|
int32_t *rxdataF,
|
||||||
|
int slot,
|
||||||
|
int first_symbol,
|
||||||
|
int nsymb,
|
||||||
|
int length);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -490,14 +490,28 @@ int nr_slot_fep_ul(NR_DL_FRAME_PARMS *frame_parms,
|
|||||||
// clear DC carrier from OFDM symbols
|
// clear DC carrier from OFDM symbols
|
||||||
rxdataF[symbol * frame_parms->ofdm_symbol_size] = 0;
|
rxdataF[symbol * frame_parms->ofdm_symbol_size] = 0;
|
||||||
|
|
||||||
int symb_offset = (Ns%frame_parms->slots_per_subframe)*frame_parms->symbols_per_slot;
|
|
||||||
uint32_t rot2 = ((uint32_t*)frame_parms->symbol_rotation)[symbol+symb_offset];
|
|
||||||
((int16_t*)&rot2)[1]=-((int16_t*)&rot2)[1];
|
|
||||||
LOG_D(PHY,"slot %d, symb_offset %d rotating by %d.%d\n",Ns,symb_offset,((int16_t*)&rot2)[0],((int16_t*)&rot2)[1]);
|
|
||||||
rotate_cpx_vector((int16_t *)&rxdataF[frame_parms->ofdm_symbol_size*symbol],
|
|
||||||
(int16_t*)&rot2,
|
|
||||||
(int16_t *)&rxdataF[frame_parms->ofdm_symbol_size*symbol],
|
|
||||||
frame_parms->ofdm_symbol_size,
|
|
||||||
15);
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void apply_nr_rotation_ul(NR_DL_FRAME_PARMS *frame_parms,
|
||||||
|
int32_t *rxdataF,
|
||||||
|
int slot,
|
||||||
|
int first_symbol,
|
||||||
|
int nsymb,
|
||||||
|
int length) {
|
||||||
|
|
||||||
|
|
||||||
|
int symb_offset = (slot%frame_parms->slots_per_subframe)*frame_parms->symbols_per_slot;
|
||||||
|
|
||||||
|
for (int symbol=0;symbol<nsymb;symbol++) {
|
||||||
|
|
||||||
|
uint32_t rot2 = ((uint32_t*)frame_parms->symbol_rotation)[symbol+symb_offset];
|
||||||
|
((int16_t*)&rot2)[1]=-((int16_t*)&rot2)[1];
|
||||||
|
LOG_D(PHY,"slot %d, symb_offset %d rotating by %d.%d\n",slot,symb_offset,((int16_t*)&rot2)[0],((int16_t*)&rot2)[1]);
|
||||||
|
rotate_cpx_vector((int16_t *)&rxdataF[frame_parms->ofdm_symbol_size*symbol],
|
||||||
|
(int16_t*)&rot2,
|
||||||
|
(int16_t *)&rxdataF[frame_parms->ofdm_symbol_size*symbol],
|
||||||
|
length,
|
||||||
|
15);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -89,13 +89,6 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
|
|||||||
if (fp->numerology_index != 0) {
|
if (fp->numerology_index != 0) {
|
||||||
|
|
||||||
if (!(slot%(fp->slots_per_subframe/2))&&(first_symbol==0)) { // case where first symbol in slot has longer prefix
|
if (!(slot%(fp->slots_per_subframe/2))&&(first_symbol==0)) { // case where first symbol in slot has longer prefix
|
||||||
apply_nr_rotation(fp,
|
|
||||||
(int16_t*)&ru->common.txdataF_BF[aa][slot_offsetF],
|
|
||||||
slot,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
fp->ofdm_symbol_size);
|
|
||||||
|
|
||||||
PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot_offsetF],
|
PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot_offsetF],
|
||||||
(int*)&ru->common.txdata[aa][slot_offset],
|
(int*)&ru->common.txdata[aa][slot_offset],
|
||||||
fp->ofdm_symbol_size,
|
fp->ofdm_symbol_size,
|
||||||
@@ -103,13 +96,6 @@ 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);
|
||||||
|
|
||||||
apply_nr_rotation(fp,
|
|
||||||
(int16_t*)&ru->common.txdataF_BF[aa][slot_offsetF+fp->ofdm_symbol_size],
|
|
||||||
slot,
|
|
||||||
1,
|
|
||||||
num_symbols-1,
|
|
||||||
fp->ofdm_symbol_size);
|
|
||||||
|
|
||||||
PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot_offsetF+fp->ofdm_symbol_size],
|
PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot_offsetF+fp->ofdm_symbol_size],
|
||||||
(int*)&ru->common.txdata[aa][slot_offset+fp->nb_prefix_samples0+fp->ofdm_symbol_size],
|
(int*)&ru->common.txdata[aa][slot_offset+fp->nb_prefix_samples0+fp->ofdm_symbol_size],
|
||||||
fp->ofdm_symbol_size,
|
fp->ofdm_symbol_size,
|
||||||
@@ -118,12 +104,6 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
|
|||||||
CYCLIC_PREFIX);
|
CYCLIC_PREFIX);
|
||||||
}
|
}
|
||||||
else { // all symbols in slot have shorter prefix
|
else { // all symbols in slot have shorter prefix
|
||||||
apply_nr_rotation(fp,
|
|
||||||
(int16_t*)&ru->common.txdataF_BF[aa][slot_offsetF],
|
|
||||||
slot,
|
|
||||||
first_symbol,
|
|
||||||
num_symbols,
|
|
||||||
fp->ofdm_symbol_size);
|
|
||||||
PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot_offsetF],
|
PHY_ofdm_mod(&ru->common.txdataF_BF[aa][slot_offsetF],
|
||||||
(int*)&ru->common.txdata[aa][slot_offset],
|
(int*)&ru->common.txdata[aa][slot_offset],
|
||||||
fp->ofdm_symbol_size,
|
fp->ofdm_symbol_size,
|
||||||
@@ -141,12 +121,6 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
|
|||||||
1,
|
1,
|
||||||
fp->nb_prefix_samples,
|
fp->nb_prefix_samples,
|
||||||
CYCLIC_PREFIX);
|
CYCLIC_PREFIX);
|
||||||
apply_nr_rotation(fp,
|
|
||||||
(int16_t*)&ru->common.txdata[aa][slot_offset],
|
|
||||||
slot,
|
|
||||||
idx_sym,
|
|
||||||
1,
|
|
||||||
fp->ofdm_symbol_size+fp->nb_prefix_samples);
|
|
||||||
slot_offset += fp->nb_prefix_samples+fp->ofdm_symbol_size;
|
slot_offset += fp->nb_prefix_samples+fp->ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -156,12 +130,6 @@ void nr_feptx0(RU_t *ru,int tti_tx,int first_symbol, int num_symbols, int aa) {
|
|||||||
1,
|
1,
|
||||||
fp->nb_prefix_samples0,
|
fp->nb_prefix_samples0,
|
||||||
CYCLIC_PREFIX);
|
CYCLIC_PREFIX);
|
||||||
apply_nr_rotation(fp,
|
|
||||||
(int16_t*)&ru->common.txdata[aa][slot_offset],
|
|
||||||
slot,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
fp->ofdm_symbol_size+fp->nb_prefix_samples0);
|
|
||||||
slot_offset += fp->nb_prefix_samples0+fp->ofdm_symbol_size;
|
slot_offset += fp->nb_prefix_samples0+fp->ofdm_symbol_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -199,6 +199,10 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
|
|||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//apply the OFDM symbol rotation here
|
||||||
|
apply_nr_rotation(fp,(int16_t*) &gNB->common_vars.txdataF[0][txdataF_offset],slot,0,fp->Ncp==EXTENDED?12:14,fp->ofdm_symbol_size);
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX+offset,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_TX+offset,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,7 +450,7 @@ void phy_procedures_gNB_common_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
|
|||||||
uint8_t symbol;
|
uint8_t symbol;
|
||||||
unsigned char aa;
|
unsigned char aa;
|
||||||
|
|
||||||
for(symbol = 0; symbol < NR_SYMBOLS_PER_SLOT; symbol++) {
|
for(symbol = 0; symbol < (gNB->frame_parms.Ncp==EXTENDED?12:14); symbol++) {
|
||||||
// nr_slot_fep_ul(gNB, symbol, proc->slot_rx, 0, 0);
|
// nr_slot_fep_ul(gNB, symbol, proc->slot_rx, 0, 0);
|
||||||
|
|
||||||
for (aa = 0; aa < gNB->frame_parms.nb_antennas_rx; aa++) {
|
for (aa = 0; aa < gNB->frame_parms.nb_antennas_rx; aa++) {
|
||||||
@@ -460,6 +464,15 @@ void phy_procedures_gNB_common_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (aa = 0; aa < gNB->frame_parms.nb_antennas_rx; aa++) {
|
||||||
|
apply_nr_rotation_ul(&gNB->frame_parms,
|
||||||
|
gNB->common_vars.rxdataF[aa],
|
||||||
|
slot_rx,
|
||||||
|
0,
|
||||||
|
gNB->frame_parms.Ncp==EXTENDED?12:14,
|
||||||
|
gNB->frame_parms.ofdm_symbol_size);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
|
||||||
|
|||||||
@@ -803,38 +803,11 @@ int main(int argc, char **argv)
|
|||||||
12,
|
12,
|
||||||
frame_parms->nb_prefix_samples,
|
frame_parms->nb_prefix_samples,
|
||||||
CYCLIC_PREFIX);
|
CYCLIC_PREFIX);
|
||||||
} else {/*
|
} else {
|
||||||
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);
|
||||||
*/
|
|
||||||
PHY_ofdm_mod(&gNB->common_vars.txdataF[aa][txdataF_offset],
|
|
||||||
(int*)&txdata[aa][tx_offset],
|
|
||||||
frame_parms->ofdm_symbol_size,
|
|
||||||
1,
|
|
||||||
frame_parms->nb_prefix_samples0,
|
|
||||||
CYCLIC_PREFIX);
|
|
||||||
|
|
||||||
apply_nr_rotation(frame_parms,
|
|
||||||
(int16_t*)&txdata[aa][tx_offset],
|
|
||||||
slot,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples0);
|
|
||||||
PHY_ofdm_mod(&gNB->common_vars.txdataF[aa][txdataF_offset+frame_parms->ofdm_symbol_size],
|
|
||||||
(int*)&txdata[aa][tx_offset+frame_parms->nb_prefix_samples0+frame_parms->ofdm_symbol_size],
|
|
||||||
frame_parms->ofdm_symbol_size,
|
|
||||||
13,
|
|
||||||
frame_parms->nb_prefix_samples,
|
|
||||||
CYCLIC_PREFIX);
|
|
||||||
apply_nr_rotation(frame_parms,
|
|
||||||
(int16_t*)&txdata[aa][tx_offset+frame_parms->nb_prefix_samples0+frame_parms->ofdm_symbol_size],
|
|
||||||
slot,
|
|
||||||
1,
|
|
||||||
13,
|
|
||||||
frame_parms->ofdm_symbol_size+frame_parms->nb_prefix_samples);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user