Merge remote-tracking branch 'main/develop' into T
Conflicts: cmake_targets/CMakeLists.txt cmake_targets/build_oai openair1/PHY/LTE_TRANSPORT/pucch.c openair1/SCHED/phy_procedures_lte_eNb.c openair2/LAYER2/MAC/eNB_scheduler_ulsch.c targets/RT/USER/lte-softmodem.c
This commit is contained in:
@@ -288,7 +288,7 @@ int emu_transport_handle_ue_info(bypass_msg_header_t *messg,
|
||||
n_ue, total_header+total_tbs,total_header,total_tbs);
|
||||
}
|
||||
|
||||
#warning "CC id should be adjusted, set to zero for the moment"
|
||||
//#warning "CC id should be adjusted, set to zero for the moment"
|
||||
memcpy(&UE_transport_info[n_ue][CC_id], UE_info, total_header + total_tbs);
|
||||
|
||||
/* Go to the next UE info */
|
||||
|
||||
@@ -291,7 +291,6 @@ void fill_phy_enb_vars(unsigned int enb_id, uint8_t CC_id,unsigned int next_slot
|
||||
LTE_eNB_DLSCH_t *dlsch_eNB;
|
||||
unsigned short ue_id;
|
||||
uint8_t nb_total_dci;
|
||||
int i;
|
||||
|
||||
// eNB
|
||||
// PBCH : copy payload
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/vars.h"
|
||||
#include "MAC_INTERFACE/vars.h"
|
||||
|
||||
#include "SCHED/defs.h"
|
||||
#include "SCHED/vars.h"
|
||||
@@ -100,7 +99,7 @@ uint64_t DLSCH_alloc_pdu_1[2];
|
||||
#define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2)
|
||||
//#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
|
||||
//#define DLSCH_RB_ALLOC 0x0001
|
||||
void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms)
|
||||
void do_OFDM_mod_l(int32_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms)
|
||||
{
|
||||
|
||||
int aa, slot_offset, slot_offset_F;
|
||||
@@ -215,12 +214,12 @@ int main(int argc, char **argv)
|
||||
// void *data;
|
||||
// int ii;
|
||||
// int bler;
|
||||
double blerr[4],uncoded_ber;//,avg_ber;
|
||||
double blerr[4],uncoded_ber,avg_ber;
|
||||
short *uncoded_ber_bit=NULL;
|
||||
uint8_t N_RB_DL=25,osf=1;
|
||||
frame_t frame_type = FDD;
|
||||
int xforms=0;
|
||||
FD_lte_phy_scope_ue *form_ue;
|
||||
FD_lte_phy_scope_ue *form_ue = NULL;
|
||||
char title[255];
|
||||
uint32_t DLSCH_RB_ALLOC = 0x1fff;
|
||||
int numCCE=0;
|
||||
@@ -2112,7 +2111,7 @@ PMI_FEEDBACK:
|
||||
|
||||
// printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback);
|
||||
for (aa=0; aa<PHY_vars_eNB->lte_frame_parms.nb_antennas_tx; aa++) {
|
||||
memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t));
|
||||
memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
|
||||
}
|
||||
|
||||
if (input_fd==NULL) {
|
||||
@@ -2624,6 +2623,8 @@ PMI_FEEDBACK:
|
||||
num_pdcch_symbols,
|
||||
PHY_vars_eNB->dlsch_eNB[k][0],
|
||||
PHY_vars_eNB->dlsch_eNB[k][1]);
|
||||
/* avoid gcc warnings */
|
||||
(void)re_allocated;
|
||||
|
||||
stop_meas(&PHY_vars_eNB->dlsch_modulation_stats);
|
||||
/*
|
||||
@@ -3290,7 +3291,7 @@ PMI_FEEDBACK:
|
||||
PHY_vars_UE->dlsch_ue[0][cw]->harq_processes[PHY_vars_UE->dlsch_ue[0][cw]->current_harq_pid]->G = coded_bits_per_codeword;
|
||||
|
||||
|
||||
/*
|
||||
|
||||
// calculate uncoded BLER
|
||||
uncoded_ber=0;
|
||||
for (i=0;i<coded_bits_per_codeword;i++)
|
||||
@@ -3306,7 +3307,7 @@ PMI_FEEDBACK:
|
||||
|
||||
if (n_frames==1)
|
||||
write_output("uncoded_ber_bit.m","uncoded_ber_bit",uncoded_ber_bit,coded_bits_per_codeword,1,0);
|
||||
*/
|
||||
|
||||
|
||||
start_meas(&PHY_vars_UE->dlsch_unscrambling_stats);
|
||||
dlsch_unscrambling(&PHY_vars_UE->lte_frame_parms,
|
||||
@@ -3417,12 +3418,12 @@ PMI_FEEDBACK:
|
||||
}
|
||||
|
||||
sprintf(fname,"rxsig0_r%d.m",round);
|
||||
sprintf(vname,"rxs0_r%d.m",round);
|
||||
sprintf(vname,"rxs0_r%d",round);
|
||||
write_output(fname,vname, &PHY_vars_UE->lte_ue_common_vars.rxdata[0][0],10*PHY_vars_UE->lte_frame_parms.samples_per_tti,1,1);
|
||||
sprintf(fname,"rxsigF0_r%d.m",round);
|
||||
sprintf(vname,"rxs0F_r%d.m",round);
|
||||
sprintf(vname,"rxs0F_r%d",round);
|
||||
write_output(fname,vname, &PHY_vars_UE->lte_ue_common_vars.rxdataF[0][0],2*PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,2,1);
|
||||
|
||||
|
||||
if (PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) {
|
||||
sprintf(fname,"rxsig1_r%d.m",round);
|
||||
sprintf(vname,"rxs1_r%d.m",round);
|
||||
@@ -3433,14 +3434,14 @@ PMI_FEEDBACK:
|
||||
}
|
||||
|
||||
sprintf(fname,"dlsch00_r%d.m",round);
|
||||
sprintf(vname,"dl00_r%d.m",round);
|
||||
sprintf(vname,"dl00_r%d",round);
|
||||
write_output(fname,vname,
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][0][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1);
|
||||
|
||||
if (PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) {
|
||||
sprintf(fname,"dlsch01_r%d.m",round);
|
||||
sprintf(vname,"dl01_r%d.m",round);
|
||||
sprintf(vname,"dl01_r%d",round);
|
||||
write_output(fname,vname,
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][1][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||
@@ -3448,7 +3449,7 @@ PMI_FEEDBACK:
|
||||
|
||||
if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1) {
|
||||
sprintf(fname,"dlsch10_r%d.m",round);
|
||||
sprintf(vname,"dl10_r%d.m",round);
|
||||
sprintf(vname,"dl10_r%d",round);
|
||||
write_output(fname,vname,
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][2][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||
@@ -3456,7 +3457,7 @@ PMI_FEEDBACK:
|
||||
|
||||
if ((PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) && (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)) {
|
||||
sprintf(fname,"dlsch11_r%d.m",round);
|
||||
sprintf(vname,"dl11_r%d.m",round);
|
||||
sprintf(vname,"dl11_r%d",round);
|
||||
write_output(fname,vname,
|
||||
&(PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[eNB_id][3][0]),
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb/2,1,1);
|
||||
@@ -3987,7 +3988,7 @@ PMI_FEEDBACK:
|
||||
printf("[continue] effective rate : %f (%2.1f%%,%f)): increase snr \n",rate*effective_rate, 100*effective_rate, rate);
|
||||
}
|
||||
|
||||
if (((double)errs[0]/(round_trials[0]))<1e-2)
|
||||
if (((double)errs[0]/(round_trials[0]))<(10.0/n_frames))
|
||||
break;
|
||||
}// SNR
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/vars.h"
|
||||
#include "MAC_INTERFACE/vars.h"
|
||||
#ifdef EMOS
|
||||
#include "SCHED/phy_procedures_emos.h"
|
||||
#endif
|
||||
@@ -128,11 +127,10 @@ int main(int argc, char **argv)
|
||||
|
||||
char c;
|
||||
|
||||
int i,l,aa,aarx,k;
|
||||
int i,l,l2,aa,aarx,k;
|
||||
double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1=0.0;
|
||||
uint8_t snr1set=0;
|
||||
double snr_step=1,input_snr_step=1;
|
||||
//mod_sym_t **txdataF;
|
||||
int **txdata;
|
||||
double **s_re,**s_im,**r_re,**r_im;
|
||||
double iqim = 0.0;
|
||||
@@ -337,7 +335,11 @@ int main(int argc, char **argv)
|
||||
else
|
||||
sprintf(fname,"embms_awgn_%d_%d.m",mcs,N_RB_DL);
|
||||
|
||||
fd = fopen(fname,"w");
|
||||
if (!(fd = fopen(fname,"w"))) {
|
||||
printf("Cannot open %s, check permissions\n",fname);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
||||
if (awgn_flag==0)
|
||||
fprintf(fd,"SNR_%d_%d=[];errs_mch_%d_%d=[];mch_trials_%d_%d=[];\n",
|
||||
@@ -452,7 +454,7 @@ int main(int argc, char **argv)
|
||||
//if (trials%100==0)
|
||||
//eNB2UE[0]->first_run = 1;
|
||||
eNB2UE->first_run = 1;
|
||||
memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t));
|
||||
memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
|
||||
|
||||
generate_mch(PHY_vars_eNB,sched_subframe,input_buffer,0);
|
||||
|
||||
@@ -538,11 +540,25 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rx_pmch(PHY_vars_UE,
|
||||
0,
|
||||
subframe%10,
|
||||
l);
|
||||
|
||||
if (l==6)
|
||||
for (l2=2;l2<7;l2++)
|
||||
rx_pmch(PHY_vars_UE,
|
||||
0,
|
||||
subframe%10,
|
||||
l2);
|
||||
if (l==6)
|
||||
for (l2=2;l2<7;l2++)
|
||||
rx_pmch(PHY_vars_UE,
|
||||
0,
|
||||
subframe%10,
|
||||
l2);
|
||||
if (l==11)
|
||||
for (l2=7;l2<12;l2++)
|
||||
rx_pmch(PHY_vars_UE,
|
||||
0,
|
||||
subframe%10,
|
||||
l2);
|
||||
}
|
||||
|
||||
PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->G = get_G(&PHY_vars_UE->lte_frame_parms,
|
||||
@@ -583,10 +599,10 @@ int main(int argc, char **argv)
|
||||
mcs,N_RB_DL,mcs,N_RB_DL,errs[0],
|
||||
mcs,N_RB_DL,mcs,N_RB_DL,trials);
|
||||
else
|
||||
fprintf(fd,"SNR_awgn_%d = [SNR_awgn_%d %d]; errs_mch_awgn_%d =[errs_mch_awgn_%f %d]; mch_trials_awgn_%d =[mch_trials_awgn_%d %d];\n",
|
||||
mcs,N_RB_DL,mcs,N_RB_DL,SNR,
|
||||
mcs,N_RB_DL,mcs,N_RB_DL,errs[0],
|
||||
mcs,N_RB_DL,mcs,N_RB_DL,trials);
|
||||
fprintf(fd,"SNR_awgn_%d = [SNR_awgn_%d %f]; errs_mch_awgn_%d =[errs_mch_awgn_%d %d]; mch_trials_awgn_%d =[mch_trials_awgn_%d %d];\n",
|
||||
N_RB_DL,N_RB_DL,SNR,
|
||||
N_RB_DL,N_RB_DL,errs[0],
|
||||
N_RB_DL,N_RB_DL,trials);
|
||||
|
||||
fflush(fd);
|
||||
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/vars.h"
|
||||
#include "MAC_INTERFACE/vars.h"
|
||||
|
||||
#ifdef EMOS
|
||||
#include "SCHED/phy_procedures_emos.h"
|
||||
@@ -58,11 +57,11 @@ PHY_VARS_UE *PHY_vars_UE;
|
||||
|
||||
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
|
||||
|
||||
mod_sym_t *dummybuf[4];
|
||||
mod_sym_t dummy0[2048*14];
|
||||
mod_sym_t dummy1[2048*14];
|
||||
mod_sym_t dummy2[2048*14];
|
||||
mod_sym_t dummy3[2048*14];
|
||||
int32_t *dummybuf[4];
|
||||
int32_t dummy0[2048*14];
|
||||
int32_t dummy1[2048*14];
|
||||
int32_t dummy2[2048*14];
|
||||
int32_t dummy3[2048*14];
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
@@ -73,16 +72,15 @@ int main(int argc, char **argv)
|
||||
int i,l,aa;
|
||||
double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1;
|
||||
uint8_t snr1set=0;
|
||||
//mod_sym_t **txdataF;
|
||||
int **txdata,**txdata1,**txdata2;
|
||||
double **s_re,**s_im,**s_re1,**s_im1,**s_re2,**s_im2,**r_re,**r_im,**r_re1,**r_im1,**r_re2,**r_im2;
|
||||
double iqim = 0.0;
|
||||
unsigned char pbch_pdu[6];
|
||||
// int sync_pos, sync_pos_slot;
|
||||
// FILE *rx_frame_file;
|
||||
FILE *output_fd;
|
||||
FILE *output_fd = NULL;
|
||||
uint8_t write_output_file=0;
|
||||
int result;
|
||||
//int result;
|
||||
int freq_offset;
|
||||
// int subframe_offset;
|
||||
// char fname[40], vname[40];
|
||||
@@ -91,8 +89,8 @@ int main(int argc, char **argv)
|
||||
uint16_t Nid_cell=0;
|
||||
|
||||
int n_frames=1;
|
||||
channel_desc_t *eNB2UE,*eNB2UE1,*eNB2UE2;
|
||||
uint32_t nsymb,tx_lev,tx_lev1,tx_lev2;
|
||||
channel_desc_t *eNB2UE,*eNB2UE1 = NULL,*eNB2UE2 = NULL;
|
||||
uint32_t nsymb,tx_lev,tx_lev1 = 0,tx_lev2 = 0;
|
||||
uint8_t extended_prefix_flag=0;
|
||||
int8_t interf1=-21,interf2=-21;
|
||||
LTE_DL_FRAME_PARMS *frame_parms;
|
||||
@@ -104,12 +102,12 @@ int main(int argc, char **argv)
|
||||
char input_val_str[50],input_val_str2[50];
|
||||
// double input_val1,input_val2;
|
||||
// uint16_t amask=0;
|
||||
uint8_t frame_mod4,num_pdcch_symbols;
|
||||
uint8_t frame_mod4,num_pdcch_symbols = 0;
|
||||
uint16_t NB_RB=25;
|
||||
|
||||
SCM_t channel_model=AWGN;//Rayleigh1_anticorr;
|
||||
|
||||
DCI_ALLOC_t dci_alloc[8];
|
||||
//DCI_ALLOC_t dci_alloc[8];
|
||||
uint8_t abstraction_flag=0;//,calibration_flag=0;
|
||||
double pbch_sinr;
|
||||
int pbch_tx_ant;
|
||||
@@ -604,7 +602,7 @@ int main(int argc, char **argv)
|
||||
dummybuf[2] = dummy2;
|
||||
dummybuf[3] = dummy3;
|
||||
generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
|
||||
(mod_sym_t**)dummybuf,
|
||||
(int32_t**)dummybuf,
|
||||
AMP,
|
||||
&PHY_vars_eNB->lte_frame_parms,
|
||||
pbch_pdu,
|
||||
@@ -782,7 +780,10 @@ int main(int argc, char **argv)
|
||||
i=0;
|
||||
|
||||
while (!feof(input_fd)) {
|
||||
fscanf(input_fd,"%s %s",input_val_str,input_val_str2);//&input_val1,&input_val2);
|
||||
if (fscanf(input_fd,"%s %s",input_val_str,input_val_str2) != 2) { //&input_val1,&input_val2);
|
||||
printf("%s:%d:%s: error with fscanf, exiting\n", __FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((i%4)==0) {
|
||||
((short*)txdata[0])[i/2] = (short)((1<<15)*strtod(input_val_str,NULL));
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/vars.h"
|
||||
#include "MAC_INTERFACE/vars.h"
|
||||
|
||||
#ifdef EMOS
|
||||
#include "SCHED/phy_procedures_emos.h"
|
||||
@@ -67,9 +66,9 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
|
||||
uint32_t UL_alloc_pdu[2];
|
||||
|
||||
int i;
|
||||
int dci_length_bytes,dci_length;
|
||||
int BCCH_pdu_size_bits, BCCH_pdu_size_bytes;
|
||||
int UL_pdu_size_bits, UL_pdu_size_bytes;
|
||||
int dci_length_bytes=0,dci_length=0;
|
||||
int BCCH_pdu_size_bits=0, BCCH_pdu_size_bytes=0;
|
||||
int UL_pdu_size_bits=0, UL_pdu_size_bytes=0;
|
||||
int mcs = 3;
|
||||
|
||||
DCI_pdu.Num_ue_spec_dci = 0;
|
||||
@@ -393,11 +392,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
|
||||
|
||||
|
||||
|
||||
DCI_pdu.nCCE = 0;
|
||||
|
||||
for (i=0; i<DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci; i++) {
|
||||
DCI_pdu.nCCE += (1<<(DCI_pdu.dci_alloc[i].L));
|
||||
}
|
||||
|
||||
return(&DCI_pdu);
|
||||
}
|
||||
@@ -411,7 +406,6 @@ int main(int argc, char **argv)
|
||||
|
||||
int i,l,aa;
|
||||
double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1;
|
||||
//mod_sym_t **txdataF;
|
||||
|
||||
int **txdata;
|
||||
double **s_re,**s_im,**r_re,**r_im;
|
||||
@@ -712,6 +706,7 @@ int main(int argc, char **argv)
|
||||
Nid_cell,
|
||||
tdd_config,
|
||||
N_RB_DL,
|
||||
0,
|
||||
osf,
|
||||
perfect_ce);
|
||||
|
||||
@@ -774,8 +769,8 @@ int main(int argc, char **argv)
|
||||
|
||||
|
||||
|
||||
PHY_vars_eNB->ulsch_eNB[0] = new_eNB_ulsch(8,MAX_TURBO_ITERATIONS,N_RB_DL,0);
|
||||
PHY_vars_UE->ulsch_ue[0] = new_ue_ulsch(8,N_RB_DL,0);
|
||||
PHY_vars_eNB->ulsch_eNB[0] = new_eNB_ulsch(MAX_TURBO_ITERATIONS,N_RB_DL,0);
|
||||
PHY_vars_UE->ulsch_ue[0] = new_ue_ulsch(N_RB_DL,0);
|
||||
|
||||
|
||||
PHY_vars_eNB->proc[subframe].frame_tx = 0;
|
||||
@@ -789,6 +784,11 @@ int main(int argc, char **argv)
|
||||
while (!feof(input_fd)) {
|
||||
ret=fscanf(input_fd,"%s %s",input_val_str,input_val_str2);//&input_val1,&input_val2);
|
||||
|
||||
if (ret != 2) {
|
||||
printf("%s:%d:%s: fscanf error, exiting\n", __FILE__, __LINE__, __FUNCTION__);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ((i%4)==0) {
|
||||
((short*)txdata[0])[i/2] = (short)((1<<15)*strtod(input_val_str,NULL));
|
||||
((short*)txdata[0])[(i/2)+1] = (short)((1<<15)*strtod(input_val_str2,NULL));
|
||||
@@ -834,7 +834,7 @@ int main(int argc, char **argv)
|
||||
|
||||
// printf("DCI (SF %d): txdataF %p (0 %p)\n",subframe,&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][512*14*subframe],&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0]);
|
||||
for (aa=0; aa<PHY_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB; aa++) {
|
||||
memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t));
|
||||
memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
|
||||
|
||||
/*
|
||||
re_offset = PHY_vars_eNB->lte_frame_parms.first_carrier_offset;
|
||||
|
||||
@@ -34,10 +34,6 @@
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/vars.h"
|
||||
#include "MAC_INTERFACE/vars.h"
|
||||
#ifdef IFFT_FPGA
|
||||
#include "PHY/LTE_REFSIG/mod_table.h"
|
||||
#endif
|
||||
#ifdef EMOS
|
||||
#include "SCHED/phy_procedures_emos.h"
|
||||
#endif
|
||||
@@ -58,6 +54,8 @@ PHY_VARS_UE *PHY_vars_UE;
|
||||
|
||||
extern uint16_t prach_root_sequence_map0_3[838];
|
||||
|
||||
void dump_prach_config(LTE_DL_FRAME_PARMS *frame_parms,uint8_t subframe);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
|
||||
@@ -68,13 +66,10 @@ int main(int argc, char **argv)
|
||||
uint8_t snr1set=0;
|
||||
uint8_t ue_speed1set=0;
|
||||
//mod_sym_t **txdataF;
|
||||
#ifdef IFFT_FPGA
|
||||
int **txdataF2;
|
||||
#endif
|
||||
int **txdata;
|
||||
double **s_re,**s_im,**r_re,**r_im;
|
||||
double iqim=0.0;
|
||||
int trial, ntrials=1;
|
||||
int trial; //, ntrials=1;
|
||||
uint8_t transmission_mode = 1,n_tx=1,n_rx=1;
|
||||
uint16_t Nid_cell=0;
|
||||
|
||||
@@ -82,7 +77,7 @@ int main(int argc, char **argv)
|
||||
uint8_t hs_flag=0;
|
||||
int n_frames=1;
|
||||
channel_desc_t *UE2eNB;
|
||||
uint32_t nsymb,tx_lev,tx_lev_dB;
|
||||
uint32_t nsymb,tx_lev; //,tx_lev_dB;
|
||||
uint8_t extended_prefix_flag=0;
|
||||
// int8_t interf1=-19,interf2=-19;
|
||||
LTE_DL_FRAME_PARMS *frame_parms;
|
||||
@@ -101,8 +96,8 @@ int main(int argc, char **argv)
|
||||
uint16_t preamble_energy_list[64],preamble_tx=99,preamble_delay_list[64];
|
||||
uint16_t preamble_max,preamble_energy_max;
|
||||
PRACH_RESOURCES_t prach_resources;
|
||||
uint8_t prach_fmt;
|
||||
int N_ZC;
|
||||
//uint8_t prach_fmt;
|
||||
//int N_ZC;
|
||||
int delay = 0;
|
||||
double delay_avg=0;
|
||||
double ue_speed = 0;
|
||||
@@ -126,7 +121,8 @@ int main(int argc, char **argv)
|
||||
case 'a':
|
||||
printf("Running AWGN simulation\n");
|
||||
awgn_flag = 1;
|
||||
ntrials=1;
|
||||
/* ntrials not used later, no need to set */
|
||||
//ntrials=1;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
@@ -326,6 +322,7 @@ int main(int argc, char **argv)
|
||||
Nid_cell,
|
||||
3,
|
||||
N_RB_DL,
|
||||
0,
|
||||
osf,
|
||||
0);
|
||||
|
||||
@@ -404,9 +401,11 @@ int main(int argc, char **argv)
|
||||
PHY_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag=hs_flag;
|
||||
PHY_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset=0;
|
||||
|
||||
prach_fmt = get_prach_fmt(PHY_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
|
||||
PHY_vars_eNB->lte_frame_parms.frame_type);
|
||||
N_ZC = (prach_fmt <4)?839:139;
|
||||
/* N_ZC not used later, so prach_fmt is also useless, don't set */
|
||||
//prach_fmt = get_prach_fmt(PHY_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
|
||||
// PHY_vars_eNB->lte_frame_parms.frame_type);
|
||||
/* N_ZC not used later, no need to set */
|
||||
//N_ZC = (prach_fmt <4)?839:139;
|
||||
|
||||
compute_prach_seq(&PHY_vars_eNB->lte_frame_parms.prach_config_common,PHY_vars_eNB->lte_frame_parms.frame_type,PHY_vars_eNB->X_u);
|
||||
|
||||
@@ -430,7 +429,8 @@ int main(int argc, char **argv)
|
||||
subframe,
|
||||
0); //Nf
|
||||
|
||||
tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
|
||||
/* tx_lev_dB not used later, no need to set */
|
||||
//tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
|
||||
|
||||
write_output("txsig0_new.m","txs0", &txdata[0][subframe*frame_parms->samples_per_tti],frame_parms->samples_per_tti,1,1);
|
||||
//write_output("txsig1.m","txs1", txdata[1],FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
|
||||
@@ -547,14 +547,6 @@ int main(int argc, char **argv)
|
||||
// printf("(%f,%f)\n",SNR,(double)prach_errors/(double)n_frames);
|
||||
} //SNR loop
|
||||
|
||||
#ifdef IFFT_FPGA
|
||||
free(txdataF2[0]);
|
||||
free(txdataF2[1]);
|
||||
free(txdataF2);
|
||||
free(txdata[0]);
|
||||
free(txdata[1]);
|
||||
free(txdata);
|
||||
#endif
|
||||
|
||||
for (i=0; i<2; i++) {
|
||||
free(s_re[i]);
|
||||
|
||||
@@ -34,10 +34,6 @@
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/vars.h"
|
||||
#include "MAC_INTERFACE/vars.h"
|
||||
#ifdef IFFT_FPGA
|
||||
#include "PHY/LTE_REFSIG/mod_table.h"
|
||||
#endif
|
||||
#ifdef EMOS
|
||||
#include "SCHED/phy_procedures_emos.h"
|
||||
#endif
|
||||
@@ -67,9 +63,6 @@ int main(int argc, char **argv)
|
||||
double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1=0.0;
|
||||
uint8_t snr1set=0;
|
||||
//mod_sym_t **txdataF;
|
||||
#ifdef IFFT_FPGA
|
||||
int **txdataF2;
|
||||
#endif
|
||||
int **txdata;
|
||||
double **s_re,**s_im,**r_re,**r_im;
|
||||
double ricean_factor=0.0000005,iqim=0.0;
|
||||
@@ -338,23 +331,7 @@ int main(int argc, char **argv)
|
||||
frame_parms = &PHY_vars_eNB->lte_frame_parms;
|
||||
|
||||
|
||||
#ifdef IFFT_FPGA
|
||||
txdata = (int **)malloc16(2*sizeof(int*));
|
||||
txdata[0] = (int *)malloc16(FRAME_LENGTH_BYTES);
|
||||
txdata[1] = (int *)malloc16(FRAME_LENGTH_BYTES);
|
||||
|
||||
bzero(txdata[0],FRAME_LENGTH_BYTES);
|
||||
bzero(txdata[1],FRAME_LENGTH_BYTES);
|
||||
|
||||
txdataF2 = (int **)malloc16(2*sizeof(int*));
|
||||
txdataF2[0] = (int *)malloc16(FRAME_LENGTH_BYTES_NO_PREFIX);
|
||||
txdataF2[1] = (int *)malloc16(FRAME_LENGTH_BYTES_NO_PREFIX);
|
||||
|
||||
bzero(txdataF2[0],FRAME_LENGTH_BYTES_NO_PREFIX);
|
||||
bzero(txdataF2[1],FRAME_LENGTH_BYTES_NO_PREFIX);
|
||||
#else
|
||||
txdata = PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id];
|
||||
#endif
|
||||
|
||||
s_re = malloc(2*sizeof(double*));
|
||||
s_im = malloc(2*sizeof(double*));
|
||||
@@ -420,27 +397,6 @@ int main(int argc, char **argv)
|
||||
&pucch_payload,
|
||||
AMP, //amp,
|
||||
subframe); //subframe
|
||||
#ifdef IFFT_FPGA_UE
|
||||
tx_lev=0;
|
||||
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
|
||||
if (frame_parms->Ncp == 1)
|
||||
PHY_ofdm_mod(txdataF2[aa], // input
|
||||
txdata[aa], // output
|
||||
frame_parms->ofdm_symbol_size,
|
||||
2*nsymb, // number of symbols
|
||||
frame_parms->nb_prefix_samples, // number of prefix samples
|
||||
CYCLIC_PREFIX);
|
||||
else
|
||||
normal_prefix_mod(txdataF2[aa],txdata[aa],2*nsymb,frame_parms);
|
||||
}
|
||||
|
||||
tx_lev += signal_energy(&txdata[aa][OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES],
|
||||
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES);
|
||||
|
||||
#else
|
||||
|
||||
write_output("txsigF0.m","txsF0", &PHY_vars_UE->lte_ue_common_vars.txdataF[0][2*subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX],OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*nsymb,1,1);
|
||||
|
||||
tx_lev = 0;
|
||||
@@ -472,7 +428,6 @@ int main(int argc, char **argv)
|
||||
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
write_output("txsig0.m","txs0", txdata[0], FRAME_LENGTH_COMPLEX_SAMPLES,1,1);
|
||||
@@ -656,15 +611,6 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
|
||||
#ifdef IFFT_FPGA
|
||||
free(txdataF2[0]);
|
||||
free(txdataF2[1]);
|
||||
free(txdataF2);
|
||||
free(txdata[0]);
|
||||
free(txdata[1]);
|
||||
free(txdata);
|
||||
#endif
|
||||
|
||||
for (i=0; i<2; i++) {
|
||||
free(s_re[i]);
|
||||
free(s_im[i]);
|
||||
|
||||
@@ -45,7 +45,6 @@
|
||||
#include "PHY/types.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/vars.h"
|
||||
#include "MAC_INTERFACE/vars.h"
|
||||
|
||||
#include "SCHED/defs.h"
|
||||
#include "SCHED/vars.h"
|
||||
@@ -309,7 +308,7 @@ int main(int argc, char **argv)
|
||||
break;
|
||||
|
||||
default:
|
||||
msg("Unsupported channel model!\n");
|
||||
printf("Unsupported channel model!\n");
|
||||
exit(-1);
|
||||
break;
|
||||
}
|
||||
@@ -333,7 +332,7 @@ int main(int argc, char **argv)
|
||||
|
||||
if ((transmission_mode!=1) &&
|
||||
(transmission_mode!=2)) {
|
||||
msg("Unsupported transmission mode %d\n",transmission_mode);
|
||||
printf("Unsupported transmission mode %d\n",transmission_mode);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
@@ -383,10 +382,10 @@ int main(int argc, char **argv)
|
||||
|
||||
case 'i':
|
||||
input_fdUL = fopen(optarg,"r");
|
||||
msg("Reading in %s (%p)\n",optarg,input_fdUL);
|
||||
printf("Reading in %s (%p)\n",optarg,input_fdUL);
|
||||
|
||||
if (input_fdUL == (FILE*)NULL) {
|
||||
msg("Unknown file %s\n",optarg);
|
||||
printf("Unknown file %s\n",optarg);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
@@ -510,13 +509,8 @@ int main(int argc, char **argv)
|
||||
// r_re0 = malloc(2*sizeof(double*));
|
||||
// r_im0 = malloc(2*sizeof(double*));
|
||||
|
||||
nsymb = (PHY_vars_eNB->lte_frame_parms.Ncp == 0) ? 14 : 12;
|
||||
nsymb = (PHY_vars_eNB->lte_frame_parms.Ncp == NORMAL) ? 14 : 12;
|
||||
|
||||
coded_bits_per_codeword = nb_rb * (12 * get_Qm(mcs)) * nsymb;
|
||||
|
||||
rate = (double)dlsch_tbs25[get_I_TBS(mcs)][nb_rb-1]/(coded_bits_per_codeword);
|
||||
|
||||
printf("Rate = %f (mod %d), coded bits %d\n",rate,get_Qm(mcs),coded_bits_per_codeword);
|
||||
|
||||
sprintf(bler_fname,"ULbler_mcs%d_nrb%d_ChannelModel%d_nsim%d.csv",mcs,nb_rb,chMod,n_frames);
|
||||
bler_fd = fopen(bler_fname,"w");
|
||||
@@ -641,8 +635,8 @@ int main(int argc, char **argv)
|
||||
UE2eNB->max_Doppler = maxDoppler;
|
||||
|
||||
// NN: N_RB_UL has to be defined in ulsim
|
||||
PHY_vars_eNB->ulsch_eNB[0] = new_eNB_ulsch(8,max_turbo_iterations,N_RB_DL,0);
|
||||
PHY_vars_UE->ulsch_ue[0] = new_ue_ulsch(8,N_RB_DL,0);
|
||||
PHY_vars_eNB->ulsch_eNB[0] = new_eNB_ulsch(max_turbo_iterations,N_RB_DL,0);
|
||||
PHY_vars_UE->ulsch_ue[0] = new_ue_ulsch(N_RB_DL,0);
|
||||
|
||||
// Create transport channel structures for 2 transport blocks (MIMO)
|
||||
for (i=0; i<2; i++) {
|
||||
@@ -766,9 +760,9 @@ int main(int argc, char **argv)
|
||||
PHY_vars_eNB->proc[sf].subframe_rx=sf;
|
||||
}
|
||||
|
||||
msg("Init UL hopping UE\n");
|
||||
printf("Init UL hopping UE\n");
|
||||
init_ul_hopping(&PHY_vars_UE->lte_frame_parms);
|
||||
msg("Init UL hopping eNB\n");
|
||||
printf("Init UL hopping eNB\n");
|
||||
init_ul_hopping(&PHY_vars_eNB->lte_frame_parms);
|
||||
|
||||
PHY_vars_eNB->proc[subframe].frame_rx = PHY_vars_UE->frame_tx;
|
||||
@@ -808,6 +802,13 @@ int main(int argc, char **argv)
|
||||
CBA_RNTI,
|
||||
srs_flag);
|
||||
|
||||
coded_bits_per_codeword = nb_rb * (12 * get_Qm_ul(mcs)) * nsymb;
|
||||
|
||||
if (cqi_flag == 1) coded_bits_per_codeword-=PHY_vars_UE->ulsch_ue[0]->O;
|
||||
|
||||
rate = (double)dlsch_tbs25[get_I_TBS(mcs)][nb_rb-1]/(coded_bits_per_codeword);
|
||||
|
||||
printf("Rate = %f (mod %d), coded bits %d\n",rate,get_Qm_ul(mcs),coded_bits_per_codeword);
|
||||
|
||||
|
||||
PHY_vars_UE->frame_tx = (PHY_vars_UE->frame_tx+1)&1023;
|
||||
@@ -1062,7 +1063,7 @@ int main(int argc, char **argv)
|
||||
start_meas(&PHY_vars_UE->ofdm_mod_stats);
|
||||
|
||||
for (aa=0; aa<1; aa++) {
|
||||
if (frame_parms->Ncp == 1)
|
||||
if (frame_parms->Ncp == EXTENDED)
|
||||
PHY_ofdm_mod(&PHY_vars_UE->lte_ue_common_vars.txdataF[aa][subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX], // input
|
||||
&txdata[aa][PHY_vars_eNB->lte_frame_parms.samples_per_tti*subframe], // output
|
||||
PHY_vars_UE->lte_frame_parms.ofdm_symbol_size,
|
||||
@@ -1256,6 +1257,7 @@ int main(int argc, char **argv)
|
||||
*/
|
||||
|
||||
start_meas(&PHY_vars_eNB->ulsch_decoding_stats);
|
||||
|
||||
ret= ulsch_decoding(PHY_vars_eNB,
|
||||
0, // UE_id
|
||||
subframe,
|
||||
@@ -1292,7 +1294,7 @@ int main(int argc, char **argv)
|
||||
if (PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->o_ACK[0] != PHY_vars_UE->ulsch_ue[0]->o_ACK[0])
|
||||
ack_errors++;
|
||||
|
||||
// msg("ulsch_coding: O[%d] %d\n",i,o_flip[i]);
|
||||
// printf("ulsch_coding: O[%d] %d\n",i,o_flip[i]);
|
||||
|
||||
|
||||
if (ret <= PHY_vars_eNB->ulsch_eNB[0]->max_turbo_iterations) {
|
||||
@@ -1515,7 +1517,7 @@ int main(int argc, char **argv)
|
||||
rate*effective_rate,
|
||||
100*effective_rate,
|
||||
rate,
|
||||
rate*get_Qm(mcs),
|
||||
rate*get_Qm_ul(mcs),
|
||||
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0])/
|
||||
(double)PHY_vars_eNB->ulsch_eNB[0]->harq_processes[harq_pid]->TBS,
|
||||
(1.0*(round_trials[0]-errs[0])+2.0*(round_trials[1]-errs[1])+3.0*(round_trials[2]-errs[2])+4.0*(round_trials[3]-errs[3]))/((double)round_trials[0]));
|
||||
|
||||
Reference in New Issue
Block a user