Commit f04846cf authored by Raymond Knopp's avatar Raymond Knopp

2 and 4 antenna testing with ulsim functional. >=3 dB gains from 2 to 4 antennas on SCM channels

parent bbe6db03
...@@ -852,7 +852,7 @@ endif (${RU} STREQUAL 0) ...@@ -852,7 +852,7 @@ endif (${RU} STREQUAL 0)
# Hardware dependant options # Hardware dependant options
################################### ###################################
add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4") add_list1_option(NB_ANTENNAS_RX "4" "Number of antennas in reception" "1" "2" "4")
add_list1_option(NB_ANTENNAS_TX "4" "Number of antennas in transmission" "1" "2" "4") add_list1_option(NB_ANTENNAS_TX "4" "Number of antennas in transmission" "1" "2" "4")
add_list2_option(RF_BOARD "EXMIMO" "RF head type" "None" "OAI_USRP" "OAI_BLADERF" "OAI_LMSSDR" "OAI_SIMU") add_list2_option(RF_BOARD "EXMIMO" "RF head type" "None" "OAI_USRP" "OAI_BLADERF" "OAI_LMSSDR" "OAI_SIMU")
......
...@@ -518,7 +518,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB, ...@@ -518,7 +518,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB,
AssertFatal (fp->symbols_per_tti > 11, "fp->symbols_per_tti %d < 12\n", fp->symbols_per_tti); AssertFatal (fp->symbols_per_tti > 11, "fp->symbols_per_tti %d < 12\n", fp->symbols_per_tti);
AssertFatal (fp->N_RB_UL > 5, "fp->N_RB_UL %d < 6\n", fp->N_RB_UL); AssertFatal (fp->N_RB_UL > 5, "fp->N_RB_UL %d < 6\n", fp->N_RB_UL);
for (i = 0; i < 2; i++) { for (i = 0; i < fp->nb_antennas_rx; i++) {
// FIXME We should get rid of this // FIXME We should get rid of this
pusch_vars[ULSCH_id]->rxdataF_ext[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti ); pusch_vars[ULSCH_id]->rxdataF_ext[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->N_RB_UL*12*fp->symbols_per_tti );
...@@ -591,7 +591,7 @@ void phy_free_lte_eNB(PHY_VARS_eNB *eNB) { ...@@ -591,7 +591,7 @@ void phy_free_lte_eNB(PHY_VARS_eNB *eNB) {
free_and_zero(prach_vars->rxsigF[0]); free_and_zero(prach_vars->rxsigF[0]);
for (int ULSCH_id=0; ULSCH_id<NUMBER_OF_ULSCH_MAX; ULSCH_id++) { for (int ULSCH_id=0; ULSCH_id<NUMBER_OF_ULSCH_MAX; ULSCH_id++) {
for (i = 0; i < 2; i++) { for (i = 0; i < fp->nb_antennas_rx; i++) {
free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext[i]); free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext[i]);
free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext2[i]); free_and_zero(pusch_vars[ULSCH_id]->rxdataF_ext2[i]);
free_and_zero(pusch_vars[ULSCH_id]->drs_ch_estimates[i]); free_and_zero(pusch_vars[ULSCH_id]->drs_ch_estimates[i]);
......
...@@ -121,8 +121,8 @@ int lte_est_timing_advance_pusch(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -121,8 +121,8 @@ int lte_est_timing_advance_pusch(LTE_DL_FRAME_PARMS *frame_parms,
int sync_pos = 0;//(frame_parms->ofdm_symbol_size-cyclic_shift*frame_parms->ofdm_symbol_size/12)%(frame_parms->ofdm_symbol_size); int sync_pos = 0;//(frame_parms->ofdm_symbol_size-cyclic_shift*frame_parms->ofdm_symbol_size/12)%(frame_parms->ofdm_symbol_size);
AssertFatal(frame_parms->ofdm_symbol_size > 127,"frame_parms->ofdm_symbol_size %d<128\n",frame_parms->ofdm_symbol_size); AssertFatal(frame_parms->ofdm_symbol_size > 127,"frame_parms->ofdm_symbol_size %d<128\n",frame_parms->ofdm_symbol_size);
AssertFatal(frame_parms->nb_antennas_rx >0 && frame_parms->nb_antennas_rx<3,"frame_parms->nb_antennas_rx %d not in [0,1]\n", AssertFatal(frame_parms->nb_antennas_rx >0 && frame_parms->nb_antennas_rx<=NB_ANTENNAS_RX,"frame_parms->nb_antennas_rx %d not in [1...%d]\n",
frame_parms->nb_antennas_rx); frame_parms->nb_antennas_rx,NB_ANTENNAS_RX);
for (i = 0; i < frame_parms->ofdm_symbol_size; i++) { for (i = 0; i < frame_parms->ofdm_symbol_size; i++) {
temp = 0; temp = 0;
......
...@@ -342,7 +342,6 @@ int main(int argc, char **argv) { ...@@ -342,7 +342,6 @@ int main(int argc, char **argv) {
int UE_id = 0; int UE_id = 0;
static int nb_rb=25,first_rb=0,mcs=0,round=0; static int nb_rb=25,first_rb=0,mcs=0,round=0;
//unsigned char l; //unsigned char l;
static int awgn_flag = 0 ;
SCM_t channel_model=Rice1; SCM_t channel_model=Rice1;
unsigned char *input_buffer=0,harq_pid; unsigned char *input_buffer=0,harq_pid;
unsigned short input_buffer_length; unsigned short input_buffer_length;
...@@ -1087,7 +1086,6 @@ int main(int argc, char **argv) { ...@@ -1087,7 +1086,6 @@ int main(int argc, char **argv) {
} }
} }
if (awgn_flag == 0) {
if (UE2eNB->max_Doppler == 0) { if (UE2eNB->max_Doppler == 0) {
multipath_channel(UE2eNB,s_re,s_im,r_re,r_im, multipath_channel(UE2eNB,s_re,s_im,r_re,r_im,
eNB->frame_parms.samples_per_tti,hold_channel,0); eNB->frame_parms.samples_per_tti,hold_channel,0);
...@@ -1095,7 +1093,6 @@ int main(int argc, char **argv) { ...@@ -1095,7 +1093,6 @@ int main(int argc, char **argv) {
multipath_tv_channel(UE2eNB,s_re,s_im,r_re,r_im, multipath_tv_channel(UE2eNB,s_re,s_im,r_re,r_im,
2*eNB->frame_parms.samples_per_tti,hold_channel); 2*eNB->frame_parms.samples_per_tti,hold_channel);
} }
}
if(abstx) { if(abstx) {
if(saving_bler==0) if(saving_bler==0)
...@@ -1303,7 +1300,7 @@ int main(int argc, char **argv) { ...@@ -1303,7 +1300,7 @@ int main(int argc, char **argv) {
LOG_UDUMPMSG(SIM,dataArray(table_rx),table_rx->size,LOG_DUMP_DOUBLE,"The receiver raw data: \n"); LOG_UDUMPMSG(SIM,dataArray(table_rx),table_rx->size,LOG_DUMP_DOUBLE,"The receiver raw data: \n");
} }
dump_ulsch_stats(NULL,eNB,0); dump_ulsch_stats(stdout,eNB,0);
printf("\n**********rb: %d ***mcs : %d *********SNR = %f dB (%f): TX %u dB (gain %f dB), N0W %f dB, I0 %u dB, delta_IF %d [ (%d,%d) dB / (%u,%u) dB ]**************************\n", printf("\n**********rb: %d ***mcs : %d *********SNR = %f dB (%f): TX %u dB (gain %f dB), N0W %f dB, I0 %u dB, delta_IF %d [ (%d,%d) dB / (%u,%u) dB ]**************************\n",
nb_rb,mcs,SNR,SNR2, nb_rb,mcs,SNR,SNR2,
tx_lev_dB, tx_lev_dB,
......
...@@ -39,10 +39,10 @@ uint8_t multipath_channel_nosigconv(channel_desc_t *desc) ...@@ -39,10 +39,10 @@ uint8_t multipath_channel_nosigconv(channel_desc_t *desc)
//#define CHANNEL_SSE //#define CHANNEL_SSE
#ifdef CHANNEL_SSE #ifdef CHANNEL_SSE
void multipath_channel(channel_desc_t *desc, void multipath_channel(channel_desc_t *desc,
double tx_sig_re[2][30720*2], double tx_sig_re[NB_ANTENNAS_TX][30720*2],
double tx_sig_im[2][30720*2], double tx_sig_im[NB_ANTENANS_TX][30720*2],
double rx_sig_re[2][30720*2], double rx_sig_re[NB_ANTENNAS_RX][30720*2],
double rx_sig_im[2][30720*2], double rx_sig_im[NB_ANTENNAS_RX][30720*2],
uint32_t length, uint32_t length,
uint8_t keep_channel, uint8_t keep_channel,
int log_channel) int log_channel)
...@@ -146,10 +146,10 @@ void multipath_channel(channel_desc_t *desc, ...@@ -146,10 +146,10 @@ void multipath_channel(channel_desc_t *desc,
#else #else
void multipath_channel(channel_desc_t *desc, void multipath_channel(channel_desc_t *desc,
double *tx_sig_re[2], double *tx_sig_re[NB_ANTENNAS_TX],
double *tx_sig_im[2], double *tx_sig_im[NB_ANTENNAS_TX],
double *rx_sig_re[2], double *rx_sig_re[NB_ANTENNAS_RX],
double *rx_sig_im[2], double *rx_sig_im[NB_ANTENNAS_RX],
uint32_t length, uint32_t length,
uint8_t keep_channel, uint8_t keep_channel,
int log_channel) int log_channel)
...@@ -198,6 +198,7 @@ void multipath_channel(channel_desc_t *desc, ...@@ -198,6 +198,7 @@ void multipath_channel(channel_desc_t *desc,
rx_tmp.x += (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].x) - (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].y); rx_tmp.x += (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].x) - (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].y);
rx_tmp.y += (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].x) + (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].y); rx_tmp.y += (tx.y * desc->ch[ii+(j*desc->nb_rx)][l].x) + (tx.x * desc->ch[ii+(j*desc->nb_rx)][l].y);
if (i==0 && log_channel == 1) { if (i==0 && log_channel == 1) {
printf("channel[%d][%d][%d] = %f dB (%e,%e)\n",ii,j,l,10*log10(pow(desc->ch[ii+(j*desc->nb_rx)][l].x,2.0)+pow(desc->ch[ii+(j*desc->nb_rx)][l].y,2.0)), printf("channel[%d][%d][%d] = %f dB (%e,%e)\n",ii,j,l,10*log10(pow(desc->ch[ii+(j*desc->nb_rx)][l].x,2.0)+pow(desc->ch[ii+(j*desc->nb_rx)][l].y,2.0)),
desc->ch[ii+(j*desc->nb_rx)][l].x, desc->ch[ii+(j*desc->nb_rx)][l].x,
...@@ -208,11 +209,11 @@ void multipath_channel(channel_desc_t *desc, ...@@ -208,11 +209,11 @@ void multipath_channel(channel_desc_t *desc,
rx_sig_re[ii][i+dd] = rx_tmp.x*path_loss; rx_sig_re[ii][i+dd] = rx_tmp.x*path_loss;
rx_sig_im[ii][i+dd] = rx_tmp.y*path_loss; rx_sig_im[ii][i+dd] = rx_tmp.y*path_loss;
#ifdef DEBUG_CHANNEL
/* if ((ii==0)&&((i%32)==0)) { if ((i%32)==0) {
printf("%p %p %f,%f => %e,%e\n",rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]); printf("rx aa %d: %p %p %f,%f => %e,%e\n",ii,rx_sig_re[ii],rx_sig_im[ii],rx_tmp.x,rx_tmp.y,rx_sig_re[ii][i-dd],rx_sig_im[ii][i-dd]);
}*/ }
#endif
//rx_sig_re[ii][i] = sqrt(.5)*(tx_sig_re[0][i] + tx_sig_re[1][i]); //rx_sig_re[ii][i] = sqrt(.5)*(tx_sig_re[0][i] + tx_sig_re[1][i]);
//rx_sig_im[ii][i] = sqrt(.5)*(tx_sig_im[0][i] + tx_sig_im[1][i]); //rx_sig_im[ii][i] = sqrt(.5)*(tx_sig_im[0][i] + tx_sig_im[1][i]);
......
...@@ -300,10 +300,10 @@ void set_channeldesc_owner(channel_desc_t *cdesc, channelmod_moduleid_t module_i ...@@ -300,10 +300,10 @@ void set_channeldesc_owner(channel_desc_t *cdesc, channelmod_moduleid_t module_i
int random_channel(channel_desc_t *desc, uint8_t abstraction_flag); int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
/**\fn void multipath_channel(channel_desc_t *desc, /**\fn void multipath_channel(channel_desc_t *desc,
double tx_sig_re[2], double tx_sig_re[NB_ANTENNAS_TX],
double tx_sig_im[2], double tx_sig_im[NB_ANTENANS_TX],
double rx_sig_re[2], double rx_sig_re[NB_ANTENNAS_RX],
double rx_sig_im[2], double rx_sig_im[NB_ANTENNAS_RX],
uint32_t length, uint32_t length,
uint8_t keep_channel, uint8_t keep_channel,
int log_channel) int log_channel)
...@@ -320,10 +320,10 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag); ...@@ -320,10 +320,10 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag);
*/ */
void multipath_channel(channel_desc_t *desc, void multipath_channel(channel_desc_t *desc,
double *tx_sig_re[2], double *tx_sig_re[NB_ANTENNAS_TX],
double *tx_sig_im[2], double *tx_sig_im[NB_ANTENNAS_TX],
double *rx_sig_re[2], double *rx_sig_re[NB_ANTENNAS_RX],
double *rx_sig_im[2], double *rx_sig_im[NB_ANTENNAS_RX],
uint32_t length, uint32_t length,
uint8_t keep_channel, uint8_t keep_channel,
int log_channel); int log_channel);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment