Commit d5f7f2f5 authored by Raymond Knopp's avatar Raymond Knopp

SLDCH TX

parent dc2b99ea
...@@ -1024,8 +1024,12 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) { ...@@ -1024,8 +1024,12 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) {
ue->transmission_mode[i] = ue->frame_parms.nb_antenna_ports_eNB==1 ? 1 : 2; ue->transmission_mode[i] = ue->frame_parms.nb_antenna_ports_eNB==1 ? 1 : 2;
} }
ue->dlsch_rx_slsch = new_ue_dlsch(1,4,NSOFT,1,MAX_TURBO_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag);
for (int i=0;i<MAX_SLDCH;i++) ue->dlsch_rx_sldch[i] = new_ue_dlsch(1,4,NSOFT,1,MAX_TURBO_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag); for (int i=0;i<MAX_SLDCH;i++) ue->dlsch_rx_sldch[i] = new_ue_dlsch(1,4,NSOFT,1,MAX_TURBO_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag);
ue->dlsch_sldch = new_eNB_dlsch(1,1,NSOFT,ue->frame_parms.N_RB_DL, abstraction_flag,&ue->frame_parms);
ue->ulsch_sldch = new_ue_ulsch(ue->frame_parms.N_RB_DL, abstraction_flag);
for (i=0;i<10;i++) ue->dlsch_sldch->harq_ids[i] = 0;
ue->dlsch_rx_slsch = new_ue_dlsch(1,4,NSOFT,1,MAX_TURBO_ITERATIONS,ue->frame_parms.N_RB_DL, abstraction_flag);
ue->dlsch_slsch = new_eNB_dlsch(1,1,NSOFT,ue->frame_parms.N_RB_DL, abstraction_flag,&ue->frame_parms); ue->dlsch_slsch = new_eNB_dlsch(1,1,NSOFT,ue->frame_parms.N_RB_DL, abstraction_flag,&ue->frame_parms);
ue->ulsch_slsch = new_ue_ulsch(ue->frame_parms.N_RB_DL, abstraction_flag); ue->ulsch_slsch = new_ue_ulsch(ue->frame_parms.N_RB_DL, abstraction_flag);
for (i=0;i<10;i++) ue->dlsch_slsch->harq_ids[i] = 0; for (i=0;i<10;i++) ue->dlsch_slsch->harq_ids[i] = 0;
......
...@@ -2341,6 +2341,8 @@ void check_and_generate_slss(PHY_VARS_UE *ue,int frame_tx,int subframe_tx); ...@@ -2341,6 +2341,8 @@ void check_and_generate_slss(PHY_VARS_UE *ue,int frame_tx,int subframe_tx);
*/ */
void generate_sldch(PHY_VARS_UE *ue,SLDCH_t *sldch,int frame_tx,int subframe_tx); void generate_sldch(PHY_VARS_UE *ue,SLDCH_t *sldch,int frame_tx,int subframe_tx);
void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx);
/*! \brief Top-level generation route for Sidelink Shared Channel /*! \brief Top-level generation route for Sidelink Shared Channel
\param ue pointer to UE descriptor \param ue pointer to UE descriptor
\param slsch pointer to SLSCH configuration and payload \param slsch pointer to SLSCH configuration and payload
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#ifndef __LTE_TRANSPORT_SLSS__C__ #ifndef __LTE_TRANSPORT_SLSS__C__
#define __LTE_TRANSPORT_SLSS__C__ #define __LTE_TRANSPORT_SLSS__C__
#include "PHY/defs.h" #include "PHY/defs.h"
#include "PHY/LTE_TRANSPORT/proto.h"
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) {
...@@ -409,7 +409,7 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx ...@@ -409,7 +409,7 @@ void rx_sldch(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, int frame_rx,int subframe_rx
AssertFatal(sldch->type == disc_type1 || sldch->type == disc_type2B, AssertFatal(sldch->type == disc_type1 || sldch->type == disc_type2B,
"unknown Discovery type %d\n",sldch->type); "unknown Discovery type %d\n",sldch->type);
int N_TX_SLD = 1+sldch->numRepetitions; int N_TX_SLD = 1+sldch->numRetx;
uint32_t M_RB_PSDCH_RP = sldch->N_SL_RB; uint32_t M_RB_PSDCH_RP = sldch->N_SL_RB;
int first_prb; int first_prb;
...@@ -503,7 +503,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr ...@@ -503,7 +503,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
dlsch->harq_processes[0]->round = sldch->j; dlsch->harq_processes[0]->round = sldch->j;
dlsch->harq_processes[0]->rvidx = rvidx; dlsch->harq_processes[0]->rvidx = rvidx;
LOG_I(PHY,"SLDCH dlsch encoding\n");
dlsch_encoding0(&ue->frame_parms, dlsch_encoding0(&ue->frame_parms,
sldch->payload, sldch->payload,
0, // means SL 0, // means SL
...@@ -514,7 +513,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr ...@@ -514,7 +513,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
&ue->ulsch_turbo_encoding_stats, &ue->ulsch_turbo_encoding_stats,
&ue->ulsch_interleaving_stats); &ue->ulsch_interleaving_stats);
LOG_I(PHY,"SLDCH interleaving\n");
int Cmux = (Nsymb-1)<<1; int Cmux = (Nsymb-1)<<1;
uint8_t *eptr; uint8_t *eptr;
for (int i=0,j=0; i<Cmux; i++) for (int i=0,j=0; i<Cmux; i++)
...@@ -537,7 +535,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr ...@@ -537,7 +535,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
} }
} }
LOG_I(PHY,"SLDCH scrambling\n");
// scrambling // scrambling
uint32_t cinit=510; uint32_t cinit=510;
...@@ -566,7 +563,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr ...@@ -566,7 +563,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
ue->frame_parms.ofdm_symbol_size*ue->frame_parms.symbols_per_tti*sizeof(int32_t)); ue->frame_parms.ofdm_symbol_size*ue->frame_parms.symbols_per_tti*sizeof(int32_t));
} }
LOG_I(PHY,"SLDCH Modulation\n");
ulsch_modulation(ue->common_vars.txdataF, ulsch_modulation(ue->common_vars.txdataF,
tx_amp, tx_amp,
frame_tx, frame_tx,
...@@ -576,7 +572,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr ...@@ -576,7 +572,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
1, 1,
cinit); cinit);
LOG_I(PHY,"SLDCH DMRS\n");
generate_drs_pusch(ue, generate_drs_pusch(ue,
NULL, NULL,
0, 0,
...@@ -590,7 +585,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr ...@@ -590,7 +585,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
ue->generate_ul_signal[subframe_tx][0] = 1; ue->generate_ul_signal[subframe_tx][0] = 1;
LOG_I(PHY,"SLDCH generated\n");
} }
void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) { void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) {
...@@ -640,30 +634,33 @@ void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) { ...@@ -640,30 +634,33 @@ void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) {
AssertFatal(sldch->type == disc_type1 || sldch->type == disc_type2B, AssertFatal(sldch->type == disc_type1 || sldch->type == disc_type2B,
"unknown Discovery type %d\n",sldch->type); "unknown Discovery type %d\n",sldch->type);
int N_TX_SLD = 1+sldch->numRepetitions; int N_TX_SLD = 1+sldch->numRetx;
uint32_t M_RB_PSDCH_RP = sldch->N_SL_RB; uint32_t M_RB_PSDCH_RP = sldch->N_SL_RB;
unsigned int Ni,Nf; unsigned int Ni,Nf;
if (sldch->type == disc_type1) { if (sldch->type == disc_type1) {
Ni = LPSDCH/N_TX_SLD; Ni = LPSDCH/N_TX_SLD;
Nf = M_RB_PSDCH_RP>>1; Nf = M_RB_PSDCH_RP>>1;
sldch->n_psdch = taus()%(Ni*Nf); sldch->n_psdch = 0; //taus()%(Ni*Nf);
int a_ji = (((sldch->j-1)*(Nf/N_TX_SLD)) + (sldch->n_psdch/Ni))%Nf; int a_ji = ((sldch->j*(Nf/N_TX_SLD)) + (sldch->n_psdch/Ni))%Nf;
int b_1i = sldch->n_psdch%Ni; int b_1i = sldch->n_psdch%Ni;
if (absSF_modP != ((b_1i*N_TX_SLD)+sldch->j-1)) return; if (absSF_modP != ((b_1i*N_TX_SLD)+sldch->j)) return;
nprb = 2*a_ji; 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);
} }
else { else {
AssertFatal(1==0,"Discovery Type 2B not supported yet\n"); AssertFatal(1==0,"Discovery Type 2B not supported yet\n");
} }
if (nprb < sldch->N_SL_RB) nprb+=sldch->prb_Start; if (nprb <(sldch->N_SL_RB>>1)) nprb+=sldch->prb_Start;
else nprb+=(sldch->prb_End-(sldch->N_SL_RB>>1)); else nprb+=(sldch->prb_End-(sldch->N_SL_RB>>1));
LOG_I(PHY,"Generating SLDCH in SFN.SF %d.%d (O %d, P %d, n_psdch %d, Nf %d, Ni %d) \n",frame_tx,subframe_tx,O,P,sldch->n_psdch,Nf,Ni);
sldch_codingmodulation(ue,frame_tx,subframe_tx,nprb,rvidx); sldch_codingmodulation(ue,frame_tx,subframe_tx,nprb,rvidx);
ue->psdch_generated=1; ue->psdch_generated=1;
sldch->j++;
sldch->j&=3;
} }
...@@ -2380,11 +2380,11 @@ void phy_procedures_UE_SL_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc) { ...@@ -2380,11 +2380,11 @@ void phy_procedures_UE_SL_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc) {
} }
// check for SLDCH // check for SLDCH
/*
AssertFatal(0==pthread_mutex_lock(&ue->sldch_mutex),""); AssertFatal(0==pthread_mutex_lock(&ue->sldch_mutex),"");
if ((ue->sldch = ue_get_sldch(ue->Mod_id,ue->CC_id,frame_tx,subframe_tx)) != NULL) check_and_generate_psdch(ue,frame_tx,subframe_tx); if ((ue->sldch = ue_get_sldch(ue->Mod_id,ue->CC_id,frame_tx,subframe_tx)) != NULL) check_and_generate_psdch(ue,frame_tx,subframe_tx);
AssertFatal(0==pthread_mutex_unlock(&ue->sldch_mutex),""); AssertFatal(0==pthread_mutex_unlock(&ue->sldch_mutex),"");
*/
//LOG_D(PHY,"ULSCH (after sldch) : signal F energy %d dB (txdataF %p)\n",dB_fixed(signal_energy(&ue->common_vars.txdataF[0][subframe_tx*14*ue->frame_parms.ofdm_symbol_size],14*ue->frame_parms.ofdm_symbol_size)),&ue->common_vars.txdataF[0][subframe_tx*14*ue->frame_parms.ofdm_symbol_size]); //LOG_D(PHY,"ULSCH (after sldch) : signal F energy %d dB (txdataF %p)\n",dB_fixed(signal_energy(&ue->common_vars.txdataF[0][subframe_tx*14*ue->frame_parms.ofdm_symbol_size],14*ue->frame_parms.ofdm_symbol_size)),&ue->common_vars.txdataF[0][subframe_tx*14*ue->frame_parms.ofdm_symbol_size]);
// check for SLSCH // check for SLSCH
......
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