diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 74aebcacd2297b152e54f0f01857140631de367a..b6eb69be924f74c64ab4aa07350a017c610c3231 100644 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -33,7 +33,7 @@ This section deals with basic functions for OFDM Modulation. #include "UTIL/LOG/log.h" #include "UTIL/LOG/vcd_signal_dumper.h" -//#define DEBUG_OFDM_MOD +#define DEBUG_OFDM_MOD void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRAME_PARMS *frame_parms) @@ -67,7 +67,7 @@ void nr_normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,NR_DL_F frame_parms->nb_prefix_samples0, // number of prefix samples CYCLIC_PREFIX); PHY_ofdm_mod(txdataF+frame_parms->ofdm_symbol_size, // input - txdata+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0, // output + txdata + frame_parms->ofdm_symbol_size + frame_parms->nb_prefix_samples0, // output frame_parms->ofdm_symbol_size, nsymb - 1, frame_parms->nb_prefix_samples, // number of prefix samples diff --git a/openair1/SCHED_NR/nr_ru_procedures.c b/openair1/SCHED_NR/nr_ru_procedures.c index 7fee26c79ccd00bb35ccea9feceb964a57ec7881..6523d4440902ce16d45e737a6064044f99273870 100644 --- a/openair1/SCHED_NR/nr_ru_procedures.c +++ b/openair1/SCHED_NR/nr_ru_procedures.c @@ -178,7 +178,7 @@ void nr_feptx_ofdm_2thread(RU_t *ru) { // call first slot in this thread nr_feptx0(ru,0); - wait_on_busy_condition(&proc->mutex_feptx,&proc->cond_feptx,&proc->instance_cnt_feptx,"feptx thread"); + wait_on_busy_condition(&proc->mutex_feptx,&proc->cond_feptx,&proc->instance_cnt_feptx,"NR feptx thread"); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPTX_OFDM , 0 ); @@ -186,6 +186,79 @@ void nr_feptx_ofdm_2thread(RU_t *ru) { } +static void *nr_feptx_thread(void *param) { + + RU_t *ru = (RU_t *)param; + RU_proc_t *proc = &ru->proc; + + thread_top_init("nr_feptx_thread",0,870000,1000000,1000000); + + while (!oai_exit) { + + if (wait_on_condition(&proc->mutex_feptx,&proc->cond_feptx,&proc->instance_cnt_feptx,"NR feptx thread")<0) break; + nr_feptx0(ru,1); + if (release_thread(&proc->mutex_feptx,&proc->instance_cnt_feptx,"NR feptx thread")<0) break; + + if (pthread_cond_signal(&proc->cond_feptx) != 0) { + printf("[gNB] ERROR pthread_cond_signal for NR feptx thread exit\n"); + exit_fun( "ERROR pthread_cond_signal" ); + return NULL; + } + } + return(NULL); +} + +/* +void ru_fep_full_2thread(RU_t *ru) { + + RU_proc_t *proc = &ru->proc; + + struct timespec wait; + + LTE_DL_FRAME_PARMS *fp=&ru->frame_parms; + + if ((fp->frame_type == TDD) && + (subframe_select(fp,proc->subframe_rx) != SF_UL)) return; + + if (ru->idx == 0) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_RU_FEPRX, 1 ); + + wait.tv_sec=0; + wait.tv_nsec=5000000L; + + start_meas(&ru->ofdm_demod_stats); + + if (pthread_mutex_timedlock(&proc->mutex_fep,&wait) != 0) { + printf("[RU] ERROR pthread_mutex_lock for fep thread (IC %d)\n", proc->instance_cnt_fep); + exit_fun( "error locking mutex_fep" ); + return; + } + + if (proc->instance_cnt_fep==0) { + printf("[RU] FEP thread busy\n"); + exit_fun("FEP thread busy"); + pthread_mutex_unlock( &proc->mutex_fep ); + return; + } + + ++proc->instance_cnt_fep; + + + if (pthread_cond_signal(&proc->cond_fep) != 0) { + printf("[RU] ERROR pthread_cond_signal for fep thread\n"); + exit_fun( "ERROR pthread_cond_signal" ); + return; + } + + pthread_mutex_unlock( &proc->mutex_fep ); + + // call second slot in this symbol + fep0(ru,1); + + wait_on_busy_condition(&proc->mutex_fep,&proc->cond_fep,&proc->instance_cnt_fep,"fep thread"); + + stop_meas(&ru->ofdm_demod_stats); +}*/ + void nr_feptx_ofdm(RU_t *ru) { @@ -243,17 +316,10 @@ void nr_feptx_ofdm(RU_t *ru) { } // if S-subframe generate first slot only - if (subframe_select(fp,subframe) == SF_S) + if (nr_subframe_select(fp,subframe) == SF_S) len = fp->samples_per_subframe / fp->slots_per_subframe; else len = fp->samples_per_subframe; - /* - for (i=0;i<len;i+=4) { - dummy_tx_b[i] = 0x100; - dummy_tx_b[i+1] = 0x01000000; - dummy_tx_b[i+2] = 0xff00; - dummy_tx_b[i+3] = 0xff000000; - }*/ if (slot_offset<0) { txdata = (int16_t*)&ru->common.txdata[aa][(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_subframe)+tx_offset]; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf index 0fa1c1d12f42260c1f46ab54066562913af88c70..aaaf00546a307d2e709237a19574091fa824d163 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf @@ -183,7 +183,7 @@ RUs = ( att_rx = 0; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 120; + max_rxgain = 114; eNB_instances = [0]; }