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) {
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);
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->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;
......
......@@ -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 check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx);
/*! \brief Top-level generation route for Sidelink Shared Channel
\param ue pointer to UE descriptor
\param slsch pointer to SLSCH configuration and payload
......
......@@ -32,7 +32,7 @@
#ifndef __LTE_TRANSPORT_SLSS__C__
#define __LTE_TRANSPORT_SLSS__C__
#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) {
......@@ -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,
"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;
int first_prb;
......@@ -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]->rvidx = rvidx;
LOG_I(PHY,"SLDCH dlsch encoding\n");
dlsch_encoding0(&ue->frame_parms,
sldch->payload,
0, // means SL
......@@ -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_interleaving_stats);
LOG_I(PHY,"SLDCH interleaving\n");
int Cmux = (Nsymb-1)<<1;
uint8_t *eptr;
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
}
}
LOG_I(PHY,"SLDCH scrambling\n");
// scrambling
uint32_t cinit=510;
......@@ -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));
}
LOG_I(PHY,"SLDCH Modulation\n");
ulsch_modulation(ue->common_vars.txdataF,
tx_amp,
frame_tx,
......@@ -576,7 +572,6 @@ void sldch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,int npr
1,
cinit);
LOG_I(PHY,"SLDCH DMRS\n");
generate_drs_pusch(ue,
NULL,
0,
......@@ -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;
LOG_I(PHY,"SLDCH generated\n");
}
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,
"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;
unsigned int Ni,Nf;
if (sldch->type == disc_type1) {
Ni = LPSDCH/N_TX_SLD;
Nf = M_RB_PSDCH_RP>>1;
sldch->n_psdch = taus()%(Ni*Nf);
int a_ji = (((sldch->j-1)*(Nf/N_TX_SLD)) + (sldch->n_psdch/Ni))%Nf;
sldch->n_psdch = 0; //taus()%(Ni*Nf);
int a_ji = ((sldch->j*(Nf/N_TX_SLD)) + (sldch->n_psdch/Ni))%Nf;
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;
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 {
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));
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);
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) {
}
// check for SLDCH
/*
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);
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]);
// 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