Conflicts:
	openair1/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c
	openair1/PHY/TOOLS/lte_dfts.c
	openair1/SIMULATION/LTE_PHY/dlsim.c
This commit is contained in:
Raymond Knopp
2016-05-06 02:57:05 -07:00
160 changed files with 10041 additions and 5919 deletions
+10 -12
View File
@@ -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;
@@ -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) {
@@ -3292,7 +3291,6 @@ 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++)
@@ -3419,12 +3417,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);
@@ -3435,14 +3433,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);
@@ -3450,7 +3448,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);
@@ -3458,7 +3456,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);
@@ -3989,7 +3987,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
+6 -4
View File
@@ -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
@@ -132,7 +131,6 @@ int main(int argc, char **argv)
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);
+6 -8
View File
@@ -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,7 +72,6 @@ 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;
@@ -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,
+3 -5
View File
@@ -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"
@@ -411,7 +410,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;
@@ -774,8 +772,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;
@@ -839,7 +837,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;
+1 -15
View File
@@ -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
@@ -70,9 +66,6 @@ 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;
@@ -329,6 +322,7 @@ int main(int argc, char **argv)
Nid_cell,
3,
N_RB_DL,
0,
osf,
0);
@@ -553,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]);
-54
View File
@@ -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);
@@ -655,15 +610,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]);
+20 -18
View File
@@ -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]));