Commit 46ca2820 authored by Raymond Knopp's avatar Raymond Knopp

SLDCH validated over-the-air

parent a616e8d6
......@@ -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);
}
......
......@@ -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 {
......
......@@ -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)))];
......
......@@ -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) {
......
......@@ -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;
......
......@@ -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",
......
......@@ -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,
&timestamp,
(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,
&timestamp,
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,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment