fixes for tdd (N_TA_offset was not initialized) + some other code cleanup
tested with both EXMIMO and USRP. performance better than in master branch.
This commit is contained in:
+30
-21
@@ -134,8 +134,8 @@ time_stats_t softmodem_stats_mt; // main thread
|
|||||||
time_stats_t softmodem_stats_hw; // hw acquisition
|
time_stats_t softmodem_stats_hw; // hw acquisition
|
||||||
time_stats_t softmodem_stats_rxtx_sf; // total tx time
|
time_stats_t softmodem_stats_rxtx_sf; // total tx time
|
||||||
time_stats_t softmodem_stats_rx_sf; // total rx time
|
time_stats_t softmodem_stats_rx_sf; // total rx time
|
||||||
int32_t **rxdata;
|
//int32_t **rxdata;
|
||||||
int32_t **txdata;
|
//int32_t **txdata;
|
||||||
|
|
||||||
uint8_t seqno; //sequence number
|
uint8_t seqno; //sequence number
|
||||||
|
|
||||||
@@ -302,12 +302,13 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) {
|
|||||||
6,
|
6,
|
||||||
phy_vars_eNB->frame_parms.nb_prefix_samples,
|
phy_vars_eNB->frame_parms.nb_prefix_samples,
|
||||||
CYCLIC_PREFIX);
|
CYCLIC_PREFIX);
|
||||||
PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
|
if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_DL)
|
||||||
dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1),
|
PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
|
||||||
phy_vars_eNB->frame_parms.ofdm_symbol_size,
|
dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1),
|
||||||
6,
|
phy_vars_eNB->frame_parms.ofdm_symbol_size,
|
||||||
phy_vars_eNB->frame_parms.nb_prefix_samples,
|
6,
|
||||||
CYCLIC_PREFIX);
|
phy_vars_eNB->frame_parms.nb_prefix_samples,
|
||||||
|
CYCLIC_PREFIX);
|
||||||
} else {
|
} else {
|
||||||
normal_prefix_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F],
|
normal_prefix_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F],
|
||||||
dummy_tx_b,
|
dummy_tx_b,
|
||||||
@@ -385,7 +386,7 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) {
|
|||||||
// turn on tx switch N_TA_offset before
|
// turn on tx switch N_TA_offset before
|
||||||
//LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,phy_vars_eNB->N_TA_offset,slot_offset);
|
//LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,phy_vars_eNB->N_TA_offset,slot_offset);
|
||||||
for (i=0; i<phy_vars_eNB->N_TA_offset; i++) {
|
for (i=0; i<phy_vars_eNB->N_TA_offset; i++) {
|
||||||
tx_offset = (int)slot_offset+time_offset[aa]+i-phy_vars_eNB->N_TA_offset/2;
|
tx_offset = (int)slot_offset+time_offset[aa]+i-phy_vars_eNB->N_TA_offset;
|
||||||
if (tx_offset<0)
|
if (tx_offset<0)
|
||||||
tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
|
tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
|
||||||
|
|
||||||
@@ -468,8 +469,16 @@ void proc_tx_full(PHY_VARS_eNB *eNB,
|
|||||||
// if TX fronthaul go ahead
|
// if TX fronthaul go ahead
|
||||||
if (eNB->tx_fh) eNB->tx_fh(eNB,proc);
|
if (eNB->tx_fh) eNB->tx_fh(eNB,proc);
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (proc->frame_tx>1000) {
|
||||||
|
write_output("/tmp/txsig0.m","txs0", &eNB->common_vars.txdata[eNB->Mod_id][0][0], eNB->frame_parms.samples_per_tti*10,1,1);
|
||||||
|
write_output("/tmp/txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB->Mod_id][0][0],eNB->frame_parms.symbols_per_tti*eNB->frame_parms.ofdm_symbol_size*10,1,1);
|
||||||
|
write_output("/tmp/txsig1.m","txs1", &eNB->common_vars.txdata[eNB->Mod_id][1][0], eNB->frame_parms.samples_per_tti*10,1,1);
|
||||||
|
write_output("/tmp/txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB->Mod_id][1][0],eNB->frame_parms.symbols_per_tti*eNB->frame_parms.ofdm_symbol_size*10,1,1);
|
||||||
|
//if (transmission_mode == 7) write_output("/tmp/txsigF5.m","txsF5", &eNB->common_vars.txdataF[eNB->Mod_id][5][0],eNB->frame_parms.symbols_per_tti*eNB->frame_parms.ofdm_symbol_size*10,1,1);
|
||||||
|
exit_fun("");
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void proc_tx_rru_if4p5(PHY_VARS_eNB *eNB,
|
void proc_tx_rru_if4p5(PHY_VARS_eNB *eNB,
|
||||||
@@ -539,7 +548,8 @@ int wait_CCs(eNB_rxtx_proc_t *proc) {
|
|||||||
static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_name) {
|
static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_name) {
|
||||||
|
|
||||||
start_meas(&softmodem_stats_rxtx_sf);
|
start_meas(&softmodem_stats_rxtx_sf);
|
||||||
// ****************************************
|
|
||||||
|
// ****************************************
|
||||||
// Common RX procedures subframe n
|
// Common RX procedures subframe n
|
||||||
phy_procedures_eNB_common_RX(eNB);
|
phy_procedures_eNB_common_RX(eNB);
|
||||||
|
|
||||||
@@ -1477,7 +1487,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
|||||||
int i, CC_id;
|
int i, CC_id;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
uint16_t N_TA_offset = 0;
|
//uint16_t N_TA_offset = 0;
|
||||||
|
|
||||||
LTE_DL_FRAME_PARMS *frame_parms;
|
LTE_DL_FRAME_PARMS *frame_parms;
|
||||||
|
|
||||||
@@ -1490,6 +1500,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
|||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
if (frame_parms->frame_type == TDD) {
|
if (frame_parms->frame_type == TDD) {
|
||||||
if (frame_parms->N_RB_DL == 100)
|
if (frame_parms->N_RB_DL == 100)
|
||||||
N_TA_offset = 624;
|
N_TA_offset = 624;
|
||||||
@@ -1498,7 +1509,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
|||||||
else if (frame_parms->N_RB_DL == 25)
|
else if (frame_parms->N_RB_DL == 25)
|
||||||
N_TA_offset = 624/4;
|
N_TA_offset = 624/4;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
if (openair0_cfg[CC_id].mmapped_dma == 1) {
|
if (openair0_cfg[CC_id].mmapped_dma == 1) {
|
||||||
@@ -1508,11 +1519,8 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
|||||||
printf("Mapping eNB CC_id %d, rx_ant %d\n",CC_id,i);
|
printf("Mapping eNB CC_id %d, rx_ant %d\n",CC_id,i);
|
||||||
free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
|
free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
|
||||||
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = openair0_cfg[CC_id].rxbase[i];
|
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = openair0_cfg[CC_id].rxbase[i];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
printf("rxdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
|
printf("rxdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
|
||||||
|
|
||||||
for (j=0; j<16; j++) {
|
for (j=0; j<16; j++) {
|
||||||
printf("rxbuffer %d: %x\n",j,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j]);
|
printf("rxbuffer %d: %x\n",j,phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j]);
|
||||||
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j] = 16-j;
|
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i][j] = 16-j;
|
||||||
@@ -1533,15 +1541,15 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // not memory-mapped DMA
|
else { // not memory-mapped DMA
|
||||||
|
//nothing to do, everything already allocated in lte_init
|
||||||
|
/*
|
||||||
rxdata = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*));
|
rxdata = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*));
|
||||||
txdata = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*));
|
txdata = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*));
|
||||||
|
|
||||||
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
|
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
|
||||||
free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
|
free(phy_vars_eNB[CC_id]->common_vars.rxdata[0][i]);
|
||||||
rxdata[i] = (int32_t*)(32 + malloc16(32+frame_parms->samples_per_tti*10*sizeof(int32_t))); // FIXME broken memory allocation
|
rxdata[i] = (int32_t*)(32 + malloc16(32+frame_parms->samples_per_tti*10*sizeof(int32_t))); // FIXME broken memory allocation
|
||||||
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = rxdata[i]-N_TA_offset; // N_TA offset for TDD FIXME! N_TA_offset > 16 => access of unallocated memory
|
phy_vars_eNB[CC_id]->common_vars.rxdata[0][i] = rxdata[i]; //-N_TA_offset; // N_TA offset for TDD FIXME! N_TA_offset > 16 => access of unallocated memory
|
||||||
memset(rxdata[i], 0, frame_parms->samples_per_tti*10*sizeof(int32_t));
|
memset(rxdata[i], 0, frame_parms->samples_per_tti*10*sizeof(int32_t));
|
||||||
printf("rxdata[%d] @ %p (%p) (N_TA_OFFSET %d)\n", i, phy_vars_eNB[CC_id]->common_vars.rxdata[0][i],rxdata[i],N_TA_offset);
|
printf("rxdata[%d] @ %p (%p) (N_TA_OFFSET %d)\n", i, phy_vars_eNB[CC_id]->common_vars.rxdata[0][i],rxdata[i],N_TA_offset);
|
||||||
}
|
}
|
||||||
@@ -1553,6 +1561,7 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
|
|||||||
memset(txdata[i],0, frame_parms->samples_per_tti*10*sizeof(int32_t));
|
memset(txdata[i],0, frame_parms->samples_per_tti*10*sizeof(int32_t));
|
||||||
printf("txdata[%d] @ %p\n", i, phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
|
printf("txdata[%d] @ %p\n", i, phy_vars_eNB[CC_id]->common_vars.txdata[0][i]);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1583,7 +1583,18 @@ int main( int argc, char **argv )
|
|||||||
|
|
||||||
UE[CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0] + rx_gain_off;
|
UE[CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0] + rx_gain_off;
|
||||||
UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
|
UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id];
|
||||||
UE[CC_id]->N_TA_offset = 0;
|
|
||||||
|
if (frame_parms[CC_id]->frame_type==FDD) {
|
||||||
|
UE[CC_id]->N_TA_offset = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (frame_parms[CC_id]->N_RB_DL == 100)
|
||||||
|
UE[CC_id]->N_TA_offset = 624;
|
||||||
|
else if (frame_parms[CC_id]->N_RB_DL == 50)
|
||||||
|
UE[CC_id]->N_TA_offset = 624/2;
|
||||||
|
else if (frame_parms[CC_id]->N_RB_DL == 25)
|
||||||
|
UE[CC_id]->N_TA_offset = 624/4;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1623,8 +1634,17 @@ int main( int argc, char **argv )
|
|||||||
|
|
||||||
PHY_vars_eNB_g[0][CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0];
|
PHY_vars_eNB_g[0][CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0];
|
||||||
|
|
||||||
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 0;
|
if (frame_parms[CC_id]->frame_type==FDD) {
|
||||||
|
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (frame_parms[CC_id]->N_RB_DL == 100)
|
||||||
|
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 624;
|
||||||
|
else if (frame_parms[CC_id]->N_RB_DL == 50)
|
||||||
|
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 624/2;
|
||||||
|
else if (frame_parms[CC_id]->N_RB_DL == 25)
|
||||||
|
PHY_vars_eNB_g[0][CC_id]->N_TA_offset = 624/4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+12
-12
@@ -98,8 +98,8 @@ extern uint32_t downlink_frequency[MAX_NUM_CCs][4];
|
|||||||
extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
|
extern int32_t uplink_frequency_offset[MAX_NUM_CCs][4];
|
||||||
extern int oai_exit;
|
extern int oai_exit;
|
||||||
|
|
||||||
extern int32_t **rxdata;
|
int32_t **rxdata;
|
||||||
extern int32_t **txdata;
|
int32_t **txdata;
|
||||||
|
|
||||||
//extern unsigned int tx_forward_nsamps;
|
//extern unsigned int tx_forward_nsamps;
|
||||||
//extern int tx_delay;
|
//extern int tx_delay;
|
||||||
@@ -1628,14 +1628,14 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (frame_parms->frame_type == TDD) {
|
if (frame_parms->frame_type == TDD) {
|
||||||
if (frame_parms->N_RB_DL == 100)
|
if (frame_parms->N_RB_DL == 100)
|
||||||
N_TA_offset = 624;
|
N_TA_offset = 624;
|
||||||
else if (frame_parms->N_RB_DL == 50)
|
else if (frame_parms->N_RB_DL == 50)
|
||||||
N_TA_offset = 624/2;
|
N_TA_offset = 624/2;
|
||||||
else if (frame_parms->N_RB_DL == 25)
|
else if (frame_parms->N_RB_DL == 25)
|
||||||
N_TA_offset = 624/4;
|
N_TA_offset = 624/4;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// replace RX signal buffers with mmaped HW versions
|
// replace RX signal buffers with mmaped HW versions
|
||||||
@@ -1645,9 +1645,9 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, openair0_config_t *openair0_cfg)
|
|||||||
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
|
for (i=0; i<frame_parms->nb_antennas_rx; i++) {
|
||||||
printf( "Mapping UE CC_id %d, rx_ant %d, freq %u on card %d, chain %d\n", CC_id, i, downlink_frequency[CC_id][i], rf_map->card, rf_map->chain+i );
|
printf( "Mapping UE CC_id %d, rx_ant %d, freq %u on card %d, chain %d\n", CC_id, i, downlink_frequency[CC_id][i], rf_map->card, rf_map->chain+i );
|
||||||
free( phy_vars_ue[CC_id]->common_vars.rxdata[i] );
|
free( phy_vars_ue[CC_id]->common_vars.rxdata[i] );
|
||||||
rxdata[i] = (int32_t*)malloc16_clear( 307200*sizeof(int32_t) );
|
rxdata[i] = (int32_t*)malloc16_clear( 307200*sizeof(int32_t) );
|
||||||
phy_vars_ue[CC_id]->common_vars.rxdata[i] = rxdata[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD
|
phy_vars_ue[CC_id]->common_vars.rxdata[i] = rxdata[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD
|
||||||
printf("rxdata[%d] : %p\n",i,rxdata[i]);
|
printf("rxdata[%d] : %p\n",i,rxdata[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<frame_parms->nb_antennas_tx; i++) {
|
for (i=0; i<frame_parms->nb_antennas_tx; i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user