Commit 8617782a authored by Matthieu Kanj's avatar Matthieu Kanj

bug fixe

parent 6454c61f
...@@ -384,12 +384,12 @@ void phy_config_dedicated_eNB_NB_IoT(uint8_t Mod_id, ...@@ -384,12 +384,12 @@ void phy_config_dedicated_eNB_NB_IoT(uint8_t Mod_id,
if (eNB->npdcch[UE_id]) { if (eNB->npdcch[UE_id]) {
npdcch = eNB->npdcch[UE_id]; npdcch = eNB->npdcch[UE_id];
npdcch->rnti = rnti; npdcch->rnti[0] = rnti;
npdcch->npdcch_NumRepetitions = extra_parms->npdcch_NumRepetitions; //Rmax maybe is the only one needed npdcch->npdcch_NumRepetitions[0] = extra_parms->npdcch_NumRepetitions; //Rmax maybe is the only one needed
//npdcch->npdcch_Offset_USS = extra_parms->npdcch_Offset_USS; //npdcch->npdcch_Offset_USS = extra_parms->npdcch_Offset_USS;
//npdcch->npdcch_StartSF_USS = extra_parms->npdcch_StartSF_USS; //npdcch->npdcch_StartSF_USS = extra_parms->npdcch_StartSF_USS;
LOG_I(PHY,"phy_config_dedicated_eNB_NB_IoT: npdcch_NumRepetitions = %d\n",npdcch->npdcch_NumRepetitions); LOG_I(PHY,"phy_config_dedicated_eNB_NB_IoT: npdcch_NumRepetitions = %d\n",npdcch->npdcch_NumRepetitions[0]);
} else { } else {
LOG_E(PHY,"[eNB %d] Received NULL radioResourceConfigDedicated from eNB %d\n",Mod_id, UE_id); LOG_E(PHY,"[eNB %d] Received NULL radioResourceConfigDedicated from eNB %d\n",Mod_id, UE_id);
......
This diff is collapsed.
...@@ -546,27 +546,6 @@ typedef enum ...@@ -546,27 +546,6 @@ typedef enum
typedef struct {
rnti_t rnti;
//array containing the pdus of DCI
uint8_t *a[2];
//Array containing encoded DCI data
uint8_t *e[2];
//UE specific parameters
uint16_t npdcch_NumRepetitions;
uint16_t repetition_number;
//indicate the corresponding subframe within the repetition (set to 0 when a new NPDCCH pdu is received)
uint16_t repetition_idx;
// uint16_t npdcch_Offset_USS;
// uint16_t npdcch_StartSF_USS;
}NB_IoT_eNB_NPDCCH_t;
typedef struct{ typedef struct{
//Number of repetitions (R) for common search space (RAR and PAGING) //Number of repetitions (R) for common search space (RAR and PAGING)
...@@ -871,18 +850,28 @@ typedef struct { ...@@ -871,18 +850,28 @@ typedef struct {
} NB_IoT_eNB_NPBCH_t; } NB_IoT_eNB_NPBCH_t;
#define NPDCCH_A 23 #define NPDCCH_A 23
#define MAX_BITS_IN_SF 284 // maximum number of bits over one subframe
typedef struct { typedef struct {
//the 2 LSB of the hsfn (the MSB are indicated by the SIB1-NB) //the 2 LSB of the hsfn (the MSB are indicated by the SIB1-NB)
rnti_t rnti[2];
//UE specific parameters
uint16_t npdcch_NumRepetitions[2];
uint16_t repetition_number[2];
//indicate the corresponding subframe within the repetition (set to 0 when a new NPDCCH pdu is received)
uint16_t repetition_idx[2];
uint16_t h_sfn_lsb; uint16_t h_sfn_lsb;
uint8_t npdcch_d[2][96+(3*(16+NPDCCH_A))]; uint8_t npdcch_d[2][96+(3*(16+NPDCCH_A))];
uint8_t npdcch_w[2][3*3*(16+NPDCCH_A)]; uint8_t npdcch_w[2][3*3*(16+NPDCCH_A)];
uint8_t npdcch_e[2][236]; uint8_t npdcch_e[2][MAX_BITS_IN_SF];
///pdu of the npbch message ///pdu of the npbch message
uint8_t pdu[2][3]; uint8_t pdu[2][3];
} NB_IoT_eNB_NPDCCH_temp_t; } NB_IoT_eNB_NPDCCH_t;
#endif #endif
...@@ -125,7 +125,7 @@ void ccode_encode_npdsch_NB_IoT (int32_t numbits, ...@@ -125,7 +125,7 @@ void ccode_encode_npdsch_NB_IoT (int32_t numbits,
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
int dlsch_encoding_NB_IoT(unsigned char *a, int dlsch_encoding_NB_IoT(unsigned char *a,
NB_IoT_DL_eNB_HARQ_t *dlsch, //NB_IoT_eNB_NDLSCH_t NB_IoT_eNB_NDLSCH_t *dlsch, //NB_IoT_eNB_NDLSCH_t
uint8_t Nsf, // number of subframes required for npdsch pdu transmission calculated from Isf (3GPP spec table) uint8_t Nsf, // number of subframes required for npdsch pdu transmission calculated from Isf (3GPP spec table)
unsigned int G, unsigned int G,
uint8_t option) // G (number of available RE) is implicitly multiplied by 2 (since only QPSK modulation) uint8_t option) // G (number of available RE) is implicitly multiplied by 2 (since only QPSK modulation)
...@@ -134,7 +134,7 @@ int dlsch_encoding_NB_IoT(unsigned char *a, ...@@ -134,7 +134,7 @@ int dlsch_encoding_NB_IoT(unsigned char *a,
//unsigned char harq_pid = dlsch->current_harq_pid; // to check during implementation if harq_pid is required in the NB_IoT_eNB_DLSCH_t structure in defs_NB_IoT.h //unsigned char harq_pid = dlsch->current_harq_pid; // to check during implementation if harq_pid is required in the NB_IoT_eNB_DLSCH_t structure in defs_NB_IoT.h
//uint8_t option1,option2,option3,option4; //uint8_t option1,option2,option3,option4;
unsigned int A=0; unsigned int A=0;
A = dlsch->TBS / 8; A = dlsch->harq_process->TBS / 8;
uint8_t RCC; uint8_t RCC;
...@@ -143,7 +143,7 @@ int dlsch_encoding_NB_IoT(unsigned char *a, ...@@ -143,7 +143,7 @@ int dlsch_encoding_NB_IoT(unsigned char *a,
bzero(npbch_a,A); bzero(npbch_a,A);
bzero(npbch_a_crc,A+3); bzero(npbch_a_crc,A+3);
dlsch->length_e = G*Nsf; // G*Nsf (number_of_subframes) = total number of bits to transmit G=236 dlsch->harq_process->length_e = G*Nsf; // G*Nsf (number_of_subframes) = total number of bits to transmit G=236
for (int i=0; i<A; i++) for (int i=0; i<A; i++)
...@@ -165,13 +165,12 @@ int dlsch_encoding_NB_IoT(unsigned char *a, ...@@ -165,13 +165,12 @@ int dlsch_encoding_NB_IoT(unsigned char *a,
npbch_a_crc[A+1] = ((uint8_t*)&crc)[1]; npbch_a_crc[A+1] = ((uint8_t*)&crc)[1];
npbch_a_crc[A+2] = ((uint8_t*)&crc)[0]; npbch_a_crc[A+2] = ((uint8_t*)&crc)[0];
dlsch->B = numbits; // The length of table b in bits dlsch->harq_process->B = numbits; // The length of table b in bits
//memcpy(dlsch->b,a,numbits/8); // comment if option 2 //memcpy(dlsch->b,a,numbits/8); // comment if option 2
memset(dlsch->d,LTE_NULL_NB_IoT,96); memset(dlsch->harq_process->d,LTE_NULL_NB_IoT,96);
ccode_encode_npdsch_NB_IoT(numbits,npbch_a_crc,dlsch->d+96,crc); ccode_encode_npdsch_NB_IoT(numbits,npbch_a_crc,dlsch->harq_process->d+96,crc);
RCC = sub_block_interleaving_cc_NB_IoT(numbits,dlsch->d+96,dlsch->w); // step 2 interleaving RCC = sub_block_interleaving_cc_NB_IoT(numbits,dlsch->harq_process->d+96,dlsch->harq_process->w); // step 2 interleaving
lte_rate_matching_cc_NB_IoT(RCC,dlsch->length_e,dlsch->w,dlsch->e); // step 3 Rate Matching lte_rate_matching_cc_NB_IoT(RCC,dlsch->harq_process->length_e,dlsch->harq_process->w,dlsch->harq_process->e); // step 3 Rate Matching
return(0); return(0);
......
...@@ -137,7 +137,7 @@ int dlsch_modulation_NB_IoT(int32_t **txdataF, ...@@ -137,7 +137,7 @@ int dlsch_modulation_NB_IoT(int32_t **txdataF,
int16_t amp, int16_t amp,
LTE_DL_FRAME_PARMS *frame_parms, LTE_DL_FRAME_PARMS *frame_parms,
uint8_t control_region_size, // control region size for LTE , values between 0..3, (0 for stand-alone / 1, 2 or 3 for in-band) uint8_t control_region_size, // control region size for LTE , values between 0..3, (0 for stand-alone / 1, 2 or 3 for in-band)
NB_IoT_DL_eNB_HARQ_t *dlsch0, //NB_IoT_eNB_NDLSCH_t NB_IoT_eNB_NDLSCH_t *dlsch0, //NB_IoT_eNB_NDLSCH_t
int G, // number of bits per subframe int G, // number of bits per subframe
unsigned int npdsch_data_subframe, // subframe index of the data table of npdsch channel (G*Nsf) , values are between 0..Nsf unsigned int npdsch_data_subframe, // subframe index of the data table of npdsch channel (G*Nsf) , values are between 0..Nsf
unsigned int subframe, unsigned int subframe,
...@@ -184,7 +184,7 @@ int dlsch_modulation_NB_IoT(int32_t **txdataF, ...@@ -184,7 +184,7 @@ int dlsch_modulation_NB_IoT(int32_t **txdataF,
txdataF, txdataF,
&jj, &jj,
symbol_offset, symbol_offset,
&dlsch0->s_e[G*npdsch_data_subframe], &dlsch0->harq_process->s_e[G*npdsch_data_subframe],
pilots, pilots,
amp, amp,
id_offset, id_offset,
......
...@@ -258,23 +258,27 @@ unsigned char get_Qm_ul_NB_IoT(unsigned char I_MCS, uint8_t N_sc_RU); ...@@ -258,23 +258,27 @@ unsigned char get_Qm_ul_NB_IoT(unsigned char I_MCS, uint8_t N_sc_RU);
int dci_modulation_NB_IoT(int32_t **txdataF, int dci_modulation_NB_IoT(int32_t **txdataF,
int16_t amp, int16_t amp,
LTE_DL_FRAME_PARMS *frame_parms, LTE_DL_FRAME_PARMS *frame_parms,
uint8_t control_region_size, //XXX we pass the npdcch_start_symbol // control region size for LTE , values between 0..3, (0 for stand-alone / 1, 2 or 3 for in-band) uint8_t control_region_size, // control region size for LTE , values between 0..3, (0 for stand-alone / 1, 2 or 3 for in-band)
uint8_t *e, // Input data NB_IoT_eNB_NDLSCH_t *dlsch0, //NB_IoT_eNB_NDLSCH_t
int G, // number of bits per subframe
unsigned int npdsch_data_subframe, // subframe index of the data table of npdsch channel (G*Nsf) , values are between 0..Nsf
uint8_t dci_number, // This variable should takes the 1 or 2 (1 for in case of one DCI, 2 in case of two DCI) uint8_t dci_number, // This variable should takes the 1 or 2 (1 for in case of one DCI, 2 in case of two DCI)
uint8_t agr_level, uint8_t agr_level,
int RB_index, unsigned int subframe,
int subframe); unsigned short NB_IoT_RB_ID);
int dci_allocate_REs_in_RB_NB_IoT(LTE_DL_FRAME_PARMS *frame_parms, int dci_allocate_REs_in_RB_NB_IoT(LTE_DL_FRAME_PARMS *frame_parms,
int32_t **txdataF, int32_t **txdataF,
uint32_t *jj, uint32_t *jj,
uint32_t symbol_offset, uint32_t symbol_offset,
uint8_t *x0[2], uint8_t *x0,
uint8_t pilots, uint8_t pilots,
uint8_t pilot_shift,
int16_t amp, int16_t amp,
unsigned short id_offset, unsigned short id_offset,
uint32_t *re_allocated, // not used variable ??!! uint32_t *re_allocated, // not used variable ??!!
uint8_t dci_number, // This variable should takes the 1 or 2 (1 for in case of one DCI, 2 in case of two DCI) uint8_t dci_number, // This variable should takes the 1 or 2 (1 for in case of one DCI, 2 in case of two DCI)
uint8_t ncce_index,
uint8_t agr_level); uint8_t agr_level);
void npdcch_scrambling_NB_IoT(LTE_DL_FRAME_PARMS *frame_parms, void npdcch_scrambling_NB_IoT(LTE_DL_FRAME_PARMS *frame_parms,
...@@ -289,7 +293,7 @@ int dlsch_modulation_NB_IoT(int32_t **txdataF, ...@@ -289,7 +293,7 @@ int dlsch_modulation_NB_IoT(int32_t **txdataF,
int16_t amp, int16_t amp,
LTE_DL_FRAME_PARMS *frame_parms, LTE_DL_FRAME_PARMS *frame_parms,
uint8_t control_region_size, // control region size for LTE , values between 0..3, (0 for stand-alone / 1, 2 or 3 for in-band) uint8_t control_region_size, // control region size for LTE , values between 0..3, (0 for stand-alone / 1, 2 or 3 for in-band)
NB_IoT_DL_eNB_HARQ_t *dlsch0, //NB_IoT_eNB_NDLSCH_t NB_IoT_eNB_NDLSCH_t *dlsch0, //NB_IoT_eNB_NDLSCH_t
int G, // number of bits per subframe int G, // number of bits per subframe
unsigned int npdsch_data_subframe, // subframe index of the data table of npdsch channel (G*Nsf) , values are between 0..Nsf unsigned int npdsch_data_subframe, // subframe index of the data table of npdsch channel (G*Nsf) , values are between 0..Nsf
unsigned int subframe, unsigned int subframe,
...@@ -307,7 +311,7 @@ int dlsch_modulation_rar_NB_IoT(int32_t **txdataF, ...@@ -307,7 +311,7 @@ int dlsch_modulation_rar_NB_IoT(int32_t **txdataF,
uint8_t option); uint8_t option);
*/ */
int32_t dlsch_encoding_NB_IoT(unsigned char *a, int32_t dlsch_encoding_NB_IoT(unsigned char *a,
NB_IoT_DL_eNB_HARQ_t *dlsch, // NB_IoT_eNB_NDLSCH_t NB_IoT_eNB_NDLSCH_t *dlsch, // NB_IoT_eNB_NDLSCH_t
uint8_t Nsf, // number of subframes required for npdsch pdu transmission calculated from Isf (3GPP spec table) uint8_t Nsf, // number of subframes required for npdsch pdu transmission calculated from Isf (3GPP spec table)
unsigned int G, unsigned int G,
uint8_t option); // G (number of available RE) is implicitly multiplied by 2 (since only QPSK modulation) uint8_t option); // G (number of available RE) is implicitly multiplied by 2 (since only QPSK modulation)
......
...@@ -516,7 +516,7 @@ NB_IoT_eNB_NDLSCH_t *ndlsch_SIB1; ...@@ -516,7 +516,7 @@ NB_IoT_eNB_NDLSCH_t *ndlsch_SIB1;
NB_IoT_eNB_NDLSCH_t *ndlsch_SIB23; NB_IoT_eNB_NDLSCH_t *ndlsch_SIB23;
NB_IoT_eNB_NDLSCH_t *ndlsch_RAR; NB_IoT_eNB_NDLSCH_t *ndlsch_RAR;
//NB_IoT_eNB_NDLSCH_t ndlsch_rar; //NB_IoT_eNB_NDLSCH_t ndlsch_rar;
NB_IoT_eNB_NPDCCH_temp_t npdcch_tmp; NB_IoT_eNB_NPDCCH_t npdcch_DCI;
NB_IoT_eNB_NULSCH_t *ulsch_NB_IoT[NUMBER_OF_UE_MAX+1]; NB_IoT_eNB_NULSCH_t *ulsch_NB_IoT[NUMBER_OF_UE_MAX+1];
////////////// For IF Module ///////////////////////////// ////////////// For IF Module /////////////////////////////
......
This diff is collapsed.
...@@ -878,10 +878,10 @@ void generate_eNB_dlsch_params_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_t * ...@@ -878,10 +878,10 @@ void generate_eNB_dlsch_params_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,eNB_rxtx_proc_t *
//set the NPDCCH UE-specific structure (calculate R) //set the NPDCCH UE-specific structure (calculate R)
npdcch=eNB->npdcch[(uint8_t)UE_id]; npdcch=eNB->npdcch[(uint8_t)UE_id];
AssertFatal(npdcch != NULL, "NPDCCH structure for UE specific is not exist\n"); AssertFatal(npdcch != NULL, "NPDCCH structure for UE specific is not exist\n");
npdcch->repetition_idx = 0; //this is used for the encoding mechanism to understand that is the first transmission npdcch->repetition_idx[(uint8_t)UE_id] = 0; //this is used for the encoding mechanism to understand that is the first transmission
if(dl_config_pdu->npdcch_pdu.npdcch_pdu_rel13.aggregation_level) //whenever aggregation level is =1 we have only 1 repetition for USS if(dl_config_pdu->npdcch_pdu.npdcch_pdu_rel13.aggregation_level) //whenever aggregation level is =1 we have only 1 repetition for USS
npdcch->repetition_number = 1; npdcch->repetition_number[(uint8_t)UE_id] = 1;
else else
{ {
//see TS 36.213 Table 16.1-1 //see TS 36.213 Table 16.1-1
...@@ -1532,7 +1532,7 @@ void phy_procedures_eNB_TX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB, ...@@ -1532,7 +1532,7 @@ void phy_procedures_eNB_TX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
for(UE_id = 0 ; UE_id < NUMBER_OF_UE_MAX_NB_IoT; UE_id++) for(UE_id = 0 ; UE_id < NUMBER_OF_UE_MAX_NB_IoT; UE_id++)
{ {
if(eNB->npdcch[(uint8_t)UE_id] != NULL && eNB->npdcch[(uint8_t)UE_id]->rnti == dci_pdu->dci_alloc->rnti && (eNB->ndlsch_SIB1->harq_process->status != ACTIVE_NB_IoT || subframe != 4)) if(eNB->npdcch[(uint8_t)UE_id] != NULL && eNB->npdcch[(uint8_t)UE_id]->rnti[(uint8_t)UE_id] == dci_pdu->dci_alloc->rnti && (eNB->ndlsch_SIB1->harq_process->status != ACTIVE_NB_IoT || subframe != 4))
{ {
if(frame%2 == 0)//condition on NSSS (subframe 9 not available) if(frame%2 == 0)//condition on NSSS (subframe 9 not available)
{ {
...@@ -1547,7 +1547,7 @@ void phy_procedures_eNB_TX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB, ...@@ -1547,7 +1547,7 @@ void phy_procedures_eNB_TX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
eNB->common_vars.txdataF[0], eNB->common_vars.txdataF[0],
subframe, subframe,
dci_pdu->npdcch_start_symbol); //this parameter depends by eutraControlRegionSize (see TS36.213 16.6.1) dci_pdu->npdcch_start_symbol); //this parameter depends by eutraControlRegionSize (see TS36.213 16.6.1)
eNB->npdcch[(uint8_t)UE_id]->repetition_idx++; //can do also inside also the management eNB->npdcch[(uint8_t)UE_id]->repetition_idx[(uint8_t)UE_id]++; //can do also inside also the management
break; break;
} }
...@@ -1565,7 +1565,7 @@ void phy_procedures_eNB_TX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB, ...@@ -1565,7 +1565,7 @@ void phy_procedures_eNB_TX_NB_IoT(PHY_VARS_eNB_NB_IoT *eNB,
subframe, subframe,
dci_pdu->npdcch_start_symbol); //this parameter depends by eutraControlRegionSize (see TS36.213 16.6.1) dci_pdu->npdcch_start_symbol); //this parameter depends by eutraControlRegionSize (see TS36.213 16.6.1)
eNB->npdcch[(uint8_t)UE_id]->repetition_idx++; //can do also inside also the management eNB->npdcch[(uint8_t)UE_id]->repetition_idx[(uint8_t)UE_id]++; //can do also inside also the management
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