Commit 2dfe84a7 authored by Raymond Knopp's avatar Raymond Knopp

bugfixing for UL. Remaining problems: CCE allocations in subframe 5 lead to...

bugfixing for UL. Remaining problems: CCE allocations in subframe 5 lead to occasional illegal DCI allocations (affects UL DCI which is missed by UE). waveform compliance with CQI in ULSCH.
parent 15cd4ab0
...@@ -7127,10 +7127,10 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, ...@@ -7127,10 +7127,10 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
harq_pid = subframe2harq_pid(frame_parms, harq_pid = subframe2harq_pid(frame_parms,
pdcch_alloc2ul_frame(frame_parms, pdcch_alloc2ul_frame(frame_parms,
phy_vars_eNB->proc[sched_subframe].frame_tx, phy_vars_eNB->proc[sched_subframe].frame_tx,
subframe), subframe),
pdcch_alloc2ul_subframe(frame_parms,subframe)); pdcch_alloc2ul_subframe(frame_parms,subframe));
// printf("eNB: sched_subframe %d, subframe %d, frame_tx %d\n",sched_subframe,subframe,phy_vars_eNB->proc[sched_subframe].frame_tx); // printf("eNB: sched_subframe %d, subframe %d, frame_tx %d\n",sched_subframe,subframe,phy_vars_eNB->proc[sched_subframe].frame_tx);
switch (frame_parms->N_RB_DL) { switch (frame_parms->N_RB_DL) {
...@@ -7598,9 +7598,9 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, ...@@ -7598,9 +7598,9 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
break; break;
} }
} else { } else {
ulsch->harq_processes[harq_pid]->O_RI = 0;//1; ulsch->harq_processes[harq_pid]->O_RI = 0;
ulsch->harq_processes[harq_pid]->Or2 = 0; ulsch->harq_processes[harq_pid]->Or2 = 0;
ulsch->harq_processes[harq_pid]->Or1 = 0;//sizeof_HLC_subband_cqi_nopmi_5MHz; ulsch->harq_processes[harq_pid]->Or1 = 0;
ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi; ulsch->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi;
} }
......
...@@ -1466,7 +1466,6 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1466,7 +1466,6 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB,
nseq_PHICH = ((ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb/Ngroup_PHICH) + nseq_PHICH = ((ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb/Ngroup_PHICH) +
ulsch_eNB[UE_id]->harq_processes[harq_pid]->n_DMRS)%(2*NSF_PHICH); ulsch_eNB[UE_id]->harq_processes[harq_pid]->n_DMRS)%(2*NSF_PHICH);
//#ifdef DEBUG_PHICH
LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Generating PHICH, ngroup_PHICH %d/%d, nseq_PHICH %d : HI %d, first_rb %d dci_alloc %d)\n", LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d Generating PHICH, ngroup_PHICH %d/%d, nseq_PHICH %d : HI %d, first_rb %d dci_alloc %d)\n",
phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx, phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,
subframe,ngroup_PHICH,Ngroup_PHICH,nseq_PHICH, subframe,ngroup_PHICH,Ngroup_PHICH,nseq_PHICH,
...@@ -1474,7 +1473,6 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1474,7 +1473,6 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB,
ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb, ulsch_eNB[UE_id]->harq_processes[harq_pid]->first_rb,
ulsch_eNB[UE_id]->harq_processes[harq_pid]->dci_alloc); ulsch_eNB[UE_id]->harq_processes[harq_pid]->dci_alloc);
//#endif
if (ulsch_eNB[UE_id]->Msg3_active == 1) { if (ulsch_eNB[UE_id]->Msg3_active == 1) {
LOG_D(PHY,"[eNB %d][PUSCH %d][RAPROC] Frame %d, subframe %d: Generating Msg3 PHICH for UE %d, ngroup_PHICH %d/%d, nseq_PHICH %d : HI %d, first_rb %d\n", LOG_D(PHY,"[eNB %d][PUSCH %d][RAPROC] Frame %d, subframe %d: Generating Msg3 PHICH for UE %d, ngroup_PHICH %d/%d, nseq_PHICH %d : HI %d, first_rb %d\n",
phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe, phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
...@@ -1509,12 +1507,10 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1509,12 +1507,10 @@ void generate_phich_top(PHY_VARS_eNB *phy_vars_eNB,
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d, subframe %d : PHICH NACK / (no format0 DCI) Setting subframe_scheduling_flag\n", LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d, subframe %d : PHICH NACK / (no format0 DCI) Setting subframe_scheduling_flag\n",
phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe); phy_vars_eNB->Mod_id,harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
ulsch_eNB[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1; ulsch_eNB[UE_id]->harq_processes[harq_pid]->subframe_scheduling_flag = 1;
// ulsch_eNB[UE_id]->harq_processes[harq_pid]->Ndi = 0;
// ulsch_eNB[UE_id]->harq_processes[harq_pid]->round++; //this is already done in phy_procedures
ulsch_eNB[UE_id]->harq_processes[harq_pid]->rvidx = rv_table[ulsch_eNB[UE_id]->harq_processes[harq_pid]->round&3]; ulsch_eNB[UE_id]->harq_processes[harq_pid]->rvidx = rv_table[ulsch_eNB[UE_id]->harq_processes[harq_pid]->round&3];
ulsch_eNB[UE_id]->harq_processes[harq_pid]->O_RI = 0; ulsch_eNB[UE_id]->harq_processes[harq_pid]->O_RI = 0;
ulsch_eNB[UE_id]->harq_processes[harq_pid]->Or2 = 0; ulsch_eNB[UE_id]->harq_processes[harq_pid]->Or2 = 0;
ulsch_eNB[UE_id]->harq_processes[harq_pid]->Or1 = 0;//sizeof_HLC_subband_cqi_nopmi_5MHz; ulsch_eNB[UE_id]->harq_processes[harq_pid]->Or1 = 0;
ulsch_eNB[UE_id]->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi; ulsch_eNB[UE_id]->harq_processes[harq_pid]->uci_format = HLC_subband_cqi_nopmi;
} else { } else {
......
...@@ -1058,21 +1058,24 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra ...@@ -1058,21 +1058,24 @@ int32_t generate_prach( PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t subfra
} }
//__m128i mmtmpX0,mmtmpX1,mmtmpX2,mmtmpX3; //__m128i mmtmpX0,mmtmpX1,mmtmpX2,mmtmpX3;
void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_energy_list, uint16_t *preamble_delay_list, uint16_t Nf, uint8_t tdd_mapindex) void rx_prach(PHY_VARS_eNB *phy_vars_eNB,
uint8_t subframe,
uint16_t *preamble_energy_list,
uint16_t *preamble_delay_list,
uint16_t Nf,
uint8_t tdd_mapindex)
{ {
int i; int i;
lte_frame_type_t frame_type = phy_vars_eNB->lte_frame_parms.frame_type; lte_frame_type_t frame_type = phy_vars_eNB->lte_frame_parms.frame_type;
//uint8_t tdd_config = phy_vars_eNB->lte_frame_parms.tdd_config; uint16_t rootSequenceIndex = phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex;
uint16_t rootSequenceIndex = phy_vars_eNB->lte_frame_parms.prach_config_common.rootSequenceIndex; uint8_t prach_ConfigIndex = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
uint8_t prach_ConfigIndex = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex; uint8_t Ncs_config = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig;
uint8_t Ncs_config = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.zeroCorrelationZoneConfig; uint8_t restricted_set = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag;
uint8_t restricted_set = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.highSpeedFlag; int16_t *prachF = phy_vars_eNB->lte_eNB_prach_vars.prachF;
//uint8_t n_ra_prboffset = phy_vars_eNB->lte_frame_parms.prach_config_common.prach_ConfigInfo.prach_FreqOffset; int16_t **rxsigF = phy_vars_eNB->lte_eNB_prach_vars.rxsigF;
int16_t *prachF = phy_vars_eNB->lte_eNB_prach_vars.prachF; int16_t **prach_ifft = phy_vars_eNB->lte_eNB_prach_vars.prach_ifft;
int16_t **rxsigF = phy_vars_eNB->lte_eNB_prach_vars.rxsigF;
int16_t **prach_ifft = phy_vars_eNB->lte_eNB_prach_vars.prach_ifft;
int16_t *prach[4]; int16_t *prach[4];
int16_t *prach2; int16_t *prach2;
uint8_t n_ra_prb; uint8_t n_ra_prb;
...@@ -1086,12 +1089,8 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene ...@@ -1086,12 +1089,8 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene
uint16_t numshift=0; uint16_t numshift=0;
uint16_t *prach_root_sequence_map; uint16_t *prach_root_sequence_map;
uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type); uint8_t prach_fmt = get_prach_fmt(prach_ConfigIndex,frame_type);
//uint8_t Nsp=2;
//uint8_t f_ra,t1_ra;
uint16_t N_ZC = (prach_fmt <4)?839:139; uint16_t N_ZC = (prach_fmt <4)?839:139;
uint8_t not_found; uint8_t not_found;
// LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms;
// uint16_t subframe_offset;
int k; int k;
uint16_t u; uint16_t u;
int16_t *Xu; int16_t *Xu;
...@@ -1107,7 +1106,6 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene ...@@ -1107,7 +1106,6 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene
for (aa=0; aa<nb_ant_rx; aa++) { for (aa=0; aa<nb_ant_rx; aa++) {
prach[aa] = (int16_t*)&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][aa][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti-phy_vars_eNB->N_TA_offset]; prach[aa] = (int16_t*)&phy_vars_eNB->lte_eNB_common_vars.rxdata[0][aa][subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti-phy_vars_eNB->N_TA_offset];
// remove_625_Hz(phy_vars_eNB,prach[aa]);
} }
// First compute physical root sequence // First compute physical root sequence
...@@ -1134,37 +1132,6 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene ...@@ -1134,37 +1132,6 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene
n_ra_prb = get_prach_prb_offset(&(phy_vars_eNB->lte_frame_parms),tdd_mapindex,Nf); n_ra_prb = get_prach_prb_offset(&(phy_vars_eNB->lte_frame_parms),tdd_mapindex,Nf);
prach_root_sequence_map = (prach_fmt < 4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4; prach_root_sequence_map = (prach_fmt < 4) ? prach_root_sequence_map0_3 : prach_root_sequence_map4;
/*
// this code is now part of get_prach_prb_offset
if (frame_type == TDD) { // TDD
// adjust n_ra_prboffset for frequency multiplexing (p.36 36.211)
f_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[tdd_mapindex].f_ra;
if (prach_fmt < 4) {
if ((f_ra&1) == 0) {
n_ra_prb = n_ra_prboffset + 6*(f_ra>>1);
} else {
n_ra_prb = phy_vars_eNB->lte_frame_parms.N_RB_UL - 6 - n_ra_prboffset + 6*(f_ra>>1);
}
} else {
if ((tdd_config >2) && (tdd_config<6))
Nsp = 2;
t1_ra = tdd_preamble_map[prach_ConfigIndex][tdd_config].map[0].t1_ra;
if ((((Nf&1)*(2-Nsp)+t1_ra)&1) == 0) {
n_ra_prb = 6*f_ra;
} else {
n_ra_prb = phy_vars_eNB->lte_frame_parms.N_RB_UL - 6*(f_ra+1);
}
}
}
*/
// printf("NCS %d\n",NCS);
// PDP is oversampled, e.g. 1024 sample instead of 839 // PDP is oversampled, e.g. 1024 sample instead of 839
// Adapt the NCS (zero-correlation zones) with oversampling factor e.g. 1024/839 // Adapt the NCS (zero-correlation zones) with oversampling factor e.g. 1024/839
NCS2 = (N_ZC==839) ? ((NCS<<10)/839) : ((NCS<<8)/139); NCS2 = (N_ZC==839) ? ((NCS<<10)/839) : ((NCS<<8)/139);
...@@ -1217,9 +1184,6 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene ...@@ -1217,9 +1184,6 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene
break; break;
} }
// nsymb = (frame_parms->Ncp==0) ? 14:12;
// subframe_offset = (unsigned int)frame_parms->ofdm_symbol_size*subframe*nsymb;
preamble_offset_old = 99; preamble_offset_old = 99;
for (preamble_index=0 ; preamble_index<64 ; preamble_index++) { for (preamble_index=0 ; preamble_index<64 ; preamble_index++) {
......
...@@ -246,7 +246,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -246,7 +246,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
uint8_t *columnset; uint8_t *columnset;
unsigned int sumKr=0; unsigned int sumKr=0;
unsigned int Qprime,L,G,Q_CQI,Q_RI,H,Hprime,Hpp,Cmux,Rmux_prime,O_RCC; unsigned int Qprime,L,G,Q_CQI,Q_RI,H,Hprime,Hpp,Cmux,Rmux_prime,O_RCC;
unsigned int Qprime_ACK,Qprime_CQI,Qprime_RI,len_ACK=0,len_RI=0; unsigned int Qprime_ACK,Qprime_RI,len_ACK=0,len_RI=0;
// uint8_t q_ACK[MAX_ACK_PAYLOAD],q_RI[MAX_RI_PAYLOAD]; // uint8_t q_ACK[MAX_ACK_PAYLOAD],q_RI[MAX_RI_PAYLOAD];
int metric,metric_new; int metric,metric_new;
uint8_t o_flip[8]; uint8_t o_flip[8];
...@@ -410,12 +410,13 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -410,12 +410,13 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
else else
L=8; L=8;
// NOTE: we have to handle the case where we have a very small number of bits (condition on pg. 26 36.212)
if (ulsch_harq->Or1 > 0) if (ulsch_harq->Or1 > 0)
Qprime = (ulsch_harq->Or1 + L) * ulsch_harq->Msc_initial*ulsch_harq->Nsymb_initial * ulsch->beta_offset_cqi_times8; Qprime = (ulsch_harq->Or1 + L) * ulsch_harq->Msc_initial*ulsch_harq->Nsymb_initial * ulsch->beta_offset_cqi_times8;
else else
Qprime=0; Qprime=0;
if (Qprime > 0) { if (Qprime > 0) { // check if ceiling is larger than floor in Q' expression
if ((Qprime % (8*sumKr)) > 0) if ((Qprime % (8*sumKr)) > 0)
Qprime = 1+(Qprime/(8*sumKr)); Qprime = 1+(Qprime/(8*sumKr));
else else
...@@ -426,14 +427,10 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -426,14 +427,10 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
if (Qprime > (G - ulsch_harq->O_RI))
Qprime = G - ulsch_harq->O_RI;
Q_CQI = Q_m * Qprime; Q_CQI = Q_m * Qprime;
#ifdef DEBUG_ULSCH_DECODING #ifdef DEBUG_ULSCH_DECODING
msg("ulsch_decoding: G %d, Q_RI %d, Q_CQI %d (L %d, Or1 %d) O_ACK %d\n",G,Q_RI,Q_CQI,L,ulsch_harq->Or1,ulsch_harq->O_ACK); msg("ulsch_decoding: G %d, Q_RI %d, Q_CQI %d (L %d, Or1 %d) O_ACK %d\n",G,Q_RI,Q_CQI,L,ulsch_harq->Or1,ulsch_harq->O_ACK);
#endif #endif
Qprime_CQI = Qprime;
G = G - Q_RI - Q_CQI; G = G - Q_RI - Q_CQI;
...@@ -452,9 +449,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -452,9 +449,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
// Rmux = Hpp*Q_m/Cmux; // Rmux = Hpp*Q_m/Cmux;
Rmux_prime = Hpp/Cmux; Rmux_prime = Hpp/Cmux;
#ifdef DEBUG_ULSCH_DECODING
msg("ulsch_decoding.c: G raw %d (%d symb), Hpp %d, Cmux %d, Rmux_prime %d\n",G,ulsch_harq->Nsymb_pusch,Hpp,Cmux,Rmux_prime);
#endif
// Clear "tag" interleaving matrix to allow for CQI/DATA identification // Clear "tag" interleaving matrix to allow for CQI/DATA identification
memset(ytag,0,Cmux*Rmux_prime); memset(ytag,0,Cmux*Rmux_prime);
...@@ -462,128 +456,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -462,128 +456,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
i=0; i=0;
memset(y,LTE_NULL,Q_m*Hpp); memset(y,LTE_NULL,Q_m*Hpp);
/*
// Do RI coding
if (ulsch->O_RI == 1) {
switch (Q_m) {
case 2:
q_RI[0] = 0;
q_RI[1] = PUSCH_y;
len_RI=2;
break;
case 4:
q_RI[0] = 0;
q_RI[1] = PUSCH_y;//1;
q_RI[2] = PUSCH_x;//o_RI[0];
q_RI[3] = PUSCH_x;//1;
len_RI=4;
break;
case 6:
q_RI[0] = 0;
q_RI[1] = PUSCH_y;//1;
q_RI[2] = PUSCH_x;//1;
q_RI[3] = PUSCH_x;//ulsch->o_RI[0];
q_RI[4] = PUSCH_x;//1;
q_RI[5] = PUSCH_x;//1;
len_RI=6;
break;
}
}
else if (ulsch->O_RI > 1){
LOG_E(PHY,"ulsch_decoding: FATAL, RI cannot be more than 1 bit yet\n");
return(-1);
}
// 1-bit ACK/NAK
if (ulsch_harq->O_ACK == 1) {
switch (Q_m) {
case 2:
q_ACK[0] = 0;
q_ACK[1] = (ulsch->bundling==0)? PUSCH_y : 0;
len_ACK = 2;
break;
case 4:
q_ACK[0] = 0;
q_ACK[1] = (ulsch->bundling==0)? PUSCH_y : 0;
q_ACK[2] = PUSCH_x;
q_ACK[3] = PUSCH_x;
len_ACK = 4;
break;
case 6:
q_ACK[0] = 0;
q_ACK[1] = (ulsch->bundling==0)? PUSCH_y : 0;
q_ACK[2] = PUSCH_x;
q_ACK[3] = PUSCH_x;
q_ACK[4] = PUSCH_x;
q_ACK[6] = PUSCH_x;
len_ACK = 6;
break;
}
}
// two-bit ACK/NAK
if (ulsch_harq->O_ACK == 2) {
switch (Q_m) {
case 2:
q_ACK[0] = 0;
q_ACK[1] = 0;
q_ACK[2] = 0;
q_ACK[3] = 0;
q_ACK[4] = 0;
q_ACK[5] = 0;
len_ACK = 6;
break;
case 4:
q_ACK[0] = 0;
q_ACK[1] = 0;
q_ACK[2] = PUSCH_x;
q_ACK[3] = PUSCH_x;//1;
q_ACK[4] = 0;
q_ACK[5] = 0;
q_ACK[6] = PUSCH_x;
q_ACK[7] = PUSCH_x;//1;
q_ACK[8] = 0;
q_ACK[9] = 0;
q_ACK[10] = PUSCH_x;
q_ACK[11] = PUSCH_x;//1;
len_ACK = 12;
break;
case 6:
q_ACK[0] = 0;
q_ACK[1] = 0;
q_ACK[2] = PUSCH_x;
q_ACK[3] = PUSCH_x;
q_ACK[4] = PUSCH_x;
q_ACK[5] = PUSCH_x;
q_ACK[6] = 0;
q_ACK[7] = 0;
q_ACK[8] = PUSCH_x;
q_ACK[9] = PUSCH_x;
q_ACK[10] = PUSCH_x;
q_ACK[11] = PUSCH_x;
q_ACK[12] = 0;
q_ACK[13] = 0;
q_ACK[14] = PUSCH_x;
q_ACK[15] = PUSCH_x;
q_ACK[16] = PUSCH_x;
q_ACK[17] = PUSCH_x;
len_ACK = 18;
break;
}
}
if (ulsch_harq->O_ACK > 2) {
LOG_E(PHY,"ulsch_decoding: FATAL, ACK cannot be more than 2 bits yet\n");
return(-1);
}
// RI BITS
// memset(ytag2,0,Q_m*Hpp);
*/
// read in buffer and unscramble llrs for everything but placeholder bits // read in buffer and unscramble llrs for everything but placeholder bits
// llrs stored per symbol correspond to columns of interleaving matrix // llrs stored per symbol correspond to columns of interleaving matrix
...@@ -724,40 +597,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -724,40 +597,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
} }
// for (q=0;q<Q_m;q++) {
/*
if ((i&0x1f)==0) {
s = lte_gold_generic(&x1, &x2, reset);
// msg("lte_gold[%d]=%x\n",i,s);
reset = 0;
}
c = (uint8_t)((s>>(i&0x1f))&1);
// if bits are tagged as placeholders (RI,ACK)
if (ytag2[q+(Q_m*((r*Cmux)+j))] == PUSCH_y) {
c=c_prev;
}
else if (ytag2[q+(Q_m*((r*Cmux)+j))] == PUSCH_x) {
c = 0;
#ifdef DEBUG_ULSCH_DECODING
// msg("ulsch_decoding.c: PUSCH_x in row %d, col %d: llr %d\n",r,j,ulsch_llr[i]);
#endif
}
c_prev = c;
#ifdef DEBUG_ULSCH_DECODING
// msg("llr[%d] = %d (c %d, ytag2 %d) ==> ",i,ulsch_llr[i],c,ytag2[q+(Q_m*((r*Cmux)+j))]);
#endif
// note flipped here for reverse polarity in 3GPP bit mapping
y[q+(Q_m*((r*Cmux)+j))] = (c==0) ? -ulsch_llr[i] : ulsch_llr[i];
i++;
#ifdef DEBUG_ULSCH_DECODING
// msg("%d\n",y[q+(Q_m*((r*Cmux)+j))]);
#endif
*/
stop_meas(&phy_vars_eNB->ulsch_demultiplexing_stats); stop_meas(&phy_vars_eNB->ulsch_demultiplexing_stats);
if (i!=(H+Q_RI)) if (i!=(H+Q_RI))
...@@ -819,11 +658,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -819,11 +658,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
for (q=0; q<Q_m; q++) { for (q=0; q<Q_m; q++) {
if (y[q+(Q_m*((r*Cmux) + columnset[j]))]!=0) if (y[q+(Q_m*((r*Cmux) + columnset[j]))]!=0)
ulsch_harq->q_ACK[(q+(Q_m*i))%len_ACK] += y[q+(Q_m*((r*Cmux) + columnset[j]))]; ulsch_harq->q_ACK[(q+(Q_m*i))%len_ACK] += y[q+(Q_m*((r*Cmux) + columnset[j]))];
#ifdef DEBUG_ULSCH_DECODING
// LOG_D(PHY,"ACK %d => %d (%d,%d,%d)\n",(q+(Q_m*i))%len_ACK,ulsch_harq->q_ACK[(q+(Q_m*i))%len_ACK],q+(Q_m*((r*Cmux) + columnset[j])),r,columnset[j]);
printf("ACK %d => %d (%d,%d,%d)\n",(q+(Q_m*i))%len_ACK,ulsch_harq->q_ACK[(q+(Q_m*i))%len_ACK],q+(Q_m*((r*Cmux) + columnset[j])),r,columnset[j]);
#endif
y[q+(Q_m*((r*Cmux) + columnset[j]))]=0; // NULL LLRs in ACK positions y[q+(Q_m*((r*Cmux) + columnset[j]))]=0; // NULL LLRs in ACK positions
} }
...@@ -879,173 +713,129 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -879,173 +713,129 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
j2=0; j2=0;
// r=0; // r=0;
for (i=0; i<Qprime_CQI; i++) { if (Q_RI>0) {
for (i=0; i<(Q_CQI/Q_m); i++) {
/*
while (ytag[(r*Cmux)+j]==LTE_NULL) { while (ytag[j]==LTE_NULL) {
#ifdef DEBUG_ULSCH_DECODING j++;
msg("ulsch_decoding.c: r %d, j %d: LTE_NULL\n",r,j); j2+=Q_m;
#endif
j++;
if (j==Cmux) {
j=0;
r++;
} }
}
for (q=0;q<Q_m;q++) { for (q=0; q<Q_m; q++) {
ys = y[q+(Q_m*((r*Cmux)+j))]; // ys = y[q+(Q_m*((r*Cmux)+j))];
if (ys>127) ys = y[q+j2];
ulsch_harq->q[q+(Q_m*i)] = 127;
else if (ys<-128) if (ys>127)
ulsch_harq->q[q+(Q_m*i)] = -128; ulsch_harq->q[q+(Q_m*i)] = 127;
else else if (ys<-128)
ulsch_harq->q[q+(Q_m*i)] = ys; ulsch_harq->q[q+(Q_m*i)] = -128;
#ifdef DEBUG_ULSCH_DECODING else
msg("ulsch_decoding.c: CQI %d, r %d, j %d, y[%d] %d\n",q+(Q_m*i),r,j, q+(Q_m*((r*Cmux) + j)),ys); ulsch_harq->q[q+(Q_m*i)] = ys;
#endif }
}
*/
while (ytag[j]==LTE_NULL) {
j++;
j2+=Q_m; j2+=Q_m;
} }
for (q=0; q<Q_m; q++) {
// ys = y[q+(Q_m*((r*Cmux)+j))]; switch (Q_m) {
ys = y[q+j2]; case 2:
for (iprime=0; iprime<G<<1;) {
if (ys>127) while (ytag[j]==LTE_NULL) {
ulsch_harq->q[q+(Q_m*i)] = 127; j++;
else if (ys<-128) j2+=2;
ulsch_harq->q[q+(Q_m*i)] = -128; }
else
ulsch_harq->q[q+(Q_m*i)] = ys; ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
#ifdef DEBUG_ULSCH_DECODING
msg("ulsch_decoding.c: CQI %d, q %d, y[%d] %d\n",q+(Q_m*i),q,j2, q+j2,ys);
#endif
}
j2+=Q_m;
}
// j2=j*Q_m;
switch (Q_m) {
case 2:
for (iprime=0; iprime<(Hprime-Qprime_CQI)<<1;) {
while (ytag[j]==LTE_NULL) {
j++;
j2+=2;
} }
ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++]; break;
#ifdef DEBUG_ULSCH_DECODING
// msg("ulsch_decoding.c: e %d, r %d, j %d, y[%d] %d\n",g,r,j,q+(Q_m*((r*Cmux) + j)),y[q+(Q_m*((r*Cmux)+j))]); case 4:
#endif for (iprime=0; iprime<G<<2;) {
while (ytag[j]==LTE_NULL) {
} j++;
j2+=4;
// write_output("/tmp/ulsch_e.m","ulsch_e",ulsch->e,iprime,1,0); }
break;
ulsch_harq->e[iprime++] = y[j2++];
case 4: ulsch_harq->e[iprime++] = y[j2++];
for (iprime=0; iprime<(Hprime-Qprime_CQI)<<2;) { ulsch_harq->e[iprime++] = y[j2++];
while (ytag[j]==LTE_NULL) { ulsch_harq->e[iprime++] = y[j2++];
j++;
j2+=4;
} }
ulsch_harq->e[iprime++] = y[j2++]; break;
ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++]; case 6:
ulsch_harq->e[iprime++] = y[j2++]; for (iprime=0; iprime<G*6;) {
#ifdef DEBUG_ULSCH_DECODING while (ytag[j]==LTE_NULL) {
// msg("ulsch_decoding.c: e %d, r %d, j %d, y[%d] %d\n",g,r,j,q+(Q_m*((r*Cmux) + j)),y[q+(Q_m*((r*Cmux)+j))]); j++;
#endif j2+=6;
}
}
ulsch_harq->e[iprime++] = y[j2++];
break; ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
case 6: ulsch_harq->e[iprime++] = y[j2++];
for (iprime=0; iprime<(Hprime-Qprime_CQI)*6;) { ulsch_harq->e[iprime++] = y[j2++];
while (ytag[j]==LTE_NULL) { ulsch_harq->e[iprime++] = y[j2++];
j++;
j2+=6;
} }
ulsch_harq->e[iprime++] = y[j2++]; break;
ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
#ifdef DEBUG_ULSCH_DECODING
// msg("ulsch_decoding.c: e %d, r %d, j %d, y[%d] %d\n",g,r,j,q+(Q_m*((r*Cmux) + j)),y[q+(Q_m*((r*Cmux)+j))]);
#endif
} }
break;
} }
else {
/* for (i=0; i<(Q_CQI/Q_m); i++) {
for (i=0,iprime=-Qprime_CQI;i<Hprime;i++,iprime++) {
for (q=0; q<Q_m; q++) {
while (ytag[(r*Cmux)+j]==LTE_NULL) { ys = y[q+j2];
#ifdef DEBUG_ULSCH_DECODING if (ys>127)
msg("ulsch_decoding.c: r %d, j %d: LTE_NULL\n",r,j); ulsch_harq->q[q+(Q_m*i)] = 127;
#endif else if (ys<-128)
j++; ulsch_harq->q[q+(Q_m*i)] = -128;
if (j==Cmux) { else
j=0; ulsch_harq->q[q+(Q_m*i)] = ys;
r++;
} }
j2+=Q_m;
} }
if (i<Qprime_CQI) { switch (Q_m) {
case 2:
for (q=0;q<Q_m;q++) { for (iprime=0; iprime<G<<1;) {
ys = y[q+(Q_m*((r*Cmux)+j))]; ulsch_harq->e[iprime++] = y[j2++];
if (ys>127) ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->q[q+(Q_m*i)] = 127;
else if (ys<-128)
ulsch_harq->q[q+(Q_m*i)] = -128;
else
ulsch_harq->q[q+(Q_m*i)] = ys;
#ifdef DEBUG_ULSCH_DECODING
msg("ulsch_decoding.c: CQI %d, r %d, j %d, y[%d] %d\n",q+(Q_m*i),r,j, q+(Q_m*((r*Cmux) + j)),ys);
#endif
} }
} break;
else { case 4:
for (q=0;q<Q_m;q++) { for (iprime=0; iprime<G<<2;) {
g = q+(Q_m*iprime); ulsch_harq->e[iprime++] = y[j2++];
ulsch->e[g] = y[q+(Q_m*((r*Cmux)+j))]; ulsch_harq->e[iprime++] = y[j2++];
#ifdef DEBUG_ULSCH_DECODING ulsch_harq->e[iprime++] = y[j2++];
// msg("ulsch_decoding.c: e %d, r %d, j %d, y[%d] %d\n",g,r,j,q+(Q_m*((r*Cmux) + j)),y[q+(Q_m*((r*Cmux)+j))]); ulsch_harq->e[iprime++] = y[j2++];
#endif
} }
} break;
j++; case 6:
if (j==Cmux) { for (iprime=0; iprime<G*6;) {
j=0; ulsch_harq->e[iprime++] = y[j2++];
r++; ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
ulsch_harq->e[iprime++] = y[j2++];
}
break;
} }
} }
*/
// Do CQI/RI/HARQ-ACK Decoding first and pass to MAC // Do CQI/RI/HARQ-ACK Decoding first and pass to MAC
// HARQ-ACK // HARQ-ACK
wACK_idx = (ulsch->bundling==0) ? 4 : ((Nbundled-1)&3); wACK_idx = (ulsch->bundling==0) ? 4 : ((Nbundled-1)&3);
#ifdef DEBUG_ULSCH_DECODING
msg("ulsch_decoding.c: Bundling %d, Nbundled %d, wACK_idx %d\n",
ulsch->bundling,Nbundled,wACK_idx);
#endif
if (ulsch_harq->O_ACK == 1) { if (ulsch_harq->O_ACK == 1) {
ulsch_harq->q_ACK[0] *= wACK_RX[wACK_idx][0]; ulsch_harq->q_ACK[0] *= wACK_RX[wACK_idx][0];
...@@ -1055,10 +845,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1055,10 +845,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
ulsch_harq->o_ACK[0] = 0; ulsch_harq->o_ACK[0] = 0;
else else
ulsch_harq->o_ACK[0] = 1; ulsch_harq->o_ACK[0] = 1;
#ifdef DEBUG_ULSCH_DECODING
msg("ulsch_decoding.c: ulsch_q_ACK[0] %d (%d,%d)\n",ulsch_harq->q_ACK[0],wACK_RX[wACK_idx][0],wACK_RX[wACK_idx][1]);
#endif
} }
if (ulsch_harq->O_ACK == 2) { if (ulsch_harq->O_ACK == 2) {
...@@ -1068,16 +854,12 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1068,16 +854,12 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
ulsch_harq->q_ACK[0] = ulsch_harq->q_ACK[0]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[3]*wACK_RX[wACK_idx][1]; ulsch_harq->q_ACK[0] = ulsch_harq->q_ACK[0]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[3]*wACK_RX[wACK_idx][1];
ulsch_harq->q_ACK[1] = ulsch_harq->q_ACK[1]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[4]*wACK_RX[wACK_idx][1]; ulsch_harq->q_ACK[1] = ulsch_harq->q_ACK[1]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[4]*wACK_RX[wACK_idx][1];
ulsch_harq->q_ACK[2] = ulsch_harq->q_ACK[2]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[5]*wACK_RX[wACK_idx][1]; ulsch_harq->q_ACK[2] = ulsch_harq->q_ACK[2]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[5]*wACK_RX[wACK_idx][1];
break; break;
case 4: case 4:
ulsch_harq->q_ACK[0] = ulsch_harq->q_ACK[0]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[5]*wACK_RX[wACK_idx][1]; ulsch_harq->q_ACK[0] = ulsch_harq->q_ACK[0]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[5]*wACK_RX[wACK_idx][1];
ulsch_harq->q_ACK[1] = ulsch_harq->q_ACK[1]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[8]*wACK_RX[wACK_idx][1]; ulsch_harq->q_ACK[1] = ulsch_harq->q_ACK[1]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[8]*wACK_RX[wACK_idx][1];
ulsch_harq->q_ACK[2] = ulsch_harq->q_ACK[4]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[9]*wACK_RX[wACK_idx][1]; ulsch_harq->q_ACK[2] = ulsch_harq->q_ACK[4]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[9]*wACK_RX[wACK_idx][1];
break; break;
case 6: case 6:
ulsch_harq->q_ACK[0] = ulsch_harq->q_ACK[0]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[7]*wACK_RX[wACK_idx][1]; ulsch_harq->q_ACK[0] = ulsch_harq->q_ACK[0]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[7]*wACK_RX[wACK_idx][1];
ulsch_harq->q_ACK[1] = ulsch_harq->q_ACK[1]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[12]*wACK_RX[wACK_idx][1]; ulsch_harq->q_ACK[1] = ulsch_harq->q_ACK[1]*wACK_RX[wACK_idx][0] + ulsch_harq->q_ACK[12]*wACK_RX[wACK_idx][1];
...@@ -1114,37 +896,15 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1114,37 +896,15 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
} }
} }
#ifdef DEBUG_ULSCH_DECODING
for (i=0; i<ulsch_harq->O_ACK; i++)
msg("ulsch_decoding: O_ACK[%d] %d, q_ACK => (%d,%d,%d)\n",i,ulsch_harq->o_ACK[i],ulsch_harq->q_ACK[0],ulsch_harq->q_ACK[1],ulsch_harq->q_ACK[2]);
#endif
// RI // RI
if ((ulsch_harq->O_RI == 1) && (Qprime_RI > 0)) { if ((ulsch_harq->O_RI == 1) && (Qprime_RI > 0)) {
ulsch_harq->o_RI[0] = ((ulsch_harq->q_RI[0] + ulsch_harq->q_RI[Q_m/2]) > 0) ? 0 : 1; ulsch_harq->o_RI[0] = ((ulsch_harq->q_RI[0] + ulsch_harq->q_RI[Q_m/2]) > 0) ? 0 : 1;
} }
#ifdef DEBUG_ULSCH_DECODING
if (Qprime_RI > 0) {
for (i=0; i<2*ulsch_harq->O_RI; i++)
msg("ulsch_decoding: q_RI[%d] %d\n",i,ulsch_harq->q_RI[i]);
}
if (Qprime_CQI > 0) {
for (i=0; i<ulsch_harq->O_RI; i++)
LOG_D(PHY,"ulsch_decoding: O_RI[%d] %d\n",i,ulsch_harq->o_RI[i]);
}
#endif
// CQI // CQI
if (Qprime_CQI>0) { if (Q_CQI>0) {
memset((void *)&dummy_w_cc[0],0,3*(ulsch_harq->Or1+8+32)); memset((void *)&dummy_w_cc[0],0,3*(ulsch_harq->Or1+8+32));
O_RCC = generate_dummy_w_cc(ulsch_harq->Or1+8, O_RCC = generate_dummy_w_cc(ulsch_harq->Or1+8,
...@@ -1169,7 +929,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1169,7 +929,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
else else
ulsch_harq->cqi_crc_status = 0; ulsch_harq->cqi_crc_status = 0;
//printf("crc(cqi) rx: %x\n",(crc8(o_flip,ulsch->Or1)>>24));
if (ulsch->harq_processes[harq_pid]->Or1<=32) { if (ulsch->harq_processes[harq_pid]->Or1<=32) {
ulsch_harq->o[3] = o_flip[0] ; ulsch_harq->o[3] = o_flip[0] ;
...@@ -1274,44 +1033,21 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1274,44 +1033,21 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
stop_meas(&phy_vars_eNB->ulsch_rate_unmatching_stats); stop_meas(&phy_vars_eNB->ulsch_rate_unmatching_stats);
r_offset += E; r_offset += E;
/*
msg("Subblock deinterleaving, d %p w %p\n",
ulsch_harq->d[r],
ulsch_harq->w);
*/
start_meas(&phy_vars_eNB->ulsch_deinterleaving_stats); start_meas(&phy_vars_eNB->ulsch_deinterleaving_stats);
sub_block_deinterleaving_turbo(4+Kr, sub_block_deinterleaving_turbo(4+Kr,
&ulsch_harq->d[r][96], &ulsch_harq->d[r][96],
ulsch_harq->w[r]); ulsch_harq->w[r]);
stop_meas(&phy_vars_eNB->ulsch_deinterleaving_stats); stop_meas(&phy_vars_eNB->ulsch_deinterleaving_stats);
/*
#ifdef DEBUG_ULSCH_DECODING
msg("decoder input(segment %d) :",r);
for (i=0;i<(3*8*Kr_bytes)+12;i++)
msg("%d : %d\n",i,ulsch_harq->d[r][96+i]);
msg("\n");
#endif
*/
} }
for (r=0; r<ulsch_harq->C; r++) { for (r=0; r<ulsch_harq->C; r++) {
// msg("Clearing c, %p\n",ulsch_harq->c[r]);
// memset(ulsch_harq->c[r],0,16);//block_length);
// msg("done\n");
if (ulsch_harq->C == 1) if (ulsch_harq->C == 1)
crc_type = CRC24_A; crc_type = CRC24_A;
else else
crc_type = CRC24_B; crc_type = CRC24_B;
/*
msg("decoder input(segment %d)\n",r);
for (i=0;i<(3*8*Kr_bytes)+12;i++)
if ((ulsch_harq->d[r][96+i]>7) ||
(ulsch_harq->d[r][96+i] < -8))
msg("%d : %d\n",i,ulsch_harq->d[r][96+i]);
msg("\n");
*/
start_meas(&phy_vars_eNB->ulsch_turbo_decoding_stats); start_meas(&phy_vars_eNB->ulsch_turbo_decoding_stats);
ret = tc(&ulsch_harq->d[r][96], ret = tc(&ulsch_harq->d[r][96],
...@@ -1334,28 +1070,10 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1334,28 +1070,10 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
status[r] = ret; status[r] = ret;
if (ret==(1+ulsch->max_turbo_iterations)) {// a Code segment is in error so break;
#ifdef DEBUG_ULSCH_DECODING
msg("ULSCH harq_pid %d CRC failed\n",harq_pid);
#endif
/*
for (i=0;i<Kr_bytes;i++)
printf("segment %d : byte %d => %d\n",r,i,ulsch_harq->c[r][i]);
return(ret);
*/
}
#ifdef DEBUG_ULSCH_DECODING
else
msg("ULSCH harq_pid %d CRC OK : %d iterations\n",harq_pid, ret);
#endif
} }
// Reassembly of Transport block here // Reassembly of Transport block here
offset = 0; offset = 0;
// msg("F %d, Fbytes %d\n",ulsch_harq->F,ulsch_harq->F>>3);
ret = 1; ret = 1;
...@@ -1373,8 +1091,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB, ...@@ -1373,8 +1091,6 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *phy_vars_eNB,
&ulsch_harq->c[0][(ulsch_harq->F>>3)], &ulsch_harq->c[0][(ulsch_harq->F>>3)],
Kr_bytes - (ulsch_harq->F>>3) - ((ulsch_harq->C>1)?3:0)); Kr_bytes - (ulsch_harq->F>>3) - ((ulsch_harq->C>1)?3:0));
offset = Kr_bytes - (ulsch_harq->F>>3) - ((ulsch_harq->C>1)?3:0); offset = Kr_bytes - (ulsch_harq->F>>3) - ((ulsch_harq->C>1)?3:0);
// msg("copied %d bytes to b sequence\n",
// Kr_bytes - (ulsch_harq->F>>3));
} else { } else {
memcpy(ulsch_harq->b+offset, memcpy(ulsch_harq->b+offset,
ulsch_harq->c[r], ulsch_harq->c[r],
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -99,7 +99,7 @@ uint64_t DLSCH_alloc_pdu_1[2]; ...@@ -99,7 +99,7 @@ uint64_t DLSCH_alloc_pdu_1[2];
#define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2) #define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2)
//#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13 //#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
//#define DLSCH_RB_ALLOC 0x0001 //#define DLSCH_RB_ALLOC 0x0001
void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms) void do_OFDM_mod_l(int32_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms)
{ {
int aa, slot_offset, slot_offset_F; int aa, slot_offset, slot_offset_F;
...@@ -2111,7 +2111,7 @@ PMI_FEEDBACK: ...@@ -2111,7 +2111,7 @@ PMI_FEEDBACK:
// printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback); // printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback);
for (aa=0; aa<PHY_vars_eNB->lte_frame_parms.nb_antennas_tx; aa++) { for (aa=0; aa<PHY_vars_eNB->lte_frame_parms.nb_antennas_tx; aa++) {
memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
} }
if (input_fd==NULL) { if (input_fd==NULL) {
......
...@@ -131,7 +131,6 @@ int main(int argc, char **argv) ...@@ -131,7 +131,6 @@ int main(int argc, char **argv)
double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1=0.0; double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1=0.0;
uint8_t snr1set=0; uint8_t snr1set=0;
double snr_step=1,input_snr_step=1; double snr_step=1,input_snr_step=1;
//mod_sym_t **txdataF;
int **txdata; int **txdata;
double **s_re,**s_im,**r_re,**r_im; double **s_re,**s_im,**r_re,**r_im;
double iqim = 0.0; double iqim = 0.0;
...@@ -451,7 +450,7 @@ int main(int argc, char **argv) ...@@ -451,7 +450,7 @@ int main(int argc, char **argv)
//if (trials%100==0) //if (trials%100==0)
//eNB2UE[0]->first_run = 1; //eNB2UE[0]->first_run = 1;
eNB2UE->first_run = 1; eNB2UE->first_run = 1;
memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[0][0][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
generate_mch(PHY_vars_eNB,sched_subframe,input_buffer,0); generate_mch(PHY_vars_eNB,sched_subframe,input_buffer,0);
......
...@@ -57,11 +57,11 @@ PHY_VARS_UE *PHY_vars_UE; ...@@ -57,11 +57,11 @@ PHY_VARS_UE *PHY_vars_UE;
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13 #define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
mod_sym_t *dummybuf[4]; int32_t *dummybuf[4];
mod_sym_t dummy0[2048*14]; int32_t dummy0[2048*14];
mod_sym_t dummy1[2048*14]; int32_t dummy1[2048*14];
mod_sym_t dummy2[2048*14]; int32_t dummy2[2048*14];
mod_sym_t dummy3[2048*14]; int32_t dummy3[2048*14];
int main(int argc, char **argv) int main(int argc, char **argv)
...@@ -72,7 +72,6 @@ int main(int argc, char **argv) ...@@ -72,7 +72,6 @@ int main(int argc, char **argv)
int i,l,aa; int i,l,aa;
double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1; double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1;
uint8_t snr1set=0; uint8_t snr1set=0;
//mod_sym_t **txdataF;
int **txdata,**txdata1,**txdata2; int **txdata,**txdata1,**txdata2;
double **s_re,**s_im,**s_re1,**s_im1,**s_re2,**s_im2,**r_re,**r_im,**r_re1,**r_im1,**r_re2,**r_im2; double **s_re,**s_im,**s_re1,**s_im1,**s_re2,**s_im2,**r_re,**r_im,**r_re1,**r_im1,**r_re2,**r_im2;
double iqim = 0.0; double iqim = 0.0;
...@@ -603,7 +602,7 @@ int main(int argc, char **argv) ...@@ -603,7 +602,7 @@ int main(int argc, char **argv)
dummybuf[2] = dummy2; dummybuf[2] = dummy2;
dummybuf[3] = dummy3; dummybuf[3] = dummy3;
generate_pbch(&PHY_vars_eNB->lte_eNB_pbch, generate_pbch(&PHY_vars_eNB->lte_eNB_pbch,
(mod_sym_t**)dummybuf, (int32_t**)dummybuf,
AMP, AMP,
&PHY_vars_eNB->lte_frame_parms, &PHY_vars_eNB->lte_frame_parms,
pbch_pdu, pbch_pdu,
......
...@@ -410,7 +410,6 @@ int main(int argc, char **argv) ...@@ -410,7 +410,6 @@ int main(int argc, char **argv)
int i,l,aa; int i,l,aa;
double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1; double sigma2, sigma2_dB=0,SNR,snr0=-2.0,snr1;
//mod_sym_t **txdataF;
int **txdata; int **txdata;
double **s_re,**s_im,**r_re,**r_im; double **s_re,**s_im,**r_re,**r_im;
...@@ -773,8 +772,8 @@ int main(int argc, char **argv) ...@@ -773,8 +772,8 @@ int main(int argc, char **argv)
PHY_vars_eNB->ulsch_eNB[0] = new_eNB_ulsch(8,MAX_TURBO_ITERATIONS,N_RB_DL,0); PHY_vars_eNB->ulsch_eNB[0] = new_eNB_ulsch(MAX_TURBO_ITERATIONS,N_RB_DL,0);
PHY_vars_UE->ulsch_ue[0] = new_ue_ulsch(8,N_RB_DL,0); PHY_vars_UE->ulsch_ue[0] = new_ue_ulsch(N_RB_DL,0);
PHY_vars_eNB->proc[subframe].frame_tx = 0; PHY_vars_eNB->proc[subframe].frame_tx = 0;
...@@ -838,7 +837,7 @@ int main(int argc, char **argv) ...@@ -838,7 +837,7 @@ int main(int argc, char **argv)
// printf("DCI (SF %d): txdataF %p (0 %p)\n",subframe,&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][512*14*subframe],&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0]); // printf("DCI (SF %d): txdataF %p (0 %p)\n",subframe,&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][512*14*subframe],&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0]);
for (aa=0; aa<PHY_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB; aa++) { for (aa=0; aa<PHY_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB; aa++) {
memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t));
/* /*
re_offset = PHY_vars_eNB->lte_frame_parms.first_carrier_offset; re_offset = PHY_vars_eNB->lte_frame_parms.first_carrier_offset;
......
...@@ -635,8 +635,8 @@ int main(int argc, char **argv) ...@@ -635,8 +635,8 @@ int main(int argc, char **argv)
UE2eNB->max_Doppler = maxDoppler; UE2eNB->max_Doppler = maxDoppler;
// NN: N_RB_UL has to be defined in ulsim // NN: N_RB_UL has to be defined in ulsim
PHY_vars_eNB->ulsch_eNB[0] = new_eNB_ulsch(8,max_turbo_iterations,N_RB_DL,0); PHY_vars_eNB->ulsch_eNB[0] = new_eNB_ulsch(max_turbo_iterations,N_RB_DL,0);
PHY_vars_UE->ulsch_ue[0] = new_ue_ulsch(8,N_RB_DL,0); PHY_vars_UE->ulsch_ue[0] = new_ue_ulsch(N_RB_DL,0);
// Create transport channel structures for 2 transport blocks (MIMO) // Create transport channel structures for 2 transport blocks (MIMO)
for (i=0; i<2; i++) { for (i=0; i<2; i++) {
......
...@@ -184,6 +184,12 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag, ...@@ -184,6 +184,12 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
size_bytes = sizeof(DCI1A_1_5MHz_FDD_t); size_bytes = sizeof(DCI1A_1_5MHz_FDD_t);
size_bits = sizeof_DCI1A_1_5MHz_FDD_t; size_bits = sizeof_DCI1A_1_5MHz_FDD_t;
break; break;
case 15:/*
((DCI1A_2_5MHz_FDD_t*)DLSCH_dci)->type = 1;
((DCI1A_2_5MHz_FDD_t*)DLSCH_dci)->rballoc = 31;
size_bytes = sizeof(DCI1A_1_5MHz_FDD_t);
size_bits = sizeof_DCI1A_1_5MHz_FDD_t;*/
break;
case 25: case 25:
((DCI1A_5MHz_FDD_t*)DLSCH_dci)->type = 1; ((DCI1A_5MHz_FDD_t*)DLSCH_dci)->type = 1;
((DCI1A_5MHz_FDD_t*)DLSCH_dci)->rballoc = 511; ((DCI1A_5MHz_FDD_t*)DLSCH_dci)->rballoc = 511;
...@@ -196,6 +202,12 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag, ...@@ -196,6 +202,12 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
size_bytes = sizeof(DCI1A_10MHz_FDD_t); size_bytes = sizeof(DCI1A_10MHz_FDD_t);
size_bits = sizeof_DCI1A_10MHz_FDD_t; size_bits = sizeof_DCI1A_10MHz_FDD_t;
break; break;
case 75:
/* ((DCI1A_15MHz_FDD_t*)DLSCH_dci)->type = 1;
((DCI1A_15MHz_FDD_t*)DLSCH_dci)->rballoc = 2047;
size_bytes = sizeof(DCI1A_10MHz_FDD_t);
size_bits = sizeof_DCI1A_10MHz_FDD_t;*/
break;
case 100: case 100:
((DCI1A_20MHz_FDD_t*)DLSCH_dci)->type = 1; ((DCI1A_20MHz_FDD_t*)DLSCH_dci)->type = 1;
((DCI1A_20MHz_FDD_t*)DLSCH_dci)->rballoc = 8191; ((DCI1A_20MHz_FDD_t*)DLSCH_dci)->rballoc = 8191;
......
...@@ -183,21 +183,10 @@ void rx_sdu( ...@@ -183,21 +183,10 @@ void rx_sdu(
UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f); UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f);
// update buffer info // update buffer info
// old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid];
UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid]]; UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid]];
UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]; UE_list->UE_template[CC_idP][UE_id].ul_total_buffer= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid];
/*
if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info)
UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info;
else
UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0;
*/
if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= 300000)
UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 300000;
PHY_vars_eNB_g[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP*10)+subframeP] = (payload_ptr[0] & 0x3f); PHY_vars_eNB_g[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP*10)+subframeP] = (payload_ptr[0] & 0x3f);
if (UE_id == UE_list->head) if (UE_id == UE_list->head)
...@@ -784,7 +773,7 @@ void schedule_ulsch_rnti(module_id_t module_idP, ...@@ -784,7 +773,7 @@ void schedule_ulsch_rnti(module_id_t module_idP,
UE_sched_ctrl->ul_failure_timer); UE_sched_ctrl->ul_failure_timer);
// reset the scheduling request // reset the scheduling request
UE_template->ul_SR = 0; UE_template->ul_SR = 0;
aggregation = process_ue_cqi(module_idP,UE_id); // =2 by default!! aggregation = process_ue_cqi(module_idP,UE_id);
status = mac_eNB_get_rrc_status(module_idP,rnti); status = mac_eNB_get_rrc_status(module_idP,rnti);
if (status < RRC_CONNECTED) if (status < RRC_CONNECTED)
cqi_req = 0; cqi_req = 0;
...@@ -838,7 +827,7 @@ void schedule_ulsch_rnti(module_id_t module_idP, ...@@ -838,7 +827,7 @@ void schedule_ulsch_rnti(module_id_t module_idP,
UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power=target_rx_power; UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power=target_rx_power;
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul; UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul;
mcs = cmin (UE_template->pre_assigned_mcs_ul, openair_daq_vars.target_ue_ul_mcs); // adjust, based on user-defined MCS mcs = cmin (UE_template->pre_assigned_mcs_ul, openair_daq_vars.target_ue_ul_mcs); // adjust, based on user-defined MCS
if ((cqi_req==1) && (mcs==20)) { if ((cqi_req==1) && (mcs>19)) {
mcs=19; mcs=19;
} }
if (UE_template->pre_allocated_rb_table_index_ul >=0) { if (UE_template->pre_allocated_rb_table_index_ul >=0) {
......
...@@ -119,6 +119,7 @@ const char* eurecomVariablesNames[] = { ...@@ -119,6 +119,7 @@ const char* eurecomVariablesNames[] = {
"mp_free", "mp_free",
"ue_inst_cnt_rx", "ue_inst_cnt_rx",
"ue_inst_cnt_tx", "ue_inst_cnt_tx",
"dci_info",
"ue0_BSR", "ue0_BSR",
"ue0_BO", "ue0_BO",
"ue0_scheduled", "ue0_scheduled",
...@@ -133,6 +134,14 @@ const char* eurecomVariablesNames[] = { ...@@ -133,6 +134,14 @@ const char* eurecomVariablesNames[] = {
"ue0_rssi5", "ue0_rssi5",
"ue0_rssi6", "ue0_rssi6",
"ue0_rssi7", "ue0_rssi7",
"ue0_res0",
"ue0_res1",
"ue0_res2",
"ue0_res3",
"ue0_res4",
"ue0_res5",
"ue0_res6",
"ue0_res7",
"ue0_MCS0", "ue0_MCS0",
"ue0_MCS1", "ue0_MCS1",
"ue0_MCS2", "ue0_MCS2",
...@@ -157,6 +166,14 @@ const char* eurecomVariablesNames[] = { ...@@ -157,6 +166,14 @@ const char* eurecomVariablesNames[] = {
"ue0_ROUND5", "ue0_ROUND5",
"ue0_ROUND6", "ue0_ROUND6",
"ue0_ROUND7", "ue0_ROUND7",
"ue0_SFN0",
"ue0_SFN1",
"ue0_SFN2",
"ue0_SFN3",
"ue0_SFN4",
"ue0_SFN5",
"ue0_SFN6",
"ue0_SFN7",
}; };
const char* eurecomFunctionsNames[] = { const char* eurecomFunctionsNames[] = {
...@@ -238,6 +255,7 @@ const char* eurecomFunctionsNames[] = { ...@@ -238,6 +255,7 @@ const char* eurecomFunctionsNames[] = {
"macxface_phy_config_sib2_eNB", "macxface_phy_config_sib2_eNB",
"macxface_phy_config_dedicated_eNB", "macxface_phy_config_dedicated_eNB",
"phy_ue_compute_prach", "phy_ue_compute_prach",
"phy_enb_ulsch_msg3",
"phy_enb_ulsch_decoding0", "phy_enb_ulsch_decoding0",
"phy_enb_ulsch_decoding1", "phy_enb_ulsch_decoding1",
"phy_enb_ulsch_decoding2", "phy_enb_ulsch_decoding2",
......
...@@ -91,6 +91,7 @@ typedef enum { ...@@ -91,6 +91,7 @@ typedef enum {
VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE, VCD_SIGNAL_DUMPER_VARIABLE_MP_FREE,
VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX, VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_RX,
VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX, VCD_SIGNAL_DUMPER_VARIABLES_UE_INST_CNT_TX,
VCD_SIGNAL_DUMPER_VARIABLES_DCI_INFO,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR, VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_BO, VCD_SIGNAL_DUMPER_VARIABLES_UE0_BO,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED, VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED,
...@@ -105,6 +106,14 @@ typedef enum { ...@@ -105,6 +106,14 @@ typedef enum {
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RSSI5, VCD_SIGNAL_DUMPER_VARIABLES_UE0_RSSI5,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RSSI6, VCD_SIGNAL_DUMPER_VARIABLES_UE0_RSSI6,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RSSI7, VCD_SIGNAL_DUMPER_VARIABLES_UE0_RSSI7,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RES0,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RES1,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RES2,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RES3,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RES4,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RES5,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RES6,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_RES7,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_MCS0, VCD_SIGNAL_DUMPER_VARIABLES_UE0_MCS0,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_MCS1, VCD_SIGNAL_DUMPER_VARIABLES_UE0_MCS1,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_MCS2, VCD_SIGNAL_DUMPER_VARIABLES_UE0_MCS2,
...@@ -129,6 +138,14 @@ typedef enum { ...@@ -129,6 +138,14 @@ typedef enum {
VCD_SIGNAL_DUMPER_VARIABLES_UE0_ROUND5, VCD_SIGNAL_DUMPER_VARIABLES_UE0_ROUND5,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_ROUND6, VCD_SIGNAL_DUMPER_VARIABLES_UE0_ROUND6,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_ROUND7, VCD_SIGNAL_DUMPER_VARIABLES_UE0_ROUND7,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN0,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN1,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN2,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN3,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN4,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN5,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN6,
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN7,
VCD_SIGNAL_DUMPER_VARIABLES_LAST, VCD_SIGNAL_DUMPER_VARIABLES_LAST,
VCD_SIGNAL_DUMPER_VARIABLES_END = VCD_SIGNAL_DUMPER_VARIABLES_LAST, VCD_SIGNAL_DUMPER_VARIABLES_END = VCD_SIGNAL_DUMPER_VARIABLES_LAST,
} vcd_signal_dump_variables; } vcd_signal_dump_variables;
...@@ -212,6 +229,7 @@ typedef enum { ...@@ -212,6 +229,7 @@ typedef enum {
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_CONFIG_SIB2_ENB, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_CONFIG_SIB2_ENB,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_CONFIG_DEDICATED_ENB, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_CONFIG_DEDICATED_ENB,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_UE_COMPUTE_PRACH, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_UE_COMPUTE_PRACH,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_MSG3,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING1, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING1,
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING2, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING2,
......
...@@ -36,7 +36,7 @@ eNBs = ...@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx = 1; nb_antennas_tx = 1;
nb_antennas_rx = 1; nb_antennas_rx = 1;
tx_gain = 90; tx_gain = 90;
rx_gain = 127; rx_gain = 125;
prach_root = 0; prach_root = 0;
prach_config_index = 0; prach_config_index = 0;
prach_high_speed = "DISABLE"; prach_high_speed = "DISABLE";
...@@ -66,7 +66,7 @@ eNBs = ...@@ -66,7 +66,7 @@ eNBs =
pusch_p0_Nominal = -90; pusch_p0_Nominal = -90;
pusch_alpha = "AL1"; pusch_alpha = "AL1";
pucch_p0_Nominal = -108; pucch_p0_Nominal = -100;
msg3_delta_Preamble = 6; msg3_delta_Preamble = 6;
pucch_deltaF_Format1 = "deltaF2"; pucch_deltaF_Format1 = "deltaF2";
pucch_deltaF_Format1b = "deltaF3"; pucch_deltaF_Format1b = "deltaF3";
...@@ -140,10 +140,10 @@ eNBs = ...@@ -140,10 +140,10 @@ eNBs =
NETWORK_INTERFACES : NETWORK_INTERFACES :
{ {
ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; ENB_INTERFACE_NAME_FOR_S1_MME = "eth0";
ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.213/24"; ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.215/24";
ENB_INTERFACE_NAME_FOR_S1U = "eth0"; ENB_INTERFACE_NAME_FOR_S1U = "eth0";
ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.213/24"; ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.215/24";
ENB_PORT_FOR_S1U = 2152; # Spec 2152 ENB_PORT_FOR_S1U = 2152; # Spec 2152
}; };
......
[*] [*]
[*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI [*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
[*] Thu Mar 17 23:50:10 2016 [*] Sun Apr 10 20:34:38 2016
[*] [*]
[dumpfile] "/tmp/openair_dump_eNB.vcd" [dumpfile] "/tmp/openair_dump_eNB.vcd"
[dumpfile_mtime] "Thu Mar 17 23:49:36 2016" [dumpfile_mtime] "Sun Apr 10 20:26:57 2016"
[dumpfile_size] 236045612 [dumpfile_size] 181182776
[savefile] "/home/papillon/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw" [savefile] "/home/papillon/openairinterface5g/targets/RT/USER/eNB_usrp.gtkw"
[timestart] 10372000000 [timestart] 19787100000
[size] 1535 876 [size] 1535 876
[pos] -1 -1 [pos] -1 -1
*-29.793451 12619679774 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 *-21.793451 19795882832 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
[sst_width] 284 [sst_width] 284
[signals_width] 238 [signals_width] 238
[sst_expanded] 1 [sst_expanded] 1
...@@ -51,82 +51,110 @@ functions.eNB_thread_tx9 ...@@ -51,82 +51,110 @@ functions.eNB_thread_tx9
functions.phy_procedures_eNb_tx functions.phy_procedures_eNb_tx
functions.phy_procedures_eNb_rx functions.phy_procedures_eNb_rx
@24 @24
variables.dci_info[63:0]
variables.ue0_BO[63:0] variables.ue0_BO[63:0]
@420 @420
variables.ue0_BSR[63:0] variables.ue0_BSR[63:0]
@421
variables.ue0_timing_advance[63:0] variables.ue0_timing_advance[63:0]
@28 @28
functions.macxface_initiate_ra_proc functions.macxface_initiate_ra_proc
functions.macxface_terminate_ra_proc functions.macxface_terminate_ra_proc
functions.phy_enb_ulsch_msg3
functions.macxface_SR_indication functions.macxface_SR_indication
@420 @420
variables.ue0_SR_ENERGY[63:0] variables.ue0_SR_ENERGY[63:0]
variables.ue0_SR_THRES[63:0] variables.ue0_SR_THRES[63:0]
@25
variables.dci_info[63:0]
@28 @28
functions.phy_enb_ulsch_decoding0 functions.phy_enb_ulsch_decoding0
@24
variables.ue0_res0[63:0]
@420 @420
variables.ue0_rssi0[63:0] variables.ue0_rssi0[63:0]
variables.ue0_MCS0[63:0] variables.ue0_MCS0[63:0]
variables.ue0_RB0[63:0] variables.ue0_RB0[63:0]
@24 @24
variables.ue0_ROUND0[63:0] variables.ue0_ROUND0[63:0]
variables.ue0_SFN0[63:0]
@28 @28
functions.phy_enb_ulsch_decoding1 functions.phy_enb_ulsch_decoding1
@24
variables.ue0_res1[63:0]
@420 @420
variables.ue0_rssi1[63:0] variables.ue0_rssi1[63:0]
variables.ue0_MCS1[63:0] variables.ue0_MCS1[63:0]
variables.ue0_RB1[63:0] variables.ue0_RB1[63:0]
@24 @24
variables.ue0_ROUND1[63:0] variables.ue0_ROUND1[63:0]
variables.ue0_SFN1[63:0]
@28 @28
functions.phy_enb_ulsch_decoding2 functions.phy_enb_ulsch_decoding2
@24
variables.ue0_res2[63:0]
@420 @420
variables.ue0_rssi2[63:0] variables.ue0_rssi2[63:0]
variables.ue0_MCS2[63:0] variables.ue0_MCS2[63:0]
variables.ue0_RB2[63:0] variables.ue0_RB2[63:0]
@24 @24
variables.ue0_ROUND2[63:0] variables.ue0_ROUND2[63:0]
variables.ue0_SFN2[63:0]
@28 @28
functions.phy_enb_ulsch_decoding3 functions.phy_enb_ulsch_decoding3
@24
variables.ue0_res3[63:0]
@420 @420
variables.ue0_rssi3[63:0] variables.ue0_rssi3[63:0]
variables.ue0_MCS3[63:0] variables.ue0_MCS3[63:0]
variables.ue0_RB3[63:0] variables.ue0_RB3[63:0]
@24 @24
variables.ue0_ROUND3[63:0] variables.ue0_ROUND3[63:0]
variables.ue0_SFN3[63:0]
@28 @28
functions.phy_enb_ulsch_decoding4 functions.phy_enb_ulsch_decoding4
@420 @420
variables.ue0_rssi4[63:0] variables.ue0_rssi4[63:0]
@24
variables.ue0_res4[63:0]
@420
variables.ue0_MCS4[63:0] variables.ue0_MCS4[63:0]
variables.ue0_RB4[63:0] variables.ue0_RB4[63:0]
@24 @24
variables.ue0_ROUND4[63:0] variables.ue0_ROUND4[63:0]
variables.ue0_SFN4[63:0]
@28 @28
functions.phy_enb_ulsch_decoding5 functions.phy_enb_ulsch_decoding5
@24
variables.ue0_res5[63:0]
@420 @420
variables.ue0_rssi5[63:0] variables.ue0_rssi5[63:0]
variables.ue0_MCS5[63:0] variables.ue0_MCS5[63:0]
variables.ue0_RB5[63:0] variables.ue0_RB5[63:0]
@24 @24
variables.ue0_ROUND5[63:0] variables.ue0_ROUND5[63:0]
variables.ue0_SFN5[63:0]
@28 @28
functions.phy_enb_ulsch_decoding6 functions.phy_enb_ulsch_decoding6
@24
variables.ue0_res6[63:0]
@420 @420
variables.ue0_rssi6[63:0] variables.ue0_rssi6[63:0]
variables.ue0_MCS6[63:0] variables.ue0_MCS6[63:0]
variables.ue0_RB6[63:0] variables.ue0_RB6[63:0]
@24 @24
variables.ue0_ROUND6[63:0] variables.ue0_ROUND6[63:0]
variables.ue0_SFN6[63:0]
@28 @28
functions.phy_enb_ulsch_decoding7 functions.phy_enb_ulsch_decoding7
@24
variables.ue0_res7[63:0]
@420 @420
variables.ue0_rssi7[63:0] variables.ue0_rssi7[63:0]
variables.ue0_MCS7[63:0] variables.ue0_MCS7[63:0]
variables.ue0_RB7[63:0] variables.ue0_RB7[63:0]
@24 @24
variables.ue0_ROUND7[63:0] variables.ue0_ROUND7[63:0]
variables.ue0_SFN7[63:0]
@28 @28
functions.phy_enb_prach_rx functions.phy_enb_prach_rx
functions.phy_eNB_dlsch_encoding functions.phy_eNB_dlsch_encoding
......
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