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 @@ ...@@ -34,6 +34,8 @@
#include "PHY/defs.h" #include "PHY/defs.h"
#include "PHY/LTE_TRANSPORT/proto.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) { 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; int Nsymb = 7;
...@@ -75,7 +77,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra ...@@ -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, 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->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++) { for (int l=0; l<Nsymb; l++) {
ulsch_extract_rbs_single((int32_t**)rxdataF, 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 ...@@ -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; 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 ...@@ -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); 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++) { 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 ...@@ -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, ulsch_qpsk_llr(&ue->frame_parms,
(int32_t **)rxdataF_comp, (int32_t **)rxdataF_comp,
(int16_t *)ue->slsch_ulsch_llr, (int16_t *)ue->sldch_ulsch_llr,
l, l,
2, 2,
&llrp); &llrp);
} }
/* #ifdef PSDCH_DEBUG
write_output("sldch_llr.m","sldchllr",ue->sldch_ulsch_llr[npsdch], write_output("sldch_llr.m","sldchllr",ue->sldch_ulsch_llr,
12*2*(ue->frame_parms.symbols_per_tti), 12*2*(ue->frame_parms.symbols_per_tti),
1,0); 1,0);
*/ #endif
// unscrambling // unscrambling
...@@ -249,8 +251,8 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra ...@@ -249,8 +251,8 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
for (int r=0;r<24;r++) { for (int r=0;r<24;r++) {
ue->sldch_dlsch_llr[((r*Cmux)+i)<<1] = ue->sldch_ulsch_llr[j++]; 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++]; 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", // 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 ...@@ -284,6 +286,7 @@ void sldch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
rvidx,ret); rvidx,ret);
} }
exit(-1);
} }
void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx) { 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 ...@@ -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", LOG_I(PHY,"Generating SLDCH in %d.%d for rvidx %d, npsdch %d, first rb %d\n",
rvidx,sldch->n_psdch,nprb); frame_tx,subframe_tx,rvidx,sldch->n_psdch,nprb);
dlsch->harq_processes[0]->nb_rb = 2; dlsch->harq_processes[0]->nb_rb = 2;
dlsch->harq_processes[0]->TBS = 256; dlsch->harq_processes[0]->TBS = 256;
......
...@@ -477,10 +477,10 @@ int32_t ulsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -477,10 +477,10 @@ int32_t ulsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
int i; 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++) { 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; *(*llrp128) = *rxF;
rxF++; rxF++;
(*llrp128)++; (*llrp128)++;
......
...@@ -1269,7 +1269,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin ...@@ -1269,7 +1269,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin
// if ((frame_tx%100) == 0) // 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, ue->Mod_id,frame_tx,subframe_tx,
ulsch_start, ulsch_start,
ue->rx_offset, ue->rx_offset,
...@@ -1345,7 +1345,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin ...@@ -1345,7 +1345,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, int frame_tx, int subframe_tx, uin
} }
#endif #endif
#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); // write_output("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_tti,1,1);
// exit(-1); // exit(-1);
/* /*
......
...@@ -252,6 +252,9 @@ int main(int argc, char **argv) { ...@@ -252,6 +252,9 @@ int main(int argc, char **argv) {
init_lte_ue_transport(UE,0); 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); if (do_SLSS==1) lte_sync_time_init(&UE->frame_parms);
UE->rx_total_gain_dB = 120.0; UE->rx_total_gain_dB = 120.0;
...@@ -298,13 +301,12 @@ int main(int argc, char **argv) { ...@@ -298,13 +301,12 @@ int main(int argc, char **argv) {
slsch.L_CRBs = nb_rb; slsch.L_CRBs = nb_rb;
slsch.payload_length = get_TBS_UL(slsch.mcs,slsch.L_CRBs); slsch.payload_length = get_TBS_UL(slsch.mcs,slsch.L_CRBs);
slsch.payload = slsch_payload; slsch.payload = slsch_payload;
// SLDCH Configuration // SLDCH Configuration
sldch.type = disc_type1; sldch.type = disc_type1;
sldch.N_SL_RB = 8; sldch.N_SL_RB = 8;
sldch.prb_Start = 15; sldch.prb_Start = 15;
sldch.prb_End = 34; sldch.prb_End = 34;
sldch.offsetIndicator = 0; sldch.offsetIndicator = 1;
/// 128 frame /// 128 frame
sldch.discPeriod = 128; sldch.discPeriod = 128;
// 1 transmission per period // 1 transmission per period
...@@ -315,7 +317,8 @@ int main(int argc, char **argv) { ...@@ -315,7 +317,8 @@ int main(int argc, char **argv) {
sldch.bitmap1 = 0xffff; sldch.bitmap1 = 0xffff;
sldch.bitmap_length = 16; sldch.bitmap_length = 16;
sldch.payload_length = 256; 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)); memset((void*)&slss,0,sizeof(slss));
if (do_SLSS == 1) { if (do_SLSS == 1) {
...@@ -347,7 +350,7 @@ int main(int argc, char **argv) { ...@@ -347,7 +350,7 @@ int main(int argc, char **argv) {
UE->slsch_txcnt = 0; UE->slsch_txcnt = 0;
UE->slsch_rxcnt[0] = 0; UE->slsch_rxcnt[1] = 0; UE->slsch_rxcnt[2] = 0; UE->slsch_rxcnt[3] = 0; UE->slsch_rxcnt[0] = 0; UE->slsch_rxcnt[1] = 0; UE->slsch_rxcnt[2] = 0; UE->slsch_rxcnt[3] = 0;
pscch_errors=0; pscch_errors=0;
UE->sl_fep_done = 0; proc.sl_fep_done = 0;
UE->slbch_errors=0; UE->slbch_errors=0;
for (trials = 0;trials<n_trials;trials++) { for (trials = 0;trials<n_trials;trials++) {
...@@ -361,19 +364,19 @@ int main(int argc, char **argv) { ...@@ -361,19 +364,19 @@ int main(int argc, char **argv) {
subframe= absSF%10; subframe= absSF%10;
if (do_SLSS==0) { if (do_SLSS==0) {
check_and_generate_psdch(UE,frame,subframe); check_and_generate_psdch(UE,frame,subframe);
UE->slsch_active = 1; /* UE->slsch_active = 1;
check_and_generate_pscch(UE,frame,subframe); check_and_generate_pscch(UE,frame,subframe);*/
proc.subframe_tx = subframe; proc.subframe_tx = subframe;
proc.frame_tx = frame; 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); check_and_generate_slss(UE,frame,subframe);
if (UE->psdch_generated>0 || UE->pscch_generated > 0 || UE->pssch_generated > 0 || UE->slss_generated > 0) { 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); AssertFatal(UE->pscch_generated<3,"Illegal pscch_generated %d\n",UE->pscch_generated);
// FEP // FEP
ulsch_common_procedures(UE,&proc,0); 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); 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); 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, 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, 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); &UE->frame_parms,frame,0);
...@@ -384,14 +387,17 @@ int main(int argc, char **argv) { ...@@ -384,14 +387,17 @@ int main(int argc, char **argv) {
2*UE->frame_parms.samples_per_tti*sizeof(int16_t)); 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); // write_output("rxsyncb0.m","rxsyncb0",(void*)UE->common_vars.rxdata_syncSL[0],(UE->frame_parms.samples_per_tti),1,1);
// exit(-1); // exit(-1);
if (UE->psdch_generated==1) rx_sldch(UE,&proc,frame,subframe);
UE->pscch_generated = 0; UE->pscch_generated = 0;
UE->pssch_generated = 0; UE->pssch_generated = 0;
UE->psdch_generated = 0; UE->psdch_generated = 0;
} }
rx_slcch(UE,frame,subframe); /*
rx_slcch(UE,&proc,frame,subframe);
rx_slsch(UE,&proc,frame,subframe); rx_slsch(UE,&proc,frame,subframe);
*/
// rx_sldch(UE,&proc,frame,subframe);
if ((absSF % 40) == 3 && do_SLSS==1) { if ((absSF % 40) == 3 && do_SLSS==1) {
printf("Running Initial synchronization for SL\n"); printf("Running Initial synchronization for SL\n");
// initial synch for SL // initial synch for SL
...@@ -399,7 +405,7 @@ int main(int argc, char **argv) { ...@@ -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 ((absSF%320) == 319) {
if (UE->slcch_received == 0) pscch_errors++; if (UE->slcch_received == 0) pscch_errors++;
break; 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