From 73382b828482868e3565bb372453f3bbf264894c Mon Sep 17 00:00:00 2001 From: lukashov <elena.lukashova@eurecom.fr> Date: Fri, 8 Jan 2016 16:54:06 +0100 Subject: [PATCH] Validating abstraction.c with a hotfix. --- openair1/SIMULATION/LTE_PHY/dlsim.c | 4 +- openair1/SIMULATION/TOOLS/abstraction.c | 186 +----------------------- 2 files changed, 3 insertions(+), 187 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 326ab316413..a0ae4fdbfc6 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -833,9 +833,9 @@ int main(int argc, char **argv) else if (perfect_ce==1) - sprintf(csv_fname,"dout_tx%d_r%d_mcs%d_mcsi%d_ch%d_ns%d_R%d_ab_nofix_pce_sh%d_d2_%d.m",transmission_mode,rx_type,mcs1,mcs2,channel_model,n_frames,num_rounds, interf_unaw_shift, n_ch_rlz); + sprintf(csv_fname,"dout_tx%d_r%d_mcs%d_mcsi%d_ch%d_ns%d_R%d_ab_fix_pce_sh%d_d2_%d.m",transmission_mode,rx_type,mcs1,mcs2,channel_model,n_frames,num_rounds, interf_unaw_shift, n_ch_rlz); else - sprintf(csv_fname,"dout_tx%d_r%d_mcs%d_mcsi%d_ch%d_ns%d_R%d_ab_nofix_sh%d_d2_%d.m",transmission_mode,rx_type,mcs1,mcs2,channel_model,n_frames,num_rounds, interf_unaw_shift, n_ch_rlz); + sprintf(csv_fname,"dout_tx%d_r%d_mcs%d_mcsi%d_ch%d_ns%d_R%d_ab_fix_sh%d_d2_%d.m",transmission_mode,rx_type,mcs1,mcs2,channel_model,n_frames,num_rounds, interf_unaw_shift, n_ch_rlz); csv_fd = fopen(csv_fname,"w"); fprintf(csv_fd,"data_all%d=[",mcs1); diff --git a/openair1/SIMULATION/TOOLS/abstraction.c b/openair1/SIMULATION/TOOLS/abstraction.c index f26f450a7d9..b896a2ad781 100644 --- a/openair1/SIMULATION/TOOLS/abstraction.c +++ b/openair1/SIMULATION/TOOLS/abstraction.c @@ -26,7 +26,7 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ -/*#include <math.h> +#include <math.h> #include <cblas.h> #include <stdio.h> #include <stdlib.h> @@ -324,189 +324,5 @@ double pbch_bler(double sinr) //printf ("sinr %f bler %f\n",sinr,bler); return(bler); -}*/ - -#include <math.h> -#include <cblas.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - - -#include "PHY/TOOLS/defs.h" -#include "defs.h" - -void freq_channel(channel_desc_t *desc,uint16_t nb_rb,int16_t n_samples) { - - double delta_f,freq; // 90 kHz spacing - double delay; - int16_t f; - uint8_t aarx,aatx,l; - - delta_f = nb_rb*180000/(n_samples-1); - //write_output("channel.m","a",desc->a[0],desc->nb_taps,1,8); - for (f=-n_samples/2;f<n_samples/2;f++) { - freq=delta_f*(double)f*1e-6;// due to the fact that delays is in mus - - for (aarx=0;aarx<desc->nb_rx;aarx++) { - for (aatx=0;aatx<desc->nb_tx;aatx++) { - desc->chF[aarx+(aatx*desc->nb_rx)][n_samples/2+f].x=0.0; - desc->chF[aarx+(aatx*desc->nb_rx)][n_samples/2+f].y=0.0; - for (l=0;l<(int)desc->nb_taps;l++) { - if (desc->nb_taps==1) - delay = desc->delays[l]; - else - delay = desc->delays[l]+NB_SAMPLES_CHANNEL_OFFSET/desc->sampling_rate; - desc->chF[aarx+(aatx*desc->nb_rx)][f+n_samples/2].x+=(desc->a[l][aarx+(aatx*desc->nb_rx)].x*cos(2*M_PI*freq*delay)+ - desc->a[l][aarx+(aatx*desc->nb_rx)].y*sin(2*M_PI*freq*delay)); - desc->chF[aarx+(aatx*desc->nb_rx)][f+n_samples/2].y+=(-desc->a[l][aarx+(aatx*desc->nb_rx)].x*sin(2*M_PI*freq*delay)+ - desc->a[l][aarx+(aatx*desc->nb_rx)].y*cos(2*M_PI*freq*delay)); - } - // printf("chF(%d) => (%f,%f)\n",n_samples/2+f, - // desc->chF[aarx+(aatx*desc->nb_rx)][f+n_samples/2].x, - // desc->chF[aarx+(aatx*desc->nb_rx)][f+n_samples/2].y); - } - } - } -} - -double compute_pbch_sinr(channel_desc_t *desc, - channel_desc_t *desc_i1, - channel_desc_t *desc_i2, - double snr_dB,double snr_i1_dB, - double snr_i2_dB, - uint16_t nb_rb) { - - double avg_sinr,snr=pow(10.0,.1*snr_dB),snr_i1=pow(10.0,.1*snr_i1_dB),snr_i2=pow(10.0,.1*snr_i2_dB); - uint16_t f; - uint8_t aarx,aatx; - double S; - struct complex S_i1; - struct complex S_i2; - - avg_sinr=0.0; - // printf("nb_rb %d\n",nb_rb); - for (f=(nb_rb-6);f<(nb_rb+6);f++) { - S = 0.0; - S_i1.x =0.0; - S_i1.y =0.0; - S_i2.x =0.0; - S_i2.y =0.0; - for (aarx=0;aarx<desc->nb_rx;aarx++) { - for (aatx=0;aatx<desc->nb_tx;aatx++) { - S += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc->chF[aarx+(aatx*desc->nb_rx)][f].x + - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc->chF[aarx+(aatx*desc->nb_rx)][f].y); - // printf("%d %d chF[%d] => (%f,%f)\n",aarx,aatx,f,desc->chF[aarx+(aatx*desc->nb_rx)][f].x,desc->chF[aarx+(aatx*desc->nb_rx)][f].y); - - if (desc_i1) { - S_i1.x += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc_i1->chF[aarx+(aatx*desc->nb_rx)][f].x + - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc_i1->chF[aarx+(aatx*desc->nb_rx)][f].y); - S_i1.y += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc_i1->chF[aarx+(aatx*desc->nb_rx)][f].y - - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc_i1->chF[aarx+(aatx*desc->nb_rx)][f].x); - } - if (desc_i2) { - S_i2.x += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc_i2->chF[aarx+(aatx*desc->nb_rx)][f].x + - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc_i2->chF[aarx+(aatx*desc->nb_rx)][f].y); - S_i2.y += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc_i2->chF[aarx+(aatx*desc->nb_rx)][f].y - - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc_i2->chF[aarx+(aatx*desc->nb_rx)][f].x); - } - } - } - // printf("snr %f f %d : S %f, S_i1 %f, S_i2 %f\n",snr,f-nb_rb,S,snr_i1*sqrt(S_i1.x*S_i1.x + S_i1.y*S_i1.y),snr_i2*sqrt(S_i2.x*S_i2.x + S_i2.y*S_i2.y)); - avg_sinr += (snr*S/(desc->nb_tx+snr_i1*sqrt(S_i1.x*S_i1.x + S_i1.y*S_i1.y)+snr_i2*sqrt(S_i2.x*S_i2.x + S_i2.y*S_i2.y))); - } - // printf("avg_sinr %f (%f,%f,%f)\n",avg_sinr/12.0,snr,snr_i1,snr_i2); - return(10*log10(avg_sinr/12.0)); -} - - -double compute_sinr(channel_desc_t *desc, - channel_desc_t *desc_i1, - channel_desc_t *desc_i2, - double snr_dB,double snr_i1_dB, - double snr_i2_dB, - uint16_t nb_rb) { - - double avg_sinr,snr=pow(10.0,.1*snr_dB),snr_i1=pow(10.0,.1*snr_i1_dB),snr_i2=pow(10.0,.1*snr_i2_dB); - uint16_t f; - uint8_t aarx,aatx; - double S; - struct complex S_i1; - struct complex S_i2; - - avg_sinr=0.0; - // printf("nb_rb %d\n",nb_rb); - for (f=0;f<2*nb_rb;f++) { - S = 0.0; - S_i1.x =0.0; - S_i1.y =0.0; - S_i2.x =0.0; - S_i2.y =0.0; - for (aarx=0;aarx<desc->nb_rx;aarx++) { - for (aatx=0;aatx<desc->nb_tx;aatx++) { - S += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc->chF[aarx+(aatx*desc->nb_rx)][f].x + - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc->chF[aarx+(aatx*desc->nb_rx)][f].y); - if (desc_i1) { - S_i1.x += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc_i1->chF[aarx+(aatx*desc->nb_rx)][f].x + - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc_i1->chF[aarx+(aatx*desc->nb_rx)][f].y); - S_i1.y += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc_i1->chF[aarx+(aatx*desc->nb_rx)][f].y - - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc_i1->chF[aarx+(aatx*desc->nb_rx)][f].x); - } - if (desc_i2) { - S_i2.x += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc_i2->chF[aarx+(aatx*desc->nb_rx)][f].x + - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc_i2->chF[aarx+(aatx*desc->nb_rx)][f].y); - S_i2.y += (desc->chF[aarx+(aatx*desc->nb_rx)][f].x*desc_i2->chF[aarx+(aatx*desc->nb_rx)][f].y - - desc->chF[aarx+(aatx*desc->nb_rx)][f].y*desc_i2->chF[aarx+(aatx*desc->nb_rx)][f].x); - } - } - } - // printf("f %d : S %f, S_i1 %f, S_i2 %f\n",f-nb_rb,snr*S,snr_i1*sqrt(S_i1.x*S_i1.x + S_i1.y*S_i1.y),snr_i2*sqrt(S_i2.x*S_i2.x + S_i2.y*S_i2.y)); - avg_sinr += (snr*S/(desc->nb_tx+snr_i1*sqrt(S_i1.x*S_i1.x + S_i1.y*S_i1.y)+snr_i2*sqrt(S_i2.x*S_i2.x + S_i2.y*S_i2.y))); - } - // printf("avg_sinr %f (%f,%f,%f)\n",avg_sinr/12.0,snr,snr_i1,snr_i2); - return(10*log10(avg_sinr/(nb_rb*2))); } - uint8_t pbch_polynomial_degree; -double a[7]; - -void load_pbch_desc(FILE *pbch_file_fd) { - - int i; - char dummy[25]; - - fscanf(pbch_file_fd,"%d",&pbch_polynomial_degree); - if (pbch_polynomial_degree>6) { - printf("Illegal degree for pbch interpolation polynomial %d\n",pbch_polynomial_degree); - exit(-1); - } - - printf("PBCH polynomial : "); - - for (i=0;i<=pbch_polynomial_degree;i++) { - fscanf(pbch_file_fd,"%s",dummy); - a[i] = strtod(dummy,NULL); - printf("%f ",a[i]); - } - printf("\n"); -} - -double pbch_bler(double sinr) { - - int i; - double log10_bler=a[pbch_polynomial_degree]; - double sinrpow=sinr; - // printf("log10bler %f\n",log10_bler); - if (sinr<-7.9) - return(1.0); - else if (sinr>=0.0) - return(1e-4); - - for (i=1;i<=pbch_polynomial_degree;i++) { - // printf("sinrpow %f\n",sinrpow); - log10_bler += (a[pbch_polynomial_degree-i]*sinrpow); - sinrpow *= sinr; - // printf("log10bler %f\n",log10_bler); - } - return(pow(10.0,log10_bler)); -} -- GitLab