bugfix: fix bug "Unknown UE_id for rnti"

This bug happens when we detect uplink failure for one UE.
In this case, a DCI format 1A is sent to the UE to ask it
to do random acces.

The way this DCI is generated was not compatible with how
the software is organized. It was expected that the DCI are
added (with add_ue_spec_dci and add_common_dci) in a very
specific order: first all DCIs in common space are added
(with add_common_dci) then all DCIs in UE specific space
are added (with add_ue_spec_dci).

The problem was that the DCI format 1A DCI sent to the UE
for it to do random access is added (with add_ue_spec_dci)
before the DCIs in common space.

That totally messed up the logic in add_common_dci and
add_ue_spec_dci.

The solution is to get rid of Num_common_dci and Num_ue_spec_dci,
replace those two counters by only one (Num_dci) and add
"search_space" in the dci_alloc structure to be used later by
the function "allocate_CCEs" when calling "get_nCCE_offset".

The software had to be adapted to the new variables, everywhere.

I am not sure that the simulators work. It seems that some
of them didn't use Num_common_dci and Num_ue_spec_dci to
decide on what space (common or UE specific) to put the DCI,
but relied on the rnti (comparing with SI_RNTI). To be tested
properly.

The modified simulators are:
  - openair1/SIMULATION/LTE_PHY/dlsim.c
  - openair1/SIMULATION/LTE_PHY/dlsim_tm4.c
  - openair1/SIMULATION/LTE_PHY/dlsim_tm7.c
  - openair1/SIMULATION/LTE_PHY/framegen.c
  - openair1/SIMULATION/LTE_PHY/pdcchsim.c
  - openair1/SIMULATION/LTE_PHY/syncsim.c
This commit is contained in:
Cedric Roux
2017-07-27 17:12:19 +02:00
parent 08b8b3142d
commit 8d5901c815
18 changed files with 384 additions and 374 deletions
+41 -36
View File
@@ -390,10 +390,11 @@ void fill_DCI(PHY_VARS_eNB *eNB,
}
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = n_rnti+k;
dci_alloc[*num_dci].format = format1;
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = n_rnti+k;
dci_alloc[*num_dci].format = format1;
dci_alloc[*num_dci].search_space = DCI_UE_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
// printf("Generating dlsch params for user %d\n",k);
@@ -530,11 +531,12 @@ void fill_DCI(PHY_VARS_eNB *eNB,
}
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = SI_RNTI;
dci_alloc[*num_dci].format = format1A;
dci_alloc[*num_dci].firstCCE = 0;
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = SI_RNTI;
dci_alloc[*num_dci].format = format1A;
dci_alloc[*num_dci].firstCCE = 0;
dci_alloc[*num_dci].search_space = DCI_COMMON_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -699,10 +701,11 @@ void fill_DCI(PHY_VARS_eNB *eNB,
}
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = n_rnti+k;
dci_alloc[*num_dci].format = format2A;
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = n_rnti+k;
dci_alloc[*num_dci].format = format2A;
dci_alloc[*num_dci].search_space = DCI_UE_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
//printf("Generating dlsch params for user %d / format 2A (%d)\n",k,format2A);
@@ -839,11 +842,12 @@ void fill_DCI(PHY_VARS_eNB *eNB,
}
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = SI_RNTI;
dci_alloc[*num_dci].format = format1A;
dci_alloc[*num_dci].firstCCE = 0;
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = SI_RNTI;
dci_alloc[*num_dci].format = format1A;
dci_alloc[*num_dci].firstCCE = 0;
dci_alloc[*num_dci].search_space = DCI_COMMON_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
//printf("Generating dlsch params for user %d\n",k);
@@ -1009,10 +1013,11 @@ void fill_DCI(PHY_VARS_eNB *eNB,
}
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = n_rnti+k;
dci_alloc[*num_dci].format = format2;
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = n_rnti+k;
dci_alloc[*num_dci].format = format2;
dci_alloc[*num_dci].search_space = DCI_UE_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1149,11 +1154,12 @@ void fill_DCI(PHY_VARS_eNB *eNB,
}
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = SI_RNTI;
dci_alloc[*num_dci].format = format1A;
dci_alloc[*num_dci].firstCCE = 0;
dci_alloc[*num_dci].dci_length = dci_length;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = SI_RNTI;
dci_alloc[*num_dci].format = format1A;
dci_alloc[*num_dci].firstCCE = 0;
dci_alloc[*num_dci].search_space = DCI_COMMON_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1181,11 +1187,12 @@ void fill_DCI(PHY_VARS_eNB *eNB,
case 5:
case 6:
memcpy(&dci_alloc[*num_dci].dci_pdu[0],&DLSCH_alloc_pdu2_1E[k],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
dci_alloc[*num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = n_rnti+k;
dci_alloc[*num_dci].format = format1E_2A_M10PRB;
dci_alloc[*num_dci].firstCCE = 4*k;
dci_alloc[*num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
dci_alloc[*num_dci].L = 1;
dci_alloc[*num_dci].rnti = n_rnti+k;
dci_alloc[*num_dci].format = format1E_2A_M10PRB;
dci_alloc[*num_dci].firstCCE = 4*k;
dci_alloc[*num_dci].search_space = DCI_UE_SPACE;
printf("Generating dlsch params for user %d\n",k);
generate_eNB_dlsch_params_from_dci(0,
subframe,
@@ -1224,12 +1231,10 @@ int num_common_dci=0,num_ue_spec_dci=0,num_dci=0,num_pdcch_symbols=1;
DCI_PDU *get_dci_sdu(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subframeP) {
if (subframeP == subframe) {
DCI_pdu.Num_ue_spec_dci = num_ue_spec_dci;
DCI_pdu.Num_common_dci = num_common_dci;
DCI_pdu.Num_dci = num_ue_spec_dci + num_common_dci;
DCI_pdu.num_pdcch_symbols = num_pdcch_symbols;
} else {
DCI_pdu.Num_ue_spec_dci = 0;
DCI_pdu.Num_common_dci = 0;
DCI_pdu.Num_dci = 0;
DCI_pdu.num_pdcch_symbols = num_pdcch_symbols;
}
+40 -34
View File
@@ -1197,10 +1197,11 @@ int main(int argc, char **argv)
}
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format1;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format1;
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
@@ -1334,11 +1335,12 @@ int main(int argc, char **argv)
}
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
generate_eNB_dlsch_params_from_dci(0,
@@ -1496,10 +1498,11 @@ int main(int argc, char **argv)
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format2A;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format2A;
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
@@ -1633,11 +1636,12 @@ int main(int argc, char **argv)
}
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1827,10 +1831,11 @@ int main(int argc, char **argv)
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format2;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format2;
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
@@ -1964,11 +1969,12 @@ int main(int argc, char **argv)
}
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1995,11 +2001,12 @@ int main(int argc, char **argv)
case 5:
case 6:
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu2_1E[k],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
dci_alloc[num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format1E_2A_M10PRB;
dci_alloc[num_dci].firstCCE = 4*k;
dci_alloc[num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format1E_2A_M10PRB;
dci_alloc[num_dci].firstCCE = 4*k;
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
printf("Generating dlsch params for user %d\n",k);
generate_eNB_dlsch_params_from_dci(0,
subframe,
@@ -3217,8 +3224,7 @@ int main(int argc, char **argv)
}
}
}
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci,
num_common_dci,
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci + num_common_dci,
dci_alloc,
0,
AMP,
+40 -34
View File
@@ -1112,10 +1112,11 @@ int main(int argc, char **argv)
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format1;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format1;
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1255,11 +1256,12 @@ int main(int argc, char **argv)
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1424,10 +1426,11 @@ int main(int argc, char **argv)
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format2A;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format2A;
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d / format 2A (%d)\n",k,format2A);
@@ -1564,11 +1567,12 @@ int main(int argc, char **argv)
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1734,10 +1738,11 @@ int main(int argc, char **argv)
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format2;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format2;
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1874,11 +1879,12 @@ int main(int argc, char **argv)
}
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu_1[k],dci_length_bytes);
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].dci_length = dci_length;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = SI_RNTI;
dci_alloc[num_dci].format = format1A;
dci_alloc[num_dci].firstCCE = 0;
dci_alloc[num_dci].search_space = DCI_COMMON_SPACE;
dump_dci(&eNB->frame_parms,&dci_alloc[num_dci]);
printf("Generating dlsch params for user %d\n",k);
@@ -1906,11 +1912,12 @@ int main(int argc, char **argv)
case 5:
case 6:
memcpy(&dci_alloc[num_dci].dci_pdu[0],&DLSCH_alloc_pdu2_1E[k],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
dci_alloc[num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format1E_2A_M10PRB;
dci_alloc[num_dci].firstCCE = 4*k;
dci_alloc[num_dci].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
dci_alloc[num_dci].L = 1;
dci_alloc[num_dci].rnti = n_rnti+k;
dci_alloc[num_dci].format = format1E_2A_M10PRB;
dci_alloc[num_dci].firstCCE = 4*k;
dci_alloc[num_dci].search_space = DCI_UE_SPACE;
printf("Generating dlsch params for user %d\n",k);
generate_eNB_dlsch_params_from_dci(0,
subframe,
@@ -2556,8 +2563,7 @@ PMI_FEEDBACK:
}
}
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci,
num_common_dci,
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci + num_common_dci,
dci_alloc,
0,
AMP,
+17 -16
View File
@@ -66,8 +66,7 @@ DCI_PDU *get_dci(uint8_t Mod_id, uint8_t frame, uint8_t subframe)
int dci_length_bytes,dci_length;
int BCCH_pdu_size_bits, BCCH_pdu_size_bytes;
DCI_pdu.Num_ue_spec_dci = 0;
DCI_pdu.Num_common_dci = 0;
DCI_pdu.Num_dci = 0;
if (subframe_select(&PHY_vars_eNB_g[0]->lte_frame_parms, subframe) == SF_S) {
return (&DCI_pdu);
@@ -281,28 +280,30 @@ DCI_PDU *get_dci(uint8_t Mod_id, uint8_t frame, uint8_t subframe)
}
// add common dci
DCI_pdu.dci_alloc[0].dci_length = BCCH_pdu_size_bits;
DCI_pdu.dci_alloc[0].L = 2;
DCI_pdu.dci_alloc[0].rnti = SI_RNTI;
DCI_pdu.dci_alloc[0].format = format1A;
DCI_pdu.dci_alloc[0].ra_flag = 0;
DCI_pdu.dci_alloc[0].dci_length = BCCH_pdu_size_bits;
DCI_pdu.dci_alloc[0].L = 2;
DCI_pdu.dci_alloc[0].rnti = SI_RNTI;
DCI_pdu.dci_alloc[0].format = format1A;
DCI_pdu.dci_alloc[0].ra_flag = 0;
DCI_pdu.dci_alloc[0].search_space = DCI_COMMON_SPACE;
memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &BCCH_alloc_pdu[0], BCCH_pdu_size_bytes);
DCI_pdu.Num_common_dci++;
DCI_pdu.Num_dci++;
// add ue specific dci
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].dci_length = dci_length;
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].L = 0;
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].rnti = n_rnti+k;
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].format = format1;
DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].ra_flag = 0;
memcpy((void*)&DCI_pdu.dci_alloc[k+DCI_pdu.Num_common_dci].dci_pdu[0], &DLSCH_alloc_pdu_1[k], dci_length_bytes);
DCI_pdu.Num_ue_spec_dci++;
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].dci_length = dci_length;
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].L = 0;
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].rnti = n_rnti+k;
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].format = format1;
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].ra_flag = 0;
DCI_pdu.dci_alloc[DCI_pdu.Num_dci].search_space = DCI_UE_SPACE;
memcpy((void*)&DCI_pdu.dci_alloc[DCI_pdu.Num_dci].dci_pdu[0], &DLSCH_alloc_pdu_1[k], dci_length_bytes);
DCI_pdu.Num_dci++;
}
DCI_pdu.nCCE = 0;
for (i=0; i<DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci; i++) {
for (i=0; i<DCI_pdu.Num_dci; i++) {
DCI_pdu.nCCE += (1<<(DCI_pdu.dci_alloc[i].L));
}
-1
View File
@@ -570,7 +570,6 @@ int main(int argc, char **argv)
/*
num_pdcch_symbols = generate_dci_top(1,
0,
dci_alloc,
0,
1024,
+27 -26
View File
@@ -66,8 +66,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
int UL_pdu_size_bits=0, UL_pdu_size_bytes=0;
int mcs = 3;
DCI_pdu.Num_ue_spec_dci = 0;
DCI_pdu.Num_common_dci = 0;
DCI_pdu.Num_dci = 0;
if (lte_frame_parms->frame_type == TDD) {
switch (lte_frame_parms->N_RB_DL) {
@@ -358,35 +357,38 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
for (ind = 0; ind<num_dci; ind++) {
if (format_selector[ind]==format1A) {
// add common dci
DCI_pdu.dci_alloc[ind].dci_length = BCCH_pdu_size_bits;
DCI_pdu.dci_alloc[ind].L = log2Lcommon;
DCI_pdu.dci_alloc[ind].rnti = SI_RNTI;
DCI_pdu.dci_alloc[ind].format = format1A;
DCI_pdu.dci_alloc[ind].ra_flag = 0;
memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &BCCH_alloc_pdu[0], BCCH_pdu_size_bytes);
DCI_pdu.Num_common_dci++;
DCI_pdu.dci_alloc[ind].dci_length = BCCH_pdu_size_bits;
DCI_pdu.dci_alloc[ind].L = log2Lcommon;
DCI_pdu.dci_alloc[ind].rnti = SI_RNTI;
DCI_pdu.dci_alloc[ind].format = format1A;
DCI_pdu.dci_alloc[ind].ra_flag = 0;
DCI_pdu.dci_alloc[ind].search_space = DCI_COMMON_SPACE;
memcpy((void*)&DCI_pdu.dci_alloc[ind].dci_pdu[0], &BCCH_alloc_pdu[0], BCCH_pdu_size_bytes);
DCI_pdu.Num_dci++;
printf("Added common dci (%d) for rnti %x\n",ind,SI_RNTI);
}
if (format_selector[ind]==format1) {
DCI_pdu.dci_alloc[ind].dci_length = dci_length;
DCI_pdu.dci_alloc[ind].L = log2L;
DCI_pdu.dci_alloc[ind].rnti = rnti;
DCI_pdu.dci_alloc[ind].format = format1;
DCI_pdu.dci_alloc[ind].ra_flag = 0;
DCI_pdu.dci_alloc[ind].dci_length = dci_length;
DCI_pdu.dci_alloc[ind].L = log2L;
DCI_pdu.dci_alloc[ind].rnti = rnti;
DCI_pdu.dci_alloc[ind].format = format1;
DCI_pdu.dci_alloc[ind].ra_flag = 0;
DCI_pdu.dci_alloc[ind].search_space = DCI_UE_SPACE;
memcpy((void*)&DCI_pdu.dci_alloc[ind].dci_pdu[0], &DLSCH_alloc_pdu[0], dci_length_bytes);
DCI_pdu.Num_ue_spec_dci++;
DCI_pdu.Num_dci++;
}
if (format_selector[ind]==format0) {
DCI_pdu.dci_alloc[ind].dci_length = UL_pdu_size_bits;
DCI_pdu.dci_alloc[ind].L = log2L;
DCI_pdu.dci_alloc[ind].rnti = rnti;
DCI_pdu.dci_alloc[ind].format = format0;
DCI_pdu.dci_alloc[ind].ra_flag = 0;
DCI_pdu.dci_alloc[ind].dci_length = UL_pdu_size_bits;
DCI_pdu.dci_alloc[ind].L = log2L;
DCI_pdu.dci_alloc[ind].rnti = rnti;
DCI_pdu.dci_alloc[ind].format = format0;
DCI_pdu.dci_alloc[ind].ra_flag = 0;
DCI_pdu.dci_alloc[ind].search_space = DCI_UE_SPACE;
memcpy((void*)&DCI_pdu.dci_alloc[ind].dci_pdu[0], &UL_alloc_pdu[0], UL_pdu_size_bytes);
DCI_pdu.Num_ue_spec_dci++;
DCI_pdu.Num_dci++;
}
}
@@ -849,20 +851,20 @@ int main(int argc, char **argv)
n_trials_dl++;
}
}
num_pdcch_symbols = get_num_pdcch_symbols(DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci,
num_pdcch_symbols = get_num_pdcch_symbols(DCI_pdu.Num_dci,
DCI_pdu.dci_alloc, frame_parms, subframe);
numCCE = get_nCCE(num_pdcch_symbols,&eNB->frame_parms,get_mi(&eNB->frame_parms,subframe));
if (n_frames==1) {
printf("num_dci %d, num_pddch_symbols %d, nCCE %d\n",
DCI_pdu.Num_common_dci+DCI_pdu.Num_ue_spec_dci,
DCI_pdu.Num_dci,
num_pdcch_symbols,numCCE);
}
// apply RNTI-based nCCE allocation
memset(CCE_table,0,800*sizeof(int));
for (i = 0; i < DCI_pdu.Num_common_dci + DCI_pdu.Num_ue_spec_dci; i++) {
for (i = 0; i < DCI_pdu.Num_dci; i++) {
// SI RNTI
if (DCI_pdu.dci_alloc[i].rnti == SI_RNTI) {
DCI_pdu.dci_alloc[i].firstCCE = get_nCCE_offset_l1(CCE_table,
@@ -899,8 +901,7 @@ int main(int argc, char **argv)
exit(-1);
}
num_pdcch_symbols = generate_dci_top(DCI_pdu.Num_ue_spec_dci,
DCI_pdu.Num_common_dci,
num_pdcch_symbols = generate_dci_top(DCI_pdu.Num_dci,
DCI_pdu.dci_alloc,
0,
AMP,
-1
View File
@@ -493,7 +493,6 @@ int main(int argc, char **argv)
num_pdcch_symbols = generate_dci_top(1,
0,
dci_alloc,
0,
1024,
+10 -10
View File
@@ -1101,11 +1101,12 @@ int main(int argc, char **argv)
((DCI1_5MHz_FDD_t*)&DLSCH_alloc_pdu)->mcs = 0;
((DCI1_5MHz_FDD_t*)&DLSCH_alloc_pdu)->ndi = 1;
((DCI1_5MHz_FDD_t*)&DLSCH_alloc_pdu)->rv = 0;
dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t;
memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu,sizeof(DCI1_5MHz_FDD_t));
dci_alloc[0].L = 2;
dci_alloc[0].rnti = n_rnti;
dci_alloc[0].format = format1;
dci_alloc[0].L = 2;
dci_alloc[0].rnti = n_rnti;
dci_alloc[0].format = format1;
dci_alloc[0].search_space = DCI_UE_SPACE;
} else {
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->rah = 0;
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->rballoc = DLSCH_RB_ALLOC;
@@ -1117,15 +1118,15 @@ int main(int argc, char **argv)
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->rv = 0;
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->tpmi = (transmission_mode>=5 ? 5 : 0); // precoding
((DCI1E_5MHz_2A_M10PRB_TDD_t*)&DLSCH_alloc_pdu)->dl_power_off = (transmission_mode==5 ? 0 : 1);
dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
dci_alloc[0].dci_length = sizeof_DCI1E_5MHz_2A_M10PRB_TDD_t;
memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu,sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t));
dci_alloc[0].L = 2;
dci_alloc[0].rnti = n_rnti;
dci_alloc[0].format = format1E_2A_M10PRB;
dci_alloc[0].L = 2;
dci_alloc[0].rnti = n_rnti;
dci_alloc[0].format = format1E_2A_M10PRB;
dci_alloc[0].search_space = DCI_UE_SPACE;
}
num_pdcch_symbols = generate_dci_top(1,
0,
dci_alloc,
0,
AMP,
@@ -1134,7 +1135,6 @@ int main(int argc, char **argv)
subframe);
/*
num_pdcch_symbols = generate_dci_top(1,
0,
dci_alloc,
0,
AMP,