Commit cbec5d87 authored by Raymond Knopp's avatar Raymond Knopp

Merge branch 'l1-sidelink' of https://gitlab.eurecom.fr/matzakos/LTE-D2D into l1-sidelink

parents b2ca66f2 115912aa
......@@ -34,6 +34,8 @@
#include "PHY/defs.h"
#include "PHY/LTE_TRANSPORT/proto.h"
//#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) {
int Nsymb = 7;
......@@ -75,7 +77,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
}
LOG_I(PHY,"sldch_decoding: FEP for npsdch %d rvidx %d rx signal energy %d dB %d dB\n",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,ue->frame_parms.samples_per_tti)));
dB_fixed(signal_energy(ue->sl_rxdata_7_5kHz[0],ue->frame_parms.samples_per_tti)));
for (int l=0; l<Nsymb; l++) {
ulsch_extract_rbs_single((int32_t**)rxdataF,
......@@ -151,7 +153,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);
LOG_I(PHY,"sldch_decoding %d.%d npsdch %d log2_maxh %d\n",frame_rx,subframe_rx,npsdch,log2_maxh);
......@@ -202,7 +204,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
int E = 12*2*2*((Nsymb-1)<<1);
int16_t *llrp = ue->slsch_ulsch_llr;
int16_t *llrp = ue->sldch_ulsch_llr;
for (int l=0; l<(Nsymb<<1)-1; l++) {
......@@ -213,16 +215,16 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
ulsch_qpsk_llr(&ue->frame_parms,
(int32_t **)rxdataF_comp,
(int16_t *)ue->slsch_ulsch_llr,
(int16_t *)ue->sldch_ulsch_llr,
l,
2,
&llrp);
}
/*
write_output("sldch_llr.m","sldchllr",ue->sldch_ulsch_llr[npsdch],
#ifdef PSDCH_DEBUG
write_output("sldch_llr.m","sldchllr",ue->sldch_ulsch_llr,
12*2*(ue->frame_parms.symbols_per_tti),
1,0);
*/
#endif
// unscrambling
......@@ -250,7 +252,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
ue->sldch_dlsch_llr[((r*Cmux)+i)<<1] = ue->sldch_ulsch_llr[j++];
ue->sldch_dlsch_llr[(((r*Cmux)+i)<<1)+1] = ue->sldch_ulsch_llr[j++];
// printf("dlsch_llr[%d] %d(%d) dlsch_llr[%d] %d(%d)\n",
// ((r*Cmux)+i)<<1,ue->slsch_dlsch_llr[((r*Cmux)+i)<<1],j-2,(((r*Cmux)+i)<<1)+1,ue->slsch_dlsch_llr[(((r*Cmux)+i)<<1)+1],j-1);
// ((r*Cmux)+i)<<1,ue->sldch_dlsch_llr[((r*Cmux)+i)<<1],j-2,(((r*Cmux)+i)<<1)+1,ue->sldch_dlsch_llr[(((r*Cmux)+i)<<1)+1],j-1);
}
}
......@@ -284,6 +286,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
rvidx,ret);
}
exit(-1);
}
void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx) {
......@@ -408,8 +411,8 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
LOG_I(PHY,"Generating SLDCH for rvidx %d, npsdch %d, first rb %d\n",
rvidx,sldch->n_psdch,nprb);
LOG_I(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;
dlsch->harq_processes[0]->TBS = 256;
......
......@@ -477,10 +477,10 @@ int32_t ulsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
int i;
// printf("qpsk llr for symbol %d (pos %d), nb_rb %d\n",symbol,(symbol*frame_parms->N_RB_DL*12),nb_rb);
// printf("qpsk llr for symbol %d (pos %d), nb_rb %d\n",symbol,(symbol*frame_parms->N_RB_DL*12),nb_rb);
for (i=0; i<(nb_rb*3); i++) {
// printf("%d,%d,%d,%d,%d,%d,%d,%d\n",((int16_t *)rxF)[0],((int16_t *)rxF)[1],((int16_t *)rxF)[2],((int16_t *)rxF)[3],((int16_t *)rxF)[4],((int16_t *)rxF)[5],((int16_t *)rxF)[6],((int16_t *)rxF)[7]);
// printf("%d,%d,%d,%d,%d,%d,%d,%d\n",((int16_t *)rxF)[0],((int16_t *)rxF)[1],((int16_t *)rxF)[2],((int16_t *)rxF)[3],((int16_t *)rxF)[4],((int16_t *)rxF)[5],((int16_t *)rxF)[6],((int16_t *)rxF)[7]);
*(*llrp128) = *rxF;
rxF++;
(*llrp128)++;
......
......@@ -1269,7 +1269,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin
// if ((frame_tx%100) == 0)
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",
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",
ue->Mod_id,frame_tx,subframe_tx,
ulsch_start,
ue->rx_offset,
......@@ -1345,7 +1345,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin
}
#endif
#endif
LOG_D(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]);
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);
/*
......
......@@ -252,6 +252,9 @@ int main(int argc, char **argv) {
init_lte_ue_transport(UE,0);
for (int i=0;i<768*9;i++) slsch_payload[i] = taus()&255;
for (int i=0;i<32;i++) sldch_payload[i] = taus()&255;
if (do_SLSS==1) lte_sync_time_init(&UE->frame_parms);
UE->rx_total_gain_dB = 120.0;
......@@ -298,13 +301,12 @@ int main(int argc, char **argv) {
slsch.L_CRBs = nb_rb;
slsch.payload_length = get_TBS_UL(slsch.mcs,slsch.L_CRBs);
slsch.payload = slsch_payload;
// SLDCH Configuration
sldch.type = disc_type1;
sldch.N_SL_RB = 8;
sldch.prb_Start = 15;
sldch.prb_End = 34;
sldch.offsetIndicator = 0;
sldch.offsetIndicator = 1;
/// 128 frame
sldch.discPeriod = 128;
// 1 transmission per period
......@@ -315,7 +317,8 @@ int main(int argc, char **argv) {
sldch.bitmap1 = 0xffff;
sldch.bitmap_length = 16;
sldch.payload_length = 256;
memcpy((void*)sldch.payload,(void*)sldch_payload,32);
memcpy((void*)&UE->sldch_rx,(void*)&sldch,sizeof(SLDCH_t));
memset((void*)&slss,0,sizeof(slss));
if (do_SLSS == 1) {
......@@ -347,7 +350,7 @@ int main(int argc, char **argv) {
UE->slsch_txcnt = 0;
UE->slsch_rxcnt[0] = 0; UE->slsch_rxcnt[1] = 0; UE->slsch_rxcnt[2] = 0; UE->slsch_rxcnt[3] = 0;
pscch_errors=0;
UE->sl_fep_done = 0;
proc.sl_fep_done = 0;
UE->slbch_errors=0;
for (trials = 0;trials<n_trials;trials++) {
......@@ -361,19 +364,19 @@ int main(int argc, char **argv) {
subframe= absSF%10;
if (do_SLSS==0) {
check_and_generate_psdch(UE,frame,subframe);
UE->slsch_active = 1;
check_and_generate_pscch(UE,frame,subframe);
/* UE->slsch_active = 1;
check_and_generate_pscch(UE,frame,subframe);*/
proc.subframe_tx = subframe;
proc.frame_tx = frame;
check_and_generate_pssch(UE,&proc,frame,subframe);
// check_and_generate_pssch(UE,&proc,frame,subframe);
}
check_and_generate_slss(UE,frame,subframe);
if (UE->psdch_generated>0 || UE->pscch_generated > 0 || UE->pssch_generated > 0 || UE->slss_generated > 0) {
AssertFatal(UE->pscch_generated<3,"Illegal pscch_generated %d\n",UE->pscch_generated);
// FEP
ulsch_common_procedures(UE,&proc,0);
// write_output("txsig0SL.m","txs0",&UE->common_vars.txdata[0][UE->frame_parms.samples_per_tti*subframe],UE->frame_parms.samples_per_tti,1,1);
// printf("Running do_SL_sig for frame %d subframe %d (%d,%d,%d,%d)\n",frame,subframe,UE->slss_generated,UE->pscch_generated,UE->psdch_generated,UE->pssch_generated);
ulsch_common_procedures(UE,proc.frame_tx,proc.subframe_tx,0);
write_output("txsig0SL.m","txs0",&UE->common_vars.txdata[0][UE->frame_parms.samples_per_tti*subframe],UE->frame_parms.samples_per_tti,1,1);
printf("Running do_SL_sig for frame %d subframe %d (%d,%d,%d,%d)\n",frame,subframe,UE->slss_generated,UE->pscch_generated,UE->psdch_generated,UE->pssch_generated);
do_SL_sig(0,UE2UE,subframe,UE->pscch_generated,
3*(UE->frame_parms.ofdm_symbol_size)+2*(UE->frame_parms.nb_prefix_samples)+UE->frame_parms.nb_prefix_samples0,
&UE->frame_parms,frame,0);
......@@ -384,14 +387,17 @@ int main(int argc, char **argv) {
2*UE->frame_parms.samples_per_tti*sizeof(int16_t));
// write_output("rxsyncb0.m","rxsyncb0",(void*)UE->common_vars.rxdata_syncSL[0],(UE->frame_parms.samples_per_tti),1,1);
// exit(-1);
if (UE->psdch_generated==1) rx_sldch(UE,&proc,frame,subframe);
UE->pscch_generated = 0;
UE->pssch_generated = 0;
UE->psdch_generated = 0;
}
rx_slcch(UE,frame,subframe);
/*
rx_slcch(UE,&proc,frame,subframe);
rx_slsch(UE,&proc,frame,subframe);
*/
// rx_sldch(UE,&proc,frame,subframe);
if ((absSF % 40) == 3 && do_SLSS==1) {
printf("Running Initial synchronization for SL\n");
// initial synch for SL
......@@ -399,7 +405,7 @@ int main(int argc, char **argv) {
}
UE->sl_fep_done = 0;
proc.sl_fep_done = 0;
if ((absSF%320) == 319) {
if (UE->slcch_received == 0) pscch_errors++;
break;
......
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