diff --git a/executables/lte-softmodem.h b/executables/lte-softmodem.h index 4143bce3a4a19565323dc6634e761d701126bf70..13d9ba131995c3998c2763b5d4bf0f164bddf261 100644 --- a/executables/lte-softmodem.h +++ b/executables/lte-softmodem.h @@ -179,9 +179,6 @@ extern void init_UE(int nb_inst, extern void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, char *name); -extern void init_ocm(void); -extern void init_ue_devices(PHY_VARS_UE *); - PHY_VARS_UE *init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, uint8_t abstraction_flag); void init_eNB_afterRU(void); diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c index 6192dacb86d492f5ed05c5e5d2d8a9a22c1a6059..eaf017e297b274764823decd096bf619fd58fc9e 100644 --- a/executables/nr-softmodem.c +++ b/executables/nr-softmodem.c @@ -118,7 +118,6 @@ unsigned char NB_gNB_INST = 1; char *uecap_file; runmode_t mode = normal_txrx; -static double snr_dB=20; #if MAX_NUM_CCs == 1 rx_gain_t rx_gain_mode[MAX_NUM_CCs][4] = {{max_gain,max_gain,max_gain,max_gain}}; diff --git a/executables/nr-softmodem.h b/executables/nr-softmodem.h index cc76e9e375d140287af2b31912dce643660c0d84..ea02e305e89e19614446a2aa4cb8a60ae6b60c72 100644 --- a/executables/nr-softmodem.h +++ b/executables/nr-softmodem.h @@ -30,7 +30,6 @@ {"U" , CONFIG_HLP_ULBM_PHYTEST, 0, .u64ptr=&ulsch_slot_bitmap, .defintval=0, TYPE_UINT64, 0}, \ {"usrp-tx-thread-config", CONFIG_HLP_USRP_THREAD, 0, .iptr=&usrp_tx_thread, .defstrval=0, TYPE_INT, 0}, \ {"uecap_file", CONFIG_HLP_UECAP_FILE, 0, .strptr=&uecap_file, .defstrval="./uecap_ports1.xml", TYPE_STRING, 0}, \ - {"s" , CONFIG_HLP_SNR, 0, .dblptr=&snr_dB, .defdblval=25, TYPE_DOUBLE, 0}, \ } // clang-format on diff --git a/executables/rfsim.c b/executables/rfsim.c deleted file mode 100644 index c7ab4ccb663cabb5754c163228ea0c5ce00c0110..0000000000000000000000000000000000000000 --- a/executables/rfsim.c +++ /dev/null @@ -1,495 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file rfsim.c -* \brief function for simulated RF device -* \author R. Knopp -* \date 2018 -* \version 1.0 -* \company Eurecom -* \email: openair_tech@eurecom.fr -* \note -* \warning -*/ - - -#include <stdlib.h> -#include <unistd.h> -#include <stdio.h> -#include <signal.h> -#include <execinfo.h> -#include <time.h> -#include <mcheck.h> -#include <sys/timerfd.h> - -#include "assertions.h" -#include "rfsim.h" -#include "openair1/SIMULATION/TOOLS/sim.h" -#include "enb_config.h" -#include "enb_paramdef.h" -#include "common/platform_constants.h" -#include "common/config/config_paramdesc.h" -#include "common/config/config_userapi.h" -#include "common/ran_context.h" -#include "PHY/defs_UE.h" -#include "PHY/defs_eNB.h" -#include "PHY/defs_RU.h" -#include "common/utils/LOG/vcd_signal_dumper.h" - -RAN_CONTEXT_t RC; -extern PHY_VARS_UE ***PHY_vars_UE_g; - - -// put all of these in a common structure after -sim_t sim; - - -void init_ru_devices(void); - -void init_RU(char *,int send_dmrssync); - -void *rfsim_top(void *n_frames); - -void wait_RUs(void) { - int i; - // wait for all RUs to be configured over fronthaul - pthread_mutex_lock(&RC.ru_mutex); - - while (RC.ru_mask>0) { - pthread_cond_wait(&RC.ru_cond,&RC.ru_mutex); - } - - pthread_mutex_unlock(&RC.ru_mutex); - - // copy frame parameters from RU to UEs - for (i=0; i<NB_UE_INST; i++) { - sim.current_UE_rx_timestamp[i][0] = RC.ru[0]->frame_parms->samples_per_tti + RC.ru[0]->frame_parms->ofdm_symbol_size + RC.ru[0]->frame_parms->nb_prefix_samples0; - } - - for (int ru_id=0; ru_id<RC.nb_RU; ru_id++) sim.current_ru_rx_timestamp[ru_id][0] = RC.ru[ru_id]->frame_parms->samples_per_tti; - - printf("RUs are ready, let's go\n"); -} - -void wait_eNBs(void) { - return; -} - - -void RCConfig_sim(void) { - paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0}; - // Get num RU instances - config_getlist( &RUParamList,NULL,0, NULL); - RC.nb_RU = RUParamList.numelt; - AssertFatal(RC.nb_RU>0,"we need at least 1 RU for simulation\n"); - printf("returned with %d rus\n",RC.nb_RU); - init_RU(NULL,0); - printf("Waiting for RUs to get set up\n"); - wait_RUs(); - init_ru_devices(); - static int nframes = 100000; - AssertFatal(0 == pthread_create(&sim.rfsim_thread, - NULL, - rfsim_top, - (void *)&nframes), ""); -} - - - -int ru_trx_start(openair0_device *device) { - return(0); -} - -void ru_trx_end(openair0_device *device) { - return; -} - -int ru_trx_stop(openair0_device *device) { - return(0); -} -int UE_trx_start(openair0_device *device) { - return(0); -} -void UE_trx_end(openair0_device *device) { - return; -} -int UE_trx_stop(openair0_device *device) { - return(0); -} -int ru_trx_set_freq(openair0_device *device, openair0_config_t *openair0_cfg, int dummy) { - return(0); -} -int ru_trx_set_gains(openair0_device *device, openair0_config_t *openair0_cfg) { - return(0); -} -int UE_trx_set_freq(openair0_device *device, openair0_config_t *openair0_cfg, int dummy) { - return(0); -} -int UE_trx_set_gains(openair0_device *device, openair0_config_t *openair0_cfg) { - return(0); -} - -extern pthread_mutex_t subframe_mutex; -extern int subframe_ru_mask,subframe_UE_mask; - - -int ru_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) { - int ru_id = device->Mod_id; - int CC_id = device->CC_id; - int subframe; - int sample_count=0; - *ptimestamp = sim.last_ru_rx_timestamp[ru_id][CC_id]; - LOG_D(SIM,"RU_trx_read nsamps %d TS(%llu,%llu) => subframe %d\n",nsamps, - (unsigned long long)sim.current_ru_rx_timestamp[ru_id][CC_id], - (unsigned long long)sim.last_ru_rx_timestamp[ru_id][CC_id], - (int)((*ptimestamp/RC.ru[ru_id]->frame_parms->samples_per_tti)%10)); - - // if we're at a subframe boundary generate UL signals for this ru - - while (sample_count<nsamps) { - while (sim.current_ru_rx_timestamp[ru_id][CC_id]< - (nsamps+sim.last_ru_rx_timestamp[ru_id][CC_id])) { - LOG_D(SIM,"RU: current TS %"PRIi64", last TS %"PRIi64", sleeping\n",sim.current_ru_rx_timestamp[ru_id][CC_id],sim.last_ru_rx_timestamp[ru_id][CC_id]); - usleep(500); - } - - subframe = (sim.last_ru_rx_timestamp[ru_id][CC_id]/RC.ru[ru_id]->frame_parms->samples_per_tti)%10; - - if (subframe_select(RC.ru[ru_id]->frame_parms,subframe) != SF_DL || RC.ru[ru_id]->frame_parms->frame_type == FDD) { - LOG_D(SIM,"RU_trx_read generating UL subframe %d (Ts %llu, current TS %llu)\n", - subframe,(unsigned long long)*ptimestamp, - (unsigned long long)sim.current_ru_rx_timestamp[ru_id][CC_id]); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_UL_SIGNAL,1); - do_UL_sig(&sim, - subframe, - 0, // abstraction_flag - RC.ru[ru_id]->frame_parms, - 0, // frame is only used for abstraction - ru_id, - CC_id, - 1); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_UL_SIGNAL,0); - } - - sim.last_ru_rx_timestamp[ru_id][CC_id] += RC.ru[ru_id]->frame_parms->samples_per_tti; - sample_count += RC.ru[ru_id]->frame_parms->samples_per_tti; - } - - return(nsamps); -} - -int UE_trx_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) { - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_UE_TRX_READ,1); - int UE_id = device->Mod_id; - int CC_id = device->CC_id; - int subframe; - int sample_count=0; - int read_size; - int sptti = PHY_vars_UE_g[UE_id][CC_id]->frame_parms.samples_per_tti; - *ptimestamp = sim.last_UE_rx_timestamp[UE_id][CC_id]; - LOG_D(PHY,"UE %d DL simulation 0: UE_trx_read nsamps %d TS %llu (%llu, offset %d) antenna %d\n", - UE_id, - nsamps, - (unsigned long long)sim.current_UE_rx_timestamp[UE_id][CC_id], - (unsigned long long)sim.last_UE_rx_timestamp[UE_id][CC_id], - (int)(sim.last_UE_rx_timestamp[UE_id][CC_id]%sptti), - cc); - - if (nsamps < sptti) - read_size = nsamps; - else - read_size = sptti; - - while (sample_count<nsamps) { - LOG_D(SIM,"UE %d: DL simulation 1: UE_trx_read : current TS now %"PRIi64", last TS %"PRIi64"\n",UE_id,sim.current_UE_rx_timestamp[UE_id][CC_id],sim.last_UE_rx_timestamp[UE_id][CC_id]); - - while (sim.current_UE_rx_timestamp[UE_id][CC_id] < - (sim.last_UE_rx_timestamp[UE_id][CC_id]+read_size)) { - LOG_D(SIM,"UE %d: DL simulation 2: UE_trx_read : current TS %"PRIi64", last TS %"PRIi64", sleeping\n",UE_id,sim.current_UE_rx_timestamp[UE_id][CC_id],sim.last_UE_rx_timestamp[UE_id][CC_id]); - usleep(500); - } - - LOG_D(SIM,"UE %d: DL simulation 3: UE_trx_read : current TS now %"PRIi64", last TS %"PRIi64"\n",UE_id,sim.current_UE_rx_timestamp[UE_id][CC_id],sim.last_UE_rx_timestamp[UE_id][CC_id]); - // if we cross a subframe-boundary - subframe = (sim.last_UE_rx_timestamp[UE_id][CC_id]/sptti)%10; - // tell top-level we are busy - pthread_mutex_lock(&sim.subframe_mutex); - sim.subframe_UE_mask|=(1<<UE_id); - LOG_D(SIM,"Setting UE_id %d mask to busy (%d)\n",UE_id,sim.subframe_UE_mask); - pthread_mutex_unlock(&sim.subframe_mutex); - LOG_D(PHY,"UE %d: DL simulation 4: UE_trx_read generating DL subframe %d (Ts %llu, current TS %llu,nsamps %d)\n", - UE_id,subframe,(unsigned long long)*ptimestamp, - (unsigned long long)sim.current_UE_rx_timestamp[UE_id][CC_id], - nsamps); - LOG_D(SIM,"UE %d: DL simulation 5: Doing DL simulation for %d samples starting in subframe %d at offset %d\n", - UE_id,nsamps,subframe, - (int)(sim.last_UE_rx_timestamp[UE_id][CC_id]%sptti)); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_DL_SIGNAL,1); - do_DL_sig(&sim, - subframe, - sim.last_UE_rx_timestamp[UE_id][CC_id]%sptti, - sptti, - 0, //abstraction_flag, - &PHY_vars_UE_g[UE_id][CC_id]->frame_parms, - UE_id, - CC_id); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_DO_DL_SIGNAL,0); - LOG_D(PHY,"UE %d: DL simulation 6: UE_trx_read @ TS %"PRIi64" (%"PRIi64")=> frame %d, subframe %d\n", - UE_id, sim.current_UE_rx_timestamp[UE_id][CC_id], - sim.last_UE_rx_timestamp[UE_id][CC_id], - (int)((sim.last_UE_rx_timestamp[UE_id][CC_id]/(sptti*10))&1023), - subframe); - sim.last_UE_rx_timestamp[UE_id][CC_id] += read_size; - sample_count += read_size; - } - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SIM_UE_TRX_READ,0); - return(nsamps); -} - - -int ru_trx_write(openair0_device *device,openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) { - int ru_id = device->Mod_id; - LTE_DL_FRAME_PARMS *frame_parms = RC.ru[ru_id]->frame_parms; - pthread_mutex_lock(&sim.subframe_mutex); - LOG_D(SIM,"[TXPATH] ru_trx_write: RU %d mask %d\n",ru_id,sim.subframe_ru_mask); - pthread_mutex_unlock(&sim.subframe_mutex); - // compute amplitude of TX signal from first symbol in subframe - // note: assumes that the packet is an entire subframe - sim.ru_amp[ru_id] = 0; - - for (int aa=0; aa<RC.ru[ru_id]->nb_tx; aa++) { - sim.ru_amp[ru_id] += (double)signal_energy((int32_t *)buff[aa],frame_parms->ofdm_symbol_size)/(12*frame_parms->N_RB_DL); - } - - sim.ru_amp[ru_id] = sqrt(sim.ru_amp[ru_id]); - LOG_D(PHY,"Setting amp for RU %d to %f (%d)\n",ru_id,sim.ru_amp[ru_id], dB_fixed((double)signal_energy((int32_t *)buff[0],frame_parms->ofdm_symbol_size))); - // tell top-level we are done - pthread_mutex_lock(&sim.subframe_mutex); - sim.subframe_ru_mask|=(1<<ru_id); - LOG_D(SIM,"Setting RU %d to busy\n",ru_id); - pthread_mutex_unlock(&sim.subframe_mutex); - return(nsamps); -} - -int UE_trx_write(openair0_device *device,openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) { - return(nsamps); -} - -void init_ru_devices() { - module_id_t ru_id; - RU_t *ru; - - // allocate memory for RU if not already done - if (RC.ru==NULL) RC.ru = (RU_t **)malloc(RC.nb_RU*sizeof(RU_t *)); - - for (ru_id=0; ru_id<RC.nb_RU; ru_id++) { - LOG_D(SIM,"Initiaizing rfdevice for RU %d\n",ru_id); - - if (RC.ru[ru_id]==NULL) RC.ru[ru_id] = (RU_t *)malloc(sizeof(RU_t)); - - ru = RC.ru[ru_id]; - ru->rfdevice.Mod_id = ru_id; - ru->rfdevice.CC_id = 0; - ru->rfdevice.trx_start_func = ru_trx_start; - ru->rfdevice.trx_read_func = ru_trx_read; - ru->rfdevice.trx_write_func = ru_trx_write; - ru->rfdevice.trx_end_func = ru_trx_end; - ru->rfdevice.trx_stop_func = ru_trx_stop; - ru->rfdevice.trx_set_freq_func = ru_trx_set_freq; - ru->rfdevice.trx_set_gains_func = ru_trx_set_gains; - sim.last_ru_rx_timestamp[ru_id][0] = 0; - } -} - -void init_ue_devices(PHY_VARS_UE *UE) { - AssertFatal(UE!=NULL,"UE context is not allocated\n"); - printf("Initializing UE %d.%d\n",UE->Mod_id,UE->CC_id); - UE->rfdevice.Mod_id = UE->Mod_id; - UE->rfdevice.CC_id = UE->CC_id; - UE->rfdevice.trx_start_func = UE_trx_start; - UE->rfdevice.trx_read_func = UE_trx_read; - UE->rfdevice.trx_write_func = UE_trx_write; - UE->rfdevice.trx_end_func = UE_trx_end; - UE->rfdevice.trx_stop_func = UE_trx_stop; - UE->rfdevice.trx_set_freq_func = UE_trx_set_freq; - UE->rfdevice.trx_set_gains_func = UE_trx_set_gains; - sim.last_UE_rx_timestamp[UE->Mod_id][UE->CC_id] = 0; -} - -void init_ocm(void) { - module_id_t UE_id, ru_id; - int CC_id; - double DS_TDL = .03; - randominit(0); - set_taus_seed(0); - init_channelmod(); - double snr_dB = channelmod_get_snr_dB(); - double sinr_dB = channelmod_get_sinr_dB(); - init_channel_vars ();//fp, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0); - // initialize channel descriptors - LOG_I(PHY,"Initializing channel descriptors (nb_RU %d, nb_UE %d)\n",RC.nb_RU,NB_UE_INST); - - for (ru_id = 0; ru_id < RC.nb_RU; ru_id++) { - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { - LOG_I(PHY,"Initializing channel descriptors (RU %d, UE %d) for N_RB_DL %d\n",ru_id,UE_id, - RC.ru[ru_id]->frame_parms->N_RB_DL); - sim.RU2UE[ru_id][UE_id][CC_id] = - new_channel_desc_scm(RC.ru[ru_id]->nb_tx, - PHY_vars_UE_g[UE_id][CC_id]->frame_parms.nb_antennas_rx, - AWGN, - N_RB2sampling_rate(RC.ru[ru_id]->frame_parms->N_RB_DL), - N_RB2channel_bandwidth(RC.ru[ru_id]->frame_parms->N_RB_DL), - DS_TDL, - CORR_LEVEL_LOW, - 0.0, - 0, - 0, - 0); - random_channel(sim.RU2UE[ru_id][UE_id][CC_id],0); - LOG_D(OCM,"[SIM] Initializing channel (%s) from UE %d to ru %d\n", "AWGN", UE_id, ru_id); - - sim.UE2RU[UE_id][ru_id][CC_id] = - new_channel_desc_scm(PHY_vars_UE_g[UE_id][CC_id]->frame_parms.nb_antennas_tx, - RC.ru[ru_id]->nb_rx, - AWGN, - N_RB2sampling_rate(RC.ru[ru_id]->frame_parms->N_RB_UL), - N_RB2channel_bandwidth(RC.ru[ru_id]->frame_parms->N_RB_UL), - DS_TDL, - CORR_LEVEL_LOW, - 0.0, - 0, - 0, - 0); - random_channel(sim.UE2RU[UE_id][ru_id][CC_id],0); - // to make channel reciprocal uncomment following line instead of previous. However this only works for SISO at the moment. For MIMO the channel would need to be transposed. - //UE2RU[UE_id][ru_id] = RU2UE[ru_id][UE_id]; - AssertFatal(sim.RU2UE[ru_id][UE_id][CC_id]!=NULL,"RU2UE[%d][%d][%d] is null\n",ru_id,UE_id,CC_id); - AssertFatal(sim.UE2RU[UE_id][ru_id][CC_id]!=NULL,"UE2RU[%d][%d][%d] is null\n",UE_id,ru_id,CC_id); - - //pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE - if (ru_id == (UE_id % RC.nb_RU)) { - sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower; - sim.UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower; - } else { - sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower; - sim.UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower; - } - - LOG_I(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d, SNR %f)\n",ru_id,UE_id,CC_id, - sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB, - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower, - snr_dB); - } - } - } -} - - -void update_ocm(double snr_dB,double sinr_dB) { - module_id_t UE_id, ru_id; - int CC_id; - - for (ru_id = 0; ru_id < RC.nb_RU; ru_id++) { - for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) { - for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { - AssertFatal(sim.RU2UE[ru_id][UE_id][CC_id]!=NULL,"RU2UE[%d][%d][%d] is null\n",ru_id,UE_id,CC_id); - AssertFatal(sim.UE2RU[UE_id][ru_id][CC_id]!=NULL,"UE2RU[%d][%d][%d] is null\n",UE_id,ru_id,CC_id); - - //pathloss: -132.24 dBm/15kHz RE + target SNR - eNB TX power per RE - if (ru_id == (UE_id % RC.nb_RU)) { - sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower; - sim.UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + snr_dB - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower; - } else { - sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower; - sim.UE2RU[UE_id][ru_id][CC_id]->path_loss_dB = -132.24 + sinr_dB - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower; - } - - LOG_D(OCM,"Path loss from eNB %d to UE %d (CCid %d)=> %f dB (eNB TX %d, SNR %f)\n",ru_id,UE_id,CC_id, - sim.RU2UE[ru_id][UE_id][CC_id]->path_loss_dB, - RC.ru[ru_id]->frame_parms->pdsch_config_common.referenceSignalPower, - snr_dB); - } - } - } -} - - -void init_channel_vars(void) { - int i; - memset(sim.RU_output_mask,0,sizeof(int)*NUMBER_OF_UE_MAX); - - for (i=0; i<NB_UE_INST; i++) - pthread_mutex_init(&sim.RU_output_mutex[i],NULL); - - memset(sim.UE_output_mask,0,sizeof(int)*NUMBER_OF_RU_MAX); - - for (i=0; i<RC.nb_RU; i++) - pthread_mutex_init(&sim.UE_output_mutex[i],NULL); -} - - -void *rfsim_top(void *n_frames) { - wait_sync("rfsim_top"); - printf("Running rfsim with %d frames\n",*(int *)n_frames); - - for (int frame = 0; frame < *(int *)n_frames; frame++) { - for (int sf = 0; sf < 10; sf++) { - int CC_id=0; - int all_done=0; - - while (all_done==0) { - pthread_mutex_lock(&sim.subframe_mutex); - int subframe_ru_mask_local = (subframe_select(RC.ru[0]->frame_parms,(sf+4)%10)!=SF_UL) ? sim.subframe_ru_mask : ((1<<RC.nb_RU)-1); - int subframe_UE_mask_local = (RC.ru[0]->frame_parms->frame_type == FDD || subframe_select(RC.ru[0]->frame_parms,(sf+4)%10)!=SF_DL) ? sim.subframe_UE_mask : ((1<<NB_UE_INST)-1); - pthread_mutex_unlock(&sim.subframe_mutex); - LOG_D(SIM,"Frame %d, Subframe %d, NB_RU %d, NB_UE %d: Checking masks %x,%x\n",frame,sf,RC.nb_RU,NB_UE_INST,subframe_ru_mask_local,subframe_UE_mask_local); - - if ((subframe_ru_mask_local == ((1<<RC.nb_RU)-1)) && - (subframe_UE_mask_local == ((1<<NB_UE_INST)-1))) all_done=1; - else usleep(1500); - } - - //clear subframe masks for next round - pthread_mutex_lock(&sim.subframe_mutex); - sim.subframe_ru_mask=0; - sim.subframe_UE_mask=0; - pthread_mutex_unlock(&sim.subframe_mutex); - - // increment timestamps - - for (int ru_id=0; ru_id<RC.nb_RU; ru_id++) { - sim.current_ru_rx_timestamp[ru_id][CC_id] += RC.ru[ru_id]->frame_parms->samples_per_tti; - LOG_D(SIM,"RU %d/%d: TS %"PRIi64"\n",ru_id,CC_id,sim.current_ru_rx_timestamp[ru_id][CC_id]); - } - - for (int UE_inst = 0; UE_inst<NB_UE_INST; UE_inst++) { - sim.current_UE_rx_timestamp[UE_inst][CC_id] += PHY_vars_UE_g[UE_inst][CC_id]->frame_parms.samples_per_tti; - LOG_D(SIM,"UE %d/%d: TS %"PRIi64"\n",UE_inst,CC_id,sim.current_UE_rx_timestamp[UE_inst][CC_id]); - } - - if (oai_exit == 1) return((void *)NULL); - } - } - - return((void *)NULL); -} diff --git a/openair1/PHY/TOOLS/calibration_test.c b/openair1/PHY/TOOLS/calibration_test.c index 0c5f40cffd21ae4ac3a7f9d03ca59fe26b2a66cc..46ab22e19a8dae4adaadda18c6c8d13211fa6a9e 100644 --- a/openair1/PHY/TOOLS/calibration_test.c +++ b/openair1/PHY/TOOLS/calibration_test.c @@ -14,7 +14,6 @@ int8_t threequarter_fs; uint64_t downlink_frequency[MAX_NUM_CCs][4]; int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; int opp_enabled; -static double snr_dB=20; THREAD_STRUCT thread_struct; uint32_t target_ul_mcs = 9; uint32_t target_dl_mcs = 9; diff --git a/openair1/PHY/defs_L1_NB_IoT.h b/openair1/PHY/defs_L1_NB_IoT.h index 01143ccf472ff39f21c7eacace02056e8b4057fe..f44e62abc28583bc52957a3ddf556540f0b855d7 100644 --- a/openair1/PHY/defs_L1_NB_IoT.h +++ b/openair1/PHY/defs_L1_NB_IoT.h @@ -551,9 +551,6 @@ typedef struct PHY_VARS_eNB_NB_IoT_s { int max_eNB_id, max_sync_pos; /// int N_TA_offset; ///timing offset used in TDD - /// \brief sinr for all subcarriers of the current link (used only for abstraction). - /// first index: ? [0..N_RB_DL*12[ - double *sinr_dB; /// N0 (used for abstraction) double N0; /// @@ -888,9 +885,6 @@ typedef struct { int mac_enabled; /// Flag to initialize averaging of PHY measurements int init_averaging; - /// \brief sinr for all subcarriers of the current link (used only for abstraction). - /// - first index: ? [0..12*N_RB_DL[ - double *sinr_dB; /// \brief sinr for all subcarriers of first symbol for the CQI Calculation. /// - first index: ? [0..12*N_RB_DL[ double *sinr_CQI_dB; diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h index 7f1858b2c46be8950bdd096898e07a647e0f600f..0f45196e2c40fdc3713e16af1d2b2df6f6e7e69d 100644 --- a/openair1/PHY/defs_UE.h +++ b/openair1/PHY/defs_UE.h @@ -739,10 +739,6 @@ typedef struct { /// Flag to initialize averaging of PHY measurements int init_averaging; - /// \brief sinr for all subcarriers of the current link (used only for abstraction). - /// - first index: ? [0..12*N_RB_DL[ - double *sinr_dB; - /// \brief sinr for all subcarriers of first symbol for the CQI Calculation. /// - first index: ? [0..12*N_RB_DL[ double *sinr_CQI_dB; diff --git a/openair1/PHY/defs_eNB.h b/openair1/PHY/defs_eNB.h index 45abb05c2fef72aae15f0eefd0f912ff7f306822..1690a37aff913b4924aabc6d24fac3f55faeecc6 100644 --- a/openair1/PHY/defs_eNB.h +++ b/openair1/PHY/defs_eNB.h @@ -616,10 +616,6 @@ typedef struct PHY_VARS_eNB_s { uint32_t max_peak_val; int max_eNB_id, max_sync_pos; - /// \brief sinr for all subcarriers of the current link (used only for abstraction). - /// first index: ? [0..N_RB_DL*12[ - double *sinr_dB; - /// N0 (used for abstraction) double N0; diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index 834163d8ed0132862e2c5981517a8ee575ba58bd..bb77dac067662cdfd12ec86f657323c353d7ede0 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -512,10 +512,6 @@ typedef struct PHY_VARS_NR_UE_s { /// Flag to initialize averaging of PHY measurements int init_averaging; - /// \brief sinr for all subcarriers of the current link (used only for abstraction). - /// - first index: ? [0..12*N_RB_DL[ - double *sinr_dB; - /// sinr_effective used for CQI calulcation double sinr_eff; diff --git a/openair1/SIMULATION/TOOLS/random_channel.c b/openair1/SIMULATION/TOOLS/random_channel.c index 4e28a4ce132c56dc3f6711abef9b8df452cbd929..753302fc731830989dbe7291b04b8df0d0ce3abc 100644 --- a/openair1/SIMULATION/TOOLS/random_channel.c +++ b/openair1/SIMULATION/TOOLS/random_channel.c @@ -72,8 +72,6 @@ static telnetshell_cmddef_t channelmod_cmdarray[] = { static telnetshell_vardef_t channelmod_vardef[] = {{"", 0, 0, NULL}}; -static double snr_dB=25; -static double sinr_dB=0; static unsigned int max_chan; static channel_desc_t **defined_channels; static char *modellist_name; @@ -2261,14 +2259,6 @@ int modelid_fromstrtype(char *modeltype) { return modelid; } -double channelmod_get_snr_dB(void) { - return snr_dB; -} - -double channelmod_get_sinr_dB(void) { - return sinr_dB; -} - void init_channelmod(void) { paramdef_t channelmod_params[] = CHANNELMOD_PARAMS_DESC; int numparams = sizeofArray(channelmod_params); diff --git a/openair1/SIMULATION/TOOLS/sim.h b/openair1/SIMULATION/TOOLS/sim.h index 366e9c6c6e0e6d8a165973608aeb0c8eca2dd895..33c3f0f9eecb3a06f698b20b000f385f20c64dde 100644 --- a/openair1/SIMULATION/TOOLS/sim.h +++ b/openair1/SIMULATION/TOOLS/sim.h @@ -264,8 +264,6 @@ typedef enum { #define CHANNELMOD_HELP_MODELLIST "<list name> channel list name in config file describing the model type and its parameters\n" // clang-format off #define CHANNELMOD_PARAMS_DESC { \ - {"s" , CONFIG_HLP_SNR, PARAMFLAG_CMDLINE_NOPREFIXENABLED, .dblptr=&snr_dB, .defdblval=25, TYPE_DOUBLE, 0}, \ - {"sinr_dB", NULL, 0, .dblptr=&sinr_dB, .defdblval=0 , TYPE_DOUBLE, 0}, \ {"max_chan", "Max number of runtime models", 0, .uptr=&max_chan, .defintval=10, TYPE_UINT, 0}, \ {CHANNELMOD_MODELLIST_PARANAME, CHANNELMOD_HELP_MODELLIST, 0, .strptr=&modellist_name, .defstrval="DefaultChannelList", TYPE_STRING, 0}, \ } @@ -302,18 +300,11 @@ typedef struct { double r_re_UL[NUMBER_OF_eNB_MAX][2][30720]; double r_im_UL[NUMBER_OF_eNB_MAX][2][30720]; int RU_output_mask[NUMBER_OF_UE_MAX]; - int UE_output_mask[NUMBER_OF_RU_MAX]; pthread_mutex_t RU_output_mutex[NUMBER_OF_UE_MAX]; pthread_mutex_t UE_output_mutex[NUMBER_OF_RU_MAX]; - pthread_mutex_t subframe_mutex; - int subframe_ru_mask; - int subframe_UE_mask; openair0_timestamp current_ru_rx_timestamp[NUMBER_OF_RU_MAX][MAX_NUM_CCs]; openair0_timestamp current_UE_rx_timestamp[MAX_MOBILES_PER_ENB][MAX_NUM_CCs]; - openair0_timestamp last_ru_rx_timestamp[NUMBER_OF_RU_MAX][MAX_NUM_CCs]; - openair0_timestamp last_UE_rx_timestamp[MAX_MOBILES_PER_ENB][MAX_NUM_CCs]; double ru_amp[NUMBER_OF_RU_MAX]; - pthread_t rfsim_thread; } sim_t; diff --git a/radio/rfsimulator/simulator.c b/radio/rfsimulator/simulator.c index 44b2864f8cd7ae5903ae7f97dbdf6863235b2b38..287a65779515fe19af5e2c9cdd3450f247409423 100644 --- a/radio/rfsimulator/simulator.c +++ b/radio/rfsimulator/simulator.c @@ -206,17 +206,6 @@ static int allocCirBuf(rfsimulator_state_t *bridge, int sock) if ( bridge->channelmod > 0) { // create channel simulation model for this mode reception - // snr_dB is pure global, coming from configuration paramter "-s" - // Fixme: referenceSignalPower should come from the right place - // but the datamodel is inconsistant - // legacy: RC.ru[ru_id]->frame_parms.pdsch_config_common.referenceSignalPower - // (must not come from ru[]->frame_parms as it doesn't belong to ru !!!) - // Legacy sets it as: - // ptr->channel_model->path_loss_dB = -132.24 + snr_dB - RC.ru[0]->frame_parms->pdsch_config_common.referenceSignalPower; - // we use directly the paramter passed on the command line ("-s") - // the value channel_model->path_loss_dB seems only a storage place (new_channel_desc_scm() only copy the passed value) - // Legacy changes directlty the variable channel_model->path_loss_dB place to place - // while calling new_channel_desc_scm() with path losses = 0 static bool init_done=false; if (!init_done) {