commiting changes from svn branch SIC-receiver from revision 6836 to 7896 (current svn head). See svn log for details.
This commit is contained in:
@@ -882,33 +882,31 @@ void phy_init_lte_ue__PDSCH( LTE_UE_PDSCH* const pdsch, const LTE_DL_FRAME_PARMS
|
||||
pdsch->pmi_ext = (uint8_t*)malloc16_clear( frame_parms->N_RB_DL );
|
||||
pdsch->llr[0] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
|
||||
pdsch->llr128 = (int16_t**)malloc16_clear( sizeof(int16_t*) );
|
||||
pdsch->llr128_2ndstream = (int16_t**)malloc16_clear( sizeof(int16_t*) );
|
||||
// FIXME! no further allocation for (int16_t*)pdsch->llr128 !!! expect SIGSEGV
|
||||
// FK, 11-3-2015: this is only as a temporary pointer, no memory is stored there
|
||||
|
||||
pdsch->rxdataF_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
pdsch->rxdataF_comp0 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
pdsch->rho = (int32_t**)malloc16_clear( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
|
||||
pdsch->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
pdsch->dl_ch_rho_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
pdsch->dl_ch_rho2_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
pdsch->dl_ch_mag0 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
pdsch->dl_ch_magb0 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
pdsch->dl_ch_mag1 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
pdsch->dl_ch_magb1 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
|
||||
// the allocated memory size is fixed:
|
||||
AssertFatal( frame_parms->nb_antennas_rx <= 2, "nb_antennas_rx > 2" );
|
||||
|
||||
for (int i=0; i<frame_parms->nb_antennas_rx; i++) {
|
||||
pdsch->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(frame_parms->N_RB_DL*12*7*2) );
|
||||
for (int j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++)
|
||||
const int idx = (j<<1)+i;
|
||||
const size_t num = 7*2*frame_parms->N_RB_DL*12;
|
||||
const size_t num = 7*2*frame_parms->N_RB_DL*12+4;
|
||||
pdsch->rxdataF_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch->rxdataF_comp0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch->dl_ch_rho_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch->dl_ch_rho2_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch->dl_ch_mag0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch->dl_ch_magb0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch->dl_ch_mag1[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch->dl_ch_magb1[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -943,7 +941,7 @@ void phy_init_lte_ue__PDSCH_FLP( LTE_UE_PDSCH_FLP* const pdsch_flp, const LTE_DL
|
||||
pdsch_flp->rho[i] = (double*)malloc16_clear( sizeof(double)*(frame_parms->N_RB_DL*12*7*2) );
|
||||
for (int j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++)
|
||||
const int idx = (j<<1)+i;
|
||||
const size_t num = 7*2*frame_parms->N_RB_DL*12;
|
||||
const size_t num = 7*2*frame_parms->N_RB_DL*12+4;
|
||||
pdsch_flp->rxdataF_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch_flp->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
pdsch_flp->rxdataF_comp[idx] = (double*)malloc16_clear( sizeof(double) * num );
|
||||
@@ -970,7 +968,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
|
||||
LTE_UE_PDCCH** const ue_pdcch_vars = phy_vars_ue->lte_ue_pdcch_vars;
|
||||
LTE_UE_PRACH** const ue_prach_vars = phy_vars_ue->lte_ue_prach_vars;
|
||||
|
||||
int i,j,k;
|
||||
int i,j,k,l;
|
||||
int eNB_id;
|
||||
|
||||
msg("Initializing UE vars (abstraction %"PRIu8") for eNB TXant %"PRIu8", UE RXant %"PRIu8"\n",abstraction_flag,frame_parms->nb_antennas_tx,frame_parms->nb_antennas_rx);
|
||||
@@ -1064,25 +1062,42 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
|
||||
ue_pbch_vars[eNB_id] = (LTE_UE_PBCH *)malloc16_clear(sizeof(LTE_UE_PBCH));
|
||||
|
||||
if (abstraction_flag == 0) {
|
||||
// init basic (common) variables
|
||||
phy_init_lte_ue__PDSCH( ue_pdsch_vars[eNB_id], frame_parms );
|
||||
|
||||
ue_pdsch_vars[eNB_id]->llr_shifts = (uint8_t*)malloc16_clear(7*2*frame_parms->N_RB_DL*12);
|
||||
ue_pdsch_vars[eNB_id]->llr_shifts_p = ue_pdsch_vars[eNB_id]->llr_shifts;
|
||||
ue_pdsch_vars[eNB_id]->dl_ch_mag1 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
ue_pdsch_vars[eNB_id]->dl_ch_magb1 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
ue_pdsch_vars[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
|
||||
// init variables only needed for standard PDSCH
|
||||
ue_pdsch_vars[eNB_id]->llr_shifts = (uint8_t*)malloc16_clear(7*2*frame_parms->N_RB_DL*12);
|
||||
ue_pdsch_vars[eNB_id]->llr_shifts_p = ue_pdsch_vars[eNB_id]->llr_shifts;
|
||||
ue_pdsch_vars[eNB_id]->llr[1] = (int16_t*)malloc16_clear( (8*((3*8*6144)+12))*sizeof(int16_t) );
|
||||
ue_pdsch_vars[eNB_id]->llr128_2ndstream = (int16_t**)malloc16_clear( sizeof(int16_t*) );
|
||||
|
||||
for (k=0;k<8;k++)
|
||||
ue_pdsch_vars[eNB_id]->rxdataF_comp1[k] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
ue_pdsch_vars[eNB_id]->rho = (int32_t**)malloc16_clear( frame_parms->nb_antennas_rx*sizeof(int32_t*) );
|
||||
for (int i=0; i<frame_parms->nb_antennas_rx; i++)
|
||||
ue_pdsch_vars[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(frame_parms->N_RB_DL*12*7*2) );
|
||||
|
||||
ue_pdsch_vars[eNB_id]->dl_ch_rho2_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
for (i=0; i<frame_parms->nb_antennas_rx; i++)
|
||||
for (j=0; j<4;j++) {
|
||||
int idx = (j<<1)+i;
|
||||
ue_pdsch_vars[eNB_id]->dl_ch_mag1[idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(frame_parms->N_RB_DL*12) );
|
||||
ue_pdsch_vars[eNB_id]->dl_ch_magb1[idx] = (int32_t*)malloc16_clear( 7*2*sizeof(int32_t)*(frame_parms->N_RB_DL*12) );
|
||||
for (k=0;k<8;k++)
|
||||
ue_pdsch_vars[eNB_id]->rxdataF_comp1[idx][k] = (int32_t*)malloc16_clear( sizeof(int32_t)*(frame_parms->N_RB_DL*12*14) );
|
||||
const int idx = (j<<1)+i;
|
||||
const size_t num = 7*2*frame_parms->N_RB_DL*12+4;
|
||||
ue_pdsch_vars[eNB_id]->dl_ch_rho2_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
}
|
||||
|
||||
for (k=0;k<8;k++) { //harq_pid
|
||||
for (l=0;l<8;l++) { //round
|
||||
ue_pdsch_vars[eNB_id]->rxdataF_comp1[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
ue_pdsch_vars[eNB_id]->dl_ch_rho_ext[k][l] = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) );
|
||||
|
||||
for (int i=0; i<frame_parms->nb_antennas_rx; i++)
|
||||
for (int j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++)
|
||||
const int idx = (j<<1)+i;
|
||||
const size_t num = 7*2*frame_parms->N_RB_DL*12+4;
|
||||
ue_pdsch_vars[eNB_id]->dl_ch_rho_ext[k][l][idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
ue_pdsch_vars[eNB_id]->rxdataF_comp1[k][l][idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ENABLE_FULL_FLP
|
||||
phy_init_lte_ue__PDSCH_FLP( ue_pdsch_vars_flp[eNB_id], frame_parms );
|
||||
#endif
|
||||
@@ -1106,7 +1121,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
|
||||
ue_pdcch_vars[eNB_id]->rho[i] = (int32_t*)malloc16_clear( sizeof(int32_t)*(frame_parms->N_RB_DL*12*7*2) );
|
||||
for (j=0; j<4;j++) {//frame_parms->nb_antennas_tx; j++)
|
||||
int idx = (j<<1)+i;
|
||||
size_t num = 7*2*frame_parms->N_RB_DL*12;
|
||||
size_t num = 7*2*frame_parms->N_RB_DL*12+4;
|
||||
ue_pdcch_vars[eNB_id]->rxdataF_comp[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
ue_pdcch_vars[eNB_id]->dl_ch_rho_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
ue_pdcch_vars[eNB_id]->rxdataF_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num );
|
||||
|
||||
@@ -1217,26 +1217,28 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe,
|
||||
|
||||
if (frame_parms->nb_antennas_tx == 2) {
|
||||
if (dlsch1->active == 1) { // both TBs are active
|
||||
dlsch0_harq->dl_power_off = 1; //no power offset??
|
||||
dlsch1_harq->dl_power_off = 1; //no power offset??
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
switch (tpmi) {
|
||||
case 0:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
|
||||
dlsch1_harq->mimo_mode = UNIFORM_PRECODING1m1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
break;
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
|
||||
dlsch1_harq->mimo_mode = UNIFORM_PRECODING1mj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
break;
|
||||
case 2: // PUSCH precoding
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
|
||||
dlsch0_harq->pmi_alloc = DL_pmi_single;
|
||||
dlsch0_harq->pmi_alloc = DL_pmi_single;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
|
||||
dlsch1_harq->pmi_alloc = DL_pmi_single;
|
||||
dlsch1_harq->pmi_alloc = DL_pmi_single;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -1245,6 +1247,7 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch1_harq->nb_rb-1];
|
||||
}
|
||||
else { // only one is active
|
||||
dlsch0_harq->dl_power_off = 1; //???
|
||||
switch (tpmi) {
|
||||
case 0 :
|
||||
dlsch0_harq->mimo_mode = ALAMOUTI;
|
||||
@@ -1292,8 +1295,8 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch0->rnti = rnti;
|
||||
dlsch1->rnti = rnti;
|
||||
|
||||
dlsch0_harq->dl_power_off = 0;
|
||||
dlsch1_harq->dl_power_off = 0;
|
||||
// dlsch0_harq->dl_power_off = 1;
|
||||
// dlsch1_harq->dl_power_off = 1;
|
||||
|
||||
break;
|
||||
|
||||
@@ -1513,7 +1516,7 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe,
|
||||
|
||||
// Flip the TB to codeword mapping as described in 5.3.3.1.5 of 36-212 V11.3.0
|
||||
// note that we must set tbswap=0 in eNB scheduler if one TB is deactivated
|
||||
if (tbswap == 0) {
|
||||
if (tbswap == 0) {
|
||||
dlsch0 = dlsch[0];
|
||||
dlsch1 = dlsch[1];
|
||||
}
|
||||
@@ -1568,25 +1571,27 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch1->active = 0;
|
||||
}
|
||||
|
||||
dlsch0_harq->dl_power_off = 0;
|
||||
dlsch1_harq->dl_power_off = 0;
|
||||
// dlsch0_harq->dl_power_off = 0;
|
||||
// dlsch1_harq->dl_power_off = 0;
|
||||
|
||||
|
||||
if (frame_parms->nb_antennas_tx == 2) {
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
if ((dlsch0->active==1) && (dlsch1->active==1)) {
|
||||
|
||||
dlsch0_harq->mimo_mode = LARGE_CDD;
|
||||
dlsch1_harq->mimo_mode = LARGE_CDD;
|
||||
dlsch0_harq->dl_power_off = 1;
|
||||
dlsch1_harq->dl_power_off = 1;
|
||||
}
|
||||
else {
|
||||
dlsch0_harq->dl_power_off = 1;
|
||||
dlsch0_harq->mimo_mode = ALAMOUTI;
|
||||
dlsch1_harq->mimo_mode = ALAMOUTI;
|
||||
}
|
||||
}
|
||||
else if (frame_parms->nb_antennas_tx == 4) { // 4 antenna case
|
||||
else if (frame_parms->nb_antennas_tx == 4) {
|
||||
if ((dlsch0->active==1) && (dlsch1->active==1)) {
|
||||
switch (tpmi) {
|
||||
case 0: // one layer per transport block
|
||||
@@ -1629,6 +1634,7 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe,
|
||||
case 0: // one layer per transport block
|
||||
dlsch0_harq->mimo_mode = ALAMOUTI;
|
||||
dlsch1_harq->mimo_mode = ALAMOUTI;
|
||||
dlsch0_harq->dl_power_off = 1;
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
break;
|
||||
case 1: // two-layers on TB 0
|
||||
@@ -1648,6 +1654,7 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe,
|
||||
case 0: // one layer per transport block
|
||||
dlsch0_harq->mimo_mode = ALAMOUTI;
|
||||
dlsch1_harq->mimo_mode = ALAMOUTI;
|
||||
dlsch1_harq->dl_power_off = 1;
|
||||
dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch1_harq->nb_rb-1];
|
||||
break;
|
||||
case 1: // two-layers on TB 0
|
||||
@@ -2316,7 +2323,7 @@ int generate_eNB_dlsch_params_from_dci(uint8_t subframe,
|
||||
#endif
|
||||
|
||||
// compute DL power control parameters
|
||||
computeRhoA_eNB(pdsch_config_dedicated, dlsch[0],dlsch0_harq->dl_power_off);
|
||||
computeRhoA_eNB(pdsch_config_dedicated, dlsch[0],dlsch0_harq->dl_power_off, frame_parms->nb_antennas_tx_eNB);
|
||||
|
||||
computeRhoB_eNB(pdsch_config_dedicated,&(frame_parms->pdsch_config_common),frame_parms->nb_antennas_tx_eNB,dlsch[0],dlsch0_harq->dl_power_off);
|
||||
|
||||
@@ -3737,12 +3744,9 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
|
||||
dlsch0_harq->dl_power_off = 1; //no power offset
|
||||
|
||||
LOG_D(PHY,"UE (%x/%d): Subframe %d Format2 DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d\n",dlsch[0]->rnti,harq_pid,subframe,ndi,dlsch0_harq->DCINdi,
|
||||
LOG_D(PHY,"UE (%x/%d): Subframe %d Format1 DCI: ndi %d, old_ndi %d (first tx %d) harq_status %d\n",dlsch[0]->rnti,harq_pid,subframe,ndi,dlsch0_harq->DCINdi,
|
||||
dlsch0_harq->first_tx,dlsch0_harq->status);
|
||||
|
||||
// printf("Format2 DCI (UE, hard pid %d): ndi %d, old_ndi %d (first tx %d)\n",harq_pid,ndi,dlsch0_harq->DCINdi,
|
||||
// dlsch0_harq->first_tx);
|
||||
|
||||
if ((ndi!=dlsch0_harq->DCINdi)||
|
||||
(dlsch0_harq->first_tx==1)) {
|
||||
// printf("Rate: setting round to zero (ndi %d, DCINdi %d,first_tx %d)\n",ndi,dlsch0_harq->DCINdi,dlsch0_harq->first_tx);
|
||||
@@ -3750,7 +3754,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
dlsch0_harq->DCINdi = ndi;
|
||||
if (dlsch0_harq->first_tx==1) {
|
||||
LOG_D(PHY,"[PDSCH %x/%d] Format 1 DCI First TX: Clearing flag\n");
|
||||
LOG_D(PHY,"Format 1 DCI First TX: Clearing flag\n");
|
||||
dlsch0_harq->first_tx = 0;
|
||||
}
|
||||
}
|
||||
@@ -3792,6 +3796,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rballoc = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->rballoc;
|
||||
rv1 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3802,6 +3808,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rballoc = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->rballoc;
|
||||
rv1 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3814,6 +3822,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rballoc = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->rballoc;
|
||||
rv1 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3824,6 +3834,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rballoc = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->rballoc;
|
||||
rv1 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3842,6 +3854,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3853,6 +3867,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3866,6 +3882,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3877,6 +3895,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3895,6 +3915,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3906,6 +3928,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3919,6 +3943,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3930,6 +3956,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3949,6 +3977,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3960,6 +3990,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3973,6 +4005,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->tpmi;
|
||||
@@ -3984,6 +4018,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
rah = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->rah;
|
||||
rv1 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->rv1;
|
||||
rv2 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->rv2;
|
||||
ndi1 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->ndi1;
|
||||
ndi2 = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->ndi2;
|
||||
harq_pid = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->harq_pid;
|
||||
tbswap = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->tb_swap;
|
||||
tpmi = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->tpmi;
|
||||
@@ -4001,9 +4037,6 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
}
|
||||
|
||||
|
||||
dlsch[0]->current_harq_pid = harq_pid;
|
||||
dlsch[0]->harq_ack[subframe].harq_id = harq_pid;
|
||||
|
||||
tbswap = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->tb_swap;
|
||||
if (tbswap == 0) {
|
||||
dlsch0 = dlsch[0];
|
||||
@@ -4016,114 +4049,166 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
|
||||
dlsch0_harq = dlsch0->harq_processes[harq_pid];
|
||||
dlsch1_harq = dlsch1->harq_processes[harq_pid];
|
||||
dlsch0->current_harq_pid = harq_pid;
|
||||
dlsch1->current_harq_pid = harq_pid;
|
||||
dlsch0->harq_ack[subframe].harq_id = harq_pid;
|
||||
dlsch1->harq_ack[subframe].harq_id = harq_pid;
|
||||
|
||||
conv_rballoc(rah,
|
||||
rballoc,
|
||||
frame_parms->N_RB_DL,
|
||||
dlsch0_harq->rb_alloc);
|
||||
|
||||
dlsch1_harq->rb_alloc[0] = dlsch0_harq->rb_alloc[0];
|
||||
|
||||
dlsch0_harq->nb_rb = conv_nprb(rah,
|
||||
rballoc,
|
||||
frame_parms->N_RB_DL);
|
||||
rballoc,
|
||||
frame_parms->N_RB_DL);
|
||||
dlsch1_harq->nb_rb = dlsch0_harq->nb_rb;
|
||||
|
||||
dlsch0_harq->mcs = mcs1;
|
||||
dlsch1_harq->mcs = mcs2;
|
||||
|
||||
dlsch0_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3];
|
||||
/*
|
||||
if (dlsch0_harq->mcs>20) {
|
||||
msg("dci_tools.c: mcs > 20 disabled for now (asked %d)\n",dlsch0_harq->mcs);
|
||||
return(-1);
|
||||
}
|
||||
*/
|
||||
dlsch1_harq->delta_PUCCH = delta_PUCCH_lut[TPC&3];
|
||||
|
||||
dlsch1_harq->mcs = mcs2;
|
||||
dlsch0_harq->rvidx = rv1;
|
||||
dlsch1_harq->rvidx = rv2;
|
||||
|
||||
// check if either TB is disabled (see 36-213 V8.6 p. 26)
|
||||
if ((dlsch0_harq->rvidx == 1) && (dlsch0_harq->mcs == 0))
|
||||
dlsch0->active = 0;
|
||||
else
|
||||
dlsch0->active = 1;
|
||||
|
||||
if ((dlsch1_harq->rvidx == 1) && (dlsch1_harq->mcs == 0))
|
||||
dlsch1->active = 0;
|
||||
else
|
||||
dlsch1->active = 1;
|
||||
|
||||
if ((dlsch0_harq->rvidx == 1) && (dlsch0_harq->mcs == 0)) {
|
||||
dlsch0_harq->status = DISABLED;
|
||||
}
|
||||
if ((dlsch1_harq->rvidx == 1) && (dlsch1_harq->mcs == 0)) {
|
||||
dlsch1_harq->status = DISABLED;
|
||||
}
|
||||
dlsch0_harq->Nl = 1;
|
||||
dlsch1_harq->Nl = 1;
|
||||
|
||||
// dlsch0->layer_index = tbswap;
|
||||
// dlsch1->layer_index = 1-tbswap;
|
||||
|
||||
switch (tpmi) {
|
||||
case 0 :
|
||||
dlsch0_harq->mimo_mode = ALAMOUTI;
|
||||
break;
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
break;
|
||||
case 2:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
break;
|
||||
case 3:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
break;
|
||||
case 4:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
break;
|
||||
case 5:
|
||||
dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
|
||||
// pmi stored from ulsch allocation routine
|
||||
dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc;
|
||||
//LOG_I(PHY,"XXX using PMI %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc));
|
||||
break;
|
||||
case 6:
|
||||
dlsch0_harq->mimo_mode = PUSCH_PRECODING1;
|
||||
LOG_E(PHY,"Unsupported TPMI\n");
|
||||
return(-1);
|
||||
break;
|
||||
if (dlsch1->active==1) { //two codewords
|
||||
dlsch0_harq->dl_power_off = 1; //no power offset??
|
||||
dlsch1_harq->dl_power_off = 1; //no power offset??
|
||||
switch (tpmi) {
|
||||
case 0:
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODING1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
break;
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_UNIFORM_PRECODINGj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
dlsch1_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
break;
|
||||
case 2: // PUSCH precoding
|
||||
dlsch0_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
|
||||
dlsch0_harq->pmi_alloc = 0; //TODO: DL_pmi_single;
|
||||
dlsch1_harq->mimo_mode = DUALSTREAM_PUSCH_PRECODING;
|
||||
dlsch1_harq->pmi_alloc = 0; //TODO: DL_pmi_single;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
dlsch0_harq->dl_power_off = 1;//????
|
||||
switch (tpmi) {
|
||||
case 0 :
|
||||
dlsch0_harq->mimo_mode = ALAMOUTI;
|
||||
break;
|
||||
case 1:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING11;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,0);
|
||||
break;
|
||||
case 2:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1m1;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,1);
|
||||
break;
|
||||
case 3:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1j;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,2);
|
||||
break;
|
||||
case 4:
|
||||
dlsch0_harq->mimo_mode = UNIFORM_PRECODING1mj;
|
||||
dlsch0_harq->pmi_alloc = pmi_extend(frame_parms,3);
|
||||
break;
|
||||
case 5:
|
||||
dlsch0_harq->mimo_mode = PUSCH_PRECODING0;
|
||||
// pmi stored from ulsch allocation routine
|
||||
dlsch0_harq->pmi_alloc = dlsch0->pmi_alloc;
|
||||
//LOG_I(PHY,"XXX using PMI %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc));
|
||||
break;
|
||||
case 6:
|
||||
dlsch0_harq->mimo_mode = PUSCH_PRECODING1;
|
||||
LOG_E(PHY,"Unsupported TPMI\n");
|
||||
return(-1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (frame_parms->mode1_flag == 1)
|
||||
dlsch0_harq->mimo_mode = SISO;
|
||||
if (ndi1!=dlsch0_harq->DCINdi) {
|
||||
dlsch0_harq->round = 0;
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
dlsch0_harq->DCINdi = ndi1;
|
||||
}
|
||||
else if (dlsch0_harq->status == SCH_IDLE) { // we got an Ndi = 0 for a previously decoded process,
|
||||
|
||||
if (dlsch0->active == 1) {
|
||||
if ((ndi1!=dlsch0_harq->DCINdi) ||
|
||||
(dlsch0_harq->first_tx==1)) {
|
||||
dlsch0_harq->round = 0;
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
dlsch0_harq->DCINdi = ndi1;
|
||||
if (dlsch0_harq->first_tx==1) {
|
||||
LOG_D(PHY,"Format 2 DCI First TX0: Clearing flag\n");
|
||||
dlsch0_harq->first_tx = 0;
|
||||
}
|
||||
}
|
||||
else if (dlsch0_harq->status == SCH_IDLE) { // we got an Ndi = 0 for a previously decoded process,
|
||||
// this happens if either another harq process in the same
|
||||
// is NAK or an ACK was not received
|
||||
|
||||
dlsch0->harq_ack[subframe].ack = 1;
|
||||
dlsch0->harq_ack[subframe].harq_id = harq_pid;
|
||||
dlsch0->harq_ack[subframe].send_harq_status = 1;
|
||||
dlsch0->active = 0;
|
||||
return(0);
|
||||
|
||||
dlsch0->harq_ack[subframe].ack = 1;
|
||||
dlsch0->harq_ack[subframe].harq_id = harq_pid;
|
||||
dlsch0->harq_ack[subframe].send_harq_status = 1;
|
||||
dlsch0->active = 0;
|
||||
}
|
||||
}
|
||||
dlsch0_harq->mcs = mcs1;
|
||||
|
||||
if (dlsch1->active == 1) {
|
||||
if ((ndi2!=dlsch1_harq->DCINdi) ||
|
||||
(dlsch1_harq->first_tx==1)) {
|
||||
dlsch1_harq->round = 0;
|
||||
dlsch1_harq->status = ACTIVE;
|
||||
dlsch1_harq->DCINdi = ndi2;
|
||||
if (dlsch1_harq->first_tx==1) {
|
||||
LOG_D(PHY,"Format 2 DCI First TX1: Clearing flag\n");
|
||||
dlsch1_harq->first_tx = 0;
|
||||
}
|
||||
}
|
||||
else if (dlsch1_harq->status == SCH_IDLE) { // we got an Ndi = 0 for a previously decoded process,
|
||||
// this happens if either another harq process in the same
|
||||
// is NAK or an ACK was not received
|
||||
|
||||
dlsch1->harq_ack[subframe].ack = 1;
|
||||
dlsch1->harq_ack[subframe].harq_id = harq_pid;
|
||||
dlsch1->harq_ack[subframe].send_harq_status = 1;
|
||||
dlsch1->active = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (dlsch0_harq->nb_rb>1) {
|
||||
dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1];
|
||||
}
|
||||
else
|
||||
dlsch0_harq->TBS =0;
|
||||
/*
|
||||
if (dlsch0_harq->mcs > 18)
|
||||
printf("mcs %d, TBS %d\n",dlsch0_harq->mcs,dlsch0_harq->TBS);
|
||||
*/
|
||||
dlsch0_harq->TBS = 0;
|
||||
|
||||
if (dlsch1_harq->DCINdi != ndi2) {
|
||||
dlsch1_harq->round=0;
|
||||
dlsch1_harq->status = ACTIVE;
|
||||
}
|
||||
dlsch1_harq->DCINdi = ndi2;
|
||||
dlsch1_harq->mcs = mcs2;
|
||||
if (dlsch1_harq->nb_rb>1) {
|
||||
dlsch1_harq->TBS = TBStable[dlsch1_harq->mcs][dlsch1_harq->nb_rb-1];
|
||||
dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch1_harq->nb_rb-1];
|
||||
}
|
||||
else
|
||||
dlsch1_harq->TBS = 0;
|
||||
@@ -4131,11 +4216,8 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch0->rnti = rnti;
|
||||
dlsch1->rnti = rnti;
|
||||
|
||||
dlsch0_harq->dl_power_off = 1; //no power offset
|
||||
dlsch1_harq->dl_power_off = 1; //no power offset
|
||||
|
||||
dlsch0->active = 1;
|
||||
dlsch1->active = 1;
|
||||
// dlsch0_harq->dl_power_off = 1; //no power offset
|
||||
// dlsch1_harq->dl_power_off = 1; //no power offset
|
||||
|
||||
break;
|
||||
|
||||
@@ -4461,7 +4543,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch0_harq->status = ACTIVE;
|
||||
dlsch0_harq->DCINdi = ndi1;
|
||||
if (dlsch0_harq->first_tx==1) {
|
||||
LOG_D(PHY,"[PDSCH %x/%d] Format 2A DCI First TX0: Clearing flag\n");
|
||||
LOG_D(PHY,"Format 2A DCI First TX0: Clearing flag\n");
|
||||
dlsch0_harq->first_tx = 0;
|
||||
}
|
||||
}
|
||||
@@ -4485,7 +4567,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch1_harq->DCINdi = ndi2;
|
||||
|
||||
if (dlsch1_harq->first_tx==1) {
|
||||
LOG_D(PHY,"[PDSCH %x/%d] Format 2A DCI First TX1: Clearing flag\n",rnti,harq_pid);
|
||||
LOG_D(PHY,"Format 2A DCI First TX1: Clearing flag\n",rnti,harq_pid);
|
||||
dlsch1_harq->first_tx = 0;
|
||||
}
|
||||
|
||||
@@ -4768,7 +4850,7 @@ int generate_ue_dlsch_params_from_dci(uint8_t subframe,
|
||||
dlsch[0]->active=1;
|
||||
|
||||
// compute DL power control parameters
|
||||
computeRhoA_UE(pdsch_config_dedicated, dlsch[0],dlsch0_harq->dl_power_off);
|
||||
computeRhoA_UE(pdsch_config_dedicated, dlsch[0],dlsch0_harq->dl_power_off, frame_parms->nb_antennas_tx_eNB);
|
||||
|
||||
computeRhoB_UE(pdsch_config_dedicated,&(frame_parms->pdsch_config_common),frame_parms->nb_antennas_tx_eNB,dlsch[0],dlsch0_harq->dl_power_off);
|
||||
|
||||
|
||||
@@ -695,6 +695,12 @@ typedef enum {
|
||||
PMCH
|
||||
} PDSCH_t;
|
||||
|
||||
typedef enum {
|
||||
rx_standard=0,
|
||||
rx_IC_single_stream,
|
||||
rx_IC_dual_stream,
|
||||
} RX_type_t;
|
||||
|
||||
typedef enum {
|
||||
pucch_format1=0,
|
||||
pucch_format1a,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -642,7 +642,7 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr32p) {
|
||||
|
||||
uint32_t *rxF = (uint32_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
uint32_t *rxF = (uint32_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
uint32_t *llr32;
|
||||
int i,len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
@@ -698,7 +698,7 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
int16_t **llr32p) {
|
||||
|
||||
__m128i *rxF = (__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
__m128i *rxF = (__m128i*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
__m128i *ch_mag;
|
||||
__m128i llr128[2];
|
||||
int i,len;
|
||||
@@ -715,7 +715,7 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
|
||||
symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
|
||||
ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
ch_mag = (__m128i*)&dl_ch_mag[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
|
||||
if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
|
||||
if (frame_parms->mode1_flag==0)
|
||||
@@ -774,7 +774,7 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr_save) {
|
||||
|
||||
__m128i *rxF = (__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
__m128i *rxF = (__m128i*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
__m128i *ch_mag,*ch_magb;
|
||||
int i,len,len2;
|
||||
unsigned char symbol_mod,len_mod4;
|
||||
@@ -788,8 +788,8 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
|
||||
symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
|
||||
ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
ch_magb = (__m128i*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
ch_mag = (__m128i*)&dl_ch_mag[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
ch_magb = (__m128i*)&dl_ch_magb[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
|
||||
if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) {
|
||||
if (frame_parms->mode1_flag==0)
|
||||
@@ -902,9 +902,9 @@ int dlsch_qpsk_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr16p) {
|
||||
|
||||
int16_t *rxF=(int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rho=(int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF=(int16_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rho=(int16_t*)&rho_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *llr16;
|
||||
int len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
@@ -935,7 +935,7 @@ int dlsch_qpsk_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
len = (nb_rb*12) - pbch_pss_sss_adjust;
|
||||
}
|
||||
|
||||
// printf("qpsk_qpsk: len %d, llr16 %p\n",len,llr16);
|
||||
//printf("qpsk_qpsk: len %d, llr16 %p, rho %p\n",len,llr16,rho);
|
||||
qpsk_qpsk((short *)rxF,
|
||||
(short *)rxF_i,
|
||||
(short *)llr16,
|
||||
@@ -981,6 +981,7 @@ length = number of resource elements
|
||||
ONE_OVER_SQRT_8 = _mm_set1_epi16(23170); //round(2^16/sqrt(8))
|
||||
|
||||
for (i=0;i<length>>2;i+=2) {
|
||||
//printf("%d.",i);
|
||||
// in each iteration, we take 8 complex samples
|
||||
|
||||
xmm0 = rho01_128i[i]; // 4 symbols
|
||||
@@ -1115,6 +1116,7 @@ length = number of resource elements
|
||||
_mm_storeu_si128(&stream0_128i_out[i+1],_mm_unpackhi_epi16(y0r,y0i));
|
||||
|
||||
}
|
||||
//printf("\n");
|
||||
_mm_empty();
|
||||
_m_empty();
|
||||
}
|
||||
@@ -1131,10 +1133,10 @@ int dlsch_qpsk_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr16p) {
|
||||
|
||||
int16_t *rxF=(int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rho=(int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF=(int16_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rho=(int16_t*)&rho_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *llr16;
|
||||
int len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
@@ -1390,10 +1392,10 @@ int dlsch_qpsk_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr16p) {
|
||||
|
||||
int16_t *rxF=(int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rho=(int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF=(int16_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rxF_i=(int16_t*)&rxdataF_comp_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rho=(int16_t*)&rho_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *llr16;
|
||||
int len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
@@ -2077,10 +2079,10 @@ int dlsch_16qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr16p) {
|
||||
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *llr16;
|
||||
int len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
@@ -2580,11 +2582,11 @@ int dlsch_16qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr16p) {
|
||||
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *llr16;
|
||||
int len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
@@ -3112,11 +3114,11 @@ int dlsch_16qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr16p) {
|
||||
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *llr16;
|
||||
int len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
@@ -4456,10 +4458,10 @@ int dlsch_64qam_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr16p) {
|
||||
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *llr16;
|
||||
int len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
@@ -5718,11 +5720,11 @@ int dlsch_64qam_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr16p) {
|
||||
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *llr16;
|
||||
int len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
@@ -7108,11 +7110,11 @@ int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t pbch_pss_sss_adjust,
|
||||
short **llr16p) {
|
||||
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(symbol*frame_parms->N_RB_DL*12)];
|
||||
int16_t *rxF = (int16_t*)&rxdataF_comp[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rxF_i = (int16_t*)&rxdataF_comp_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag = (int16_t*)&dl_ch_mag[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *ch_mag_i = (int16_t*)&dl_ch_mag_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *rho = (int16_t*)&rho_i[0][(((int)symbol)*((int)frame_parms->N_RB_DL)*12)];
|
||||
int16_t *llr16;
|
||||
int len;
|
||||
uint8_t symbol_mod = (symbol >= (7-frame_parms->Ncp))? (symbol-(7-frame_parms->Ncp)) : symbol;
|
||||
|
||||
@@ -155,15 +155,14 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
int first_layer0 = dlsch0_harq->first_layer;
|
||||
int Nlayers0 = dlsch0_harq->Nlayers;
|
||||
uint8_t mod_order0 = get_Qm(dlsch0_harq->mcs);
|
||||
|
||||
uint8_t mod_order1=2;
|
||||
uint8_t precoder_index0,precoder_index1;
|
||||
|
||||
uint8_t *x1=NULL;
|
||||
uint8_t mod_order1=2;
|
||||
// Fill these in later for TM8-10
|
||||
// int Nlayers1;
|
||||
// int first_layer1;
|
||||
|
||||
|
||||
int use2ndpilots = (frame_parms->mode1_flag==1)?1:0;
|
||||
|
||||
uint32_t tti_offset,aa;
|
||||
@@ -642,7 +641,7 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
}
|
||||
}
|
||||
else if ((mimo_mode >= UNIFORM_PRECODING11)&&(mimo_mode <= PUSCH_PRECODING1)) {
|
||||
// this is for transmission modes 4-6 (1 layer)
|
||||
// this is for transmission modes 5-6 (1 layer)
|
||||
*re_allocated = *re_allocated + 1;
|
||||
amp = (int16_t)(((int32_t)tmp_amp*ONE_OVER_SQRT2_Q15)>>15);
|
||||
|
||||
@@ -740,6 +739,214 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
|
||||
}
|
||||
}
|
||||
else if ((mimo_mode >= DUALSTREAM_UNIFORM_PRECODING1)&&(mimo_mode <= DUALSTREAM_PUSCH_PRECODING)) {
|
||||
// this is for transmission mode 4 (1 layer)
|
||||
*re_allocated = *re_allocated + 1;
|
||||
//amp = (int16_t)(((int32_t)tmp_amp*ONE_OVER_SQRT2_Q15)>>15);
|
||||
amp = tmp_amp/2;
|
||||
gain_lin_QPSK = (int16_t)((amp*ONE_OVER_SQRT2_Q15)>>15);
|
||||
|
||||
if (precoder_index==0) {
|
||||
precoder_index0 = 0; //[1 1]
|
||||
precoder_index1 = 1; //[1 -1]
|
||||
}
|
||||
else if (precoder_index==1) {
|
||||
precoder_index0 = 2; //[1 j]
|
||||
precoder_index1 = 3; //[1 -j]
|
||||
}
|
||||
else {
|
||||
LOG_E(PHY,"problem with precoder in TM4\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
switch (mod_order0) {
|
||||
case 2: //QPSK
|
||||
|
||||
((int16_t*)&tmp_sample1)[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
*jj = *jj + 1;
|
||||
((int16_t*)&tmp_sample1)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
*jj = *jj + 1;
|
||||
|
||||
// normalization for 2 tx antennas
|
||||
((int16_t*)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0];
|
||||
((int16_t*)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1];
|
||||
|
||||
if (frame_parms->nb_antennas_tx == 2) {
|
||||
layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index0);
|
||||
((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0];
|
||||
((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 4: //16QAM
|
||||
|
||||
qam16_table_offset_re = 0;
|
||||
qam16_table_offset_im = 0;
|
||||
|
||||
if (x0[*jj] == 1)
|
||||
qam16_table_offset_re+=2;
|
||||
*jj=*jj+1;
|
||||
if (x0[*jj] == 1)
|
||||
qam16_table_offset_im+=2;
|
||||
*jj=*jj+1;
|
||||
|
||||
|
||||
if (x0[*jj] == 1)
|
||||
qam16_table_offset_re+=1;
|
||||
*jj=*jj+1;
|
||||
if (x0[*jj] == 1)
|
||||
qam16_table_offset_im+=1;
|
||||
*jj=*jj+1;
|
||||
|
||||
((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
|
||||
((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
|
||||
|
||||
((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0];
|
||||
((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1];
|
||||
|
||||
if (frame_parms->nb_antennas_tx == 2) {
|
||||
layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index0);
|
||||
((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0];
|
||||
((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 6: //64QAM
|
||||
|
||||
|
||||
qam64_table_offset_re = 0;
|
||||
qam64_table_offset_im = 0;
|
||||
if (x0[*jj] == 1)
|
||||
qam64_table_offset_re+=4;
|
||||
*jj=*jj+1;
|
||||
if (x0[*jj] == 1)
|
||||
qam64_table_offset_im+=4;
|
||||
*jj=*jj+1;
|
||||
if (x0[*jj] == 1)
|
||||
qam64_table_offset_re+=2;
|
||||
*jj=*jj+1;
|
||||
if (x0[*jj] == 1)
|
||||
qam64_table_offset_im+=2;
|
||||
*jj=*jj+1;
|
||||
if (x0[*jj] == 1)
|
||||
qam64_table_offset_re+=1;
|
||||
*jj=*jj+1;
|
||||
if (x0[*jj] == 1)
|
||||
qam64_table_offset_im+=1;
|
||||
*jj=*jj+1;
|
||||
|
||||
((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
|
||||
((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
|
||||
|
||||
((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0];
|
||||
((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1];
|
||||
|
||||
if (frame_parms->nb_antennas_tx == 2) {
|
||||
layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index0);
|
||||
((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0];
|
||||
((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
switch (mod_order1) {
|
||||
case 2: //QPSK
|
||||
|
||||
((int16_t*)&tmp_sample1)[0] = (x1[*jj2]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
*jj2 = *jj2 + 1;
|
||||
((int16_t*)&tmp_sample1)[1] = (x1[*jj2]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK;
|
||||
*jj2 = *jj2 + 1;
|
||||
|
||||
// normalization for 2 tx antennas
|
||||
((int16_t*)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0];
|
||||
((int16_t*)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1];
|
||||
|
||||
if (frame_parms->nb_antennas_tx == 2) {
|
||||
layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index1);
|
||||
((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0];
|
||||
((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 4: //16QAM
|
||||
|
||||
qam16_table_offset_re = 0;
|
||||
qam16_table_offset_im = 0;
|
||||
|
||||
if (x1[*jj2] == 1)
|
||||
qam16_table_offset_re+=2;
|
||||
*jj2=*jj2+1;
|
||||
if (x1[*jj2] == 1)
|
||||
qam16_table_offset_im+=2;
|
||||
*jj2=*jj2+1;
|
||||
|
||||
|
||||
if (x1[*jj2] == 1)
|
||||
qam16_table_offset_re+=1;
|
||||
*jj2=*jj2+1;
|
||||
if (x1[*jj2] == 1)
|
||||
qam16_table_offset_im+=1;
|
||||
*jj2=*jj2+1;
|
||||
|
||||
((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15);
|
||||
((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15);
|
||||
|
||||
((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0];
|
||||
((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1];
|
||||
|
||||
if (frame_parms->nb_antennas_tx == 2) {
|
||||
layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index1);
|
||||
((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0];
|
||||
((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 6: //64QAM
|
||||
|
||||
|
||||
qam64_table_offset_re = 0;
|
||||
qam64_table_offset_im = 0;
|
||||
if (x1[*jj2] == 1)
|
||||
qam64_table_offset_re+=4;
|
||||
*jj2=*jj2+1;
|
||||
if (x1[*jj2] == 1)
|
||||
qam64_table_offset_im+=4;
|
||||
*jj2=*jj2+1;
|
||||
if (x1[*jj2] == 1)
|
||||
qam64_table_offset_re+=2;
|
||||
*jj2=*jj2+1;
|
||||
if (x1[*jj2] == 1)
|
||||
qam64_table_offset_im+=2;
|
||||
*jj2=*jj2+1;
|
||||
if (x1[*jj2] == 1)
|
||||
qam64_table_offset_re+=1;
|
||||
*jj2=*jj2+1;
|
||||
if (x1[*jj2] == 1)
|
||||
qam64_table_offset_im+=1;
|
||||
*jj2=*jj2+1;
|
||||
|
||||
((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15);
|
||||
((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15);
|
||||
|
||||
((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0];
|
||||
((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1];
|
||||
|
||||
if (frame_parms->nb_antennas_tx == 2) {
|
||||
layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index1);
|
||||
((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0];
|
||||
((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (mimo_mode == ALAMOUTI) {
|
||||
re++; // adjacent carriers are taken care of by precoding
|
||||
*re_allocated = *re_allocated + 1;
|
||||
|
||||
@@ -36,24 +36,27 @@ double ratioPB[2][4]={{ 1.0,4.0/5.0,3.0/5.0,2.0/5.0},
|
||||
{ 5.0/4.0,1.0,3.0/4.0,1.0/2.0}};
|
||||
*/
|
||||
|
||||
double ratioPB[2][4]={{ 0.00000, -0.96910, -2.21849, -3.97940},
|
||||
double ratioPB[2][4]={{ 0.00000, -0.96910, -2.21849, -3.97940}, //in db
|
||||
{ 0.96910, 0.00000, -1.24939, -3.01030}};
|
||||
|
||||
double pa_values[8]={-6.0,-4.77,-3.0,-1.77,0.0,1.0,2.0,3.0};
|
||||
double pa_values[8]={-6.0,-4.77,-3.0,-1.77,0.0,1.0,2.0,3.0}; //reported by higher layers
|
||||
|
||||
double get_pa_dB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated) {
|
||||
return(pa_values[pdsch_config_dedicated->p_a]);
|
||||
}
|
||||
|
||||
double computeRhoA_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
LTE_eNB_DLSCH_t *dlsch_eNB,int dl_power_off){
|
||||
LTE_eNB_DLSCH_t *dlsch_eNB,int dl_power_off, uint8_t n_antenna_port){
|
||||
double rho_a_dB;
|
||||
double sqrt_rho_a_lin;
|
||||
|
||||
rho_a_dB = pa_values[ pdsch_config_dedicated->p_a];
|
||||
|
||||
if(!dl_power_off)
|
||||
if(!dl_power_off) //if dl_power_offset is 0, this is for MU-interference, TM5
|
||||
rho_a_dB-=10*log10(2);
|
||||
|
||||
if(n_antenna_port==4) // see TS 36.213 Section 5.2
|
||||
rho_a_dB=+10*log10(2);
|
||||
|
||||
sqrt_rho_a_lin= pow(10,(0.05*rho_a_dB));
|
||||
|
||||
@@ -75,7 +78,7 @@ double computeRhoB_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
double rho_a_dB, rho_b_dB;
|
||||
double sqrt_rho_b_lin;
|
||||
|
||||
rho_a_dB= computeRhoA_eNB(pdsch_config_dedicated,dlsch_eNB,dl_power_off);
|
||||
rho_a_dB= computeRhoA_eNB(pdsch_config_dedicated,dlsch_eNB,dl_power_off, n_antenna_port);
|
||||
|
||||
if(n_antenna_port>1)
|
||||
rho_b_dB= ratioPB[1][pdsch_config_common->p_b] + rho_a_dB;
|
||||
@@ -95,7 +98,9 @@ double computeRhoB_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
|
||||
double computeRhoA_UE(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
LTE_UE_DLSCH_t *dlsch_ue,
|
||||
unsigned char dl_power_off){
|
||||
unsigned char dl_power_off,
|
||||
uint8_t n_antenna_port
|
||||
){
|
||||
|
||||
double rho_a_dB;
|
||||
double sqrt_rho_a_lin;
|
||||
@@ -103,7 +108,11 @@ double computeRhoA_UE(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
rho_a_dB = pa_values[ pdsch_config_dedicated->p_a];
|
||||
|
||||
if(!dl_power_off)
|
||||
rho_a_dB-=10*log10(2);
|
||||
rho_a_dB-=10*log10(2);
|
||||
//if dl_power_offset is 0, this is for MU-interference, TM5. But in practice UE may assume 16 or 64QAM TM4 as multiuser
|
||||
|
||||
if(n_antenna_port==4) // see TS 36.213 Section 5.2
|
||||
rho_a_dB=+10*log10(2);
|
||||
|
||||
sqrt_rho_a_lin= pow(10,(0.05*rho_a_dB));
|
||||
|
||||
@@ -125,7 +134,7 @@ double computeRhoB_UE(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
double rho_a_dB, rho_b_dB;
|
||||
double sqrt_rho_b_lin;
|
||||
|
||||
rho_a_dB= computeRhoA_UE(pdsch_config_dedicated,dlsch_ue,dl_power_off);
|
||||
rho_a_dB= computeRhoA_UE(pdsch_config_dedicated,dlsch_ue,dl_power_off, n_antenna_port);
|
||||
|
||||
if(n_antenna_port>1)
|
||||
rho_b_dB= ratioPB[1][pdsch_config_common->p_b] + rho_a_dB;
|
||||
|
||||
@@ -145,7 +145,7 @@ void dlsch_encoding_emul(PHY_VARS_eNB *phy_vars_eNB,
|
||||
\brief Fills RB with data
|
||||
\param txdataF pointer to output data (frequency domain signal)
|
||||
\param jj index to output (from CW 1)
|
||||
\param jj index to output (from CW 2)
|
||||
\param jj2 index to output (from CW 2)
|
||||
\param re_offset index of the first RE of the RB
|
||||
\param symbol_offset index to the OFDM symbol
|
||||
\param dlsch0_harq Pointer to Transport block 0 HARQ structure
|
||||
@@ -833,6 +833,14 @@ void dlsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
uint16_t nb_rb,
|
||||
uint8_t dual_stream_UE);
|
||||
|
||||
void dlsch_detection_mrc_TM34(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
LTE_UE_PDSCH *lte_ue_pdsch_vars,
|
||||
int harq_pid,
|
||||
int round,
|
||||
unsigned char symbol,
|
||||
unsigned short nb_rb,
|
||||
unsigned char dual_stream_UE);
|
||||
|
||||
/** \fn dlsch_extract_rbs_single(int32_t **rxdataF,
|
||||
int32_t **dl_ch_estimates,
|
||||
int32_t **rxdataF_ext,
|
||||
@@ -956,14 +964,16 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
|
||||
unsigned char output_shift,
|
||||
unsigned char dl_power_off);
|
||||
|
||||
void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
void dlsch_channel_compensation_TM34(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
LTE_UE_PDSCH *lte_ue_pdsch_vars,
|
||||
PHY_MEASUREMENTS *phy_measurements,
|
||||
int eNB_id,
|
||||
unsigned char symbol,
|
||||
unsigned char mod_order0,
|
||||
unsigned char mod_order1,
|
||||
int harq_pid,
|
||||
int round,
|
||||
MIMO_mode_t mimo_mode,
|
||||
unsigned short nb_rb,
|
||||
unsigned char output_shift);
|
||||
|
||||
@@ -981,11 +991,12 @@ void dlsch_channel_level(int32_t **dl_ch_estimates_ext,
|
||||
uint8_t pilots_flag,
|
||||
uint16_t nb_rb);
|
||||
|
||||
void dlsch_channel_level_TM3(int **dl_ch_estimates_ext,
|
||||
LTE_DL_FRAME_PARMS *frame_parms,
|
||||
int *avg,
|
||||
uint8_t symbol,
|
||||
unsigned short nb_rb);
|
||||
void dlsch_channel_level_TM34(int **dl_ch_estimates_ext,
|
||||
LTE_DL_FRAME_PARMS *frame_parms,
|
||||
int *avg,
|
||||
uint8_t symbol,
|
||||
unsigned short nb_rb,
|
||||
MIMO_mode_t mimo_mode);
|
||||
|
||||
void dlsch_channel_level_TM56(int32_t **dl_ch_estimates_ext,
|
||||
LTE_DL_FRAME_PARMS *frame_parms,
|
||||
@@ -1038,6 +1049,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
|
||||
- RE extraction (pilot, PBCH, synch. signals)
|
||||
- antenna combining (MRC, Alamouti, cycling)
|
||||
- LLR computation
|
||||
This function supports TM1, 2, 3, 5, and 6.
|
||||
@param phy_vars_ue Pointer to PHY variables
|
||||
@param type Type of PDSCH (SI_PDSCH,RA_PDSCH,PDSCH,PMCH)
|
||||
@param eNB_id eNb index (Nid1) 0,1,2
|
||||
@@ -1045,7 +1057,7 @@ uint32_t dlsch_decoding_emul(PHY_VARS_UE *phy_vars_ue,
|
||||
@param subframe Subframe number
|
||||
@param symbol Symbol on which to act (within sub-frame)
|
||||
@param first_symbol_flag set to 1 on first DLSCH symbol
|
||||
@param dual_stream_UE Flag to indicate dual-stream interference cancellation
|
||||
@param rx_type. rx_type=RX_IC_single_stream will enable interference cancellation of a second stream when decoding the first stream. In case of TM1, 2, 5, and this can cancel interference from a neighbouring cell given by eNB_id_i. In case of TM5, eNB_id_i should be set to n_connected_eNB to perform multi-user interference cancellation. In case of TM3, eNB_id_i should be set to eNB_id to perform co-channel interference cancellation; this option should be used together with an interference cancellation step [...]. In case of TM3, if rx_type=RX_IC_dual_stream, both streams will be decoded by applying the IC single stream receiver twice.
|
||||
@param i_mod Modulation order of the interfering stream
|
||||
*/
|
||||
int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
@@ -1055,7 +1067,7 @@ int32_t rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
uint8_t subframe,
|
||||
uint8_t symbol,
|
||||
uint8_t first_symbol_flag,
|
||||
uint8_t dual_stream_UE,
|
||||
RX_type_t rx_type,
|
||||
uint8_t i_mod,
|
||||
uint8_t harq_pid);
|
||||
|
||||
@@ -1407,7 +1419,7 @@ void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t
|
||||
void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe);
|
||||
void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe);
|
||||
|
||||
void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int round);
|
||||
void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int round,uint8_t harq_pid );
|
||||
#endif
|
||||
|
||||
int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci);
|
||||
@@ -1740,7 +1752,8 @@ double get_pa_dB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated);
|
||||
|
||||
double computeRhoA_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
LTE_eNB_DLSCH_t *dlsch_eNB,
|
||||
int dl_power_off);
|
||||
int dl_power_off,
|
||||
uint8_t n_antenna_port);
|
||||
|
||||
double computeRhoB_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
PDSCH_CONFIG_COMMON *pdsch_config_common,
|
||||
@@ -1749,7 +1762,8 @@ double computeRhoB_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
|
||||
double computeRhoA_UE(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
LTE_UE_DLSCH_t *dlsch_ue,
|
||||
uint8_t dl_power_off);
|
||||
uint8_t dl_power_off,
|
||||
uint8_t n_antenna_port);
|
||||
|
||||
double computeRhoB_UE(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
|
||||
PDSCH_CONFIG_COMMON *pdsch_config_common,
|
||||
|
||||
@@ -319,10 +319,10 @@ FD_lte_phy_scope_ue *create_lte_phy_scope_ue( void ) {
|
||||
FD_lte_phy_scope_ue *fdui = fl_malloc( sizeof *fdui );
|
||||
|
||||
// Define form
|
||||
fdui->lte_phy_scope_ue = fl_bgn_form( FL_NO_BOX, 800, 900 );
|
||||
fdui->lte_phy_scope_ue = fl_bgn_form( FL_NO_BOX, 800, 1000 );
|
||||
|
||||
// This the whole UI box
|
||||
obj = fl_add_box( FL_BORDER_BOX, 0, 0, 800, 900, "" );
|
||||
obj = fl_add_box( FL_BORDER_BOX, 0, 0, 800, 1000, "" );
|
||||
fl_set_object_color( obj, FL_BLACK, FL_BLACK );
|
||||
|
||||
// Received signal
|
||||
@@ -345,6 +345,7 @@ FD_lte_phy_scope_ue *create_lte_phy_scope_ue( void ) {
|
||||
fl_set_object_lcolor( fdui->chest_f, FL_WHITE ); // Label color
|
||||
fl_set_xyplot_ybounds( fdui->chest_f,30,70);
|
||||
|
||||
/*
|
||||
// LLR of PBCH
|
||||
fdui->pbch_llr = fl_add_xyplot( FL_POINTS_XYPLOT, 20, 260, 500, 100, "PBCH Log-Likelihood Ratios (LLR, mag)" );
|
||||
fl_set_object_boxtype( fdui->pbch_llr, FL_EMBOSSED_BOX );
|
||||
@@ -377,9 +378,11 @@ FD_lte_phy_scope_ue *create_lte_phy_scope_ue( void ) {
|
||||
fl_set_object_lcolor( fdui->pdcch_comp, FL_WHITE ); // Label color
|
||||
fl_set_xyplot_symbolsize( fdui->pdcch_comp,2);
|
||||
fl_set_xyplot_xgrid( fdui->pdcch_llr,FL_GRID_MAJOR);
|
||||
*/
|
||||
|
||||
int offset=240;
|
||||
// LLR of PDSCH
|
||||
fdui->pdsch_llr = fl_add_xyplot( FL_POINTS_XYPLOT, 20, 500, 500, 200, "PDSCH Log-Likelihood Ratios (LLR, mag)" );
|
||||
fdui->pdsch_llr = fl_add_xyplot( FL_POINTS_XYPLOT, 20, 500-offset, 500, 200, "PDSCH Log-Likelihood Ratios (LLR, mag)" );
|
||||
fl_set_object_boxtype( fdui->pdsch_llr, FL_EMBOSSED_BOX );
|
||||
fl_set_object_color( fdui->pdsch_llr, FL_BLACK, FL_YELLOW );
|
||||
fl_set_object_lcolor( fdui->pdsch_llr, FL_WHITE ); // Label color
|
||||
@@ -387,12 +390,28 @@ FD_lte_phy_scope_ue *create_lte_phy_scope_ue( void ) {
|
||||
fl_set_xyplot_xgrid( fdui->pdsch_llr,FL_GRID_MAJOR);
|
||||
|
||||
// I/Q PDSCH comp
|
||||
fdui->pdsch_comp = fl_add_xyplot( FL_POINTS_XYPLOT, 540, 500, 240, 200, "PDSCH I/Q of MF Output" );
|
||||
fdui->pdsch_comp = fl_add_xyplot( FL_POINTS_XYPLOT, 540, 500-offset, 240, 200, "PDSCH I/Q of MF Output" );
|
||||
fl_set_object_boxtype( fdui->pdsch_comp, FL_EMBOSSED_BOX );
|
||||
fl_set_object_color( fdui->pdsch_comp, FL_BLACK, FL_YELLOW );
|
||||
fl_set_object_lcolor( fdui->pdsch_comp, FL_WHITE ); // Label color
|
||||
fl_set_xyplot_symbolsize( fdui->pdsch_comp,2);
|
||||
|
||||
|
||||
// LLR of PDSCH
|
||||
fdui->pdsch_llr1 = fl_add_xyplot( FL_POINTS_XYPLOT, 20, 720-offset, 500, 200, "PDSCH Log-Likelihood Ratios (LLR, mag)" );
|
||||
fl_set_object_boxtype( fdui->pdsch_llr1, FL_EMBOSSED_BOX );
|
||||
fl_set_object_color( fdui->pdsch_llr1, FL_BLACK, FL_YELLOW );
|
||||
fl_set_object_lcolor( fdui->pdsch_llr1, FL_WHITE ); // Label color
|
||||
fl_set_xyplot_symbolsize( fdui->pdsch_llr1,2);
|
||||
fl_set_xyplot_xgrid( fdui->pdsch_llr1,FL_GRID_MAJOR);
|
||||
|
||||
// I/Q PDSCH comp
|
||||
fdui->pdsch_comp1 = fl_add_xyplot( FL_POINTS_XYPLOT, 540, 720-offset, 240, 200, "PDSCH I/Q of MF Output" );
|
||||
fl_set_object_boxtype( fdui->pdsch_comp1, FL_EMBOSSED_BOX );
|
||||
fl_set_object_color( fdui->pdsch_comp1, FL_BLACK, FL_YELLOW );
|
||||
fl_set_object_lcolor( fdui->pdsch_comp1, FL_WHITE ); // Label color
|
||||
fl_set_xyplot_symbolsize( fdui->pdsch_comp1,2);
|
||||
|
||||
/*
|
||||
// Throughput on PDSCH
|
||||
fdui->pdsch_tput = fl_add_xyplot( FL_NORMAL_XYPLOT, 20, 720, 500, 100, "PDSCH Throughput [frame]/[kbit/s]" );
|
||||
fl_set_object_boxtype( fdui->pdsch_tput, FL_EMBOSSED_BOX );
|
||||
@@ -408,6 +427,7 @@ FD_lte_phy_scope_ue *create_lte_phy_scope_ue( void ) {
|
||||
fl_set_object_color(fdui->button_0, FL_RED, FL_RED);
|
||||
fl_set_object_callback(fdui->button_0, ia_receiver_on_off, 0 );
|
||||
fl_hide_object(fdui->button_0);
|
||||
*/
|
||||
|
||||
fl_end_form( );
|
||||
fdui->lte_phy_scope_ue->fdui = fdui;
|
||||
@@ -428,8 +448,9 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
||||
int16_t **rxsig_t;
|
||||
int16_t **chest_t;
|
||||
int16_t **chest_f;
|
||||
int16_t *pdsch_llr;
|
||||
int16_t *pdsch_comp;
|
||||
int16_t *pdsch_llr,*pdsch_llr1;
|
||||
int16_t *pdsch_comp,*pdsch_comp1;
|
||||
int16_t *pdsch_mag0,*pdsch_mag1,*pdsch_magb0,*pdsch_magb1;
|
||||
int8_t *pdcch_llr;
|
||||
int16_t *pdcch_comp;
|
||||
int8_t *pbch_llr;
|
||||
@@ -444,19 +465,20 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
||||
float freq[nsymb_ce*nb_antennas_rx*nb_antennas_tx];
|
||||
int frame = phy_vars_ue->frame_rx;
|
||||
uint32_t total_dlsch_bitrate = phy_vars_ue->bitrate[eNB_id];
|
||||
int coded_bits_per_codeword = 0;
|
||||
int mcs = 0;
|
||||
int coded_bits_per_codeword=0,coded_bits_per_codeword1=1;
|
||||
int mod,mod1;
|
||||
unsigned char harq_pid = 0;
|
||||
if (phy_vars_ue->dlsch_ue[eNB_id][0]!=NULL) {
|
||||
harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid;
|
||||
if (harq_pid>=8)
|
||||
return;
|
||||
mcs = phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs;
|
||||
// Button 0
|
||||
/*
|
||||
if(!phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off) {
|
||||
// we are in TM5
|
||||
fl_show_object(form->button_0);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
if (phy_vars_ue->lte_ue_pdcch_vars[eNB_id]!=NULL) {
|
||||
@@ -465,16 +487,32 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
||||
|
||||
// coded_bits_per_codeword = frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
|
||||
if (phy_vars_ue->dlsch_ue[eNB_id][0]!=NULL) {
|
||||
coded_bits_per_codeword = get_G(frame_parms,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc,
|
||||
get_Qm(mcs),
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
|
||||
num_pdcch_symbols,
|
||||
frame,
|
||||
subframe);
|
||||
mod = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs);
|
||||
coded_bits_per_codeword = get_G(frame_parms,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->rb_alloc,
|
||||
get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs),
|
||||
phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl,
|
||||
num_pdcch_symbols,
|
||||
frame,
|
||||
subframe);
|
||||
} else {
|
||||
coded_bits_per_codeword = 0; //frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
|
||||
mod=0;
|
||||
}
|
||||
if (phy_vars_ue->dlsch_ue[eNB_id][1]!=NULL) {
|
||||
mod1 = get_Qm(phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->mcs);
|
||||
coded_bits_per_codeword1 = get_G(frame_parms,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->nb_rb,
|
||||
phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->rb_alloc,
|
||||
get_Qm(phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->mcs),
|
||||
phy_vars_ue->dlsch_ue[eNB_id][1]->harq_processes[harq_pid]->Nl,
|
||||
num_pdcch_symbols,
|
||||
frame,
|
||||
subframe);
|
||||
} else {
|
||||
coded_bits_per_codeword1 = 0; //frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti);
|
||||
mod1=0;
|
||||
}
|
||||
|
||||
I = (float*) calloc(nsymb_ce*2,sizeof(float));
|
||||
@@ -497,9 +535,19 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
||||
pdcch_llr = (int8_t*) phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->llr;
|
||||
pdcch_comp = (int16_t*) phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->rxdataF_comp[0];
|
||||
pdsch_llr = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->llr[0]; // stream 0
|
||||
// pdsch_llr = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars_SI[eNB_id]->llr[0]; // stream 0
|
||||
pdsch_llr1 = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->llr[1]; // stream 1
|
||||
pdsch_comp = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0[0];
|
||||
//pdsch_comp = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_ext[0];
|
||||
//pdsch_comp1 = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_ext[1];
|
||||
pdsch_comp1 = (int16_t*) (phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[0][0])[0];
|
||||
//pdsch_comp1 = (int16_t*) (phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_rho_ext[0][0])[0];
|
||||
pdsch_mag0 = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0[0];
|
||||
pdsch_mag1 = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_mag1[0];
|
||||
pdsch_magb0 = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0[0];
|
||||
pdsch_magb1 = (int16_t*) phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_magb1[0];
|
||||
|
||||
fl_freeze_form(form);
|
||||
|
||||
// Received signal in time domain of receive antenna 0
|
||||
if (rxsig_t != NULL) {
|
||||
if (rxsig_t[0] != NULL) {
|
||||
@@ -590,6 +638,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
// PBCH LLRs
|
||||
if (pbch_llr != NULL) {
|
||||
for (i=0; i<1920;i++) {
|
||||
@@ -630,16 +679,17 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
||||
|
||||
fl_set_xyplot_data(form->pdcch_comp,I,Q,12*frame_parms->N_RB_DL*num_pdcch_symbols,"","","");
|
||||
}
|
||||
*/
|
||||
|
||||
// PDSCH LLRs
|
||||
if (pdsch_llr != NULL) {
|
||||
for (i=0; i<coded_bits_per_codeword/4; i++) {
|
||||
llr[i] = (float) pdsch_llr[4*i];
|
||||
for (i=0; i<coded_bits_per_codeword/mod; i++) {
|
||||
llr[i] = (float) pdsch_llr[mod*i];
|
||||
bit[i] = (float) i;
|
||||
}
|
||||
|
||||
fl_set_xyplot_xbounds(form->pdsch_llr,0,coded_bits_per_codeword/4);
|
||||
fl_set_xyplot_data(form->pdsch_llr,bit,llr,coded_bits_per_codeword/4,"","","");
|
||||
fl_set_xyplot_xbounds(form->pdsch_llr,0,coded_bits_per_codeword/mod);
|
||||
fl_set_xyplot_data(form->pdsch_llr,bit,llr,coded_bits_per_codeword/mod,"","","");
|
||||
}
|
||||
|
||||
// PDSCH I/Q of MF Output
|
||||
@@ -654,7 +704,116 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
||||
}
|
||||
fl_set_xyplot_data(form->pdsch_comp,I,Q,ind,"","","");
|
||||
}
|
||||
|
||||
if (pdsch_mag0 != NULL) {
|
||||
ind=0;
|
||||
for (k=0; k<frame_parms->symbols_per_tti; k++) {
|
||||
for (i=0; i<12*frame_parms->N_RB_DL/2; i++) {
|
||||
I[ind] = pdsch_mag0[(2*frame_parms->N_RB_DL*12*k)+4*i]*cos(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
Q[ind] = pdsch_mag0[(2*frame_parms->N_RB_DL*12*k)+4*i+1]*sin(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
ind++;
|
||||
}
|
||||
}
|
||||
fl_add_xyplot_overlay(form->pdsch_comp,1,I,Q,ind,FL_GREEN);
|
||||
}
|
||||
if (pdsch_magb0 != NULL) {
|
||||
ind=0;
|
||||
for (k=0; k<frame_parms->symbols_per_tti; k++) {
|
||||
for (i=0; i<12*frame_parms->N_RB_DL/2; i++) {
|
||||
I[ind] = pdsch_magb0[(2*frame_parms->N_RB_DL*12*k)+4*i]*cos(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
Q[ind] = pdsch_magb0[(2*frame_parms->N_RB_DL*12*k)+4*i+1]*sin(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
ind++;
|
||||
}
|
||||
}
|
||||
fl_add_xyplot_overlay(form->pdsch_comp,2,I,Q,ind,FL_RED);
|
||||
}
|
||||
if ((pdsch_mag0 != NULL) && (pdsch_magb0 != NULL)) {
|
||||
ind=0;
|
||||
for (k=0; k<frame_parms->symbols_per_tti; k++) {
|
||||
for (i=0; i<12*frame_parms->N_RB_DL/2; i++) {
|
||||
I[ind] =
|
||||
(pdsch_mag0[(2*frame_parms->N_RB_DL*12*k)+4*i]+
|
||||
pdsch_magb0[(2*frame_parms->N_RB_DL*12*k)+4*i])*
|
||||
cos(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
Q[ind] =
|
||||
(pdsch_mag0[(2*frame_parms->N_RB_DL*12*k)+4*i+1]+
|
||||
pdsch_magb0[(2*frame_parms->N_RB_DL*12*k)+4*i+1])*
|
||||
sin(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
ind++;
|
||||
}
|
||||
}
|
||||
fl_add_xyplot_overlay(form->pdsch_comp,3,I,Q,ind,FL_BLUE);
|
||||
}
|
||||
|
||||
|
||||
// PDSCH LLRs
|
||||
if (pdsch_llr1 != NULL) {
|
||||
for (i=0; i<coded_bits_per_codeword1/mod1; i++) {
|
||||
llr[i] = (float) pdsch_llr1[mod1*i];
|
||||
bit[i] = (float) i;
|
||||
}
|
||||
|
||||
fl_set_xyplot_xbounds(form->pdsch_llr1,0,coded_bits_per_codeword1/mod1);
|
||||
fl_set_xyplot_data(form->pdsch_llr1,bit,llr,coded_bits_per_codeword1/mod1,"","","");
|
||||
}
|
||||
|
||||
// PDSCH I/Q of MF Output
|
||||
if (pdsch_comp1!=NULL) {
|
||||
ind=0;
|
||||
for (k=0; k<frame_parms->symbols_per_tti; k++) {
|
||||
for (i=0; i<12*frame_parms->N_RB_DL/2; i++) {
|
||||
I[ind] = pdsch_comp1[(2*frame_parms->N_RB_DL*12*k)+4*i];
|
||||
Q[ind] = pdsch_comp1[(2*frame_parms->N_RB_DL*12*k)+4*i+1];
|
||||
ind++;
|
||||
}
|
||||
}
|
||||
fl_set_xyplot_data(form->pdsch_comp1,I,Q,ind,"","","");
|
||||
}
|
||||
|
||||
if (pdsch_mag1 != NULL) {
|
||||
ind=0;
|
||||
for (k=0; k<frame_parms->symbols_per_tti; k++) {
|
||||
for (i=0; i<12*frame_parms->N_RB_DL/2; i++) {
|
||||
I[ind] = pdsch_mag1[(2*frame_parms->N_RB_DL*12*k)+4*i]*cos(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
Q[ind] = pdsch_mag1[(2*frame_parms->N_RB_DL*12*k)+4*i+1]*sin(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
ind++;
|
||||
}
|
||||
}
|
||||
fl_add_xyplot_overlay(form->pdsch_comp1,1,I,Q,ind,FL_GREEN);
|
||||
}
|
||||
|
||||
if (pdsch_magb1 != NULL) {
|
||||
ind=0;
|
||||
for (k=0; k<frame_parms->symbols_per_tti; k++) {
|
||||
for (i=0; i<12*frame_parms->N_RB_DL/2; i++) {
|
||||
I[ind] = pdsch_magb1[(2*frame_parms->N_RB_DL*12*k)+4*i]*cos(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
Q[ind] = pdsch_magb1[(2*frame_parms->N_RB_DL*12*k)+4*i+1]*sin(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
ind++;
|
||||
}
|
||||
}
|
||||
fl_add_xyplot_overlay(form->pdsch_comp1,2,I,Q,ind,FL_RED);
|
||||
}
|
||||
|
||||
if ((pdsch_mag1 != NULL) && (pdsch_magb1 != NULL)) {
|
||||
ind=0;
|
||||
for (k=0; k<frame_parms->symbols_per_tti; k++) {
|
||||
for (i=0; i<12*frame_parms->N_RB_DL/2; i++) {
|
||||
I[ind] =
|
||||
(pdsch_mag1[(2*frame_parms->N_RB_DL*12*k)+4*i]+
|
||||
pdsch_magb1[(2*frame_parms->N_RB_DL*12*k)+4*i])*
|
||||
cos(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
Q[ind] =
|
||||
(pdsch_mag1[(2*frame_parms->N_RB_DL*12*k)+4*i+1]+
|
||||
pdsch_magb1[(2*frame_parms->N_RB_DL*12*k)+4*i+1])*
|
||||
sin(i*2*M_PI/(12*frame_parms->N_RB_DL/2));
|
||||
ind++;
|
||||
}
|
||||
}
|
||||
fl_add_xyplot_overlay(form->pdsch_comp1,3,I,Q,ind,FL_BLUE);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// PDSCH Throughput
|
||||
memcpy((void*)tput_time_ue[UE_id],(void*)&tput_time_ue[UE_id][1],(TPUT_WINDOW_LENGTH-1)*sizeof(float));
|
||||
memcpy((void*)tput_ue[UE_id],(void*)&tput_ue[UE_id][1],(TPUT_WINDOW_LENGTH-1)*sizeof(float));
|
||||
@@ -669,6 +828,9 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form,
|
||||
fl_set_xyplot_data(form->pdsch_tput,tput_time_ue[UE_id],tput_ue[UE_id],TPUT_WINDOW_LENGTH,"","","");
|
||||
|
||||
fl_set_xyplot_ybounds(form->pdsch_tput,0,tput_ue_max[UE_id]);
|
||||
*/
|
||||
|
||||
fl_unfreeze_form(form);
|
||||
|
||||
fl_check_forms();
|
||||
|
||||
|
||||
@@ -62,6 +62,8 @@ typedef struct {
|
||||
FL_OBJECT * pdcch_llr;
|
||||
FL_OBJECT * pdsch_comp;
|
||||
FL_OBJECT * pdsch_llr;
|
||||
FL_OBJECT * pdsch_comp1;
|
||||
FL_OBJECT * pdsch_llr1;
|
||||
FL_OBJECT * pdsch_tput;
|
||||
FL_OBJECT * button_0;
|
||||
} FD_lte_phy_scope_ue;
|
||||
|
||||
@@ -795,19 +795,22 @@ typedef struct {
|
||||
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||
/// - second index: ? [0..168*N_RB_DL[
|
||||
int32_t **rxdataF_comp0;
|
||||
/// \brief Received frequency-domain signal after extraction and channel compensation.
|
||||
/// - first index: ? [0..7] (hard coded) accessed via \c round
|
||||
/// - second index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||
/// - third index: ? [0..168*N_RB_DL[
|
||||
int32_t **rxdataF_comp1[8];
|
||||
/// \brief Received frequency-domain signal after extraction and channel compensation for the second stream. For the SIC receiver we need to store the history of this for each harq process and round
|
||||
/// - first index: ? [0..7] (hard coded) accessed via \c harq_pid
|
||||
/// - second index: ? [0..7] (hard coded) accessed via \c round
|
||||
/// - third index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||
/// - fourth index: ? [0..168*N_RB_DL[
|
||||
int32_t **rxdataF_comp1[8][8];
|
||||
/// \brief Downlink channel estimates extracted in PRBS.
|
||||
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||
/// - second index: ? [0..168*N_RB_DL[
|
||||
int32_t **dl_ch_estimates_ext;
|
||||
/// \brief Downlink cross-correlation of MIMO channel estimates (unquantized PMI) extracted in PRBS.
|
||||
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||
/// - second index: ? [0..168*N_RB_DL[
|
||||
int32_t **dl_ch_rho_ext;
|
||||
/// \brief Downlink cross-correlation of MIMO channel estimates (unquantized PMI) extracted in PRBS. For the SIC receiver we need to store the history of this for each harq process and round
|
||||
/// - first index: ? [0..7] (hard coded) accessed via \c harq_pid
|
||||
/// - second index: ? [0..7] (hard coded) accessed via \c round
|
||||
/// - third index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||
/// - fourth index: ? [0..168*N_RB_DL[
|
||||
int32_t **dl_ch_rho_ext[8][8];
|
||||
/// \brief Downlink cross-correlation of MIMO channel estimates (unquantized PMI) extracted in PRBS.
|
||||
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
|
||||
/// - second index: ? [0..168*N_RB_DL[
|
||||
|
||||
+843
-396
File diff suppressed because it is too large
Load Diff
@@ -174,7 +174,13 @@ typedef enum {
|
||||
Rice1,
|
||||
Rice1_corr,
|
||||
Rice1_anticorr,
|
||||
AWGN
|
||||
AWGN,
|
||||
Rayleigh1_orthogonal,
|
||||
Rayleigh1_orth_eff_ch_TM4_prec_real,
|
||||
Rayleigh1_orth_eff_ch_TM4_prec_imag,
|
||||
Rayleigh8_orth_eff_ch_TM4_prec_real,
|
||||
Rayleigh8_orth_eff_ch_TM4_prec_imag,
|
||||
TS_SHIFT,
|
||||
} SCM_t;
|
||||
|
||||
/**
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
#include "UTIL/LOG/log.h"
|
||||
//#define DEBUG_CH
|
||||
|
||||
extern void print_shorts(char *s,__m128i *x);
|
||||
|
||||
void fill_channel_desc(channel_desc_t *chan_desc,
|
||||
uint8_t nb_tx,
|
||||
uint8_t nb_rx,
|
||||
@@ -119,7 +121,12 @@ void fill_channel_desc(channel_desc_t *chan_desc,
|
||||
}
|
||||
}
|
||||
else {
|
||||
chan_desc->R_sqrt = R_sqrt;
|
||||
chan_desc->R_sqrt = (struct complex**) calloc(nb_taps,sizeof(struct complex*));
|
||||
for (i = 0; i<nb_taps; i++) {
|
||||
chan_desc->R_sqrt[i] = (struct complex*) calloc(nb_tx*nb_rx*nb_tx*nb_rx,sizeof(struct complex));
|
||||
//chan_desc->R_sqrt = (struct complex*)&R_sqrt[i][0];
|
||||
chan_desc->R_sqrt[i] = R_sqrt[0];
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i<nb_taps; i++) {
|
||||
@@ -159,6 +166,9 @@ double etu_amps_dB[] = {-1.0,-1.0,-1.0,0.0,0.0,0.0,-3.0,-5.0,-7.0};
|
||||
double default_amps_lin[] = {0.3868472 , 0.3094778 , 0.1547389 , 0.0773694 , 0.0386847 , 0.0193424 , 0.0096712 , 0.0038685};
|
||||
double default_amp_lin[] = {1};
|
||||
|
||||
double ts_shift_delays[] = {0, 1/7.68};
|
||||
double ts_shift_amps[] = {0, 1};
|
||||
|
||||
//correlation matrix for a 2x2 channel with full Tx correlation
|
||||
struct complex R_sqrt_22_corr_tap[16] = {{0.70711,0}, {0.0, 0.0}, {0.70711,0}, {0.0, 0.0},
|
||||
{0.0, 0.0}, {0.70711,0}, {0.0, 0.0}, {0.70711,0},
|
||||
@@ -183,6 +193,36 @@ struct complex *R_sqrt_21_anticorr[1] = {R_sqrt_21_anticorr_tap};
|
||||
|
||||
struct complex **R_sqrt_ptr2;
|
||||
|
||||
// full correlation matrix in vectorized form for 2x2 channel, where h1 is perfectly orthogonal to h2
|
||||
|
||||
struct complex R_sqrt_22_orthogonal_tap[16] = {{0.70711,0.0}, {0.0, 0.0}, {0.0,0.0}, {0.0, 0.0},
|
||||
{0.0, 0.0}, {0.0,0.0}, {0.0, 0.0}, {0.0,0.0},
|
||||
{0.0,0.0}, {0.0, 0.0}, {0.0,0.0}, {0.0, 0.0},
|
||||
{0.0, 0.0}, {0.0,0.0}, {0.0, 0.0}, {0.70711,0.0}};
|
||||
struct complex *R_sqrt_22_orthogonal[1] = {R_sqrt_22_orthogonal_tap};
|
||||
|
||||
// full correlation matrix for TM4 to make orthogonal effective channel
|
||||
|
||||
|
||||
|
||||
|
||||
struct complex R_sqrt_22_orth_eff_ch_TM4_prec_real_tap[16] = {{0.70711,0.0}, {0.0, 0.0}, {0.70711,0.0}, {0.0, 0.0},
|
||||
{0.0, 0.0}, {0.70711,0.0}, {0.0, 0.0}, {-0.70711,0.0},
|
||||
{0.70711,0.0}, {0.0, 0.0}, {0.70711,0.0}, {0.0, 0.0},
|
||||
{0.0, 0.0}, {-0.70711,0.0}, {0.0, 0.0}, {0.70711,0.0}};
|
||||
struct complex *R_sqrt_22_orth_eff_ch_TM4_prec_real[1] = {R_sqrt_22_orth_eff_ch_TM4_prec_real_tap};
|
||||
|
||||
|
||||
|
||||
struct complex R_sqrt_22_orth_eff_ch_TM4_prec_imag_tap[16] = {{0.70711,0.0}, {0.0,0.0}, {0.0, -0.70711}, {0.0,0.0},
|
||||
{0.0, 0.0}, {0.70711,0.0}, {0.0, 0.0}, {0.0,0.70711},
|
||||
{0.0,-0.70711}, {0.0, 0.0}, {-0.70711,0.0}, {0.0, 0.0},
|
||||
{0.0, 0.0}, {0.0,0.70711}, {0.0, 0.70711}, {-0.70711,0.0}};
|
||||
struct complex *R_sqrt_22_orth_eff_ch_TM4_prec_imag[1] = {R_sqrt_22_orth_eff_ch_TM4_prec_imag_tap};
|
||||
|
||||
|
||||
|
||||
//Rayleigh1_orth_eff_ch_TM4
|
||||
|
||||
channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
||||
uint8_t nb_rx,
|
||||
@@ -629,7 +669,7 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
||||
aoa = .03;
|
||||
maxDoppler = 0;
|
||||
|
||||
if ((nb_tx==2) && (nb_rx==1)) {
|
||||
if ((nb_tx==2) && (nb_rx==1)) { //check this
|
||||
R_sqrt_ptr2 = R_sqrt_21_anticorr;
|
||||
}
|
||||
else if ((nb_tx==2) && (nb_rx==2)) {
|
||||
@@ -710,6 +750,34 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
||||
|
||||
break;
|
||||
|
||||
case TS_SHIFT:
|
||||
nb_taps = 2;
|
||||
Td = ts_shift_delays[1];
|
||||
channel_length = 10;
|
||||
ricean_factor = 0.0;
|
||||
aoa = 0.0;
|
||||
maxDoppler = 0;
|
||||
|
||||
fill_channel_desc(chan_desc,nb_tx,
|
||||
nb_rx,
|
||||
nb_taps,
|
||||
channel_length,
|
||||
ts_shift_amps,
|
||||
ts_shift_delays,
|
||||
NULL,
|
||||
Td,
|
||||
BW,
|
||||
ricean_factor,
|
||||
aoa,
|
||||
forgetting_factor,
|
||||
maxDoppler,
|
||||
channel_offset,
|
||||
path_loss_dB,
|
||||
0);
|
||||
printf("TS_SHIFT: ricean_factor %f\n",chan_desc->ricean_factor);
|
||||
|
||||
break;
|
||||
|
||||
case Rice1_corr:
|
||||
nb_taps = 1;
|
||||
Td = 0;
|
||||
@@ -779,7 +847,176 @@ channel_desc_t *new_channel_desc_scm(uint8_t nb_tx,
|
||||
path_loss_dB,
|
||||
1);
|
||||
break;
|
||||
|
||||
case Rayleigh1_orthogonal:
|
||||
nb_taps = 1;
|
||||
Td = 0;
|
||||
channel_length = 1;
|
||||
ricean_factor = 1;
|
||||
aoa = 0.03;
|
||||
maxDoppler = 0;
|
||||
|
||||
|
||||
if ((nb_tx==2) && (nb_rx==2)) {
|
||||
R_sqrt_ptr2 = R_sqrt_22_orthogonal;
|
||||
}
|
||||
else
|
||||
R_sqrt_ptr2 = NULL;
|
||||
|
||||
fill_channel_desc(chan_desc,nb_tx,
|
||||
nb_rx,
|
||||
nb_taps,
|
||||
channel_length,
|
||||
default_amp_lin,
|
||||
NULL,
|
||||
R_sqrt_ptr2,
|
||||
Td,
|
||||
BW,
|
||||
ricean_factor,
|
||||
aoa,
|
||||
forgetting_factor,
|
||||
maxDoppler,
|
||||
channel_offset,
|
||||
path_loss_dB,
|
||||
0);
|
||||
break;
|
||||
|
||||
case Rayleigh1_orth_eff_ch_TM4_prec_real:
|
||||
nb_taps = 1;
|
||||
Td = 0;
|
||||
channel_length = 1;
|
||||
ricean_factor = 1;
|
||||
aoa = 0.03;
|
||||
maxDoppler = 0;
|
||||
|
||||
|
||||
if ((nb_tx==2) && (nb_rx==2)) {
|
||||
R_sqrt_ptr2 = R_sqrt_22_orth_eff_ch_TM4_prec_real;
|
||||
}
|
||||
else
|
||||
R_sqrt_ptr2 = NULL;
|
||||
|
||||
fill_channel_desc(chan_desc,nb_tx,
|
||||
nb_rx,
|
||||
nb_taps,
|
||||
channel_length,
|
||||
default_amp_lin,
|
||||
NULL,
|
||||
R_sqrt_ptr2,
|
||||
Td,
|
||||
BW,
|
||||
ricean_factor,
|
||||
aoa,
|
||||
forgetting_factor,
|
||||
maxDoppler,
|
||||
channel_offset,
|
||||
path_loss_dB,
|
||||
0);
|
||||
break;
|
||||
|
||||
case Rayleigh1_orth_eff_ch_TM4_prec_imag:
|
||||
nb_taps = 1;
|
||||
Td = 0;
|
||||
channel_length = 1;
|
||||
ricean_factor = 1;
|
||||
aoa = 0.03;
|
||||
maxDoppler = 0;
|
||||
|
||||
|
||||
if ((nb_tx==2) && (nb_rx==2)) {
|
||||
R_sqrt_ptr2 = R_sqrt_22_orth_eff_ch_TM4_prec_imag;
|
||||
}
|
||||
else
|
||||
R_sqrt_ptr2 = NULL;
|
||||
|
||||
fill_channel_desc(chan_desc,nb_tx,
|
||||
nb_rx,
|
||||
nb_taps,
|
||||
channel_length,
|
||||
default_amp_lin,
|
||||
NULL,
|
||||
R_sqrt_ptr2,
|
||||
Td,
|
||||
BW,
|
||||
ricean_factor,
|
||||
aoa,
|
||||
forgetting_factor,
|
||||
maxDoppler,
|
||||
channel_offset,
|
||||
path_loss_dB,
|
||||
0);
|
||||
break;
|
||||
|
||||
case Rayleigh8_orth_eff_ch_TM4_prec_real:
|
||||
|
||||
if ((nb_tx==2) && (nb_rx==2)) {
|
||||
R_sqrt_ptr2 = R_sqrt_22_orth_eff_ch_TM4_prec_real;
|
||||
//R_sqrt_ptr2 = NULL;
|
||||
}
|
||||
else
|
||||
R_sqrt_ptr2 = NULL;
|
||||
|
||||
|
||||
nb_taps = 8;
|
||||
Td = 0.8;
|
||||
channel_length = (int)11+2*BW*Td;
|
||||
ricean_factor = 1;
|
||||
aoa = .03;
|
||||
maxDoppler = 0;
|
||||
|
||||
fill_channel_desc(chan_desc,
|
||||
nb_tx,
|
||||
nb_rx,
|
||||
nb_taps,
|
||||
channel_length,
|
||||
default_amps_lin,
|
||||
NULL,
|
||||
R_sqrt_ptr2,
|
||||
Td,
|
||||
BW,
|
||||
ricean_factor,
|
||||
aoa,
|
||||
forgetting_factor,
|
||||
maxDoppler,
|
||||
channel_offset,
|
||||
path_loss_dB,
|
||||
0);
|
||||
|
||||
break;
|
||||
|
||||
case Rayleigh8_orth_eff_ch_TM4_prec_imag:
|
||||
nb_taps = 8;
|
||||
Td = 0.8;
|
||||
channel_length = (int)11+2*BW*Td;
|
||||
ricean_factor = 1;
|
||||
aoa = .03;
|
||||
maxDoppler = 0;
|
||||
|
||||
if ((nb_tx==2) && (nb_rx==2)) {
|
||||
R_sqrt_ptr2 = R_sqrt_22_orth_eff_ch_TM4_prec_imag;
|
||||
}
|
||||
else
|
||||
R_sqrt_ptr2 = NULL;
|
||||
|
||||
fill_channel_desc(chan_desc,
|
||||
nb_tx,
|
||||
nb_rx,
|
||||
nb_taps,
|
||||
channel_length,
|
||||
default_amps_lin,
|
||||
NULL,
|
||||
R_sqrt_ptr2,
|
||||
Td,
|
||||
BW,
|
||||
ricean_factor,
|
||||
aoa,
|
||||
forgetting_factor,
|
||||
maxDoppler,
|
||||
channel_offset,
|
||||
path_loss_dB,
|
||||
0);
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_W(OCM,"channel model not yet supported\n");
|
||||
free(chan_desc);
|
||||
@@ -906,6 +1143,11 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag) {
|
||||
if (desc->channel_length == 1) {
|
||||
desc->ch[aarx+(aatx*desc->nb_rx)][0].x = desc->a[0][aarx+(aatx*desc->nb_rx)].x;
|
||||
desc->ch[aarx+(aatx*desc->nb_rx)][0].y = desc->a[0][aarx+(aatx*desc->nb_rx)].y;
|
||||
#ifdef DEBUG_CH
|
||||
k=0;
|
||||
printf("(%d,%d,%d)->(%f,%f)\n",k,aarx,aatx,desc->ch[aarx+(aatx*desc->nb_rx)][k].x,desc->ch[aarx+(aatx*desc->nb_rx)][k].y);
|
||||
#endif
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
|
||||
+32
-32
@@ -134,7 +134,7 @@ int logInit (void)
|
||||
}
|
||||
|
||||
g_log->log_component[PHY].name = "PHY";
|
||||
g_log->log_component[PHY].level = LOG_EMERG;
|
||||
g_log->log_component[PHY].level = LOG_DEBUG;
|
||||
g_log->log_component[PHY].flag = LOG_MED;
|
||||
g_log->log_component[PHY].interval = 1;
|
||||
g_log->log_component[PHY].fd = 0;
|
||||
@@ -142,7 +142,7 @@ int logInit (void)
|
||||
g_log->log_component[PHY].filelog_name = "/tmp/phy.log";
|
||||
|
||||
g_log->log_component[MAC].name = "MAC";
|
||||
g_log->log_component[MAC].level = LOG_EMERG;
|
||||
g_log->log_component[MAC].level = LOG_DEBUG;
|
||||
g_log->log_component[MAC].flag = LOG_MED;
|
||||
g_log->log_component[MAC].interval = 1;
|
||||
g_log->log_component[MAC].fd = 0;
|
||||
@@ -150,7 +150,7 @@ int logInit (void)
|
||||
g_log->log_component[MAC].filelog_name = "/tmp/mac.log";
|
||||
|
||||
g_log->log_component[OPT].name = "OPT";
|
||||
g_log->log_component[OPT].level = LOG_EMERG;
|
||||
g_log->log_component[OPT].level = LOG_DEBUG;
|
||||
g_log->log_component[OPT].flag = LOG_MED;
|
||||
g_log->log_component[OPT].interval = 1;
|
||||
g_log->log_component[OPT].fd = 0;
|
||||
@@ -158,7 +158,7 @@ int logInit (void)
|
||||
g_log->log_component[OPT].filelog_name = "";
|
||||
|
||||
g_log->log_component[RLC].name = "RLC";
|
||||
g_log->log_component[RLC].level = LOG_INFO;
|
||||
g_log->log_component[RLC].level = LOG_DEBUG;
|
||||
g_log->log_component[RLC].flag = LOG_MED;
|
||||
g_log->log_component[RLC].interval = 1;
|
||||
g_log->log_component[RLC].fd = 0;
|
||||
@@ -166,7 +166,7 @@ int logInit (void)
|
||||
g_log->log_component[RLC].filelog_name = "/tmp/rlc.log";
|
||||
|
||||
g_log->log_component[PDCP].name = "PDCP";
|
||||
g_log->log_component[PDCP].level = LOG_INFO;
|
||||
g_log->log_component[PDCP].level = LOG_DEBUG;
|
||||
g_log->log_component[PDCP].flag = LOG_MED;
|
||||
g_log->log_component[PDCP].interval = 1;
|
||||
g_log->log_component[PDCP].fd = 0;
|
||||
@@ -174,7 +174,7 @@ int logInit (void)
|
||||
g_log->log_component[PDCP].filelog_name = "/tmp/pdcp.log";
|
||||
|
||||
g_log->log_component[RRC].name = "RRC";
|
||||
g_log->log_component[RRC].level = LOG_TRACE;
|
||||
g_log->log_component[RRC].level = LOG_DEBUG;
|
||||
g_log->log_component[RRC].flag = LOG_MED;
|
||||
g_log->log_component[RRC].interval = 1;
|
||||
g_log->log_component[RRC].fd = 0;
|
||||
@@ -182,7 +182,7 @@ int logInit (void)
|
||||
g_log->log_component[RRC].filelog_name = "/tmp/rrc.log";
|
||||
|
||||
g_log->log_component[NAS].name = "NAS";
|
||||
g_log->log_component[NAS].level = LOG_TRACE;
|
||||
g_log->log_component[NAS].level = LOG_DEBUG;
|
||||
g_log->log_component[NAS].flag = LOG_MED;
|
||||
g_log->log_component[NAS].interval = 1;
|
||||
g_log->log_component[NAS].fd = 0;
|
||||
@@ -190,7 +190,7 @@ int logInit (void)
|
||||
g_log->log_component[NAS].filelog_name = "/tmp/nas.log";
|
||||
|
||||
g_log->log_component[EMU].name = "EMU";
|
||||
g_log->log_component[EMU].level = LOG_EMERG;
|
||||
g_log->log_component[EMU].level = LOG_DEBUG;
|
||||
g_log->log_component[EMU].flag = LOG_MED;
|
||||
g_log->log_component[EMU].interval = 1;
|
||||
g_log->log_component[EMU].fd = 0;
|
||||
@@ -198,7 +198,7 @@ int logInit (void)
|
||||
g_log->log_component[EMU].filelog_name = "";
|
||||
|
||||
g_log->log_component[OMG].name = "OMG";
|
||||
g_log->log_component[OMG].level = LOG_EMERG;
|
||||
g_log->log_component[OMG].level = LOG_DEBUG;
|
||||
g_log->log_component[OMG].flag = LOG_MED;
|
||||
g_log->log_component[OMG].interval = 1;
|
||||
g_log->log_component[OMG].fd = 0;
|
||||
@@ -206,7 +206,7 @@ int logInit (void)
|
||||
g_log->log_component[OMG].filelog_name = "/tmp/omg.csv";
|
||||
|
||||
g_log->log_component[OTG].name = "OTG";
|
||||
g_log->log_component[OTG].level = LOG_EMERG;
|
||||
g_log->log_component[OTG].level = LOG_DEBUG;
|
||||
g_log->log_component[OTG].flag = LOG_MED;
|
||||
g_log->log_component[OTG].interval = 1;
|
||||
g_log->log_component[OTG].fd = 0;
|
||||
@@ -214,7 +214,7 @@ int logInit (void)
|
||||
g_log->log_component[OTG].filelog_name = "/tmp/otg.log";
|
||||
|
||||
g_log->log_component[OTG_LATENCY].name = "OTG_LATENCY";
|
||||
g_log->log_component[OTG_LATENCY].level = LOG_EMERG;
|
||||
g_log->log_component[OTG_LATENCY].level = LOG_DEBUG;
|
||||
g_log->log_component[OTG_LATENCY].flag = LOG_MED;
|
||||
g_log->log_component[OTG_LATENCY].interval = 1;
|
||||
g_log->log_component[OTG_LATENCY].fd = 0;
|
||||
@@ -222,7 +222,7 @@ int logInit (void)
|
||||
g_log->log_component[OTG_LATENCY].filelog_name = "/tmp/otg_latency.dat";
|
||||
|
||||
g_log->log_component[OTG_LATENCY_BG].name = "OTG_LATENCY_BG";
|
||||
g_log->log_component[OTG_LATENCY_BG].level = LOG_EMERG;
|
||||
g_log->log_component[OTG_LATENCY_BG].level = LOG_DEBUG;
|
||||
g_log->log_component[OTG_LATENCY_BG].flag = LOG_MED;
|
||||
g_log->log_component[OTG_LATENCY_BG].interval = 1;
|
||||
g_log->log_component[OTG_LATENCY_BG].fd = 0;
|
||||
@@ -230,7 +230,7 @@ int logInit (void)
|
||||
g_log->log_component[OTG_LATENCY_BG].filelog_name = "/tmp/otg_latency_bg.dat";
|
||||
|
||||
g_log->log_component[OTG_GP].name = "OTG_GP";
|
||||
g_log->log_component[OTG_GP].level = LOG_EMERG;
|
||||
g_log->log_component[OTG_GP].level = LOG_DEBUG;
|
||||
g_log->log_component[OTG_GP].flag = LOG_MED;
|
||||
g_log->log_component[OTG_GP].interval = 1;
|
||||
g_log->log_component[OTG_GP].fd = 0;
|
||||
@@ -238,7 +238,7 @@ int logInit (void)
|
||||
g_log->log_component[OTG_GP].filelog_name = "/tmp/otg_goodput.dat";
|
||||
|
||||
g_log->log_component[OTG_GP_BG].name = "OTG_GP_BG";
|
||||
g_log->log_component[OTG_GP_BG].level = LOG_EMERG;
|
||||
g_log->log_component[OTG_GP_BG].level = LOG_DEBUG;
|
||||
g_log->log_component[OTG_GP_BG].flag = LOG_MED;
|
||||
g_log->log_component[OTG_GP_BG].interval = 1;
|
||||
g_log->log_component[OTG_GP_BG].fd = 0;
|
||||
@@ -246,7 +246,7 @@ int logInit (void)
|
||||
g_log->log_component[OTG_GP_BG].filelog_name = "/tmp/otg_goodput_bg.dat";
|
||||
|
||||
g_log->log_component[OTG_JITTER].name = "OTG_JITTER";
|
||||
g_log->log_component[OTG_JITTER].level = LOG_EMERG;
|
||||
g_log->log_component[OTG_JITTER].level = LOG_DEBUG;
|
||||
g_log->log_component[OTG_JITTER].flag = LOG_MED;
|
||||
g_log->log_component[OTG_JITTER].interval = 1;
|
||||
g_log->log_component[OTG_JITTER].fd = 0;
|
||||
@@ -254,7 +254,7 @@ int logInit (void)
|
||||
g_log->log_component[OTG_JITTER].filelog_name = "/tmp/otg_jitter.dat";
|
||||
|
||||
g_log->log_component[OCG].name = "OCG";
|
||||
g_log->log_component[OCG].level = LOG_EMERG;
|
||||
g_log->log_component[OCG].level = LOG_DEBUG;
|
||||
g_log->log_component[OCG].flag = LOG_MED;
|
||||
g_log->log_component[OCG].interval = 1;
|
||||
g_log->log_component[OCG].fd = 0;
|
||||
@@ -262,7 +262,7 @@ int logInit (void)
|
||||
g_log->log_component[OCG].filelog_name = "";
|
||||
|
||||
g_log->log_component[PERF].name = "PERF";
|
||||
g_log->log_component[PERF].level = LOG_EMERG;
|
||||
g_log->log_component[PERF].level = LOG_DEBUG;
|
||||
g_log->log_component[PERF].flag = LOG_MED;
|
||||
g_log->log_component[PERF].interval = 1;
|
||||
g_log->log_component[PERF].fd = 0;
|
||||
@@ -270,7 +270,7 @@ int logInit (void)
|
||||
g_log->log_component[PERF].filelog_name = "";
|
||||
|
||||
g_log->log_component[OIP].name = "OIP";
|
||||
g_log->log_component[OIP].level = LOG_EMERG;
|
||||
g_log->log_component[OIP].level = LOG_DEBUG;
|
||||
g_log->log_component[OIP].flag = LOG_MED;
|
||||
g_log->log_component[OIP].interval = 1;
|
||||
g_log->log_component[OIP].fd = 0;
|
||||
@@ -278,7 +278,7 @@ int logInit (void)
|
||||
g_log->log_component[OIP].filelog_name = "";
|
||||
|
||||
g_log->log_component[CLI].name = "CLI";
|
||||
g_log->log_component[CLI].level = LOG_EMERG;
|
||||
g_log->log_component[CLI].level = LOG_DEBUG;
|
||||
g_log->log_component[CLI].flag = LOG_MED;
|
||||
g_log->log_component[CLI].interval = 1;
|
||||
g_log->log_component[CLI].fd = 0;
|
||||
@@ -286,7 +286,7 @@ int logInit (void)
|
||||
g_log->log_component[CLI].filelog_name = "";
|
||||
|
||||
g_log->log_component[MSC].name = "MSC";
|
||||
g_log->log_component[MSC].level = LOG_EMERG;
|
||||
g_log->log_component[MSC].level = LOG_DEBUG;
|
||||
g_log->log_component[MSC].flag = LOG_MED;
|
||||
g_log->log_component[MSC].interval = 1;
|
||||
g_log->log_component[MSC].fd = 0;
|
||||
@@ -294,7 +294,7 @@ int logInit (void)
|
||||
g_log->log_component[MSC].filelog_name = "/tmp/msc.log";
|
||||
|
||||
g_log->log_component[OCM].name = "OCM";
|
||||
g_log->log_component[OCM].level = LOG_EMERG;
|
||||
g_log->log_component[OCM].level = LOG_DEBUG;
|
||||
g_log->log_component[OCM].flag = LOG_MED;
|
||||
g_log->log_component[OCM].interval = 1;
|
||||
g_log->log_component[OCM].fd = 0;
|
||||
@@ -302,7 +302,7 @@ int logInit (void)
|
||||
g_log->log_component[OCM].filelog_name = "/tmp/ocm.log";
|
||||
|
||||
g_log->log_component[UDP_].name = "UDP";
|
||||
g_log->log_component[UDP_].level = LOG_EMERG;
|
||||
g_log->log_component[UDP_].level = LOG_DEBUG;
|
||||
g_log->log_component[UDP_].flag = LOG_FULL;
|
||||
g_log->log_component[UDP_].interval = 1;
|
||||
g_log->log_component[UDP_].fd = 0;
|
||||
@@ -310,7 +310,7 @@ int logInit (void)
|
||||
g_log->log_component[UDP_].filelog_name = "";
|
||||
|
||||
g_log->log_component[GTPU].name = "GTPV1U";
|
||||
g_log->log_component[GTPU].level = LOG_EMERG;
|
||||
g_log->log_component[GTPU].level = LOG_DEBUG;
|
||||
g_log->log_component[GTPU].flag = LOG_FULL;
|
||||
g_log->log_component[GTPU].interval = 1;
|
||||
g_log->log_component[GTPU].fd = 0;
|
||||
@@ -318,7 +318,7 @@ int logInit (void)
|
||||
g_log->log_component[GTPU].filelog_name = "";
|
||||
|
||||
g_log->log_component[S1AP].name = "S1AP";
|
||||
g_log->log_component[S1AP].level = LOG_EMERG;
|
||||
g_log->log_component[S1AP].level = LOG_DEBUG;
|
||||
g_log->log_component[S1AP].flag = LOG_FULL;
|
||||
g_log->log_component[S1AP].interval = 1;
|
||||
g_log->log_component[S1AP].fd = 0;
|
||||
@@ -326,7 +326,7 @@ int logInit (void)
|
||||
g_log->log_component[S1AP].filelog_name = "";
|
||||
|
||||
g_log->log_component[SCTP].name = "SCTP";
|
||||
g_log->log_component[SCTP].level = LOG_EMERG;
|
||||
g_log->log_component[SCTP].level = LOG_DEBUG;
|
||||
g_log->log_component[SCTP].flag = LOG_MED;
|
||||
g_log->log_component[SCTP].interval = 1;
|
||||
g_log->log_component[SCTP].fd = 0;
|
||||
@@ -334,7 +334,7 @@ int logInit (void)
|
||||
g_log->log_component[SCTP].filelog_name = "";
|
||||
|
||||
g_log->log_component[HW].name = "HW";
|
||||
g_log->log_component[HW].level = LOG_EMERG;
|
||||
g_log->log_component[HW].level = LOG_DEBUG;
|
||||
g_log->log_component[HW].flag = LOG_MED;
|
||||
g_log->log_component[HW].interval = 1;
|
||||
g_log->log_component[HW].fd = 0;
|
||||
@@ -342,7 +342,7 @@ int logInit (void)
|
||||
g_log->log_component[HW].filelog_name = "";
|
||||
|
||||
g_log->log_component[OSA].name = "OSA";
|
||||
g_log->log_component[OSA].level = LOG_EMERG;
|
||||
g_log->log_component[OSA].level = LOG_DEBUG;
|
||||
g_log->log_component[OSA].flag = LOG_MED;
|
||||
g_log->log_component[OSA].interval = 1;
|
||||
g_log->log_component[OSA].fd = 0;
|
||||
@@ -350,7 +350,7 @@ int logInit (void)
|
||||
g_log->log_component[OSA].filelog_name = "";
|
||||
|
||||
g_log->log_component[RAL_ENB].name = "eRAL";
|
||||
g_log->log_component[RAL_ENB].level = LOG_EMERG;
|
||||
g_log->log_component[RAL_ENB].level = LOG_DEBUG;
|
||||
g_log->log_component[RAL_ENB].flag = LOG_MED;
|
||||
g_log->log_component[RAL_ENB].interval = 1;
|
||||
g_log->log_component[RAL_ENB].fd = 0;
|
||||
@@ -358,7 +358,7 @@ int logInit (void)
|
||||
g_log->log_component[RAL_ENB].filelog_name = "";
|
||||
|
||||
g_log->log_component[RAL_UE].name = "mRAL";
|
||||
g_log->log_component[RAL_UE].level = LOG_EMERG;
|
||||
g_log->log_component[RAL_UE].level = LOG_DEBUG;
|
||||
g_log->log_component[RAL_UE].flag = LOG_MED;
|
||||
g_log->log_component[RAL_UE].interval = 1;
|
||||
g_log->log_component[RAL_UE].fd = 0;
|
||||
@@ -366,7 +366,7 @@ int logInit (void)
|
||||
g_log->log_component[RAL_UE].filelog_name = "";
|
||||
|
||||
g_log->log_component[ENB_APP].name = "ENB_APP";
|
||||
g_log->log_component[ENB_APP].level = LOG_EMERG;
|
||||
g_log->log_component[ENB_APP].level = LOG_DEBUG;
|
||||
g_log->log_component[ENB_APP].flag = LOG_MED;
|
||||
g_log->log_component[ENB_APP].interval = 1;
|
||||
g_log->log_component[ENB_APP].fd = 0;
|
||||
@@ -374,7 +374,7 @@ int logInit (void)
|
||||
g_log->log_component[ENB_APP].filelog_name = "";
|
||||
|
||||
g_log->log_component[TMR].name = "TMR";
|
||||
g_log->log_component[TMR].level = LOG_EMERG;
|
||||
g_log->log_component[TMR].level = LOG_DEBUG;
|
||||
g_log->log_component[TMR].flag = LOG_MED;
|
||||
g_log->log_component[TMR].interval = 1;
|
||||
g_log->log_component[TMR].fd = 0;
|
||||
@@ -391,7 +391,7 @@ int logInit (void)
|
||||
|
||||
/* following log component are used for the localization*/
|
||||
g_log->log_component[LOCALIZE].name = "LOCALIZE";
|
||||
g_log->log_component[LOCALIZE].level = LOG_EMERG;
|
||||
g_log->log_component[LOCALIZE].level = LOG_DEBUG;
|
||||
g_log->log_component[LOCALIZE].flag = LOG_MED;
|
||||
g_log->log_component[LOCALIZE].interval = 1;
|
||||
g_log->log_component[LOCALIZE].fd = 0;
|
||||
|
||||
Reference in New Issue
Block a user