diff --git a/openair1/PHY/LTE_TRANSPORT/slbch.c b/openair1/PHY/LTE_TRANSPORT/slbch.c index eb8c6c71053ed8247df311cb30082dad4a3ff21a..b961b57f7e19f3b448a41b3c3a9548b1c0a88af0 100644 --- a/openair1/PHY/LTE_TRANSPORT/slbch.c +++ b/openair1/PHY/LTE_TRANSPORT/slbch.c @@ -149,7 +149,7 @@ int rx_psbch(PHY_VARS_UE *ue,int frame_rx,int subframe_rx) { ru_tmp.N_TA_offset=0; ru_tmp.common.rxdata_7_5kHz = (int32_t**)malloc16(ue->frame_parms.nb_antennas_rx*sizeof(int32_t*)); for (int aa=0;aa<ue->frame_parms.nb_antennas_rx;aa++) - ru_tmp.common.rxdata_7_5kHz[aa] = ue->sl_rxdata_7_5kHz[aa];//(int32_t*)&ue->common_vars.rxdata_syncSL[aa][ue->rx_offsetSL*2]; + ru_tmp.common.rxdata_7_5kHz[aa] = ue->sl_rxdata_7_5kHz[ue->current_thread_id[0]][aa];//(int32_t*)&ue->common_vars.rxdata_syncSL[aa][ue->rx_offsetSL*2]; ru_tmp.common.rxdataF = (int32_t**)rxdataF; ru_tmp.nb_rx = ue->frame_parms.nb_antennas_rx; @@ -169,7 +169,10 @@ int rx_psbch(PHY_VARS_UE *ue,int frame_rx,int subframe_rx) { } LOG_D(PHY,"Running PBCH detection with Nid_SL %d (is_synchronizedSL %d) rxdata %p\n",ue->frame_parms.Nid_SL,ue->is_synchronizedSL,ue->common_vars.rxdata[0]); - + LOG_D(PHY,"slbch_decoding: FEP in %d.%d rx signal energy %d dB %d dB\n",frame_rx,subframe_rx, + dB_fixed(signal_energy(&ue->common_vars.rxdata[0][ue->frame_parms.samples_per_tti*subframe_rx],ue->frame_parms.samples_per_tti)), + dB_fixed(signal_energy(ue->sl_rxdata_7_5kHz[ue->current_thread_id[0]][0],ue->frame_parms.samples_per_tti))); + for (int l=0; l<11; l++) { slot_fep_ul(&ru_tmp,l%7,(l>6)?1:0,0); ulsch_extract_rbs_single((int32_t**)rxdataF, @@ -367,7 +370,8 @@ int rx_psbch(PHY_VARS_UE *ue,int frame_rx,int subframe_rx) { &ue->slss_rx, &testframe, &testsubframe); - AssertFatal(testframe!=frame_rx || testsubframe!=subframe_rx, + if (ue->is_synchronizedSL!=0 || ue->is_synchronized!=0) + AssertFatal(testframe==frame_rx && testsubframe==subframe_rx, "SFN.SF %d.%d != %d.%d\n",testframe,testsubframe,frame_rx,subframe_rx); return(0); } diff --git a/openair1/PHY/LTE_TRANSPORT/sldch.c b/openair1/PHY/LTE_TRANSPORT/sldch.c index cfc64de11cf350bf90c5d9941ad866384db5a5fc..155a78f3b82f00744f1aaa923e67bb99c9e5ae85 100644 --- a/openair1/PHY/LTE_TRANSPORT/sldch.c +++ b/openair1/PHY/LTE_TRANSPORT/sldch.c @@ -34,7 +34,7 @@ #include "PHY/defs.h" #include "PHY/LTE_TRANSPORT/proto.h" -#define PSDCH_DEBUG 1 +//#define PSDCH_DEBUG 1 void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subframe_rx,int npsdch,int nprb,int rvidx) { @@ -50,7 +50,9 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra int32_t avgU[2]; - LOG_I(PHY,"sldch_decoding %d.%d npsdch %d rvidx %d sl_fep_done %d\n",frame_rx,subframe_rx,npsdch,rvidx,proc->sl_fep_done); + LOG_D(PHY,"sldch_decoding %d.%d npsdch %d rvidx %d sl_fep_done %d\n",frame_rx,subframe_rx,npsdch,rvidx,proc->sl_fep_done); + + if (ue->sldch_received[npsdch] > 0) return; // slot FEP if (proc->sl_fep_done == 0) { @@ -75,9 +77,10 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra slot_fep_ul(&ru_tmp,l,(subframe_rx<<1)+1,0); } } - LOG_I(PHY,"sldch_decoding: FEP in %d.%d for npsdch %d rvidx %d rx signal energy %d dB %d dB\n",frame_rx,subframe_rx,npsdch,rvidx, + LOG_D(PHY,"sldch_decoding: FEP in %d.%d for npsdch %d rvidx %d rx signal energy %d (%p) dB %d dB\n",frame_rx,subframe_rx,npsdch,rvidx, dB_fixed(signal_energy(&ue->common_vars.rxdata[0][ue->frame_parms.samples_per_tti*subframe_rx],ue->frame_parms.samples_per_tti)), - dB_fixed(signal_energy(ue->sl_rxdata_7_5kHz[0],ue->frame_parms.samples_per_tti))); + &ue->common_vars.rxdata[0][ue->frame_parms.samples_per_tti*subframe_rx], + dB_fixed(signal_energy(ue->sl_rxdata_7_5kHz[ue->current_thread_id[subframe_rx]][0],ue->frame_parms.samples_per_tti))); for (int l=0; l<Nsymb; l++) { ulsch_extract_rbs_single((int32_t**)rxdataF, @@ -153,7 +156,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra log2_maxh = (log2_approx(avgs)/2)+ log2_approx(ue->frame_parms.nb_antennas_rx-1)+4; - LOG_I(PHY,"sldch_decoding %d.%d npsdch %d log2_maxh %d\n",frame_rx,subframe_rx,npsdch,log2_maxh); + LOG_D(PHY,"sldch_decoding %d.%d npsdch %d log2_maxh %d\n",frame_rx,subframe_rx,npsdch,log2_maxh); @@ -284,9 +287,10 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra LOG_I(PHY,"SLDCH received for npsdch %d (rvidx %d, iter %d)\n", npsdch, rvidx,ret); + ue->sldch_received[npsdch] = 1; } - exit(-1); + //exit(-1); } void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx) { @@ -303,7 +307,6 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx uint32_t absSF_offset,absSF_modP; int rvtab[4]={0,2,3,1}; - return; absSF_offset = absSF-O; if (absSF_offset < O) return; @@ -316,6 +319,8 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx sldch->bitmap_length==42,"SLDCH Bitmap_length %x not supported\n", sldch->bitmap_length); + if (absSF_modP == 0) memset((void*)ue->sldch_received,0,sizeof(ue->sldch_received)); + if (absSF_modP >= sldch->bitmap_length) return; uint64_t SFpos = ((uint64_t)1) << absSF_modP; if ((SFpos & sldch->bitmap1) == 0) return; @@ -348,7 +353,7 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx int npsdch; int nprb; - LOG_I(PHY,"LPSDCH %d (%llx), N_TX_SLD %d, Ni %d, Nf %d\n",LPSDCH,sldch->bitmap1,N_TX_SLD,Ni,Nf); + LOG_D(PHY,"LPSDCH %d (%llx), N_TX_SLD %d, Ni %d, Nf %d\n",LPSDCH,sldch->bitmap1,N_TX_SLD,Ni,Nf); // loop over all candidate PRBs for (int a_ji=0;a_ji<Nf;a_ji++){ jrx = absSF_modP%N_TX_SLD;//i/(Nf/N_TX_SLD); @@ -358,10 +363,10 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx if (nprb<(sldch->N_SL_RB>>1)) nprb+=sldch->prb_Start; else nprb+=(sldch->prb_End-(sldch->N_SL_RB>>1)); // call decoding for candidate npsdch - if (npsdch==0) { - LOG_I(PHY,"SLDCH (RX): absSF_modP %d Trying npsdch %d, j %d rvidx %d (nprb %d)\n",absSF_modP,npsdch,jrx,rvtab[jrx],nprb); +// if (npsdch==0) { +// LOG_I(PHY,"SLDCH (RX): absSF_modP %d Trying npsdch %d, j %d rvidx %d (nprb %d)\n",absSF_modP,npsdch,jrx,rvtab[jrx],nprb); sldch_decoding(ue,proc,frame_rx,subframe_rx,npsdch,nprb,rvtab[jrx]); - } + // } } } @@ -414,7 +419,7 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr - LOG_I(PHY,"Generating SLDCH in %d.%d for rvidx %d, npsdch %d, first rb %d\n", + LOG_D(PHY,"Generating SLDCH in %d.%d for rvidx %d, npsdch %d, first rb %d\n", frame_tx,subframe_tx,rvidx,sldch->n_psdch,nprb); dlsch->harq_processes[0]->nb_rb = 2; @@ -574,7 +579,7 @@ void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) { if (absSF_modP != ((b_1i*N_TX_SLD)+sldch->j)) return; nprb = 2*a_ji; - LOG_I(PHY,"Generating SLDCH in SFN.SF %d.%d (O %d, P %d, n_psdch %d, Nf %d, Ni %d, j %d, a_ji %d) \n",frame_tx,subframe_tx,O,P,sldch->n_psdch,Nf,Ni,sldch->j,a_ji); + LOG_D(PHY,"Generating SLDCH in SFN.SF %d.%d (O %d, P %d, n_psdch %d, Nf %d, Ni %d, j %d, a_ji %d) \n",frame_tx,subframe_tx,O,P,sldch->n_psdch,Nf,Ni,sldch->j,a_ji); } else { diff --git a/openair1/PHY/LTE_TRANSPORT/slsss.c b/openair1/PHY/LTE_TRANSPORT/slsss.c index 72e765f89519e377b4938a525a2370027e960f0d..598c91d8d5a0d2380d5116815f446e5512409f11 100644 --- a/openair1/PHY/LTE_TRANSPORT/slsss.c +++ b/openair1/PHY/LTE_TRANSPORT/slsss.c @@ -211,7 +211,8 @@ int _do_slpss_sss_extract(PHY_VARS_UE *ue, pss1_symb = 2; sss0_symb = 11; sss1_symb = 12; - rxdataF = (int32_t**)ue->sl_rxdataF; + rxdataF = (int32_t**)ue->sl_rxdataF[ue->current_thread_id[0]]; +; pss0_rxF = &rxdataF[aarx][(rx_offset + (pss0_symb*(frame_parms->ofdm_symbol_size)))]; sss0_rxF = &rxdataF[aarx][(rx_offset + (sss0_symb*(frame_parms->ofdm_symbol_size)))]; diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c index df1087843d48d9036ea1cb6af934b7fa04bc7d22..a3058df6a9e13309d91b19e1c8e4f1ce122537c2 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_modulation.c @@ -404,7 +404,7 @@ void ulsch_modulation(int32_t **txdataF, else { harq_pid = 0; x2 = cinit; - LOG_I(PHY,"Setting seed for SL to %x\n",x2); + LOG_D(PHY,"Setting seed for SL to %x\n",x2); } if (!ulsch) { diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index e5531c03a17d3f9322300a738ab2db9418ecac3e..5bcba02038030ea1efe78c8e68758f3fd434098a 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -1312,6 +1312,7 @@ typedef struct { LTE_eNB_PUSCH *pusch_slcch; LTE_UE_DLSCH_t *dlsch_rx_slsch; LTE_UE_DLSCH_t *dlsch_rx_sldch[MAX_SLDCH]; + int sldch_received[MAX_SLDCH]; int16_t **sl_rxdataF[RX_NB_TH_MAX]; int16_t **sl_rxdata_7_5kHz[RX_NB_TH_MAX]; int16_t *slsch_dlsch_llr; diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 6eea2318f7c9f7bf28fe12c4126384bd28a5a129..e919395bda5b94ddefd7eb6d78dab01b529ec830 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -1267,9 +1267,8 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin } //#endif -// if ((frame_tx%100) == 0) - LOG_I(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d, empty subframe %d\n", + LOG_D(PHY,"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d, empty subframe %d\n", ue->Mod_id,frame_tx,subframe_tx, ulsch_start, ue->rx_offset, @@ -1345,19 +1344,6 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin } #endif #endif - LOG_I(PHY,"ULSCH : signal energy %d dB (txdataF %p)\n",dB_fixed(signal_energy(&ue->common_vars.txdata[0][ulsch_start],frame_parms->samples_per_tti)),&ue->common_vars.txdataF[0][subframe_tx*nsymb*frame_parms->ofdm_symbol_size]); - // write_output("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_tti,1,1); - // exit(-1); - /* - only for debug - LOG_I(PHY,"ul-signal [subframe: %d, ulsch_start %d, TA: %d, rxOffset: %d, timing_advance: %d, hw_timing_advance: %d]\n",subframe_tx, ulsch_start, ue->N_TA_offset, ue->rx_offset, ue->timing_advance, ue->hw_timing_advance); - if( (crash == 1) && (subframe_tx == 0) ) - { - LOG_E(PHY,"***** DUMP TX Signal [ulsch_start %d] *****\n",ulsch_start); - write_output("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_tti,1,1); - } - */ - } //nb_antennas_tx #if UE_TIMING_TRACE @@ -4795,6 +4781,9 @@ void phy_procedures_UE_SL_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc) { proc->sl_fep_done = 0; + if (ue->is_SynchRef == 0 && (frame_rx&3) == 0 && subframe_rx == 0) rx_psbch(ue,frame_rx,subframe_rx); + + rx_sldch(ue,proc,frame_rx,subframe_rx); if (ue->is_SynchRef == 0 && frame_rx==0 && subframe_rx==0) LOG_I(PHY,"Connected with SyncRef UE (slbch errors %d/%d)\n", diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 4270fdf9a431135232bd0a18617244f57a70f993..132d29da449c838595a352a1dccb58a1c2af2510 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -1784,19 +1784,10 @@ void *UE_threadSL(void *arg) { (void**)UE->common_vars.rxdata, UE->rx_offsetSL, UE->frame_parms.nb_antennas_rx),""); -/* - AssertFatal(UE->frame_parms.samples_per_tti*40 == - UE->rfdevice.trx_read_func(&UE->rfdevice, - ×tamp, - (void**)UE->common_vars.rxdata_syncSL, - UE->frame_parms.samples_per_tti*40, - UE->frame_parms.nb_antennas_rx),""); - write_output("fourframes.m","frames4",UE->common_vars.rxdata_syncSL[0],UE->frame_parms.samples_per_tti*10,1,1); - exit(-1);*/ } UE->rx_offsetSL=0; UE->time_sync_cell=0; - for (int i=0;i<RX_NB_TH;i++) UE->proc.proc_rxtx[i].frame_rx=(UE->proc.proc_rxtx[i].frame_rx-1+(subframe_delay/10))&1023; // -1 because we increment frame_rx below in subframe=0 + for (int i=0;i<RX_NB_TH;i++) UE->proc.proc_rxtx[i].frame_rx=(UE->proc.proc_rxtx[i].frame_rx+3+(subframe_delay/10))&1023; // +3 because we increment frame_rx below in subframe=0 and first pbch is received in +4 frames } else { // This is steady-state mode sub_frame++; sub_frame%=10; @@ -1849,16 +1840,14 @@ void *UE_threadSL(void *arg) { writeBlockSize=UE->frame_parms.samples_per_tti -UE->rx_offset_diff; } - LOG_D(PHY,"reading rxp[0] %p (%p) : %d samples\n", - rxp[0],UE->common_vars.rxdata[0], - readBlockSize); AssertFatal(readBlockSize == UE->rfdevice.trx_read_func(&UE->rfdevice, ×tamp, rxp, readBlockSize, UE->frame_parms.nb_antennas_rx),""); - LOG_D(PHY,"writing txp[0] %p (%p)\n",txp[0],UE->common_vars.txdata[0]); + + AssertFatal( writeBlockSize == UE->rfdevice.trx_write_func(&UE->rfdevice,