From 8c16f16cbff2496d1914e545d777e5f6d68ab813 Mon Sep 17 00:00:00 2001 From: laurent <laurent.thomas@open-cells.com> Date: Thu, 6 Jun 2019 15:11:08 +0200 Subject: [PATCH] add channel simulator in rfsimulator --- targets/ARCH/rfsimulator/simulator.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/targets/ARCH/rfsimulator/simulator.c b/targets/ARCH/rfsimulator/simulator.c index 6438cc2bdbc..d5f77acc918 100644 --- a/targets/ARCH/rfsimulator/simulator.c +++ b/targets/ARCH/rfsimulator/simulator.c @@ -104,9 +104,8 @@ void rxAddInput( struct complex16 *input_sig, struct complex16 *after_channel_si // Fixme: how to convert a noise in Watt into a 12 bits value out of the RF ADC ? // the parameter "-s" is declared as SNR, but the input power is not well defined // −132.24 dBm is a LTE subcarrier noise, that was used in origin code (15KHz BW thermal noise) - const double rxGain= 132.24 - snr_dB; + const double rxGain= 132.24 - snr_dB; const double noise_per_sample = sqrt(0.5*noise_figure_watt) * pow(10,rxGain/20); - // Fixme: we don't fill the offset length samples at begining ? // anyway, in today code, channel_offset=0 const int dd = abs(channelDesc->channel_offset); @@ -136,20 +135,20 @@ void rxAddInput( struct complex16 *input_sig, struct complex16 *after_channel_si out_ptr->r += round(rx_tmp.x*pathLossLinear + noise_per_sample*gaussdouble(0.0,1.0)); /* printf("in: %d, out %d= %f*%f + %f*%f\n", - input_sig[((TS+i)*nbTx)%CirSize].r, out_ptr->r , rx_tmp.x, + input_sig[((TS+i)*nbTx)%CirSize].r, out_ptr->r , rx_tmp.x, pathLossLinear, noise_per_sample,gaussdouble(0.0,1.0)); */ out_ptr->i += round(rx_tmp.y*pathLossLinear + noise_per_sample*gaussdouble(0.0,1.0)); out_ptr++; } - + if ( (TS*nbTx)%CirSize+nbSamples <= CirSize ) // Cast to a wrong type for compatibility ! - LOG_I(HW,"Input power %f, output power: %f, channel path loss %f, noise coeff: %f \n", - 10*log10((double)signal_energy((int32_t*)&input_sig[(TS*nbTx)%CirSize], nbSamples)), - 10*log10((double)signal_energy((int32_t*)after_channel_sig, nbSamples)), - channelDesc->path_loss_dB, - 10*log10(noise_per_sample)); + LOG_D(HW,"Input power %f, output power: %f, channel path loss %f, noise coeff: %f \n", + 10*log10((double)signal_energy((int32_t *)&input_sig[(TS*nbTx)%CirSize], nbSamples)), + 10*log10((double)signal_energy((int32_t *)after_channel_sig, nbSamples)), + channelDesc->path_loss_dB, + 10*log10(noise_per_sample)); } void allocCirBuf(rfsimulator_state_t *bridge, int sock) { @@ -541,14 +540,13 @@ int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimestamp, vo if (reGenerateChannel) random_channel(ptr->channel_model,0); - for (int a=0; a<nbAnt; a++) - rxAddInput( ptr->circularBuf, (struct complex16 *) samplesVoid[a], + for (int a=0; a<nbAnt; a++) + rxAddInput( ptr->circularBuf, (struct complex16 *) samplesVoid[a], a, ptr->channel_model, nsamps, t->nextTimestamp ); - } } @@ -587,9 +585,9 @@ int rfsimulator_set_gains(openair0_device *device, openair0_config_t *openair0_c } __attribute__((__visibility__("default"))) int device_init(openair0_device *device, openair0_config_t *openair0_cfg) { - //set_log(HW,OAILOG_DEBUG); - set_log(TMR,OAILOG_DEBUG); - //set_log(PHY,OAILOG_DEBUG); + // to change the log level, use this on command line + // --log_config.hw_log_level debug + // (for phy layer, replace "hw" by "phy" rfsimulator_state_t *rfsimulator = (rfsimulator_state_t *)calloc(sizeof(rfsimulator_state_t),1); if ((rfsimulator->ip=getenv("RFSIMULATOR")) == NULL ) { -- GitLab