Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
3e5c274d
Commit
3e5c274d
authored
Aug 07, 2016
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update of ulsim to use phy_procedures
parent
4a4d31b0
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
253 additions
and
337 deletions
+253
-337
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+44
-44
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+1
-1
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+28
-22
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+1
-1
openair1/SIMULATION/LTE_PHY/ulsim.c
openair1/SIMULATION/LTE_PHY/ulsim.c
+179
-269
No files found.
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
3e5c274d
...
@@ -44,7 +44,7 @@
...
@@ -44,7 +44,7 @@
#include "PHY/vars.h"
#include "PHY/vars.h"
#endif
#endif
#include "assertions.h"
#include "assertions.h"
//#define DEBUG_DCI
//#define DEBUG_DCI
uint32_t
localRIV2alloc_LUT6
[
32
];
uint32_t
localRIV2alloc_LUT6
[
32
];
...
@@ -1216,7 +1216,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
...
@@ -1216,7 +1216,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
//
msg
("DCI: Setting subframe_tx for subframe %d\n",subframe);
//
printf
("DCI: Setting subframe_tx for subframe %d\n",subframe);
dlsch
[
0
]
->
subframe_tx
[
subframe
]
=
1
;
dlsch
[
0
]
->
subframe_tx
[
subframe
]
=
1
;
conv_rballoc
(
rah
,
conv_rballoc
(
rah
,
...
@@ -4467,7 +4467,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
...
@@ -4467,7 +4467,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch0_harq
->
Qm
=
(
mcs
-
28
)
<<
1
;
dlsch0_harq
->
Qm
=
(
mcs
-
28
)
<<
1
;
else
else
LOG_E
(
PHY
,
"invalid mcs %d
\n
"
,
mcs
);
LOG_E
(
PHY
,
"invalid mcs %d
\n
"
,
mcs
);
//
msg
("test: MCS %d, NPRB %d, TBS %d\n",mcs,NPRB,dlsch0_harq->TBS);
//
printf
("test: MCS %d, NPRB %d, TBS %d\n",mcs,NPRB,dlsch0_harq->TBS);
dlsch
[
0
]
->
current_harq_pid
=
harq_pid
;
dlsch
[
0
]
->
current_harq_pid
=
harq_pid
;
dlsch
[
0
]
->
active
=
1
;
dlsch
[
0
]
->
active
=
1
;
...
@@ -4735,7 +4735,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
...
@@ -4735,7 +4735,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
/*
/*
if (dlsch0_harq->mcs>20) {
if (dlsch0_harq->mcs>20) {
msg
("dci_tools.c: mcs > 20 disabled for now (asked %d)\n",dlsch0_harq->mcs);
printf
("dci_tools.c: mcs > 20 disabled for now (asked %d)\n",dlsch0_harq->mcs);
return(-1);
return(-1);
}
}
*/
*/
...
@@ -5411,7 +5411,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
...
@@ -5411,7 +5411,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
/*
/*
if (dlsch0_harq->mcs>20) {
if (dlsch0_harq->mcs>20) {
msg
("dci_tools.c: mcs > 20 disabled for now (asked %d)\n",dlsch0_harq->mcs);
printf
("dci_tools.c: mcs > 20 disabled for now (asked %d)\n",dlsch0_harq->mcs);
return(-1);
return(-1);
}
}
*/
*/
...
@@ -5437,7 +5437,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
...
@@ -5437,7 +5437,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
// Fix this
// Fix this
tpmi
=
((
DCI1E_5MHz_2A_M10PRB_TDD_t
*
)
dci_pdu
)
->
tpmi
;
tpmi
=
((
DCI1E_5MHz_2A_M10PRB_TDD_t
*
)
dci_pdu
)
->
tpmi
;
//
msg
("ue: tpmi %d\n",tpmi);
//
printf
("ue: tpmi %d\n",tpmi);
switch
(
tpmi
)
{
switch
(
tpmi
)
{
case
0
:
case
0
:
...
@@ -5556,9 +5556,9 @@ uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t
...
@@ -5556,9 +5556,9 @@ uint8_t subframe2harq_pid(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame,uint8_t
/*
/*
#ifdef DEBUG_DCI
#ifdef DEBUG_DCI
if (frame_parms->frame_type == TDD)
if (frame_parms->frame_type == TDD)
msg
("dci_tools.c: subframe2_harq_pid, subframe %d for TDD configuration %d\n",subframe,frame_parms->tdd_config);
printf
("dci_tools.c: subframe2_harq_pid, subframe %d for TDD configuration %d\n",subframe,frame_parms->tdd_config);
else
else
msg
("dci_tools.c: subframe2_harq_pid, subframe %d for FDD \n",subframe);
printf
("dci_tools.c: subframe2_harq_pid, subframe %d for FDD \n",subframe);
#endif
#endif
*/
*/
if
(
frame_parms
->
frame_type
==
FDD
)
{
if
(
frame_parms
->
frame_type
==
FDD
)
{
...
@@ -5734,7 +5734,7 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_subba
...
@@ -5734,7 +5734,7 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,int nb_subba
pmivect
|=
(
pmiq
<<
(
2
*
i
));
pmivect
|=
(
pmiq
<<
(
2
*
i
));
}
else
{
}
else
{
// This needs to be done properly!!!
// This needs to be done properly!!!
msg
(
"PMI feedback for rank>1 not supported!
\n
"
);
printf
(
"PMI feedback for rank>1 not supported!
\n
"
);
pmivect
=
0
;
pmivect
=
0
;
}
}
}
}
...
@@ -5928,7 +5928,7 @@ uint32_t fill_subband_cqi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t trans_mo
...
@@ -5928,7 +5928,7 @@ uint32_t fill_subband_cqi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t trans_mo
void
fill_CQI
(
LTE_UE_ULSCH_t
*
ulsch
,
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
uint8_t
harq_pid
,
int
N_RB_DL
,
uint16_t
rnti
,
uint8_t
trans_mode
,
double
sinr_eff
)
void
fill_CQI
(
LTE_UE_ULSCH_t
*
ulsch
,
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
uint8_t
harq_pid
,
int
N_RB_DL
,
uint16_t
rnti
,
uint8_t
trans_mode
,
double
sinr_eff
)
{
{
//
msg
("[PHY][UE] Filling CQI for eNB %d, meas->wideband_cqi_tot[%d] %d\n",
//
printf
("[PHY][UE] Filling CQI for eNB %d, meas->wideband_cqi_tot[%d] %d\n",
// eNB_id,eNB_id,meas->wideband_cqi_tot[eNB_id]);
// eNB_id,eNB_id,meas->wideband_cqi_tot[eNB_id]);
double
sinr_tmp
;
double
sinr_tmp
;
uint8_t
*
o
=
ulsch
->
o
;
uint8_t
*
o
=
ulsch
->
o
;
...
@@ -6288,7 +6288,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
...
@@ -6288,7 +6288,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
RIV_max
=
RIV_max25
;
RIV_max
=
RIV_max25
;
ulsch
->
harq_processes
[
harq_pid
]
->
first_rb
=
RIV2first_rb_LUT25
[
rballoc
];
ulsch
->
harq_processes
[
harq_pid
]
->
first_rb
=
RIV2first_rb_LUT25
[
rballoc
];
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
=
RIV2nb_rb_LUT25
[
rballoc
];
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
=
RIV2nb_rb_LUT25
[
rballoc
];
// printf("***********rballoc %d, first_rb %d, nb_rb %d
\n",rballoc,ulsch->harq_processes[harq_pid]->first_rb,ulsch->harq_processes[harq_pid]->nb_rb
);
// printf("***********rballoc %d, first_rb %d, nb_rb %d
(dci %p)\n",rballoc,ulsch->harq_processes[harq_pid]->first_rb,ulsch->harq_processes[harq_pid]->nb_rb,dci_pdu
);
break
;
break
;
case
50
:
case
50
:
...
@@ -6409,7 +6409,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
...
@@ -6409,7 +6409,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
ulsch
->
rnti
=
rnti
;
ulsch
->
rnti
=
rnti
;
}
}
//
msg
("[PHY][UE] DCI format 0: harq_pid %d nb_rb %d, rballoc %d\n",harq_pid,ulsch->harq_processes[harq_pid]->nb_rb,
//
printf
("[PHY][UE] DCI format 0: harq_pid %d nb_rb %d, rballoc %d\n",harq_pid,ulsch->harq_processes[harq_pid]->nb_rb,
// ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->rballoc);
// ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->rballoc);
//Mapping of cyclic shift field in DCI format0 to n_DMRS2 (3GPP 36.211, Table 5.5.2.1.1-1)
//Mapping of cyclic shift field in DCI format0 to n_DMRS2 (3GPP 36.211, Table 5.5.2.1.1-1)
if
(
cshift
==
0
)
if
(
cshift
==
0
)
...
@@ -7007,21 +7007,21 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
...
@@ -7007,21 +7007,21 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
// ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
// ulsch->n_DMRS2 = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift;
#ifdef DEBUG_DCI
#ifdef DEBUG_DCI
msg
(
"Format 0 DCI : ulsch (ue): NBRB %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
);
printf
(
"Format 0 DCI : ulsch (ue): NBRB %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
);
msg
(
"Format 0 DCI :ulsch (ue): first_rb %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
first_rb
);
printf
(
"Format 0 DCI :ulsch (ue): first_rb %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
first_rb
);
msg
(
"Format 0 DCI :ulsch (ue): harq_pid %d
\n
"
,
harq_pid
);
printf
(
"Format 0 DCI :ulsch (ue): harq_pid %d
\n
"
,
harq_pid
);
msg
(
"Format 0 DCI :ulsch (ue): round %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
round
);
printf
(
"Format 0 DCI :ulsch (ue): round %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
round
);
msg
(
"Format 0 DCI :ulsch (ue): TBS %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
TBS
);
printf
(
"Format 0 DCI :ulsch (ue): TBS %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
TBS
);
msg
(
"Format 0 DCI :ulsch (ue): mcs %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
);
printf
(
"Format 0 DCI :ulsch (ue): mcs %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
);
msg
(
"Format 0 DCI :ulsch (ue): O %d
\n
"
,
ulsch
->
O
);
printf
(
"Format 0 DCI :ulsch (ue): O %d
\n
"
,
ulsch
->
O
);
if
(
frame_parms
->
frame_type
==
TDD
)
if
(
frame_parms
->
frame_type
==
TDD
)
msg
(
"Format 0 DCI :ulsch (ue): O_ACK/DAI %d/%d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
,
dai
);
printf
(
"Format 0 DCI :ulsch (ue): O_ACK/DAI %d/%d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
,
dai
);
else
else
msg
(
"Format 0 DCI :ulsch (ue): O_ACK %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
);
printf
(
"Format 0 DCI :ulsch (ue): O_ACK %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
O_ACK
);
msg
(
"Format 0 DCI :ulsch (ue): Nsymb_pusch %d
\n
"
,
ulsch
->
Nsymb_pusch
);
printf
(
"Format 0 DCI :ulsch (ue): Nsymb_pusch %d
\n
"
,
ulsch
->
Nsymb_pusch
);
msg
(
"Format 0 DCI :ulsch (ue): cshift %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
);
printf
(
"Format 0 DCI :ulsch (ue): cshift %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
);
#else
#else
UNUSED_VARIABLE
(
dai
);
UNUSED_VARIABLE
(
dai
);
#endif
#endif
...
@@ -7066,7 +7066,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
...
@@ -7066,7 +7066,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
// uint32_t type;
// uint32_t type;
#ifdef DEBUG_DCI
#ifdef DEBUG_DCI
LOG_D
(
PHY
,
"filling eNB ulsch params for rnti %x, dci format %d, dci %x, subframe %d
\n
"
,
printf
(
"filling eNB ulsch params for rnti %x, dci format %d, dci %x, subframe %d
\n
"
,
rnti
,
dci_format
,
*
(
uint32_t
*
)
dci_pdu
,
subframe
);
rnti
,
dci_format
,
*
(
uint32_t
*
)
dci_pdu
,
subframe
);
#endif
#endif
...
@@ -7200,7 +7200,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
...
@@ -7200,7 +7200,7 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
}
}
#ifdef DEBUG_DCI
#ifdef DEBUG_DCI
LOG_D
(
PHY
,
"generate_eNB_ulsch_params_from_dci: subframe %d, rnti %x,harq_pid %d,cqi_req %d
\n
"
,
subframe
,
rnti
,
harq_pid
,
cqi_req
);
printf
(
"generate_eNB_ulsch_params_from_dci: subframe %d, rnti %x,harq_pid %d,cqi_req %d
\n
"
,
subframe
,
rnti
,
harq_pid
,
cqi_req
);
#endif
#endif
ulsch
->
harq_processes
[
harq_pid
]
->
dci_alloc
=
1
;
ulsch
->
harq_processes
[
harq_pid
]
->
dci_alloc
=
1
;
...
@@ -7641,15 +7641,15 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
...
@@ -7641,15 +7641,15 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *eNB,
//ulsch->n_DMRS2 = cshift;
//ulsch->n_DMRS2 = cshift;
#ifdef DEBUG_DCI
#ifdef DEBUG_DCI
msg
(
"ulsch (eNB): NBRB %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
);
printf
(
"ulsch (eNB): NBRB %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
nb_rb
);
msg
(
"ulsch (eNB): first_rb %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
first_rb
);
printf
(
"ulsch (eNB): first_rb %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
first_rb
);
msg
(
"ulsch (eNB): harq_pid %d
\n
"
,
harq_pid
);
printf
(
"ulsch (eNB): harq_pid %d
\n
"
,
harq_pid
);
msg
(
"ulsch (eNB): round %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
round
);
printf
(
"ulsch (eNB): round %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
round
);
msg
(
"ulsch (eNB): TBS %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
TBS
);
printf
(
"ulsch (eNB): TBS %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
TBS
);
msg
(
"ulsch (eNB): mcs %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
);
printf
(
"ulsch (eNB): mcs %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
mcs
);
msg
(
"ulsch (eNB): Or1 %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
);
printf
(
"ulsch (eNB): Or1 %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
);
msg
(
"ulsch (eNB): Nsymb_pusch %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
Nsymb_pusch
);
printf
(
"ulsch (eNB): Nsymb_pusch %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
Nsymb_pusch
);
msg
(
"ulsch (eNB): cshift %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
);
printf
(
"ulsch (eNB): cshift %d
\n
"
,
ulsch
->
harq_processes
[
harq_pid
]
->
n_DMRS2
);
#else
#else
UNUSED_VARIABLE
(
dai
);
UNUSED_VARIABLE
(
dai
);
#endif
#endif
...
@@ -7782,7 +7782,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
...
@@ -7782,7 +7782,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
break
;
break
;
default:
default:
msg
(
"Problem in SINR Calculation for TM5
\n
"
);
printf
(
"Problem in SINR Calculation for TM5
\n
"
);
break
;
break
;
}
//switch(qq)
}
//switch(qq)
}
//a_rx
}
//a_rx
...
@@ -7848,7 +7848,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
...
@@ -7848,7 +7848,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
break
;
break
;
default:
default:
msg
(
"Problem in SINR Calculation for TM6
\n
"
);
printf
(
"Problem in SINR Calculation for TM6
\n
"
);
break
;
break
;
}
//switch(qq)
}
//switch(qq)
}
//a_rx
}
//a_rx
...
@@ -7860,7 +7860,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
...
@@ -7860,7 +7860,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
break
;
break
;
default:
default:
msg
(
"Problem in SINR Calculation for CQI
\n
"
);
printf
(
"Problem in SINR Calculation for CQI
\n
"
);
break
;
break
;
}
}
...
@@ -7929,7 +7929,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
...
@@ -7929,7 +7929,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *ue, uint8_t eNB_id)
3
)
+
p_qam64
[
5
]
*
pow
(
I_qam64_avg
,
2
)
+
p_qam64
[
6
]
*
I_qam64_avg
+
p_qam64
[
7
]);
3
)
+
p_qam64
[
5
]
*
pow
(
I_qam64_avg
,
2
)
+
p_qam64
[
6
]
*
I_qam64_avg
+
p_qam64
[
7
]);
sinr_eff
=
cmax3
(
sinr_eff_qpsk
,
sinr_eff_qam16
,
sinr_eff_qam64
);
sinr_eff
=
cmax3
(
sinr_eff_qpsk
,
sinr_eff_qam16
,
sinr_eff_qam64
);
//
msg
("SINR_Eff = %e\n",sinr_eff);
//
printf
("SINR_Eff = %e\n",sinr_eff);
return
(
sinr_eff
);
return
(
sinr_eff
);
}
}
...
@@ -7948,20 +7948,20 @@ main()
...
@@ -7948,20 +7948,20 @@ main()
rah
=
0
;
rah
=
0
;
rballoc
=
0x1fff
;
rballoc
=
0x1fff
;
msg
(
"rballoc 0 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
printf
(
"rballoc 0 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
rah
=
1
;
rah
=
1
;
rballoc
=
0x1678
;
rballoc
=
0x1678
;
msg
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
printf
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
rballoc
=
0xfffc
;
rballoc
=
0xfffc
;
msg
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
printf
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
rballoc
=
0xfffd
;
rballoc
=
0xfffd
;
msg
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
printf
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
rballoc
=
0xffff
;
rballoc
=
0xffff
;
msg
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
printf
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
rballoc
=
0xfffe
;
rballoc
=
0xfffe
;
msg
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
printf
(
"rballoc 1 %x => %x
\n
"
,
rballoc
,
conv_rballoc
(
rah
,
rballoc
));
}
}
#endif
#endif
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
View file @
3e5c274d
...
@@ -739,7 +739,7 @@ void ulsch_extract_rbs_single(int32_t **rxdataF,
...
@@ -739,7 +739,7 @@ void ulsch_extract_rbs_single(int32_t **rxdataF,
nb_rb1
=
cmin
(
cmax
((
int
)(
frame_parms
->
N_RB_UL
)
-
(
int
)(
2
*
first_rb
),(
int
)
0
),(
int
)(
2
*
nb_rb
));
// 2 times no. RBs before the DC
nb_rb1
=
cmin
(
cmax
((
int
)(
frame_parms
->
N_RB_UL
)
-
(
int
)(
2
*
first_rb
),(
int
)
0
),(
int
)(
2
*
nb_rb
));
// 2 times no. RBs before the DC
nb_rb2
=
2
*
nb_rb
-
nb_rb1
;
// 2 times no. RBs after the DC
nb_rb2
=
2
*
nb_rb
-
nb_rb1
;
// 2 times no. RBs after the DC
#ifdef DEBUG_ULSCH
#ifdef DEBUG_ULSCH
printf
(
"ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d
\n
"
,
nb_rb1
,
nb_rb2
);
printf
(
"ulsch_extract_rbs_single: 2*nb_rb1 = %d, 2*nb_rb2 = %d
\n
"
,
nb_rb1
,
nb_rb2
);
#endif
#endif
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
3e5c274d
...
@@ -2346,10 +2346,11 @@ void cba_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_p
...
@@ -2346,10 +2346,11 @@ void cba_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_p
int
ret
=
0
;
int
ret
=
0
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
if
(
eNB
->
ulsch
[
UE_id
]
==
NULL
)
return
;
num_active_cba_groups
=
eNB
->
ulsch
[
UE_id
]
->
num_active_cba_groups
;
num_active_cba_groups
=
eNB
->
ulsch
[
UE_id
]
->
num_active_cba_groups
;
if
((
eNB
->
ulsch
[
UE_id
])
&&
if
((
num_active_cba_groups
>
0
)
&&
(
num_active_cba_groups
>
0
)
&&
(
eNB
->
ulsch
[
UE_id
]
->
cba_rnti
[
UE_id
%
num_active_cba_groups
]
>
0
)
&&
(
eNB
->
ulsch
[
UE_id
]
->
cba_rnti
[
UE_id
%
num_active_cba_groups
]
>
0
)
&&
(
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
subframe_cba_scheduling_flag
==
1
))
{
(
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
subframe_cba_scheduling_flag
==
1
))
{
rnti
=
0
;
rnti
=
0
;
...
@@ -2462,7 +2463,8 @@ void cba_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_p
...
@@ -2462,7 +2463,8 @@ void cba_procedures(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,int UE_id,int harq_p
UE_id
%
eNB
->
ulsch
[
UE_id
]
->
num_active_cba_groups
,
eNB
->
ulsch
[
UE_id
]
->
cba_rnti
[
UE_id
%
num_active_cba_groups
]);
UE_id
%
eNB
->
ulsch
[
UE_id
]
->
num_active_cba_groups
,
eNB
->
ulsch
[
UE_id
]
->
cba_rnti
[
UE_id
%
num_active_cba_groups
]);
// detect if there is a CBA collision
// detect if there is a CBA collision
if
(
eNB
->
cba_last_reception
[
UE_id
%
num_active_cba_groups
]
==
0
)
{
if
((
eNB
->
cba_last_reception
[
UE_id
%
num_active_cba_groups
]
==
0
)
&&
(
eNB
->
mac_enabled
==
1
))
{
mac_xface
->
rx_sdu
(
eNB
->
Mod_id
,
mac_xface
->
rx_sdu
(
eNB
->
Mod_id
,
eNB
->
CC_id
,
eNB
->
CC_id
,
frame
,
subframe
,
frame
,
subframe
,
...
@@ -2502,6 +2504,7 @@ void eNB_fep_full(PHY_VARS_eNB *eNB) {
...
@@ -2502,6 +2504,7 @@ void eNB_fep_full(PHY_VARS_eNB *eNB) {
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
LTE_DL_FRAME_PARMS
*
fp
=&
eNB
->
frame_parms
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
1
);
start_meas
(
&
eNB
->
ofdm_demod_stats
);
remove_7_5_kHz
(
eNB
,
proc
->
subframe_rx
<<
1
);
remove_7_5_kHz
(
eNB
,
proc
->
subframe_rx
<<
1
);
remove_7_5_kHz
(
eNB
,
1
+
(
proc
->
subframe_rx
<<
1
));
remove_7_5_kHz
(
eNB
,
1
+
(
proc
->
subframe_rx
<<
1
));
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
{
for
(
l
=
0
;
l
<
fp
->
symbols_per_tti
/
2
;
l
++
)
{
...
@@ -2520,6 +2523,7 @@ void eNB_fep_full(PHY_VARS_eNB *eNB) {
...
@@ -2520,6 +2523,7 @@ void eNB_fep_full(PHY_VARS_eNB *eNB) {
0
0
);
);
}
}
stop_meas
(
&
eNB
->
ofdm_demod_stats
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
0
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP
,
0
);
...
@@ -2626,10 +2630,11 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
...
@@ -2626,10 +2630,11 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
const
int
frame
=
proc
->
frame_rx
;
const
int
frame
=
proc
->
frame_rx
;
int
offset
=
(
proc
==
&
eNB
->
proc
.
proc_rxtx
[
0
])
?
0
:
1
;
int
offset
=
(
proc
==
&
eNB
->
proc
.
proc_rxtx
[
0
])
?
0
:
1
;
if
((
fp
->
frame_type
==
TDD
)
&&
(
subframe_select
(
fp
,
subframe
)
!=
SF_UL
))
return
;
if
((
fp
->
frame_type
==
TDD
)
&&
(
subframe_select
(
fp
,
subframe
)
!=
SF_UL
))
return
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC
+
offset
,
1
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_RX_UESPEC
+
offset
,
1
);
start_meas
(
&
eNB
->
phy_proc_rx
);
#ifdef DEBUG_PHY_PROC
#ifdef DEBUG_PHY_PROC
LOG_D
(
PHY
,
"[eNB %d] Frame %d: Doing phy_procedures_eNB_uespec_RX(%d)
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
);
LOG_D
(
PHY
,
"[eNB %d] Frame %d: Doing phy_procedures_eNB_uespec_RX(%d)
\n
"
,
eNB
->
Mod_id
,
frame
,
subframe
);
#endif
#endif
...
@@ -2920,14 +2925,15 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
...
@@ -2920,14 +2925,15 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
eNB
->
UE_stats
[
i
].
ulsch_consecutive_errors
++
;
eNB
->
UE_stats
[
i
].
ulsch_consecutive_errors
++
;
// indicate error to MAC
// indicate error to MAC
mac_xface
->
rx_sdu
(
eNB
->
Mod_id
,
if
(
eNB
->
mac_enabled
==
1
)
eNB
->
CC_id
,
mac_xface
->
rx_sdu
(
eNB
->
Mod_id
,
frame
,
subframe
,
eNB
->
CC_id
,
eNB
->
ulsch
[
i
]
->
rnti
,
frame
,
subframe
,
NULL
,
eNB
->
ulsch
[
i
]
->
rnti
,
0
,
NULL
,
harq_pid
,
0
,
&
eNB
->
ulsch
[
i
]
->
Msg3_flag
);
harq_pid
,
&
eNB
->
ulsch
[
i
]
->
Msg3_flag
);
}
}
}
}
}
// ulsch in error
}
// ulsch in error
...
@@ -2987,15 +2993,15 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
...
@@ -2987,15 +2993,15 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,const
LOG_I
(
PHY
,
"[eNB %d][RAPROC] Frame %d Terminating ra_proc for harq %d, UE %d
\n
"
,
LOG_I
(
PHY
,
"[eNB %d][RAPROC] Frame %d Terminating ra_proc for harq %d, UE %d
\n
"
,
eNB
->
Mod_id
,
eNB
->
Mod_id
,
frame
,
harq_pid
,
i
);
frame
,
harq_pid
,
i
);
if
(
eNB
->
mac_enabled
)
mac_xface
->
rx_sdu
(
eNB
->
Mod_id
,
mac_xface
->
rx_sdu
(
eNB
->
Mod_id
,
eNB
->
CC_id
,
eNB
->
CC_id
,
frame
,
subframe
,
frame
,
subframe
,
eNB
->
ulsch
[
i
]
->
rnti
,
eNB
->
ulsch
[
i
]
->
rnti
,
eNB
->
ulsch
[
i
]
->
harq_processes
[
harq_pid
]
->
b
,
eNB
->
ulsch
[
i
]
->
harq_processes
[
harq_pid
]
->
b
,
eNB
->
ulsch
[
i
]
->
harq_processes
[
harq_pid
]
->
TBS
>>
3
,
eNB
->
ulsch
[
i
]
->
harq_processes
[
harq_pid
]
->
TBS
>>
3
,
harq_pid
,
harq_pid
,
&
eNB
->
ulsch
[
i
]
->
Msg3_flag
);
&
eNB
->
ulsch
[
i
]
->
Msg3_flag
);
// one-shot msg3 detection by MAC: empty PDU (e.g. CRNTI)
// one-shot msg3 detection by MAC: empty PDU (e.g. CRNTI)
if
(
eNB
->
ulsch
[
i
]
->
Msg3_flag
==
0
)
{
if
(
eNB
->
ulsch
[
i
]
->
Msg3_flag
==
0
)
{
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
3e5c274d
...
@@ -828,7 +828,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
...
@@ -828,7 +828,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
int
i
;
int
i
;
int
aa
;
int
aa
;
int
tx_amp
;
int
tx_amp
;
uint8_t
ulsch_input_buffer
[
2700
]
__attribute__
((
aligned
(
16
)));
uint8_t
ulsch_input_buffer
[
5477
]
__attribute__
((
aligned
(
32
)));
uint8_t
access_mode
;
uint8_t
access_mode
;
// get harq_pid from subframe relationship
// get harq_pid from subframe relationship
...
...
openair1/SIMULATION/LTE_PHY/ulsim.c
View file @
3e5c274d
...
@@ -85,6 +85,93 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for tx */
...
@@ -85,6 +85,93 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for tx */
int
n_tx_dropped
=
0
;
/*!< \brief initial max process time for tx */
int
n_tx_dropped
=
0
;
/*!< \brief initial max process time for tx */
int
n_rx_dropped
=
0
;
/*!< \brief initial max process time for rx */
int
n_rx_dropped
=
0
;
/*!< \brief initial max process time for rx */
void
fill_ulsch_dci
(
PHY_VARS_eNB
*
eNB
,
void
*
UL_dci
,
int
first_rb
,
int
nb_rb
,
int
mcs
,
int
ndi
,
int
cqi_flag
)
{
switch
(
eNB
->
frame_parms
.
N_RB_UL
)
{
case
6
:
break
;
case
25
:
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
((
DCI0_5MHz_TDD_1_6_t
*
)
UL_dci
)
->
type
=
0
;
((
DCI0_5MHz_TDD_1_6_t
*
)
UL_dci
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
//printf("nb_rb %d/%d, rballoc %d (dci %x)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_5MHz_TDD_1_6_t*)UL_dci)->rballoc,*(uint32_t *)UL_dci);
((
DCI0_5MHz_TDD_1_6_t
*
)
UL_dci
)
->
mcs
=
mcs
;
((
DCI0_5MHz_TDD_1_6_t
*
)
UL_dci
)
->
ndi
=
ndi
;
((
DCI0_5MHz_TDD_1_6_t
*
)
UL_dci
)
->
TPC
=
0
;
((
DCI0_5MHz_TDD_1_6_t
*
)
UL_dci
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_5MHz_TDD_1_6_t
*
)
UL_dci
)
->
cshift
=
0
;
((
DCI0_5MHz_TDD_1_6_t
*
)
UL_dci
)
->
dai
=
1
;
}
else
{
((
DCI0_5MHz_FDD_t
*
)
UL_dci
)
->
type
=
0
;
((
DCI0_5MHz_FDD_t
*
)
UL_dci
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
// printf("nb_rb %d/%d, rballoc %d (dci %x) (dcip %p)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_5MHz_FDD_t*)UL_dci)->rballoc,*(uint32_t *)UL_dci,UL_dci);
((
DCI0_5MHz_FDD_t
*
)
UL_dci
)
->
mcs
=
mcs
;
((
DCI0_5MHz_FDD_t
*
)
UL_dci
)
->
ndi
=
ndi
;
((
DCI0_5MHz_FDD_t
*
)
UL_dci
)
->
TPC
=
0
;
((
DCI0_5MHz_FDD_t
*
)
UL_dci
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_5MHz_FDD_t
*
)
UL_dci
)
->
cshift
=
0
;
}
break
;
case
50
:
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
((
DCI0_10MHz_TDD_1_6_t
*
)
UL_dci
)
->
type
=
0
;
((
DCI0_10MHz_TDD_1_6_t
*
)
UL_dci
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
// printf("nb_rb %d/%d, rballoc %d (dci %x)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_10MHz_TDD_1_6_t*)UL_dci)->rballoc,*(uint32_t *)UL_dci);
((
DCI0_10MHz_TDD_1_6_t
*
)
UL_dci
)
->
mcs
=
mcs
;
((
DCI0_10MHz_TDD_1_6_t
*
)
UL_dci
)
->
ndi
=
ndi
;
((
DCI0_10MHz_TDD_1_6_t
*
)
UL_dci
)
->
TPC
=
0
;
((
DCI0_10MHz_TDD_1_6_t
*
)
UL_dci
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_10MHz_TDD_1_6_t
*
)
UL_dci
)
->
cshift
=
0
;
((
DCI0_10MHz_TDD_1_6_t
*
)
UL_dci
)
->
dai
=
1
;
}
else
{
((
DCI0_10MHz_FDD_t
*
)
UL_dci
)
->
type
=
0
;
((
DCI0_10MHz_FDD_t
*
)
UL_dci
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
//printf("nb_rb %d/%d, rballoc %d (dci %x)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_10MHz_FDD_t*)UL_dci)->rballoc,*(uint32_t *)UL_dci);
((
DCI0_10MHz_FDD_t
*
)
UL_dci
)
->
mcs
=
mcs
;
((
DCI0_10MHz_FDD_t
*
)
UL_dci
)
->
ndi
=
ndi
;
((
DCI0_10MHz_FDD_t
*
)
UL_dci
)
->
TPC
=
0
;
((
DCI0_10MHz_FDD_t
*
)
UL_dci
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_10MHz_FDD_t
*
)
UL_dci
)
->
cshift
=
0
;
}
break
;
case
100
:
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
((
DCI0_20MHz_TDD_1_6_t
*
)
UL_dci
)
->
type
=
0
;
((
DCI0_20MHz_TDD_1_6_t
*
)
UL_dci
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
// printf("nb_rb %d/%d, rballoc %d (dci %x)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_20MHz_TDD_1_6_t*)UL_dci)->rballoc,*(uint32_t *)UL_dci);
((
DCI0_20MHz_TDD_1_6_t
*
)
UL_dci
)
->
mcs
=
mcs
;
((
DCI0_20MHz_TDD_1_6_t
*
)
UL_dci
)
->
ndi
=
ndi
;
((
DCI0_20MHz_TDD_1_6_t
*
)
UL_dci
)
->
TPC
=
0
;
((
DCI0_20MHz_TDD_1_6_t
*
)
UL_dci
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_20MHz_TDD_1_6_t
*
)
UL_dci
)
->
cshift
=
0
;
((
DCI0_20MHz_TDD_1_6_t
*
)
UL_dci
)
->
dai
=
1
;
}
else
{
((
DCI0_20MHz_FDD_t
*
)
UL_dci
)
->
type
=
0
;
((
DCI0_20MHz_FDD_t
*
)
UL_dci
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
// printf("nb_rb %d/%d, rballoc %d (dci %x) (UL_dci %p)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_20MHz_FDD_t*)UL_dci)->rballoc,*(uint32_t *)UL_dci,(void*)UL_dci);
((
DCI0_20MHz_FDD_t
*
)
UL_dci
)
->
mcs
=
mcs
;
((
DCI0_20MHz_FDD_t
*
)
UL_dci
)
->
ndi
=
ndi
;
((
DCI0_20MHz_FDD_t
*
)
UL_dci
)
->
TPC
=
0
;
((
DCI0_20MHz_FDD_t
*
)
UL_dci
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_20MHz_FDD_t
*
)
UL_dci
)
->
cshift
=
0
;
}
break
;
default:
break
;
}
}
extern
void
eNB_fep_full
(
PHY_VARS_eNB
*
eNB
);
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
argc
,
char
**
argv
)
{
{
...
@@ -190,6 +277,8 @@ int main(int argc, char **argv)
...
@@ -190,6 +277,8 @@ int main(int argc, char **argv)
int
nb_rb_set
=
0
;
int
nb_rb_set
=
0
;
int
threequarter_fs
=
0
;
int
threequarter_fs
=
0
;
int
ndi
;
opp_enabled
=
1
;
// to enable the time meas
opp_enabled
=
1
;
// to enable the time meas
cpu_freq_GHz
=
(
double
)
get_cpu_freq_GHz
();
cpu_freq_GHz
=
(
double
)
get_cpu_freq_GHz
();
...
@@ -488,16 +577,6 @@ int main(int argc, char **argv)
...
@@ -488,16 +577,6 @@ int main(int argc, char **argv)
snr1
=
snr0
+
snr_int
;
snr1
=
snr0
+
snr_int
;
printf
(
"SNR0 %f, SNR1 %f
\n
"
,
snr0
,
snr1
);
printf
(
"SNR0 %f, SNR1 %f
\n
"
,
snr0
,
snr1
);
/*
txdataF = (int **)malloc16(2*sizeof(int*));
txdataF[0] = (int *)malloc16(FRAME_LENGTH_BYTES);
txdataF[1] = (int *)malloc16(FRAME_LENGTH_BYTES);
txdata = (int **)malloc16(2*sizeof(int*));
txdata[0] = (int *)malloc16(FRAME_LENGTH_BYTES);
txdata[1] = (int *)malloc16(FRAME_LENGTH_BYTES);
*/
frame_parms
=
&
eNB
->
frame_parms
;
frame_parms
=
&
eNB
->
frame_parms
;
txdata
=
UE
->
common_vars
.
txdata
;
txdata
=
UE
->
common_vars
.
txdata
;
...
@@ -539,32 +618,6 @@ int main(int argc, char **argv)
...
@@ -539,32 +618,6 @@ int main(int argc, char **argv)
}
}
}
}
/*
if(abstx) {
sprintf(fperen_name,"ULchan_estims_F_mcs%d_rb%d_chanMod%d_nframes%d_chanReal%d.m",mcs,nb_rb,chMod,n_frames,n_ch_rlz);
fperen = fopen(fperen_name,"a+");
fprintf(fperen,"chest_f = [");
fclose(fperen);
sprintf(fmageren_name,"ChanMag_F_mcs%d_rb%d_chanMod%d_nframes%d_chanReal%d.m",mcs,nb_rb,chMod,n_frames,n_ch_rlz);
fmageren = fopen(fmageren_name,"a+");
fprintf(fmageren,"mag_f = [");
fclose(fmageren);
sprintf(flogeren_name,"Log2Max_mcs%d_rb%d_chanMod%d_nframes%d_chanReal%d.m",mcs,nb_rb,chMod,n_frames,n_ch_rlz);
flogeren = fopen(flogeren_name,"a+");
fprintf(flogeren,"mag_f = [");
fclose(flogeren);
}
*/
/*
sprintf(ftxlev_name,"txlevel_mcs%d_rb%d_chanMod%d_nframes%d_chanReal%d.m",mcs,nb_rb,chMod,n_frames,n_ch_rlz);
ftxlev = fopen(ftxlev_name,"a+");
fprintf(ftxlev,"txlev = [");
fclose(ftexlv);
*/
if
(
abstx
)
{
if
(
abstx
)
{
// CSV file
// CSV file
sprintf
(
csv_fname
,
"EULdataout_tx%d_mcs%d_nbrb%d_chan%d_nsimus%d_eren.m"
,
transmission_mode
,
mcs
,
nb_rb
,
chMod
,
n_frames
);
sprintf
(
csv_fname
,
"EULdataout_tx%d_mcs%d_nbrb%d_chan%d_nsimus%d_eren.m"
,
transmission_mode
,
mcs
,
nb_rb
,
chMod
,
n_frames
);
...
@@ -581,10 +634,6 @@ int main(int argc, char **argv)
...
@@ -581,10 +634,6 @@ int main(int argc, char **argv)
s_im
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
s_im
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
r_re
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
r_re
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
r_im
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
r_im
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
// r_re0[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
// bzero(r_re0[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
// r_im0[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
// bzero(r_im0[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
}
}
...
@@ -660,85 +709,6 @@ int main(int argc, char **argv)
...
@@ -660,85 +709,6 @@ int main(int argc, char **argv)
}
}
switch
(
eNB
->
frame_parms
.
N_RB_UL
)
{
case
6
:
break
;
case
25
:
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
((
DCI0_5MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
type
=
0
;
((
DCI0_5MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
// printf("nb_rb %d/%d, rballoc %d (dci %x)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_5MHz_TDD_1_6_t*)&UL_alloc_pdu)->rballoc,*(uint32_t *)&UL_alloc_pdu);
((
DCI0_5MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
mcs
=
mcs
;
((
DCI0_5MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
ndi
=
1
;
((
DCI0_5MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
TPC
=
0
;
((
DCI0_5MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_5MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
cshift
=
0
;
((
DCI0_5MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
dai
=
1
;
}
else
{
((
DCI0_5MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
type
=
0
;
((
DCI0_5MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
// printf("nb_rb %d/%d, rballoc %d (dci %x)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_5MHz_FDD_t*)&UL_alloc_pdu)->rballoc,*(uint32_t *)&UL_alloc_pdu);
((
DCI0_5MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
mcs
=
mcs
;
((
DCI0_5MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
ndi
=
1
;
((
DCI0_5MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
TPC
=
0
;
((
DCI0_5MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_5MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
cshift
=
0
;
}
break
;
case
50
:
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
((
DCI0_10MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
type
=
0
;
((
DCI0_10MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
// printf("nb_rb %d/%d, rballoc %d (dci %x)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_10MHz_TDD_1_6_t*)&UL_alloc_pdu)->rballoc,*(uint32_t *)&UL_alloc_pdu);
((
DCI0_10MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
mcs
=
mcs
;
((
DCI0_10MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
ndi
=
1
;
((
DCI0_10MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
TPC
=
0
;
((
DCI0_10MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_10MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
cshift
=
0
;
((
DCI0_10MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
dai
=
1
;
}
else
{
((
DCI0_10MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
type
=
0
;
((
DCI0_10MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
//printf("nb_rb %d/%d, rballoc %d (dci %x)\n",nb_rb,eNB->frame_parms.N_RB_UL,((DCI0_10MHz_FDD_t*)&UL_alloc_pdu)->rballoc,*(uint32_t *)&UL_alloc_pdu);
((
DCI0_10MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
mcs
=
mcs
;
((
DCI0_10MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
ndi
=
1
;
((
DCI0_10MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
TPC
=
0
;
((
DCI0_10MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_10MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
cshift
=
0
;
}
break
;
case
100
:
if
(
eNB
->
frame_parms
.
frame_type
==
TDD
)
{
((
DCI0_20MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
type
=
0
;
((
DCI0_20MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
printf
(
"nb_rb %d/%d, rballoc %d (dci %x)
\n
"
,
nb_rb
,
eNB
->
frame_parms
.
N_RB_UL
,((
DCI0_20MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
rballoc
,
*
(
uint32_t
*
)
&
UL_alloc_pdu
);
((
DCI0_20MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
mcs
=
mcs
;
((
DCI0_20MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
ndi
=
1
;
((
DCI0_20MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
TPC
=
0
;
((
DCI0_20MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_20MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
cshift
=
0
;
((
DCI0_20MHz_TDD_1_6_t
*
)
&
UL_alloc_pdu
)
->
dai
=
1
;
}
else
{
((
DCI0_20MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
type
=
0
;
((
DCI0_20MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
rballoc
=
computeRIV
(
eNB
->
frame_parms
.
N_RB_UL
,
first_rb
,
nb_rb
);
// 12 RBs from position 8
printf
(
"nb_rb %d/%d, rballoc %d (dci %x)
\n
"
,
nb_rb
,
eNB
->
frame_parms
.
N_RB_UL
,((
DCI0_20MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
rballoc
,
*
(
uint32_t
*
)
&
UL_alloc_pdu
);
((
DCI0_20MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
mcs
=
mcs
;
((
DCI0_20MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
ndi
=
1
;
((
DCI0_20MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
TPC
=
0
;
((
DCI0_20MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
cqi_req
=
cqi_flag
&
1
;
((
DCI0_20MHz_FDD_t
*
)
&
UL_alloc_pdu
)
->
cshift
=
0
;
}
break
;
default:
break
;
}
UE
->
measurements
.
rank
[
0
]
=
0
;
UE
->
measurements
.
rank
[
0
]
=
0
;
...
@@ -753,16 +723,21 @@ int main(int argc, char **argv)
...
@@ -753,16 +723,21 @@ int main(int argc, char **argv)
UE
->
frame_parms
.
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
groupAssignmentPUSCH
=
0
;
UE
->
frame_parms
.
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
groupAssignmentPUSCH
=
0
;
eNB
->
frame_parms
.
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
groupAssignmentPUSCH
=
0
;
eNB
->
frame_parms
.
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
groupAssignmentPUSCH
=
0
;
UE
->
mac_enabled
=
0
;
eNB_rxtx_proc_t
*
proc_rxtx
=
&
eNB
->
proc
.
proc_rxtx
[
subframe
&
1
];
eNB_rxtx_proc_t
*
proc_rxtx
=
&
eNB
->
proc
.
proc_rxtx
[
subframe
&
1
];
UE_rxtx_proc_t
*
proc_rxtx_ue
=
&
UE
->
proc
.
proc_rxtx
[
subframe
&
1
];
proc_rxtx
->
frame_rx
=
1
;
proc_rxtx
->
frame_rx
=
1
;
proc_rxtx
->
subframe_rx
=
subframe
;
proc_rxtx
->
subframe_rx
=
subframe
;
proc_rxtx
->
frame_tx
=
pdcch_alloc2ul_frame
(
&
eNB
->
frame_parms
,
1
,
subframe
);
proc_rxtx
->
frame_tx
=
pdcch_alloc2ul_frame
(
&
eNB
->
frame_parms
,
1
,
subframe
);
proc_rxtx
->
subframe_tx
=
pdcch_alloc2ul_subframe
(
&
eNB
->
frame_parms
,
subframe
);
proc_rxtx
->
subframe_tx
=
pdcch_alloc2ul_subframe
(
&
eNB
->
frame_parms
,
subframe
);
UE
->
frame_tx
=
proc_rxtx
->
frame_rx
;
proc_rxtx_ue
->
frame_tx
=
proc_rxtx
->
frame_rx
;
UE
->
frame_rx
=
proc_rxtx
->
frame_tx
;
proc_rxtx_ue
->
frame_rx
=
proc_rxtx
->
frame_tx
;
proc_rxtx_ue
->
subframe_tx
=
proc_rxtx
->
subframe_rx
;
proc_rxtx_ue
->
subframe_rx
=
proc_rxtx
->
subframe_tx
;
printf
(
"Init UL hopping UE
\n
"
);
printf
(
"Init UL hopping UE
\n
"
);
init_ul_hopping
(
&
UE
->
frame_parms
);
init_ul_hopping
(
&
UE
->
frame_parms
);
...
@@ -774,11 +749,13 @@ int main(int argc, char **argv)
...
@@ -774,11 +749,13 @@ int main(int argc, char **argv)
UE
->
ulsch_Msg3_active
[
eNB_id
]
=
0
;
UE
->
ulsch_Msg3_active
[
eNB_id
]
=
0
;
UE
->
ul_power_control_dedicated
[
eNB_id
].
accumulationEnabled
=
1
;
UE
->
ul_power_control_dedicated
[
eNB_id
].
accumulationEnabled
=
1
;
/*
generate_ue_ulsch_params_from_dci((void *)&UL_alloc_pdu,
generate_ue_ulsch_params_from_dci((void *)&UL_alloc_pdu,
14,
14,
proc_rxtx->subframe_tx,
proc_rxtx->subframe_tx,
format0,
format0,
UE,
UE,
proc_rxtx_ue,
SI_RNTI,
SI_RNTI,
0,
0,
P_RNTI,
P_RNTI,
...
@@ -798,6 +775,7 @@ int main(int argc, char **argv)
...
@@ -798,6 +775,7 @@ int main(int argc, char **argv)
P_RNTI,
P_RNTI,
CBA_RNTI,
CBA_RNTI,
srs_flag);
srs_flag);
*/
coded_bits_per_codeword
=
nb_rb
*
(
12
*
get_Qm_ul
(
mcs
))
*
nsymb
;
coded_bits_per_codeword
=
nb_rb
*
(
12
*
get_Qm_ul
(
mcs
))
*
nsymb
;
...
@@ -845,7 +823,7 @@ int main(int argc, char **argv)
...
@@ -845,7 +823,7 @@ int main(int argc, char **argv)
//randominit(0);
//randominit(0);
harq_pid
=
subframe2harq_pid
(
&
UE
->
frame_parms
,
UE
->
frame_tx
,
subframe
);
harq_pid
=
subframe2harq_pid
(
&
UE
->
frame_parms
,
proc_rxtx_ue
->
frame_tx
,
subframe
);
input_buffer_length
=
UE
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
TBS
/
8
;
input_buffer_length
=
UE
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
TBS
/
8
;
input_buffer
=
(
unsigned
char
*
)
memalign
(
32
,
input_buffer_length
+
64
);
input_buffer
=
(
unsigned
char
*
)
memalign
(
32
,
input_buffer_length
+
64
);
// printf("UL frame %d/subframe %d, harq_pid %d\n",UE->frame,subframe,harq_pid);
// printf("UL frame %d/subframe %d, harq_pid %d\n",UE->frame,subframe,harq_pid);
...
@@ -927,7 +905,7 @@ int main(int argc, char **argv)
...
@@ -927,7 +905,7 @@ int main(int argc, char **argv)
reset_meas
(
&
eNB
->
ulsch_tc_intl1_stats
);
reset_meas
(
&
eNB
->
ulsch_tc_intl1_stats
);
reset_meas
(
&
eNB
->
ulsch_tc_intl2_stats
);
reset_meas
(
&
eNB
->
ulsch_tc_intl2_stats
);
// initialization
// initialization
struct
list
time_vector_tx
;
struct
list
time_vector_tx
;
initialize
(
&
time_vector_tx
);
initialize
(
&
time_vector_tx
);
struct
list
time_vector_tx_ifft
;
struct
list
time_vector_tx_ifft
;
...
@@ -946,32 +924,50 @@ int main(int argc, char **argv)
...
@@ -946,32 +924,50 @@ int main(int argc, char **argv)
struct
list
time_vector_rx_dec
;
struct
list
time_vector_rx_dec
;
initialize
(
&
time_vector_rx_dec
);
initialize
(
&
time_vector_rx_dec
);
ndi
=
0
;
for
(
trials
=
0
;
trials
<
n_frames
;
trials
++
)
{
for
(
trials
=
0
;
trials
<
n_frames
;
trials
++
)
{
// printf("*");
// printf("*");
// UE->frame++;
// UE->frame++;
// eNB->frame++;
// eNB->frame++;
ndi
=
(
1
-
ndi
);
fflush
(
stdout
);
fflush
(
stdout
);
round
=
0
;
round
=
0
;
while
(
round
<
4
)
{
while
(
round
<
4
)
{
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
round
=
round
;
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
round
=
round
;
UE
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
round
=
round
;
UE
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
round
=
round
;
// printf("Trial %d : Round %d ",trials,round
);
// printf("Trial %d : Round %d (subframe %d, frame %d)\n",trials,round,proc_rxtx_ue->subframe_rx,proc_rxtx_ue->frame_rx
);
round_trials
[
round
]
++
;
round_trials
[
round
]
++
;
if
(
round
==
0
)
{
//eNB->ulsch[0]->harq_processes[harq_pid]->Ndi = 1;
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
rvidx
=
round
>>
1
;
//UE->ulsch[0]->harq_processes[harq_pid]->Ndi = 1;
UE
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
rvidx
=
round
>>
1
;
}
else
{
//eNB->ulsch[0]->harq_processes[harq_pid]->Ndi = 0;
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
rvidx
=
round
>>
1
;
//UE->ulsch[0]->harq_processes[harq_pid]->Ndi = 0;
UE
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
rvidx
=
round
>>
1
;
}
fill_ulsch_dci
(
eNB
,(
void
*
)
&
UL_alloc_pdu
,
first_rb
,
nb_rb
,
mcs
,
ndi
,
cqi_flag
);
UE
->
ulsch_Msg3_active
[
eNB_id
]
=
0
;
UE
->
ul_power_control_dedicated
[
eNB_id
].
accumulationEnabled
=
1
;
generate_ue_ulsch_params_from_dci
((
void
*
)
&
UL_alloc_pdu
,
14
,
proc_rxtx
->
subframe_tx
,
format0
,
UE
,
proc_rxtx_ue
,
SI_RNTI
,
0
,
P_RNTI
,
CBA_RNTI
,
0
,
srs_flag
);
generate_eNB_ulsch_params_from_dci
(
eNB
,
proc_rxtx
,
(
void
*
)
&
UL_alloc_pdu
,
14
,
format0
,
0
,
SI_RNTI
,
0
,
P_RNTI
,
CBA_RNTI
,
srs_flag
);
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
subframe_scheduling_flag
=
1
;
/////////////////////
/////////////////////
if
(
abstx
)
{
if
(
abstx
)
{
...
@@ -991,26 +987,24 @@ int main(int argc, char **argv)
...
@@ -991,26 +987,24 @@ int main(int argc, char **argv)
if
(
input_fdUL
==
NULL
)
{
if
(
input_fdUL
==
NULL
)
{
start_meas
(
&
UE
->
phy_proc_tx
)
;
eNB
->
proc
.
frame_rx
=
1
;
eNB
->
proc
.
subframe_rx
=
subframe
;
#ifdef OFDMA_ULSCH
proc_rxtx_ue
->
frame_tx
=
proc_rxtx
->
frame_rx
;
proc_rxtx_ue
->
frame_rx
=
proc_rxtx
->
frame_tx
;
if
(
srs_flag
)
proc_rxtx_ue
->
subframe_tx
=
proc_rxtx
->
subframe_rx
;
generate_srs_tx
(
UE
,
0
,
AMP
,
subframe
)
;
proc_rxtx_ue
->
subframe_rx
=
proc_rxtx
->
subframe_tx
;
generate_drs_pusch
(
UE
,
0
,
AMP
,
subframe
,
first_rb
,
nb_rb
,
0
);
phy_procedures_UE_TX
(
UE
,
proc_rxtx_ue
,
0
,
0
,
normal_txrx
,
no_relay
);
#else
/*
if (srs_flag)
if (srs_flag)
generate_srs_tx(UE,0,AMP,subframe);
generate_srs_tx(UE,0,AMP,subframe);
generate_drs_pusch
(
UE
,
0
,
generate_drs_pusch(UE,
proc_rxtx_ue,
0,
AMP,subframe,
AMP,subframe,
UE->ulsch[0]->harq_processes[harq_pid]->first_rb,
UE->ulsch[0]->harq_processes[harq_pid]->first_rb,
UE->ulsch[0]->harq_processes[harq_pid]->nb_rb,
UE->ulsch[0]->harq_processes[harq_pid]->nb_rb,
0);
0);
#endif
if ((cqi_flag == 1) && (n_frames == 1) ) {
if ((cqi_flag == 1) && (n_frames == 1) ) {
printf("CQI information (O %d) %d %d\n",UE->ulsch[0]->O,
printf("CQI information (O %d) %d %d\n",UE->ulsch[0]->O,
...
@@ -1037,27 +1031,17 @@ int main(int argc, char **argv)
...
@@ -1037,27 +1031,17 @@ int main(int argc, char **argv)
stop_meas(&UE->ulsch_encoding_stats);
stop_meas(&UE->ulsch_encoding_stats);
start_meas(&UE->ulsch_modulation_stats);
start_meas(&UE->ulsch_modulation_stats);
#ifdef OFDMA_ULSCH
ulsch_modulation
(
UE
->
common_vars
.
txdataF
,
AMP
,
UE
->
frame_tx
,
subframe
,
&
UE
->
frame_parms
,
UE
->
ulsch
[
0
]);
#else
// printf("Generating PUSCH in subframe %d with amp %d, nb_rb %d\n",subframe,AMP,nb_rb);
ulsch_modulation(UE->common_vars.txdataF,AMP,
ulsch_modulation(UE->common_vars.txdataF,AMP,
UE
->
frame_tx
,
subframe
,
&
UE
->
frame_parms
,
proc_rxtx_ue
->frame_tx,subframe,&UE->frame_parms,
UE->ulsch[0]);
UE->ulsch[0]);
#endif
stop_meas(&UE->ulsch_modulation_stats);
stop_meas(&UE->ulsch_modulation_stats);
*/
if
(
n_frames
==
1
)
{
write_output
(
"txsigF0UL.m"
,
"txsF0"
,
&
UE
->
common_vars
.
txdataF
[
0
][
eNB
->
frame_parms
.
ofdm_symbol_size
*
nsymb
*
subframe
],
eNB
->
frame_parms
.
ofdm_symbol_size
*
nsymb
,
1
,
1
);
//write_output("txsigF1.m","txsF1", UE->common_vars.txdataF[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
}
tx_lev
=
0
;
start_meas
(
&
UE
->
ofdm_mod_stats
);
for
(
aa
=
0
;
aa
<
1
;
aa
++
)
{
/*
for (aa=0; aa<1; aa++) {
if (frame_parms->Ncp == EXTENDED)
if (frame_parms->Ncp == EXTENDED)
PHY_ofdm_mod(&UE->common_vars.txdataF[aa][subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX], // input
PHY_ofdm_mod(&UE->common_vars.txdataF[aa][subframe*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX], // input
&txdata[aa][eNB->frame_parms.samples_per_tti*subframe], // output
&txdata[aa][eNB->frame_parms.samples_per_tti*subframe], // output
...
@@ -1071,20 +1055,24 @@ int main(int argc, char **argv)
...
@@ -1071,20 +1055,24 @@ int main(int argc, char **argv)
nsymb,
nsymb,
frame_parms);
frame_parms);
#ifndef OFDMA_ULSCH
apply_7_5_kHz(UE,UE->common_vars.txdata[aa],subframe<<1);
apply_7_5_kHz(UE,UE->common_vars.txdata[aa],subframe<<1);
apply_7_5_kHz(UE,UE->common_vars.txdata[aa],1+(subframe<<1));
apply_7_5_kHz(UE,UE->common_vars.txdata[aa],1+(subframe<<1));
#endif
stop_meas
(
&
UE
->
ofdm_mod_stats
);
*/
stop_meas
(
&
UE
->
phy_proc_tx
);
tx_lev
+=
signal_energy
(
&
txdata
[
aa
][
eNB
->
frame_parms
.
samples_per_tti
*
subframe
],
eNB
->
frame_parms
.
samples_per_tti
);
tx_lev
=
signal_energy
(
&
UE
->
common_vars
.
txdata
[
0
][
eNB
->
frame_parms
.
samples_per_tti
*
subframe
],
eNB
->
frame_parms
.
samples_per_tti
);
if
(
n_frames
==
1
)
{
write_output
(
"txsigF0UL.m"
,
"txsF0"
,
&
UE
->
common_vars
.
txdataF
[
0
][
eNB
->
frame_parms
.
ofdm_symbol_size
*
nsymb
*
subframe
],
eNB
->
frame_parms
.
ofdm_symbol_size
*
nsymb
,
1
,
1
);
//write_output("txsigF1.m","txsF1", UE->common_vars.txdataF[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1);
}
}
}
// input_fd == NULL
}
// input_fd == NULL
tx_lev_dB
=
(
unsigned
int
)
dB_fixed_times10
(
tx_lev
);
tx_lev_dB
=
(
unsigned
int
)
dB_fixed_times10
(
tx_lev
);
if
(
n_frames
==
1
)
{
if
(
n_frames
==
1
)
{
...
@@ -1100,7 +1088,8 @@ int main(int argc, char **argv)
...
@@ -1100,7 +1088,8 @@ int main(int argc, char **argv)
// compute tx_gain to achieve target SNR (per resource element!)
// compute tx_gain to achieve target SNR (per resource element!)
tx_gain
=
sqrt
(
pow
(
10
.
0
,.
1
*
(
N0
+
SNR
))
*
(
nb_rb
*
12
/
(
double
)
UE
->
frame_parms
.
ofdm_symbol_size
)
/
(
double
)
tx_lev
);
tx_gain
=
sqrt
(
pow
(
10
.
0
,.
1
*
(
N0
+
SNR
))
*
(
nb_rb
*
12
/
(
double
)
UE
->
frame_parms
.
ofdm_symbol_size
)
/
(
double
)
tx_lev
);
if
(
n_frames
==
1
)
if
(
n_frames
==
1
)
printf
(
"tx_lev = %d (%d.%d dB,%f), gain %f
\n
"
,
tx_lev
,
tx_lev_dB
/
10
,
tx_lev_dB
,
10
*
log10
((
double
)
tx_lev
),
10
*
log10
(
tx_gain
));
printf
(
"tx_lev = %d (%d.%d dB,%f), gain %f
\n
"
,
tx_lev
,
tx_lev_dB
/
10
,
tx_lev_dB
,
10
*
log10
((
double
)
tx_lev
),
10
*
log10
(
tx_gain
));
...
@@ -1117,8 +1106,8 @@ int main(int argc, char **argv)
...
@@ -1117,8 +1106,8 @@ int main(int argc, char **argv)
for
(
i
=
0
;
i
<
eNB
->
frame_parms
.
samples_per_tti
;
i
++
)
{
for
(
i
=
0
;
i
<
eNB
->
frame_parms
.
samples_per_tti
;
i
++
)
{
for
(
aa
=
0
;
aa
<
1
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
1
;
aa
++
)
{
s_re
[
aa
][
i
]
=
((
double
)(((
short
*
)
&
txdata
[
aa
][
eNB
->
frame_parms
.
samples_per_tti
*
subframe
]))[(
i
<<
1
)]);
s_re
[
aa
][
i
]
=
((
double
)(((
short
*
)
&
UE
->
common_vars
.
txdata
[
aa
][
eNB
->
frame_parms
.
samples_per_tti
*
subframe
]))[(
i
<<
1
)]);
s_im
[
aa
][
i
]
=
((
double
)(((
short
*
)
&
txdata
[
aa
][
eNB
->
frame_parms
.
samples_per_tti
*
subframe
]))[(
i
<<
1
)
+
1
]);
s_im
[
aa
][
i
]
=
((
double
)(((
short
*
)
&
UE
->
common_vars
.
txdata
[
aa
][
eNB
->
frame_parms
.
samples_per_tti
*
subframe
]))[(
i
<<
1
)
+
1
]);
}
}
}
}
...
@@ -1191,74 +1180,13 @@ int main(int argc, char **argv)
...
@@ -1191,74 +1180,13 @@ int main(int argc, char **argv)
//write_output("rxsig1UL.m","rxs1", &eNB->common_vars.rxdata[0][0][eNB->frame_parms.samples_per_tti*subframe],eNB->frame_parms.samples_per_tti,1,1);
//write_output("rxsig1UL.m","rxs1", &eNB->common_vars.rxdata[0][0][eNB->frame_parms.samples_per_tti*subframe],eNB->frame_parms.samples_per_tti,1,1);
}
}
#ifndef OFDMA_ULSCH
remove_7_5_kHz
(
eNB
,
subframe
<<
1
);
remove_7_5_kHz
(
eNB
,
1
+
(
subframe
<<
1
));
// write_output("rxsig0_75.m","rxs0_75", &eNB->common_vars.rxdata[0][0][eNB->frame_parms.samples_per_tti*subframe],eNB->frame_parms.samples_per_tti,1,1);
// write_output("rxsig1_75.m","rxs1_75", &eNB->common_vars.rxdata[0][0][eNB->frame_parms.samples_per_tti*subframe],eNB->frame_parms.samples_per_tti,1,1);
#endif
start_meas
(
&
eNB
->
phy_proc_rx
);
start_meas
(
&
eNB
->
ofdm_demod_stats
);
lte_eNB_I0_measurements
(
eNB
,
subframe
,
0
,
1
);
for
(
l
=
subframe
*
UE
->
frame_parms
.
symbols_per_tti
;
l
<
((
1
+
subframe
)
*
UE
->
frame_parms
.
symbols_per_tti
);
l
++
)
{
slot_fep_ul
(
&
eNB
->
frame_parms
,
&
eNB
->
common_vars
,
l
%
(
eNB
->
frame_parms
.
symbols_per_tti
/
2
),
l
/
(
eNB
->
frame_parms
.
symbols_per_tti
/
2
),
0
,
0
);
}
stop_meas
(
&
eNB
->
ofdm_demod_stats
);
eNB
->
ulsch
[
0
]
->
cyclicShift
=
cyclic_shift
;
// cyclic shift for DMRS
eNB
->
fep
=
eNB_fep_full
;
eNB
->
do_prach
=
NULL
;
/*
phy_procedures_eNB_common_RX
(
eNB
);
if(abstx) {
phy_procedures_eNB_uespec_RX
(
eNB
,
proc_rxtx
,
no_relay
);
namepointer_log2 = &flogeren_name;
namepointer_chMag = &fmageren_name;
//namepointer_txlev = &ftxlev;
}
*/
start_meas
(
&
eNB
->
ulsch_demodulation_stats
);
rx_ulsch
(
eNB
,
proc_rxtx
,
0
,
// this is the effective sector id
0
,
// this is the UE_id
eNB
->
ulsch
,
cooperation_flag
);
stop_meas
(
&
eNB
->
ulsch_demodulation_stats
);
/*
if(abstx) {
namepointer_chMag = NULL;
if(trials==0 && round==0 && SNR==snr0) {
char* namepointer ;
namepointer = &fperen_name;
write_output(namepointer, "xxx" ,eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][0],300,1,10);
namepointer = NULL ;
// flagMag = 1;
}
}
*/
start_meas
(
&
eNB
->
ulsch_decoding_stats
);
ret
=
ulsch_decoding
(
eNB
,
proc_rxtx
,
0
,
// UE_id
control_only_flag
,
1
,
// Nbundled
llr8_flag
);
stop_meas
(
&
eNB
->
ulsch_decoding_stats
);
stop_meas
(
&
eNB
->
phy_proc_rx
);
if
(
cqi_flag
>
0
)
{
if
(
cqi_flag
>
0
)
{
cqi_error
=
0
;
cqi_error
=
0
;
...
@@ -1289,11 +1217,13 @@ int main(int argc, char **argv)
...
@@ -1289,11 +1217,13 @@ int main(int argc, char **argv)
// printf("ulsch_coding: O[%d] %d\n",i,o_flip[i]);
// printf("ulsch_coding: O[%d] %d\n",i,o_flip[i]);
// if (ret <= eNB->ulsch[0]->max_turbo_iterations) {
if
(
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
round
==
0
)
{
if
(
ret
<=
eNB
->
ulsch
[
0
]
->
max_turbo_iterations
)
{
// avg_iter += ret;
iter_trials
++
;
avg_iter
+=
ret
;
iter_trials
++
;
if
(
n_frames
==
1
)
{
if
(
n_frames
==
1
)
{
printf
(
"No ULSCH errors found, o_ACK[0]= %d, cqi_crc_status=%d
\n
"
,
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
o_ACK
[
0
],
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
cqi_crc_status
);
printf
(
"No ULSCH errors found, o_ACK[0]= %d, cqi_crc_status=%d
\n
"
,
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
o_ACK
[
0
],
eNB
->
ulsch
[
0
]
->
harq_processes
[
harq_pid
]
->
cqi_crc_status
);
...
@@ -1308,7 +1238,7 @@ int main(int argc, char **argv)
...
@@ -1308,7 +1238,7 @@ int main(int argc, char **argv)
round
=
5
;
round
=
5
;
}
else
{
}
else
{
avg_iter
+=
ret
-
1
;
//
avg_iter += ret-1;
iter_trials
++
;
iter_trials
++
;
errs
[
round
]
++
;
errs
[
round
]
++
;
...
@@ -1342,6 +1272,8 @@ int main(int argc, char **argv)
...
@@ -1342,6 +1272,8 @@ int main(int argc, char **argv)
printf
(
"ULSCH in error in round %d
\n
"
,
round
);
printf
(
"ULSCH in error in round %d
\n
"
,
round
);
}
}
}
// ulsch error
}
// ulsch error
}
// round
}
// round
// printf("\n");
// printf("\n");
...
@@ -1757,7 +1689,7 @@ int main(int argc, char **argv)
...
@@ -1757,7 +1689,7 @@ int main(int argc, char **argv)
if
(((
double
)
errs
[
0
]
/
(
round_trials
[
0
]))
<
1e-2
)
if
(((
double
)
errs
[
0
]
/
(
round_trials
[
0
]))
<
1e-2
)
break
;
break
;
}
// SNR
}
// SNR
//
//
...
@@ -1767,30 +1699,8 @@ int main(int argc, char **argv)
...
@@ -1767,30 +1699,8 @@ int main(int argc, char **argv)
}
//ch realization
}
//ch realization
/*
if(abstx) {
fperen = fopen(fperen_name,"a+");
fprintf(fperen,"];\n");
fclose(fperen);
fmageren = fopen(fmageren_name,"a+");
fprintf(fmageren,"];\n");
fclose(fmageren);
flogeren = fopen(flogeren_name,"a+");
fprintf(flogeren,"];\n");
fclose(flogeren);
}
*/
// ftxlev = fopen(ftxlev_name,"a+");
//fprintf(ftxlev,"];\n");
//fclose(ftxlev);
// write_output("chestim_f_dene.m","chestf",ulchestim_f_all,300*12,2,1);*/
if
(
abstx
)
{
// ABSTRACTION
if
(
abstx
)
{
// ABSTRACTION
fprintf
(
csv_fdUL
,
"];"
);
fprintf
(
csv_fdUL
,
"];"
);
fclose
(
csv_fdUL
);
fclose
(
csv_fdUL
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment