Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
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
常顺宇
OpenXG-RAN
Commits
13483270
Commit
13483270
authored
Oct 31, 2014
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@5950
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
e67c9df2
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
1633 additions
and
659 deletions
+1633
-659
openair1/PHY/INIT/lte_init.c
openair1/PHY/INIT/lte_init.c
+3
-3
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
+7
-101
openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
+44
-44
openair1/PHY/LTE_TRANSPORT/dci.c
openair1/PHY/LTE_TRANSPORT/dci.c
+22
-192
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+685
-85
openair1/PHY/LTE_TRANSPORT/print_stats.c
openair1/PHY/LTE_TRANSPORT/print_stats.c
+337
-71
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+7
-7
openair1/PHY/LTE_TRANSPORT/rar_tools.c
openair1/PHY/LTE_TRANSPORT/rar_tools.c
+2
-2
openair1/PHY/LTE_TRANSPORT/uci.h
openair1/PHY/LTE_TRANSPORT/uci.h
+169
-3
openair1/PHY/LTE_TRANSPORT/uci_tools.c
openair1/PHY/LTE_TRANSPORT/uci_tools.c
+267
-78
openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
+5
-5
openair1/PHY/MODULATION/slot_fep.c
openair1/PHY/MODULATION/slot_fep.c
+38
-21
openair1/PHY/impl_defs_top.h
openair1/PHY/impl_defs_top.h
+8
-8
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+2
-2
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+2
-2
openair1/SIMULATION/LTE_PHY/pdcchsim.c
openair1/SIMULATION/LTE_PHY/pdcchsim.c
+33
-33
openair1/SIMULATION/LTE_PHY/ulsim.c
openair1/SIMULATION/LTE_PHY/ulsim.c
+2
-2
No files found.
openair1/PHY/INIT/lte_init.c
View file @
13483270
...
...
@@ -934,7 +934,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
#ifndef USER_MODE
ue_common_vars
->
rxdata
[
i
]
=
(
int
*
)
RX_DMA_BUFFER
[
0
][
i
];
#else //USER_MODE
ue_common_vars
->
rxdata
[
i
]
=
(
int
*
)
malloc16
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
int
));
ue_common_vars
->
rxdata
[
i
]
=
(
int
*
)
malloc16
(
(
FRAME_LENGTH_COMPLEX_SAMPLES
+
2048
)
*
sizeof
(
int
));
#endif //USER_MODE
if
(
ue_common_vars
->
rxdata
[
i
])
{
#ifdef DEBUG_PHY
...
...
@@ -1016,7 +1016,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
{
//frame_parms->nb_antennas_tx; j++) {
for
(
j
=
0
;
j
<
4
;
j
++
)
{
ue_common_vars
->
dl_ch_estimates
[
eNB_id
][(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
frame_parms
->
symbols_per_tti
*
sizeof
(
int
)
*
(
frame_parms
->
ofdm_symbol_size
)
+
LTE_CE_FILTER_LENGTH
);
if
(
ue_common_vars
->
dl_ch_estimates
[
eNB_id
][(
j
<<
1
)
+
i
])
{
#ifdef DEBUG_PHY
...
...
@@ -1048,7 +1048,7 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
{
//frame_parms->nb_antennas_tx; j++) {
for
(
j
=
0
;
j
<
4
;
j
++
)
{
ue_common_vars
->
dl_ch_estimates_time
[
eNB_id
][(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
ofdm_symbol_size
)
*
2
);
if
(
ue_common_vars
->
dl_ch_estimates_time
[
eNB_id
][(
j
<<
1
)
+
i
])
{
#ifdef DEBUG_PHY
...
...
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
View file @
13483270
...
...
@@ -182,11 +182,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
for
(
aarx
=
0
;
aarx
<
phy_vars_ue
->
lte_frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
pil
=
(
short
*
)
&
pilot
[
p
][
0
];
#ifndef NEW_FFT
rxF
=
(
short
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
k
+
phy_vars_ue
->
lte_frame_parms
.
first_carrier_offset
)
<<
1
)];
#else
rxF
=
(
short
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
k
+
phy_vars_ue
->
lte_frame_parms
.
first_carrier_offset
))];
#endif
dl_ch
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
ch_offset
];
// if (eNb_id==0)
...
...
@@ -206,11 +202,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
// Re Im
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
8
;
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
...
@@ -221,11 +213,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
for
(
pilot_cnt
=
2
;
pilot_cnt
<
((
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
-
1
);
pilot_cnt
+=
2
)
{
...
...
@@ -246,11 +234,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
pil
+=
2
;
// Re Im
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif // 6 samples in replicated format (Re0 Im0 Re0 Im0) !!!
dl_ch
+=
8
;
// printf("pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]);
...
...
@@ -265,11 +249,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
}
...
...
@@ -279,11 +259,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
k
=
(
nu
+
nushift
)
%
6
;
if
(
k
>
6
)
k
-=
6
;
#ifndef NEW_FFT
rxF
=
(
short
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
1
+
k
)
<<
1
)];
#else
rxF
=
(
short
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
1
+
k
))];
#endif
for
(
pilot_cnt
=
0
;
pilot_cnt
<
((
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
-
3
);
pilot_cnt
+=
2
)
{
// printf("pilot[%d][%d] (%d,%d)\n",p,pilot_cnt,pil[0],pil[1]);
// printf("rx[%d] -> (%d,%d)\n", k+6, rxF[0], rxF[1]);
...
...
@@ -298,11 +275,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
8
;
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
...
@@ -314,11 +287,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
}
...
...
@@ -331,11 +300,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
// Re Im
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif // remember replicated format (Re0 Im0 Re0 Im0) !!!
dl_ch
+=
8
;
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
...
@@ -368,11 +333,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
// Re Im
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif // remember replicated format (Re0 Im0 Re0 Im0) !!!
dl_ch
+=
8
;
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
...
@@ -390,11 +351,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
for
(
pilot_cnt
=
2
;
pilot_cnt
<
24
;
pilot_cnt
+=
2
)
{
...
...
@@ -418,11 +375,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
// Re Im
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif // remember replicated format (Re0 Im0 Re0 Im0) !!!
dl_ch
+=
8
;
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
...
@@ -439,11 +392,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
}
...
...
@@ -467,11 +416,8 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
// printf("Second half\n");
// Second half of RBs
#ifndef NEW_FFT
rxF
=
(
short
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
1
+
k
)
<<
1
)];
#else
rxF
=
(
short
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
1
+
k
))];
#endif
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
1
]
+
(
int
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_CH
...
...
@@ -486,11 +432,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
for
(
pilot_cnt
=
0
;
pilot_cnt
<
22
;
pilot_cnt
+=
2
)
{
...
...
@@ -512,11 +454,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
8
;
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
...
@@ -533,11 +471,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
}
...
...
@@ -558,11 +492,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
// Re Im
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif// remember replicated format (Re0 Im0 Re0 Im0) !!!
dl_ch
+=
8
;
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
...
@@ -601,12 +531,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
// Re Im
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
// remember replicated format (Re0 Im0 Re0 Im0) !!!
dl_ch
+=
8
;
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
...
@@ -617,11 +542,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
}
...
...
@@ -638,11 +559,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
//printf("Second half\n");
//Second half of RBs
#ifndef NEW_FFT
rxF
=
(
short
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
1
+
nushift
+
(
3
*
p
))
<<
1
)];
#else
rxF
=
(
short
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
1
+
nushift
+
(
3
*
p
)))];
#endif
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
1
]
+
(
int
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
...
...
@@ -651,11 +568,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
for
(
rb
=
0
;
rb
<
28
;
rb
+=
4
)
{
...
...
@@ -673,11 +586,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
8
;
ch
[
0
]
=
(
short
)(((
int
)
pil
[
0
]
*
rxF
[
0
]
-
(
int
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
...
@@ -688,11 +597,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
dl_ch
,
24
);
pil
+=
2
;
#ifndef NEW_FFT
rxF
+=
24
;
// remember replicated format (Re0 Im0 Re0 Im0) !!!
#else
rxF
+=
12
;
#endif
dl_ch
+=
16
;
}
...
...
@@ -795,10 +700,11 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
break
;
}
// do ifft of channel estimate
for
(
aa
=
0
;
aa
<
phy_vars_ue
->
lte_frame_parms
.
nb_antennas_rx
*
phy_vars_ue
->
lte_frame_parms
.
nb_antennas_tx_eNB
;
aa
++
)
{
if
(
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_offset
][
aa
])
idft
((
int16_t
*
)
&
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_offset
][
aa
][
8
],
(
int16_t
*
)
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates_time
[
eNB_offset
][
aa
],
1
);
for
(
aarx
=
0
;
aarx
<
phy_vars_ue
->
lte_frame_parms
.
nb_antennas_rx
;
aarx
++
)
for
(
p
=
0
;
p
<
phy_vars_ue
->
lte_frame_parms
.
nb_antennas_tx_eNB
;
p
++
)
{
if
(
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_offset
][(
p
<<
1
)
+
aarx
])
idft
((
int16_t
*
)
&
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_offset
][(
p
<<
1
)
+
aarx
][
8
],
(
int16_t
*
)
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates_time
[
eNB_offset
][(
p
<<
1
)
+
aarx
],
1
);
}
return
(
0
);
}
...
...
openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
View file @
13483270
...
...
@@ -302,36 +302,32 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
__m128i
*
dl_ch0_128
,
*
dl_ch1_128
;
int
*
dl_ch0
,
*
dl_ch1
;
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
phy_vars_ue
->
lte_frame_parms
;
phy_vars_ue
->
PHY_measurements
.
nb_antennas_rx
=
frame_parms
->
nb_antennas_rx
;
gain_offset
=
0
;
#ifndef __SSE3__
zeroPMI
=
_mm_xor_si128
(
zeroPMI
,
zeroPMI
);
#endif
if
(
phy_vars_ue
->
init_averaging
==
1
)
{
for
(
eNB_id
=
0
;
eNB_id
<
phy_vars_ue
->
n_connected_eNB
;
eNB_id
++
)
{
phy_vars_ue
->
PHY_measurements
.
rx_power_avg
[
eNB_id
]
=
0
;
}
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
phy_vars_ue
->
PHY_measurements
.
n0_power
[
aarx
]
=
0
;
phy_vars_ue
->
PHY_measurements
.
n0_power_dB
[
aarx
]
=
0
;
}
phy_vars_ue
->
PHY_measurements
.
n0_power_tot
=
0
;
phy_vars_ue
->
PHY_measurements
.
n0_power_tot_dB
=
0
;
phy_vars_ue
->
PHY_measurements
.
n0_power_avg
=
0
;
phy_vars_ue
->
PHY_measurements
.
n0_power_avg_dB
=
0
;
int
nb_subbands
,
subband_size
,
last_subband_size
;
int
N_RB_DL
=
frame_parms
->
N_RB_DL
;
switch
(
N_RB_DL
)
{
case
6
:
nb_subbands
=
6
;
subband_size
=
12
;
last_subband_size
=
0
;
break
;
default:
case
25
:
nb_subbands
=
7
;
subband_size
=
4
*
12
;
last_subband_size
=
12
;
break
;
case
50
:
nb_subbands
=
9
;
subband_size
=
6
*
12
;
last_subband_size
=
2
*
12
;
break
;
case
100
:
nb_subbands
=
13
;
subband_size
=
8
*
12
;
last_subband_size
=
4
*
12
;
break
;
}
// noise measurements
// for abstraction we do noise measurements based on the precalculated phy_vars_ue->N0
// otherwise if there is a symbol where we can take noise measurements on, we measure there
// otherwise do not update the noise measurements
if
(
abstraction_flag
!=
0
)
{
phy_vars_ue
->
PHY_measurements
.
n0_power_tot
=
0
;
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
...
...
@@ -368,7 +364,7 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
for
(
aatx
=
0
;
aatx
<
frame_parms
->
nb_antennas_tx_eNB
;
aatx
++
)
{
phy_vars_ue
->
PHY_measurements
.
rx_spatial_power
[
eNB_id
][
aatx
][
aarx
]
=
(
signal_energy_nodc
(
&
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_id
][(
aatx
<<
1
)
+
aarx
][
0
],
(
frame_parms
->
N_RB_DL
*
12
)));
(
N_RB_DL
*
12
)));
//- phy_vars_ue->PHY_measurements.n0_power[aarx];
if
(
phy_vars_ue
->
PHY_measurements
.
rx_spatial_power
[
eNB_id
][
aatx
][
aarx
]
<
0
)
...
...
@@ -432,19 +428,18 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
dl_ch0
=
&
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_id
][
aarx
][
4
];
dl_ch1
=
&
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_id
][
2
+
aarx
][
4
];
for
(
subband
=
0
;
subband
<
7
;
subband
++
)
{
for
(
subband
=
0
;
subband
<
nb_subbands
;
subband
++
)
{
// cqi
if
(
aarx
==
0
)
phy_vars_ue
->
PHY_measurements
.
subband_cqi_tot
[
eNB_id
][
subband
]
=
0
;
if
(
subband
<
6
)
{
/*
for (i=0;i<48;i++)
if
((
subband
<
(
nb_subbands
-
1
))
||
(
N_RB_DL
==
6
))
{
/*for (i=0;i<48;i++)
msg("subband %d (%d) : %d,%d\n",subband,i,((short *)dl_ch0)[2*i],((short *)dl_ch0)[1+(2*i)]);
*/
phy_vars_ue
->
PHY_measurements
.
subband_cqi
[
eNB_id
][
aarx
][
subband
]
=
(
signal_energy_nodc
(
dl_ch0
,
48
)
+
signal_energy_nodc
(
dl_ch1
,
48
));
(
signal_energy_nodc
(
dl_ch0
,
subband_size
)
+
signal_energy_nodc
(
dl_ch1
,
subband_size
));
if
(
phy_vars_ue
->
PHY_measurements
.
subband_cqi
[
eNB_id
][
aarx
][
subband
]
<
0
)
phy_vars_ue
->
PHY_measurements
.
subband_cqi
[
eNB_id
][
aarx
][
subband
]
=
0
;
/*
...
...
@@ -456,21 +451,22 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB_id
][
aarx
][
subband
]
=
dB_fixed2
(
phy_vars_ue
->
PHY_measurements
.
subband_cqi
[
eNB_id
][
aarx
][
subband
],
phy_vars_ue
->
PHY_measurements
.
n0_power
[
aarx
]);
}
else
{
else
{
// this is for the last subband which is smaller in size
// for (i=0;i<12;i++)
// printf("subband %d (%d) : %d,%d\n",subband,i,((short *)dl_ch0)[2*i],((short *)dl_ch0)[1+(2*i)]);
phy_vars_ue
->
PHY_measurements
.
subband_cqi
[
eNB_id
][
aarx
][
subband
]
=
(
signal_energy_nodc
(
dl_ch0
,
12
)
+
signal_energy_nodc
(
dl_ch1
,
12
));
// - phy_vars_ue->PHY_measurements.n0_power[aarx];
phy_vars_ue
->
PHY_measurements
.
subband_cqi
[
eNB_id
][
aarx
][
subband
]
=
(
signal_energy_nodc
(
dl_ch0
,
last_subband_size
)
+
signal_energy_nodc
(
dl_ch1
,
last_subband_size
));
// - phy_vars_ue->PHY_measurements.n0_power[aarx];
phy_vars_ue
->
PHY_measurements
.
subband_cqi_tot
[
eNB_id
][
subband
]
+=
phy_vars_ue
->
PHY_measurements
.
subband_cqi
[
eNB_id
][
aarx
][
subband
];
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB_id
][
aarx
][
subband
]
=
dB_fixed2
(
phy_vars_ue
->
PHY_measurements
.
subband_cqi
[
eNB_id
][
aarx
][
subband
],
phy_vars_ue
->
PHY_measurements
.
n0_power
[
aarx
]);
}
dl_ch1
+=
48
;
dl_ch0
+=
48
;
dl_ch1
+=
subband_size
;
dl_ch0
+=
subband_size
;
// msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,subband,phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband]);
}
}
for
(
subband
=
0
;
subband
<
7
;
subband
++
)
{
for
(
subband
=
0
;
subband
<
nb_subbands
;
subband
++
)
{
phy_vars_ue
->
PHY_measurements
.
subband_cqi_tot_dB
[
eNB_id
][
subband
]
=
dB_fixed2
(
phy_vars_ue
->
PHY_measurements
.
subband_cqi_tot
[
eNB_id
][
subband
],
phy_vars_ue
->
PHY_measurements
.
n0_power_tot
);
// msg("subband_cqi_tot[%d][%d] => %d dB (n0 %d)\n",eNB_id,subband,phy_vars_ue->PHY_measurements.subband_cqi_tot_dB[eNB_id][subband],phy_vars_ue->PHY_measurements.n0_power_tot);
}
...
...
@@ -488,7 +484,7 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
}
#endif
*/
for
(
subband
=
0
;
subband
<
7
;
subband
++
)
{
for
(
subband
=
0
;
subband
<
nb_subbands
;
subband
++
)
{
// pmi
...
...
@@ -497,7 +493,11 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
pmi128_im
=
_mm_xor_si128
(
pmi128_im
,
pmi128_im
);
// limit is the number of groups of 4 REs in a subband (12 = 4 RBs, 3 = 1 RB)
// for 5 MHz channelization, there are 7 subbands, 6 of size 4 RBs and 1 of size 1 RB
limit
=
(
subband
<
6
)
?
12
:
3
;
if
((
N_RB_DL
==
6
)
||
(
subband
<
(
nb_subbands
-
1
)))
limit
=
subband_size
>>
2
;
else
limit
=
last_subband_size
>>
2
;
for
(
i
=
0
;
i
<
limit
;
i
++
)
{
// For each RE in subband perform ch0 * conj(ch1)
...
...
@@ -582,13 +582,13 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
// msg("subband_cqi[%d][%d][%d] => %d (%d dB)\n",eNB_id,aarx,subband,phy_vars_ue->PHY_measurements.subband_cqi[eNB_id][aarx][subband],phy_vars_ue->PHY_measurements.subband_cqi_dB[eNB_id][aarx][subband]);
}
}
for
(
subband
=
0
;
subband
<
7
;
subband
++
)
{
for
(
subband
=
0
;
subband
<
nb_subbands
;
subband
++
)
{
phy_vars_ue
->
PHY_measurements
.
subband_cqi_tot_dB
[
eNB_id
][
subband
]
=
dB_fixed2
(
phy_vars_ue
->
PHY_measurements
.
subband_cqi_tot
[
eNB_id
][
subband
],
phy_vars_ue
->
PHY_measurements
.
n0_power_tot
);
}
}
phy_vars_ue
->
PHY_measurements
.
rank
[
eNB_id
]
=
0
;
for
(
i
=
0
;
i
<
NUMBER_OF_SUBBANDS
;
i
++
)
{
for
(
i
=
0
;
i
<
nb_subbands
;
i
++
)
{
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB_id
][
i
]
=
0
;
if
(
frame_parms
->
nb_antennas_rx
>
1
)
{
if
(
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB_id
][
0
][
i
]
>=
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB_id
][
1
][
i
])
...
...
openair1/PHY/LTE_TRANSPORT/dci.c
View file @
13483270
...
...
@@ -834,43 +834,31 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
rxF_ext
=
&
rxdataF_ext
[
aarx
][
symbol
*
(
frame_parms
->
N_RB_DL
*
12
)];
#ifndef NEW_FFT
rxF
=
&
rxdataF
[
aarx
][(
frame_parms
->
first_carrier_offset
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))
*
2
];
#else
rxF
=
&
rxdataF
[
aarx
][(
frame_parms
->
first_carrier_offset
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
#endif
if
((
frame_parms
->
N_RB_DL
&
1
)
==
0
)
{
// even number of RBs
for
(
rb
=
0
;
rb
<
frame_parms
->
N_RB_DL
;
rb
++
)
{
// For second half of RBs skip DC carrier
if
(
rb
==
(
frame_parms
->
N_RB_DL
>>
1
))
{
#ifndef NEW_FFT
rxF
=
&
rxdataF
[
aarx
][(
1
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))
*
2
];
#else
rxF
=
&
rxdataF
[
aarx
][(
1
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
#endif
//dl_ch0++;
}
if
(
symbol_mod
>
0
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int32_t
));
for
(
i
=
0
;
i
<
12
;
i
++
)
{
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[
i
];
#endif
}
nb_rb
++
;
dl_ch0_ext
+=
12
;
rxF_ext
+=
12
;
dl_ch0
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
else
{
j
=
0
;
...
...
@@ -879,11 +867,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
(
i
!=
(
nushiftmod3
+
3
))
&&
(
i
!=
(
nushiftmod3
+
6
))
&&
(
i
!=
(
nushiftmod3
+
9
)))
{
#ifndef NEW_FFT
rxF_ext
[
j
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
j
]
=
rxF
[
i
];
#endif
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
];
// printf("ch %d => (%d,%d)\n",i,*(short *)&dl_ch0[i],*(1+(short*)&dl_ch0[i]));
...
...
@@ -894,11 +878,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
rxF_ext
+=
8
;
dl_ch0
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
}
}
...
...
@@ -908,21 +888,13 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
if
(
symbol_mod
>
0
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int32_t
));
for
(
i
=
0
;
i
<
12
;
i
++
)
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[
i
];
#endif
nb_rb
++
;
dl_ch0_ext
+=
12
;
rxF_ext
+=
12
;
dl_ch0
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
else
{
j
=
0
;
...
...
@@ -931,11 +903,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
(
i
!=
(
nushiftmod3
+
3
))
&&
(
i
!=
(
nushiftmod3
+
6
))
&&
(
i
!=
(
nushiftmod3
+
9
)))
{
#ifndef NEW_FFT
rxF_ext
[
j
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
j
]
=
rxF
[
i
];
#endif
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
];
// printf("ch %d => (%d,%d)\n",i,*(short *)&dl_ch0[i],*(1+(short*)&dl_ch0[i]));
...
...
@@ -946,11 +914,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
rxF_ext
+=
8
;
dl_ch0
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
}
// Do middle RB (around DC)
...
...
@@ -962,28 +926,16 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
if
((
i
!=
nushiftmod3
)
&&
(
i
!=
(
nushiftmod3
+
3
))){
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
#ifndef NEW_FFT
rxF_ext
[
j
++
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
j
++
]
=
rxF
[
i
];
#endif
// printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1]));
}
}
#ifndef NEW_FFT
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))
*
2
];
#else
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
#endif
for
(;
i
<
12
;
i
++
)
{
if
((
i
!=
(
nushiftmod3
+
6
))
&&
(
i
!=
(
nushiftmod3
+
9
))){
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
#ifndef NEW_FFT
rxF_ext
[
j
++
]
=
rxF
[(
1
+
i
-
6
)
<<
1
];
#else
rxF_ext
[
j
++
]
=
rxF
[(
1
+
i
-
6
)];
#endif
// printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1]));
}
}
...
...
@@ -993,34 +945,18 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
dl_ch0_ext
+=
8
;
rxF_ext
+=
8
;
dl_ch0
+=
12
;
#ifndef NEW_FFT
rxF
+=
14
;
#else
rxF
+=
7
;
#endif
rb
++
;
}
else
{
for
(
i
=
0
;
i
<
6
;
i
++
)
{
dl_ch0_ext
[
i
]
=
dl_ch0
[
i
];
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[
i
];
#endif
}
#ifndef NEW_FFT
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))
*
2
];
#else
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
#endif
for
(;
i
<
12
;
i
++
)
{
dl_ch0_ext
[
i
]
=
dl_ch0
[
i
];
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[(
1
+
i
-
6
)
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[(
1
+
i
-
6
)];
#endif
}
...
...
@@ -1028,11 +964,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
dl_ch0_ext
+=
12
;
rxF_ext
+=
12
;
dl_ch0
+=
12
;
#ifndef NEW_FFT
rxF
+=
14
;
#else
rxF
+=
7
;
#endif
rb
++
;
}
...
...
@@ -1040,21 +972,13 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
if
(
symbol_mod
>
0
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int32_t
));
for
(
i
=
0
;
i
<
12
;
i
++
)
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[
i
];
#endif
nb_rb
++
;
dl_ch0_ext
+=
12
;
rxF_ext
+=
12
;
dl_ch0
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
else
{
j
=
0
;
...
...
@@ -1063,11 +987,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
(
i
!=
(
nushiftmod3
+
3
))
&&
(
i
!=
(
nushiftmod3
+
6
))
&&
(
i
!=
(
nushiftmod3
+
9
)))
{
#ifndef NEW_FFT
rxF_ext
[
j
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
j
]
=
rxF
[
i
];
#endif
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
];
}
...
...
@@ -1077,11 +997,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
rxF_ext
+=
8
;
dl_ch0
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
}
}
...
...
@@ -1118,42 +1034,31 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
// msg("pdcch extract_rbs: rxF_ext pos %d\n",symbol*(frame_parms->N_RB_DL*12));
rxF_ext
=
&
rxdataF_ext
[
aarx
][
symbol
*
(
frame_parms
->
N_RB_DL
*
12
)];
#ifndef NEW_FFT
rxF
=
&
rxdataF
[
aarx
][(
frame_parms
->
first_carrier_offset
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))
*
2
];
#else
rxF
=
&
rxdataF
[
aarx
][(
frame_parms
->
first_carrier_offset
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
#endif
if
((
frame_parms
->
N_RB_DL
&
1
)
==
0
)
// even number of RBs
for
(
rb
=
0
;
rb
<
frame_parms
->
N_RB_DL
;
rb
++
)
{
// For second half of RBs skip DC carrier
if
(
rb
==
(
frame_parms
->
N_RB_DL
>>
1
))
{
#ifndef NEW_FFT
rxF
=
&
rxdataF
[
aarx
][(
1
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))
*
2
];
#else
rxF
=
&
rxdataF
[
aarx
][(
1
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
#endif
//dl_ch0++;
// dl_ch0++;
//dl_ch1++;
}
if
(
symbol_mod
>
0
)
{
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int32_t
));
memcpy
(
dl_ch1_ext
,
dl_ch1
,
12
*
sizeof
(
int32_t
));
/*
/*
msg("rb %d\n",rb);
for (i=0;i<12;i++)
msg("(%d %d)",((int16_t *)dl_ch
)[i<<1],((int16_t*)dl_ch
)[1+(i<<1)]);
msg("\n");
*/
msg("(%d %d)",((int16_t *)dl_ch
0)[i<<1],((int16_t*)dl_ch0
)[1+(i<<1)]);
msg("\n");
*/
for
(
i
=
0
;
i
<
12
;
i
++
)
{
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[
i
];
#endif
// msg("%d : (%d,%d)\n",(rxF+(2*i)-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))*2])/2,
// ((int16_t*)&rxF[i<<1])[0],((int16_t*)&rxF[i<<1])[0]);
// msg("%d : (%d,%d)\n",(rxF+(2*i)-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))*2])/2,
// ((int16_t*)&rxF[i<<1])[0],((int16_t*)&rxF[i<<1])[0]);
}
nb_rb
++
;
dl_ch0_ext
+=
12
;
...
...
@@ -1167,35 +1072,20 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
(
i
!=
nushiftmod3
+
3
)
&&
(
i
!=
nushiftmod3
+
6
)
&&
(
i
!=
nushiftmod3
+
9
))
{
#ifndef NEW_FFT
rxF_ext
[
j
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
j
]
=
rxF
[
i
];
#endif
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
dl_ch0_ext
[
j
++
]
=
dl_ch0
[
i
];
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
dl_ch1_ext
[
j
++
]
=
dl_ch1
[
i
];
}
}
nb_rb
++
;
dl_ch0_ext
+=
8
;
dl_ch1_ext
+=
8
;
rxF_ext
+=
8
;
dl_ch0
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
dl_ch0
+=
12
;
dl_ch1
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
else
{
// Odd number of RBs
...
...
@@ -1207,11 +1097,8 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int32_t
));
memcpy
(
dl_ch1_ext
,
dl_ch1
,
12
*
sizeof
(
int32_t
));
for
(
i
=
0
;
i
<
12
;
i
++
)
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[
i
];
#endif
nb_rb
++
;
dl_ch0_ext
+=
12
;
dl_ch1_ext
+=
12
;
...
...
@@ -1219,11 +1106,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
dl_ch0
+=
12
;
dl_ch1
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
else
{
...
...
@@ -1233,11 +1116,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
(
i
!=
nushiftmod3
+
3
)
&&
(
i
!=
nushiftmod3
+
6
)
&&
(
i
!=
nushiftmod3
+
9
))
{
#ifndef NEW_FFT
rxF_ext
[
j
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
j
]
=
rxF
[
i
];
#endif
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
dl_ch1_ext
[
j
++
]
=
dl_ch1
[
i
];
...
...
@@ -1252,11 +1131,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
dl_ch0
+=
12
;
dl_ch1
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
}
// Do middle RB (around DC)
...
...
@@ -1265,25 +1140,13 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
for
(
i
=
0
;
i
<
6
;
i
++
)
{
dl_ch0_ext
[
i
]
=
dl_ch0
[
i
];
dl_ch1_ext
[
i
]
=
dl_ch1
[
i
];
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[
i
];
#endif
}
#ifndef NEW_FFT
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))
*
2
];
#else
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
#endif
for
(;
i
<
12
;
i
++
)
{
dl_ch0_ext
[
i
]
=
dl_ch0
[
i
];
dl_ch1_ext
[
i
]
=
dl_ch1
[
i
];
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[(
1
+
i
)
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[(
1
+
i
)];
#endif
}
nb_rb
++
;
...
...
@@ -1293,11 +1156,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
dl_ch0
+=
12
;
dl_ch1
+=
12
;
#ifndef NEW_FFT
rxF
+=
14
;
#else
rxF
+=
7
;
#endif
rb
++
;
}
else
{
...
...
@@ -1307,29 +1166,17 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
(
i
!=
nushiftmod3
+
3
)){
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
dl_ch1_ext
[
j
]
=
dl_ch1
[
i
];
#ifndef NEW_FFT
rxF_ext
[
j
++
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
j
++
]
=
rxF
[
i
];
#endif
// printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1]));
}
}
#ifndef NEW_FFT
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))
*
2
];
#else
rxF
=
&
rxdataF
[
aarx
][((
symbol
*
(
frame_parms
->
ofdm_symbol_size
)))];
#endif
for
(;
i
<
12
;
i
++
)
{
if
((
i
!=
nushiftmod3
+
6
)
&&
(
i
!=
nushiftmod3
+
9
)){
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
dl_ch1_ext
[
j
]
=
dl_ch1
[
i
];
#ifndef NEW_FFT
rxF_ext
[
j
++
]
=
rxF
[(
1
+
i
-
6
)
<<
1
];
#else
rxF_ext
[
j
++
]
=
rxF
[(
1
+
i
-
6
)];
#endif
// printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1]));
}
}
...
...
@@ -1341,11 +1188,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
rxF_ext
+=
8
;
dl_ch0
+=
12
;
dl_ch1
+=
12
;
#ifndef NEW_FFT
rxF
+=
14
;
#else
rxF
+=
7
;
#endif
rb
++
;
}
...
...
@@ -1356,11 +1199,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
memcpy
(
dl_ch0_ext
,
dl_ch0
,
12
*
sizeof
(
int32_t
));
memcpy
(
dl_ch1_ext
,
dl_ch1
,
12
*
sizeof
(
int32_t
));
for
(
i
=
0
;
i
<
12
;
i
++
)
#ifndef NEW_FFT
rxF_ext
[
i
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
i
]
=
rxF
[
i
];
#endif
nb_rb
++
;
dl_ch0_ext
+=
12
;
dl_ch1_ext
+=
12
;
...
...
@@ -1368,12 +1207,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
dl_ch0
+=
12
;
dl_ch1
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
else
{
j
=
0
;
...
...
@@ -1382,11 +1216,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
(
i
!=
nushiftmod3
+
3
)
&&
(
i
!=
nushiftmod3
+
6
)
&&
(
i
!=
nushiftmod3
+
9
))
{
#ifndef NEW_FFT
rxF_ext
[
j
]
=
rxF
[
i
<<
1
];
#else
rxF_ext
[
j
]
=
rxF
[
i
];
#endif
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
dl_ch1_ext
[
j
++
]
=
dl_ch1
[
i
];
...
...
@@ -1399,11 +1229,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
dl_ch0
+=
12
;
dl_ch1
+=
12
;
#ifndef NEW_FFT
rxF
+=
24
;
#else
rxF
+=
12
;
#endif
}
}
}
...
...
@@ -1976,13 +1802,17 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci,
if
(
numCCE
<=
get_nCCE
(
1
,
frame_parms
,
get_mi
(
frame_parms
,
subframe
)))
return
(
cmax
(
1
,
nCCEmin
));
//else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 4 : 5)))
else
if
(
numCCE
<
get_nCCE
(
2
,
frame_parms
,
get_mi
(
frame_parms
,
subframe
)))
else
if
(
numCCE
<
=
get_nCCE
(
2
,
frame_parms
,
get_mi
(
frame_parms
,
subframe
)))
return
(
cmax
(
2
,
nCCEmin
));
//else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 7 : 8)))
else
if
(
numCCE
<
get_nCCE
(
3
,
frame_parms
,
get_mi
(
frame_parms
,
subframe
)))
else
if
(
numCCE
<
=
get_nCCE
(
3
,
frame_parms
,
get_mi
(
frame_parms
,
subframe
)))
return
(
cmax
(
3
,
nCCEmin
));
else
if
(
frame_parms
->
N_RB_DL
<=
10
)
{
if
(
frame_parms
->
Ncp
==
0
)
{
// normal CP
printf
(
"numCCE %d, N_RB_DL = %d : should be returning 4 PDCCH symbols (%d,%d,%d)
\n
"
,
numCCE
,
frame_parms
->
N_RB_DL
,
get_nCCE
(
1
,
frame_parms
,
get_mi
(
frame_parms
,
subframe
)),
get_nCCE
(
2
,
frame_parms
,
get_mi
(
frame_parms
,
subframe
)),
get_nCCE
(
3
,
frame_parms
,
get_mi
(
frame_parms
,
subframe
)));
if
((
9
*
numCCE
)
<=
(
frame_parms
->
N_RB_DL
*
((
frame_parms
->
nb_antennas_tx_eNB
==
4
)
?
10
:
11
)))
return
(
4
);
}
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
13483270
...
...
@@ -3697,7 +3697,7 @@ uint32_t pdcch_alloc2ul_frame(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, ui
}
uint16_t
quantize_subband_pmi
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
)
{
uint16_t
quantize_subband_pmi
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
int
nb_subbands
)
{
int
i
,
aarx
;
uint16_t
pmiq
=
0
;
...
...
@@ -3705,7 +3705,7 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id) {
uint8_t
rank
=
meas
->
rank
[
eNB_id
];
int
pmi_re
,
pmi_im
;
for
(
i
=
0
;
i
<
NUMBER_OF_SUBBANDS
;
i
++
)
{
for
(
i
=
0
;
i
<
nb_subbands
;
i
++
)
{
pmi_re
=
0
;
pmi_im
=
0
;
...
...
@@ -3740,7 +3740,7 @@ uint16_t quantize_subband_pmi(PHY_MEASUREMENTS *meas,uint8_t eNB_id) {
return
(
pmivect
);
}
uint16_t
quantize_subband_pmi2
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
uint8_t
a_id
)
{
uint16_t
quantize_subband_pmi2
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
uint8_t
a_id
,
int
nb_subbands
)
{
uint8_t
i
;
uint16_t
pmiq
=
0
;
...
...
@@ -3748,7 +3748,7 @@ uint16_t quantize_subband_pmi2(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t a_i
uint8_t
rank
=
meas
->
rank
[
eNB_id
];
int
pmi_re
,
pmi_im
;
for
(
i
=
0
;
i
<
NUMBER_OF_SUBBANDS
;
i
++
)
{
for
(
i
=
0
;
i
<
nb_subbands
;
i
++
)
{
if
(
rank
==
0
)
{
pmi_re
=
meas
->
subband_pmi_re
[
eNB_id
][
i
][
a_id
];
...
...
@@ -3891,7 +3891,7 @@ uint8_t sinr2cqi(double sinr,uint8_t trans_mode) {
//}
uint32_t
fill_subband_cqi
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
uint8_t
trans_mode
)
{
uint32_t
fill_subband_cqi
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
uint8_t
trans_mode
,
int
nb_subbands
)
{
uint8_t
i
;
...
...
@@ -3900,7 +3900,7 @@ uint32_t fill_subband_cqi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t trans_mo
int
diff_cqi
=
0
;
for
(
i
=
0
;
i
<
NUMBER_OF_SUBBANDS
;
i
++
)
{
for
(
i
=
0
;
i
<
nb_subbands
;
i
++
)
{
diff_cqi
=
-
sinr2cqi
(
meas
->
wideband_cqi_avg
[
eNB_id
],
trans_mode
)
+
sinr2cqi
(
meas
->
subband_cqi_tot_dB
[
eNB_id
][
i
],
trans_mode
);
...
...
@@ -3920,61 +3920,209 @@ uint32_t fill_subband_cqi(PHY_MEASUREMENTS *meas,uint8_t eNB_id,uint8_t trans_mo
return
(
cqivect
);
}
void
fill_CQI
(
void
*
o
,
UCI_format_t
uci_format
,
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
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
,
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",
// eNB_id,eNB_id,meas->wideband_cqi_tot[eNB_id]);
double
sinr_tmp
;
uint8_t
*
o
=
ulsch
->
o
;
UCI_format_t
uci_format
=
ulsch
->
uci_format
;
if
(
flag_LA
==
1
)
sinr_tmp
=
sinr_eff
;
else
sinr_tmp
=
(
double
)
meas
->
wideband_cqi_avg
[
eNB_id
];
//LOG_I(PHY,"Filling CQI %f for eNB %d\n",sinr_tmp,eNB_id);
switch
(
uci_format
)
{
case
wideband_cqi_rank1_2A
:
((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
);
break
;
case
wideband_cqi_rank2_2A
:
((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
);
break
;
case
HLC_subband_cqi_nopmi
:
((
HLC_subband_cqi_nopmi_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_nopmi_5MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
);
break
;
case
HLC_subband_cqi_rank1_2A
:
((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
);
((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
=
quantize_wideband_pmi
(
meas
,
eNB_id
);
break
;
case
HLC_subband_cqi_rank2_2A
:
// This has to be improved!!!
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi2
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
);
break
;
case
HLC_subband_cqi_mcs_CBA
:
// this is the cba mcs uci for cba transmission
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
mcs
=
2
;
//fixme
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
crnti
=
rnti
;
LOG_D
(
PHY
,
"fill uci for cba rnti %x, mcs %d
\n
"
,
rnti
,
2
);
switch
(
N_RB_DL
)
{
case
6
:
switch
(
uci_format
)
{
case
wideband_cqi_rank1_2A
:
((
wideband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
wideband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
6
);
break
;
case
wideband_cqi_rank2_2A
:
((
wideband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
6
);
break
;
case
HLC_subband_cqi_nopmi
:
((
HLC_subband_cqi_nopmi_1_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_nopmi_1_5MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
6
);
break
;
case
HLC_subband_cqi_rank1_2A
:
((
HLC_subband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
6
);
((
HLC_subband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
pmi
=
quantize_wideband_pmi
(
meas
,
eNB_id
);
break
;
case
HLC_subband_cqi_rank2_2A
:
// This has to be improved!!!
((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
6
);
((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
diffcqi2
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
6
);
((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
6
);
break
;
case
HLC_subband_cqi_mcs_CBA
:
// this is the cba mcs uci for cba transmission
((
HLC_subband_cqi_mcs_CBA_1_5MHz
*
)
o
)
->
mcs
=
2
;
//fixme
((
HLC_subband_cqi_mcs_CBA_1_5MHz
*
)
o
)
->
crnti
=
rnti
;
LOG_D
(
PHY
,
"fill uci for cba rnti %x, mcs %d
\n
"
,
rnti
,
2
);
break
;
case
ue_selected
:
LOG_E
(
PHY
,
"fill_CQI ue_selected CQI not supported yet!!!
\n
"
);
mac_xface
->
macphy_exit
(
"fill_CQI ue_selected CQI not supported yet!!!"
);
break
;
default:
LOG_E
(
PHY
,
"unsupported CQI mode (%d)!!!
\n
"
,
uci_format
);
mac_xface
->
macphy_exit
(
"unsupported CQI mode !!!"
);
break
;
}
break
;
case
ue_selected
:
LOG_E
(
PHY
,
"fill_CQI ue_selected CQI not supported yet!!!
\n
"
);
mac_xface
->
macphy_exit
(
"fill_CQI ue_selected CQI not supported yet!!!"
);
case
25
:
switch
(
uci_format
)
{
case
wideband_cqi_rank1_2A
:
((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
7
);
break
;
case
wideband_cqi_rank2_2A
:
((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
7
);
break
;
case
HLC_subband_cqi_nopmi
:
((
HLC_subband_cqi_nopmi_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_nopmi_5MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
7
);
break
;
case
HLC_subband_cqi_rank1_2A
:
((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
7
);
((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
=
quantize_wideband_pmi
(
meas
,
eNB_id
);
break
;
case
HLC_subband_cqi_rank2_2A
:
// This has to be improved!!!
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
7
);
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi2
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
7
);
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
7
);
break
;
case
HLC_subband_cqi_mcs_CBA
:
// this is the cba mcs uci for cba transmission
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
mcs
=
2
;
//fixme
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
crnti
=
rnti
;
LOG_D
(
PHY
,
"fill uci for cba rnti %x, mcs %d
\n
"
,
rnti
,
2
);
break
;
case
ue_selected
:
LOG_E
(
PHY
,
"fill_CQI ue_selected CQI not supported yet!!!
\n
"
);
mac_xface
->
macphy_exit
(
"fill_CQI ue_selected CQI not supported yet!!!"
);
break
;
default:
LOG_E
(
PHY
,
"unsupported CQI mode (%d)!!!
\n
"
,
uci_format
);
mac_xface
->
macphy_exit
(
"unsupported CQI mode !!!"
);
break
;
}
break
;
case
50
:
switch
(
uci_format
)
{
case
wideband_cqi_rank1_2A
:
((
wideband_cqi_rank1_2A_10MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
wideband_cqi_rank1_2A_10MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
9
);
break
;
case
wideband_cqi_rank2_2A
:
((
wideband_cqi_rank2_2A_10MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_10MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_10MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
9
);
break
;
case
HLC_subband_cqi_nopmi
:
((
HLC_subband_cqi_nopmi_10MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_nopmi_10MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
9
);
break
;
case
HLC_subband_cqi_rank1_2A
:
((
HLC_subband_cqi_rank1_2A_10MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank1_2A_10MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
9
);
((
HLC_subband_cqi_rank1_2A_10MHz
*
)
o
)
->
pmi
=
quantize_wideband_pmi
(
meas
,
eNB_id
);
break
;
case
HLC_subband_cqi_rank2_2A
:
// This has to be improved!!!
((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
9
);
((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
diffcqi2
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
9
);
((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
9
);
break
;
case
HLC_subband_cqi_mcs_CBA
:
// this is the cba mcs uci for cba transmission
((
HLC_subband_cqi_mcs_CBA_10MHz
*
)
o
)
->
mcs
=
2
;
//fixme
((
HLC_subband_cqi_mcs_CBA_10MHz
*
)
o
)
->
crnti
=
rnti
;
LOG_D
(
PHY
,
"fill uci for cba rnti %x, mcs %d
\n
"
,
rnti
,
2
);
break
;
case
ue_selected
:
LOG_E
(
PHY
,
"fill_CQI ue_selected CQI not supported yet!!!
\n
"
);
mac_xface
->
macphy_exit
(
"fill_CQI ue_selected CQI not supported yet!!!"
);
break
;
default:
LOG_E
(
PHY
,
"unsupported CQI mode (%d)!!!
\n
"
,
uci_format
);
mac_xface
->
macphy_exit
(
"unsupported CQI mode !!!"
);
break
;
}
break
;
default:
LOG_E
(
PHY
,
"unsupported CQI mode (%d)!!!
\n
"
,
uci_format
);
mac_xface
->
macphy_exit
(
"unsupported CQI mode !!!"
);
case
100
:
switch
(
uci_format
)
{
case
wideband_cqi_rank1_2A
:
((
wideband_cqi_rank1_2A_20MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
wideband_cqi_rank1_2A_20MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
13
);
break
;
case
wideband_cqi_rank2_2A
:
((
wideband_cqi_rank2_2A_20MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_20MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
//FIXME: calculate rank2 cqi
((
wideband_cqi_rank2_2A_20MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
13
);
break
;
case
HLC_subband_cqi_nopmi
:
((
HLC_subband_cqi_nopmi_20MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_nopmi_20MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
13
);
break
;
case
HLC_subband_cqi_rank1_2A
:
((
HLC_subband_cqi_rank1_2A_20MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank1_2A_20MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
13
);
((
HLC_subband_cqi_rank1_2A_20MHz
*
)
o
)
->
pmi
=
quantize_wideband_pmi
(
meas
,
eNB_id
);
break
;
case
HLC_subband_cqi_rank2_2A
:
// This has to be improved!!!
((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
cqi1
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
diffcqi1
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
13
);
((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
cqi2
=
sinr2cqi
(
sinr_tmp
,
trans_mode
);
((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
diffcqi2
=
fill_subband_cqi
(
meas
,
eNB_id
,
trans_mode
,
13
);
((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
pmi
=
quantize_subband_pmi
(
meas
,
eNB_id
,
13
);
break
;
case
HLC_subband_cqi_mcs_CBA
:
// this is the cba mcs uci for cba transmission
((
HLC_subband_cqi_mcs_CBA_20MHz
*
)
o
)
->
mcs
=
2
;
//fixme
((
HLC_subband_cqi_mcs_CBA_20MHz
*
)
o
)
->
crnti
=
rnti
;
LOG_D
(
PHY
,
"fill uci for cba rnti %x, mcs %d
\n
"
,
rnti
,
2
);
break
;
case
ue_selected
:
LOG_E
(
PHY
,
"fill_CQI ue_selected CQI not supported yet!!!
\n
"
);
mac_xface
->
macphy_exit
(
"fill_CQI ue_selected CQI not supported yet!!!"
);
break
;
default:
LOG_E
(
PHY
,
"unsupported CQI mode (%d)!!!
\n
"
,
uci_format
);
mac_xface
->
macphy_exit
(
"unsupported CQI mode !!!"
);
break
;
}
break
;
}
}
void
reset_cba_uci
(
void
*
o
)
{
...
...
@@ -4258,119 +4406,392 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
// The aperiodic CQI reporting mode is fixed for every transmission mode instead of being configured by higher layer signaling
case
1
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
if
(
meas
->
rank
[
eNB_id
]
==
0
){
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
{
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
ulsch
->
o_RI
[
0
]
=
1
;
}
break
;
case
2
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
if
(
meas
->
rank
[
eNB_id
]
==
0
){
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
{
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
ulsch
->
o_RI
[
0
]
=
1
;
}
break
;
case
3
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
if
(
meas
->
rank
[
eNB_id
]
==
0
){
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
{
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
ulsch
->
o_RI
[
0
]
=
1
;
}
break
;
case
4
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
if
(
meas
->
rank
[
eNB_id
]
==
0
){
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_20MHz
;
break
;
}
ulsch
->
uci_format
=
wideband_cqi_rank1_2A
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
{
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_20MHz
;
break
;
}
ulsch
->
uci_format
=
wideband_cqi_rank2_2A
;
ulsch
->
o_RI
[
0
]
=
1
;
}
break
;
case
5
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
if
(
meas
->
rank
[
eNB_id
]
==
0
){
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_20MHz
;
break
;
}
ulsch
->
uci_format
=
wideband_cqi_rank1_2A
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
{
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_20MHz
;
break
;
}
ulsch
->
uci_format
=
wideband_cqi_rank2_2A
;
ulsch
->
o_RI
[
0
]
=
1
;
}
break
;
case
6
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
if
(
meas
->
rank
[
eNB_id
]
==
0
){
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_wideband_cqi_rank1_2A_20MHz
;
break
;
}
ulsch
->
uci_format
=
wideband_cqi_rank1_2A
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
{
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_wideband_cqi_rank2_2A_20MHz
;
break
;
}
ulsch
->
uci_format
=
wideband_cqi_rank2_2A
;
ulsch
->
o_RI
[
0
]
=
1
;
}
break
;
case
7
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
if
(
meas
->
rank
[
eNB_id
]
==
0
){
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
ulsch
->
o_RI
[
0
]
=
0
;
}
else
{
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
O
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
ulsch
->
o_RI
[
0
]
=
1
;
}
...
...
@@ -4386,7 +4807,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu,
ulsch
->
uci_format
=
HLC_subband_cqi_nopmi
;
}
print_CQI
(
ulsch
->
o
,
ulsch
->
uci_format
,
eNB_id
);
print_CQI
(
ulsch
->
o
,
ulsch
->
uci_format
,
eNB_id
,
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
);
//FK: moved this part to ulsch_coding to be more recent
/*
...
...
@@ -4679,78 +5100,257 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu,
case
1
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
}
else
{
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_nopmi
;
}
break
;
case
2
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
}
else
{
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_nopmi
;
}
break
;
case
3
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
}
else
{
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_nopmi
;
}
break
;
case
4
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
}
else
{
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_1_5MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_10MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_20MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
wideband_cqi_rank1_2A
;
}
break
;
case
5
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
}
else
{
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_1_5MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_10MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_20MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
wideband_cqi_rank1_2A
;
}
break
;
case
6
:
if
((
rnti
>=
cba_rnti
)
&&
(
rnti
<
p_rnti
)){
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_mcs_CBA_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_mcs_CBA
;
}
else
{
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_1_5MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_5MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_10MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
sizeof_wideband_cqi_rank2_2A_20MHz
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_wideband_cqi_rank1_2A_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
wideband_cqi_rank1_2A
;
}
break
;
case
7
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or2
=
0
;
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_1_5MHz
;
break
;
case
25
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_5MHz
;
break
;
case
50
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_10MHz
;
break
;
case
100
:
ulsch
->
harq_processes
[
harq_pid
]
->
Or1
=
sizeof_HLC_subband_cqi_nopmi_20MHz
;
break
;
}
ulsch
->
harq_processes
[
harq_pid
]
->
uci_format
=
HLC_subband_cqi_nopmi
;
break
;
default:
...
...
@@ -4889,7 +5489,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id){
double
channely
=
0
;
double
channelx_i
=
0
;
double
channely_i
=
0
;
uint16_t
q
=
quantize_subband_pmi
(
meas
,
eNB_id
);
uint16_t
q
=
quantize_subband_pmi
(
meas
,
eNB_id
,
7
);
uint8_t
qq
;
switch
(
transmission_mode
){
...
...
openair1/PHY/LTE_TRANSPORT/print_stats.c
View file @
13483270
...
...
@@ -105,76 +105,342 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] effective SINR %.2f dB
\n
"
,
phy_vars_ue
->
sinr_eff
);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Wideband CQI eNB %d: %d dB, avg: %d dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
wideband_cqi_tot
[
eNB
],
phy_vars_ue
->
PHY_measurements
.
wideband_cqi_avg
[
eNB
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
5
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
6
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
5
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
6
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
6
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
6
][
0
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
6
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
6
][
1
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
0
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
1
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
2
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
3
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
4
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
5
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
6
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (max): %x
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
)));
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (both): %x,%x
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
0
)),
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
1
)));
switch
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
{
case
6
:
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
5
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
5
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
0
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
1
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
0
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
1
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
2
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
3
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
4
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
5
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (max): %llx
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
6
)));
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (both): %llx,%llx
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
0
,
6
)),
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
1
,
6
)));
break
;
case
25
:
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
5
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
6
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
5
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
6
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
6
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
6
][
0
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
6
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
6
][
1
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
0
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
1
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
2
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
3
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
4
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
5
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
6
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (max): %llx
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
7
)));
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (both): %llx,%llx
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
0
,
7
)),
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
1
,
7
)));
break
;
case
50
:
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
5
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
6
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
7
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
8
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
5
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
6
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
7
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
8
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
6
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
6
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
7
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
7
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
8
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
8
][
0
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
6
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
6
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
7
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
7
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
8
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
8
][
1
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d %d %d]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
0
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
1
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
2
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
3
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
4
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
5
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
6
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
7
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
8
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (max): %llx
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
9
)));
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (both): %llx,%llx
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
0
,
9
)),
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
1
,
9
)));
break
;
case
100
:
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 0): [%d %d %d %d %d %d %d %d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
5
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
6
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
7
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
8
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
9
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
10
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
11
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
0
][
12
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband CQI eNB%d (Ant 1): [%d %d %d %d %d %d %d %d %d %d %d %d %d] dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
2
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
3
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
4
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
5
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
6
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
7
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
8
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
9
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
10
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
11
],
phy_vars_ue
->
PHY_measurements
.
subband_cqi_dB
[
eNB
][
1
][
12
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 0): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
6
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
6
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
7
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
7
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
8
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
8
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
9
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
9
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
10
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
10
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
11
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
11
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
12
][
0
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
12
][
0
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Subband PMI eNB%d (Ant 1): [(%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d) (%d %d)]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
0
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
1
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
2
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
3
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
4
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
5
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
5
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
6
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
6
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
7
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
7
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
8
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
8
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
9
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
9
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
10
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
10
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
11
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
11
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_re
[
eNB
][
12
][
1
],
phy_vars_ue
->
PHY_measurements
.
subband_pmi_im
[
eNB
][
12
][
1
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] PMI Antenna selection eNB%d : [%d %d %d %d %d %d %d %d %d %d %d %d %d]
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
0
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
1
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
2
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
3
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
4
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
5
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
6
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
7
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
8
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
9
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
10
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
11
],
phy_vars_ue
->
PHY_measurements
.
selected_rx_antennas
[
eNB
][
12
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (max): %llx
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
13
)));
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Quantized PMI eNB %d (both): %llx,%llx
\n
"
,
eNB
,
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
0
,
13
)),
pmi2hex_2Ar1
(
quantize_subband_pmi2
(
&
phy_vars_ue
->
PHY_measurements
,
eNB
,
1
,
13
)));
break
;
}
#ifdef OPENAIR2
RRC_status
=
mac_get_rrc_status
(
phy_vars_ue
->
Mod_id
,
0
,
0
);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] RRC status = %d
\n
"
,
RRC_status
);
...
...
@@ -190,7 +456,7 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
if
(
phy_vars_ue
->
transmission_mode
[
eNB
]
==
6
)
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Mode 6 Wideband CQI eNB %d : %d dB
\n
"
,
eNB
,
phy_vars_ue
->
PHY_measurements
.
precoded_cqi_dB
[
eNB
][
0
]);
if
(
phy_vars_ue
->
dlsch_ue
[
0
]
&&
phy_vars_ue
->
dlsch_ue
[
0
][
0
]
&&
phy_vars_ue
->
dlsch_ue
[
0
][
1
])
{
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Saved PMI for DLSCH eNB %d : %x (%p)
\n
"
,
eNB
,
pmi2hex_2Ar1
(
phy_vars_ue
->
dlsch_ue
[
0
][
0
]
->
pmi_alloc
),
phy_vars_ue
->
dlsch_ue
[
0
][
0
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] Saved PMI for DLSCH eNB %d : %
ll
x (%p)
\n
"
,
eNB
,
pmi2hex_2Ar1
(
phy_vars_ue
->
dlsch_ue
[
0
][
0
]
->
pmi_alloc
),
phy_vars_ue
->
dlsch_ue
[
0
][
0
]);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] eNB %d: dl_power_off = %d
\n
"
,
eNB
,
phy_vars_ue
->
dlsch_ue
[
0
][
0
]
->
harq_processes
[
0
]
->
dl_power_off
);
...
...
@@ -345,7 +611,7 @@ int dump_eNB_stats(PHY_VARS_eNB *phy_vars_eNB, char* buffer, int length) {
phy_vars_eNB
->
PHY_measurements_eNB
[
eNB
].
subband_cqi_tot_dB
[
UE_id
][
i
]);
len
+=
sprintf
(
&
buffer
[
len
],
"
\n
"
);
len
+=
sprintf
(
&
buffer
[
len
],
"[eNB PROC] DL TM %d, DL_cqi %d, DL_pmi_single %x
\n
"
,
len
+=
sprintf
(
&
buffer
[
len
],
"[eNB PROC] DL TM %d, DL_cqi %d, DL_pmi_single %
ll
x
\n
"
,
phy_vars_eNB
->
transmission_mode
[
UE_id
],
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
DL_cqi
[
0
],
pmi2hex_2Ar1
(
phy_vars_eNB
->
eNB_UE_stats
[
UE_id
].
DL_pmi_single
));
...
...
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
13483270
...
...
@@ -1536,21 +1536,21 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s
*/
uint8_t
phich_frame2_pusch_frame
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
frame_t
frame
,
uint8_t
subframe
);;
void
print_CQI
(
void
*
o
,
UCI_format_t
uci_format
,
uint8_t
eNB_id
);
void
print_CQI
(
void
*
o
,
UCI_format_t
uci_format
,
uint8_t
eNB_id
,
int
N_RB_DL
);
void
extract_CQI
(
void
*
o
,
UCI_format_t
uci_format
,
LTE_eNB_UE_stats
*
stats
,
uint16_t
*
crnti
,
uint8_t
*
access_mode
);
void
fill_CQI
(
void
*
o
,
UCI_format_t
uci_format
,
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
rnti_t
rnti
,
uint8_t
trans_mode
,
double
sinr_eff
);
void
fill_CQI
(
LTE_UE_ULSCH_t
*
ulsch
,
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
int
N_RB_DL
,
rnti_t
rnti
,
uint8_t
trans_mode
,
double
sinr_eff
);
void
reset_cba_uci
(
void
*
o
);
uint16_t
quantize_subband_pmi
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
);
uint16_t
quantize_subband_pmi2
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
uint8_t
a_id
);
uint16_t
quantize_subband_pmi
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
int
nb_subbands
);
uint16_t
quantize_subband_pmi2
(
PHY_MEASUREMENTS
*
meas
,
uint8_t
eNB_id
,
uint8_t
a_id
,
int
nb_subbands
);
uint
32_t
pmi2hex_2Ar1
(
uint16
_t
pmi
);
uint
64_t
pmi2hex_2Ar1
(
uint32
_t
pmi
);
uint
32_t
pmi2hex_2Ar2
(
uint8
_t
pmi
);
uint
64_t
pmi2hex_2Ar2
(
uint32
_t
pmi
);
uint
32_t
cqi2hex
(
uint16
_t
cqi
);
uint
64_t
cqi2hex
(
uint32
_t
cqi
);
uint16_t
computeRIV
(
uint16_t
N_RB_DL
,
uint16_t
RBstart
,
uint16_t
Lcrbs
);
...
...
openair1/PHY/LTE_TRANSPORT/rar_tools.c
View file @
13483270
...
...
@@ -264,10 +264,10 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue,
else
sinr_eff = meas->wideband_cqi_avg[eNB_id];
*/
fill_CQI
(
ulsch
->
o
,
ulsch
->
uci_format
,
meas
,
eNB_id
,
0
,
transmission_mode
,
phy_vars_ue
->
sinr_eff
);
fill_CQI
(
ulsch
,
meas
,
eNB_id
,
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
,
0
,
transmission_mode
,
phy_vars_ue
->
sinr_eff
);
if
(((
phy_vars_ue
->
frame_tx
%
100
)
==
0
)
||
(
phy_vars_ue
->
frame_tx
<
10
))
print_CQI
(
ulsch
->
o
,
ulsch
->
uci_format
,
eNB_id
);
print_CQI
(
ulsch
->
o
,
ulsch
->
uci_format
,
eNB_id
,
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
);
}
else
{
ulsch
->
O_RI
=
0
;
...
...
openair1/PHY/LTE_TRANSPORT/uci.h
View file @
13483270
...
...
@@ -42,6 +42,63 @@ typedef enum {
unknown_cqi
//
}
UCI_format_t
;
// **********************************************1.5 MHz***************************************************************************
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
16
;
uint32_t
pmi
:
12
;
uint32_t
cqi1
:
4
;
}
wideband_cqi_rank1_2A_1_5MHz
;
#define sizeof_wideband_cqi_rank1_2A_1_5MHz 16
typedef
struct
__attribute__
((
packed
))
{
uint16_t
padding
:
2
;
uint16_t
pmi
:
6
;
uint16_t
cqi2
:
4
;
uint16_t
cqi1
:
4
;
}
wideband_cqi_rank2_2A_1_5MHz
;
#define sizeof_wideband_cqi_rank2_2A_1_5MHz 14
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
16
;
uint32_t
diffcqi1
:
12
;
uint32_t
cqi1
:
4
;
}
HLC_subband_cqi_nopmi_1_5MHz
;
#define sizeof_HLC_subband_cqi_nopmi_1_5MHz 16
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
14
;
uint32_t
pmi
:
2
;
uint32_t
diffcqi1
:
12
;
uint32_t
cqi1
:
4
;
}
HLC_subband_cqi_rank1_2A_1_5MHz
;
#define sizeof_HLC_subband_cqi_rank1_2A_1_5MHz 18
typedef
struct
__attribute__
((
packed
))
{
uint64_t
padding
:
31
;
uint64_t
pmi
:
1
;
uint64_t
diffcqi2
:
12
;
uint64_t
cqi2
:
4
;
uint64_t
diffcqi1
:
12
;
uint64_t
cqi1
:
4
;
}
HLC_subband_cqi_rank2_2A_1_5MHz
;
#define sizeof_HLC_subband_cqi_rank2_2A_1_5MHz 33
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
16
;
uint32_t
diffcqi1
:
12
;
uint32_t
cqi1
:
4
;
}
HLC_subband_cqi_modes123_1_5MHz
;
#define sizeof_HLC_subband_cqi_modes123_1_5MHz 16
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
12
;
uint32_t
crnti
:
16
;
uint32_t
mcs
:
4
;
}
HLC_subband_cqi_mcs_CBA_1_5MHz
;
#define sizeof_HLC_subband_cqi_mcs_CBA_1_5MHz 20
// **********************************************5 MHz***************************************************************************
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
14
;
uint32_t
pmi
:
14
;
...
...
@@ -96,10 +153,119 @@ typedef struct __attribute__((packed)) {
}
HLC_subband_cqi_mcs_CBA_5MHz
;
#define sizeof_HLC_subband_cqi_mcs_CBA_5MHz 20
// **********************************************10 MHz***************************************************************************
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
10
;
uint32_t
pmi
:
18
;
uint32_t
cqi1
:
4
;
}
wideband_cqi_rank1_2A_10MHz
;
#define sizeof_wideband_cqi_rank1_2A_10MHz 22
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
15
;
uint32_t
pmi
:
9
;
uint32_t
cqi2
:
4
;
uint32_t
cqi1
:
4
;
}
wideband_cqi_rank2_2A_10MHz
;
#define sizeof_wideband_cqi_rank2_2A_10MHz 17
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
10
;
uint32_t
diffcqi1
:
18
;
uint32_t
cqi1
:
4
;
}
HLC_subband_cqi_nopmi_10MHz
;
#define sizeof_HLC_subband_cqi_nopmi_10MHz 22
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
8
;
uint32_t
pmi
:
2
;
uint32_t
diffcqi1
:
18
;
uint32_t
cqi1
:
4
;
}
HLC_subband_cqi_rank1_2A_10MHz
;
#define sizeof_HLC_subband_cqi_rank1_2A_10MHz 24
typedef
struct
__attribute__
((
packed
))
{
uint64_t
padding
:
19
;
uint64_t
pmi
:
1
;
uint64_t
diffcqi2
:
18
;
uint64_t
cqi2
:
4
;
uint64_t
diffcqi1
:
18
;
uint64_t
cqi1
:
4
;
}
HLC_subband_cqi_rank2_2A_10MHz
;
#define sizeof_HLC_subband_cqi_rank2_2A_10MHz 45
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
10
;
uint32_t
diffcqi1
:
18
;
uint32_t
cqi1
:
4
;
}
HLC_subband_cqi_modes123_10MHz
;
#define sizeof_HLC_subband_cqi_modes123_10MHz 22
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
12
;
uint32_t
crnti
:
16
;
uint32_t
mcs
:
4
;
}
HLC_subband_cqi_mcs_CBA_10MHz
;
#define sizeof_HLC_subband_cqi_mcs_CBA_10MHz 20
// **********************************************20 MHz***************************************************************************
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
2
;
uint32_t
pmi
:
26
;
uint32_t
cqi1
:
4
;
}
wideband_cqi_rank1_2A_20MHz
;
#define sizeof_wideband_cqi_rank1_2A_20MHz 20
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
11
;
uint32_t
pmi
:
13
;
uint32_t
cqi2
:
4
;
uint32_t
cqi1
:
4
;
}
wideband_cqi_rank2_2A_20MHz
;
#define sizeof_wideband_cqi_rank2_2A_20MHz 21
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
2
;
uint32_t
diffcqi1
:
26
;
uint32_t
cqi1
:
4
;
}
HLC_subband_cqi_nopmi_20MHz
;
#define sizeof_HLC_subband_cqi_nopmi_20MHz 30
typedef
struct
__attribute__
((
packed
))
{
// uint32_t padding:12;
uint32_t
pmi
:
2
;
uint32_t
diffcqi1
:
26
;
uint32_t
cqi1
:
4
;
}
HLC_subband_cqi_rank1_2A_20MHz
;
#define sizeof_HLC_subband_cqi_rank1_2A_20MHz 32
typedef
struct
__attribute__
((
packed
))
{
uint64_t
padding
:
3
;
uint64_t
pmi
:
1
;
uint64_t
diffcqi2
:
26
;
uint64_t
cqi2
:
4
;
uint64_t
diffcqi1
:
26
;
uint64_t
cqi1
:
4
;
}
HLC_subband_cqi_rank2_2A_20MHz
;
#define sizeof_HLC_subband_cqi_rank2_2A_20MHz 61
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
2
;
uint32_t
diffcqi1
:
26
;
uint32_t
cqi1
:
4
;
}
HLC_subband_cqi_modes123_20MHz
;
#define sizeof_HLC_subband_cqi_modes123_20MHz 30
typedef
struct
__attribute__
((
packed
))
{
uint32_t
padding
:
12
;
uint32_t
crnti
:
16
;
uint32_t
mcs
:
4
;
}
HLC_subband_cqi_mcs_CBA_20MHz
;
#define sizeof_HLC_subband_cqi_mcs_CBA_20MHz 20
#define MAX_CQI_PAYLOAD (sizeof(HLC_subband_cqi_rank2_2A_
5
MHz)*8*20)
#define MAX_CQI_BITS (sizeof(HLC_subband_cqi_rank2_2A_
5
MHz)*8)
#define MAX_CQI_BYTES (sizeof(HLC_subband_cqi_rank2_2A_
5
MHz))
#define MAX_CQI_PAYLOAD (sizeof(HLC_subband_cqi_rank2_2A_
20
MHz)*8*20)
#define MAX_CQI_BITS (sizeof(HLC_subband_cqi_rank2_2A_
20
MHz)*8)
#define MAX_CQI_BYTES (sizeof(HLC_subband_cqi_rank2_2A_
20
MHz))
#define MAX_ACK_PAYLOAD 18
#define MAX_RI_PAYLOAD 6
openair1/PHY/LTE_TRANSPORT/uci_tools.c
View file @
13483270
...
...
@@ -44,24 +44,34 @@
#ifdef DEBUG_UCI_TOOLS
#include "PHY/vars.h"
#endif
//
#define DEBUG_UCI
#define DEBUG_UCI
u
nsigned
int
pmi2hex_2Ar1
(
unsigned
shor
t
pmi
)
{
u
int64_t
pmi2hex_2Ar1
(
uint32_
t
pmi
)
{
return
((
pmi
&
3
)
+
(((
pmi
>>
2
)
&
3
)
<<
4
)
+
(((
pmi
>>
4
)
&
3
)
<<
8
)
+
(((
pmi
>>
6
)
&
3
)
<<
12
)
+
(((
pmi
>>
8
)
&
3
)
<<
16
)
+
(((
pmi
>>
10
)
&
3
)
<<
20
)
+
(((
pmi
>>
12
)
&
3
)
<<
24
));
uint64_t
pmil
=
(
uint64_t
)
pmi
;
return
((
pmil
&
3
)
+
(((
pmil
>>
2
)
&
3
)
<<
4
)
+
(((
pmil
>>
4
)
&
3
)
<<
8
)
+
(((
pmil
>>
6
)
&
3
)
<<
12
)
+
(((
pmil
>>
8
)
&
3
)
<<
16
)
+
(((
pmil
>>
10
)
&
3
)
<<
20
)
+
(((
pmil
>>
12
)
&
3
)
<<
24
)
+
(((
pmil
>>
14
)
&
3
)
<<
28
)
+
(((
pmil
>>
16
)
&
3
)
<<
32
)
+
(((
pmil
>>
18
)
&
3
)
<<
36
)
+
(((
pmil
>>
20
)
&
3
)
<<
40
)
+
(((
pmil
>>
22
)
&
3
)
<<
44
)
+
(((
pmil
>>
24
)
&
3
)
<<
48
));
}
u
nsigned
int
pmi2hex_2Ar2
(
unsigned
char
pmi
)
{
u
int64_t
pmi2hex_2Ar2
(
uint32_t
pmi
)
{
return
((
pmi
&
1
)
+
(((
pmi
>>
1
)
&
1
)
<<
4
)
+
(((
pmi
>>
2
)
&
1
)
<<
8
)
+
(((
pmi
>>
3
)
&
3
)
<<
12
)
+
(((
pmi
>>
4
)
&
3
)
<<
16
)
+
(((
pmi
>>
5
)
&
3
)
<<
20
)
+
(((
pmi
>>
6
)
&
3
)
<<
24
));
uint64_t
pmil
=
(
uint64_t
)
pmi
;
return
((
pmil
&
1
)
+
(((
pmil
>>
1
)
&
1
)
<<
4
)
+
(((
pmil
>>
2
)
&
1
)
<<
8
)
+
(((
pmil
>>
3
)
&
1
)
<<
12
)
+
(((
pmil
>>
4
)
&
1
)
<<
16
)
+
(((
pmil
>>
5
)
&
1
)
<<
20
)
+
(((
pmil
>>
6
)
&
1
)
<<
24
)
+
(((
pmil
>>
7
)
&
1
)
<<
28
)
+
(((
pmil
>>
8
)
&
1
)
<<
32
)
+
(((
pmil
>>
9
)
&
1
)
<<
36
)
+
(((
pmil
>>
10
)
&
1
)
<<
40
)
+
(((
pmil
>>
11
)
&
1
)
<<
44
)
+
(((
pmil
>>
12
)
&
1
)
<<
48
));
}
u
nsigned
int
cqi2hex
(
unsigned
shor
t
cqi
)
{
u
int64_t
cqi2hex
(
uint32_
t
cqi
)
{
return
((
cqi
&
3
)
+
(((
cqi
>>
2
)
&
3
)
<<
4
)
+
(((
cqi
>>
4
)
&
3
)
<<
8
)
+
(((
cqi
>>
6
)
&
3
)
<<
12
)
+
(((
cqi
>>
8
)
&
3
)
<<
16
)
+
(((
cqi
>>
10
)
&
3
)
<<
20
)
+
(((
cqi
>>
12
)
&
3
)
<<
24
));
uint64_t
cqil
=
(
uint64_t
)
cqi
;
return
((
cqil
&
3
)
+
(((
cqil
>>
2
)
&
3
)
<<
4
)
+
(((
cqil
>>
4
)
&
3
)
<<
8
)
+
(((
cqil
>>
6
)
&
3
)
<<
12
)
+
(((
cqil
>>
8
)
&
3
)
<<
16
)
+
(((
cqil
>>
10
)
&
3
)
<<
20
)
+
(((
cqil
>>
12
)
&
3
)
<<
24
)
+
(((
cqil
>>
14
)
&
3
)
<<
28
)
+
(((
cqil
>>
16
)
&
3
)
<<
32
)
+
(((
cqil
>>
18
)
&
3
)
<<
36
)
+
(((
cqil
>>
20
)
&
3
)
<<
40
)
+
(((
cqil
>>
22
)
&
3
)
<<
44
)
+
(((
cqil
>>
24
)
&
3
)
<<
48
));
}
//void do_diff_cqi(uint8_t N_RB_DL,
...
...
@@ -117,7 +127,7 @@ void do_diff_cqi(uint8_t N_RB_DL,
// This is table 7.2.1-3 from 36.213 (with k replaced by the number of subbands, nb_sb)
switch
(
N_RB_DL
)
{
case
6
:
nb_sb
=
0
;
nb_sb
=
1
;
break
;
case
15
:
nb_sb
=
4
;
...
...
@@ -156,61 +166,132 @@ void extract_CQI(void *o,UCI_format_t uci_format,LTE_eNB_UE_stats *stats, uint16
uint8_t
N_RB_DL
=
25
;
*
access_mode
=
SCHEDULED_ACCESS
;
switch
(
uci_format
){
case
wideband_cqi_rank1_2A
:
stats
->
DL_cqi
[
0
]
=
(((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
stats
->
DL_pmi_single
=
((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
;
break
;
case
wideband_cqi_rank2_2A
:
stats
->
DL_cqi
[
0
]
=
(((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
stats
->
DL_cqi
[
1
]
=
(((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
);
if
(
stats
->
DL_cqi
[
1
]
>
24
)
stats
->
DL_cqi
[
1
]
=
24
;
stats
->
DL_pmi_dual
=
((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
;
break
;
case
HLC_subband_cqi_nopmi
:
stats
->
DL_cqi
[
0
]
=
(((
HLC_subband_cqi_nopmi_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
0
],
stats
->
DL_cqi
[
0
],((
HLC_subband_cqi_nopmi_5MHz
*
)
o
)
->
diffcqi1
);
break
;
case
HLC_subband_cqi_rank1_2A
:
stats
->
DL_cqi
[
0
]
=
(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
0
],
stats
->
DL_cqi
[
0
],(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
));
stats
->
DL_pmi_single
=
((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
;
break
;
case
HLC_subband_cqi_rank2_2A
:
stats
->
DL_cqi
[
0
]
=
(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
stats
->
DL_cqi
[
1
]
=
(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
);
if
(
stats
->
DL_cqi
[
1
]
>
24
)
stats
->
DL_cqi
[
1
]
=
24
;
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
0
],
stats
->
DL_cqi
[
0
],(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi1
));
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
1
],
stats
->
DL_cqi
[
1
],(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi2
));
stats
->
DL_pmi_dual
=
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
;
switch
(
N_RB_DL
)
{
case
6
:
switch
(
uci_format
){
case
wideband_cqi_rank1_2A
:
stats
->
DL_cqi
[
0
]
=
(((
wideband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
stats
->
DL_pmi_single
=
((
wideband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
pmi
;
break
;
case
wideband_cqi_rank2_2A
:
stats
->
DL_cqi
[
0
]
=
(((
wideband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
stats
->
DL_cqi
[
1
]
=
(((
wideband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi2
);
if
(
stats
->
DL_cqi
[
1
]
>
24
)
stats
->
DL_cqi
[
1
]
=
24
;
stats
->
DL_pmi_dual
=
((
wideband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
pmi
;
break
;
case
HLC_subband_cqi_nopmi
:
stats
->
DL_cqi
[
0
]
=
(((
HLC_subband_cqi_nopmi_1_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
0
],
stats
->
DL_cqi
[
0
],((
HLC_subband_cqi_nopmi_1_5MHz
*
)
o
)
->
diffcqi1
);
break
;
case
HLC_subband_cqi_rank1_2A
:
stats
->
DL_cqi
[
0
]
=
(((
HLC_subband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
0
],
stats
->
DL_cqi
[
0
],(((
HLC_subband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
diffcqi1
));
stats
->
DL_pmi_single
=
((
HLC_subband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
pmi
;
break
;
case
HLC_subband_cqi_rank2_2A
:
stats
->
DL_cqi
[
0
]
=
(((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
stats
->
DL_cqi
[
1
]
=
(((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi2
);
if
(
stats
->
DL_cqi
[
1
]
>
24
)
stats
->
DL_cqi
[
1
]
=
24
;
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
0
],
stats
->
DL_cqi
[
0
],(((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
diffcqi1
));
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
1
],
stats
->
DL_cqi
[
1
],(((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
diffcqi2
));
stats
->
DL_pmi_dual
=
((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
pmi
;
break
;
case
HLC_subband_cqi_mcs_CBA
:
if
((
*
crnti
==
((
HLC_subband_cqi_mcs_CBA_1_5MHz
*
)
o
)
->
crnti
)
&&
(
*
crnti
!=
0
)){
*
access_mode
=
CBA_ACCESS
;
LOG_D
(
PHY
,
"[eNB] UCI for CBA : mcs %d crnti %x
\n
"
,
((
HLC_subband_cqi_mcs_CBA_1_5MHz
*
)
o
)
->
mcs
,
((
HLC_subband_cqi_mcs_CBA_1_5MHz
*
)
o
)
->
crnti
);
}
else
{
*
access_mode
=
UNKNOWN_ACCESS
;
LOG_N
(
PHY
,
"[eNB] UCI for CBA : rnti (enb context %x, rx uci %x) invalid, unknown access
\n
"
,
*
crnti
,
((
HLC_subband_cqi_mcs_CBA_1_5MHz
*
)
o
)
->
crnti
);
}
break
;
case
unknown_cqi
:
default:
LOG_N
(
PHY
,
"[eNB][UCI] received unknown uci
\n
"
);
*
access_mode
=
UNKNOWN_ACCESS
;
break
;
}
break
;
case
HLC_subband_cqi_mcs_CBA
:
if
((
*
crnti
==
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
crnti
)
&&
(
*
crnti
!=
0
)){
*
access_mode
=
CBA_ACCESS
;
LOG_D
(
PHY
,
"[eNB] UCI for CBA : mcs %d crnti %x
\n
"
,
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
mcs
,
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
crnti
);
}
else
{
case
25
:
switch
(
uci_format
){
case
wideband_cqi_rank1_2A
:
stats
->
DL_cqi
[
0
]
=
(((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
stats
->
DL_pmi_single
=
((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
;
break
;
case
wideband_cqi_rank2_2A
:
stats
->
DL_cqi
[
0
]
=
(((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
stats
->
DL_cqi
[
1
]
=
(((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
);
if
(
stats
->
DL_cqi
[
1
]
>
24
)
stats
->
DL_cqi
[
1
]
=
24
;
stats
->
DL_pmi_dual
=
((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
;
break
;
case
HLC_subband_cqi_nopmi
:
stats
->
DL_cqi
[
0
]
=
(((
HLC_subband_cqi_nopmi_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
0
],
stats
->
DL_cqi
[
0
],((
HLC_subband_cqi_nopmi_5MHz
*
)
o
)
->
diffcqi1
);
break
;
case
HLC_subband_cqi_rank1_2A
:
stats
->
DL_cqi
[
0
]
=
(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
0
],
stats
->
DL_cqi
[
0
],(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
));
stats
->
DL_pmi_single
=
((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
;
break
;
case
HLC_subband_cqi_rank2_2A
:
stats
->
DL_cqi
[
0
]
=
(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
);
if
(
stats
->
DL_cqi
[
0
]
>
24
)
stats
->
DL_cqi
[
0
]
=
24
;
stats
->
DL_cqi
[
1
]
=
(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
);
if
(
stats
->
DL_cqi
[
1
]
>
24
)
stats
->
DL_cqi
[
1
]
=
24
;
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
0
],
stats
->
DL_cqi
[
0
],(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi1
));
do_diff_cqi
(
N_RB_DL
,
stats
->
DL_subband_cqi
[
1
],
stats
->
DL_cqi
[
1
],(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi2
));
stats
->
DL_pmi_dual
=
((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
;
break
;
case
HLC_subband_cqi_mcs_CBA
:
if
((
*
crnti
==
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
crnti
)
&&
(
*
crnti
!=
0
)){
*
access_mode
=
CBA_ACCESS
;
LOG_D
(
PHY
,
"[eNB] UCI for CBA : mcs %d crnti %x
\n
"
,
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
mcs
,
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
crnti
);
}
else
{
*
access_mode
=
UNKNOWN_ACCESS
;
LOG_N
(
PHY
,
"[eNB] UCI for CBA : rnti (enb context %x, rx uci %x) invalid, unknown access
\n
"
,
*
crnti
,
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
crnti
);
}
break
;
case
unknown_cqi
:
default:
LOG_N
(
PHY
,
"[eNB][UCI] received unknown uci
\n
"
);
*
access_mode
=
UNKNOWN_ACCESS
;
LOG_N
(
PHY
,
"[eNB] UCI for CBA : rnti (enb context %x, rx uci %x) invalid, unknown access
\n
"
,
*
crnti
,
((
HLC_subband_cqi_mcs_CBA_5MHz
*
)
o
)
->
crnti
);
break
;
}
break
;
case
unknown_cqi
:
default:
LOG_N
(
PHY
,
"[eNB][UCI] received unknown uci
\n
"
);
*
access_mode
=
UNKNOWN_ACCESS
;
case
50
:
break
;
case
100
:
break
;
}
...
...
@@ -291,43 +372,151 @@ void extract_CQI(void *o,UCI_format_t uci_format,LTE_eNB_UE_stats *stats, uint16
}
void
print_CQI
(
void
*
o
,
UCI_format_t
uci_format
,
unsigned
char
eNB_id
)
{
void
print_CQI
(
void
*
o
,
UCI_format_t
uci_format
,
unsigned
char
eNB_id
,
int
N_RB_DL
)
{
switch
(
uci_format
){
case
wideband_cqi_rank1_2A
:
#ifdef DEBUG_UCI
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d
\n
"
,
eNB_id
,((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x
\n
"
,
eNB_id
,((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
,
pmi2hex_2Ar1
(((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
));
switch
(
N_RB_DL
)
{
case
6
:
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d
\n
"
,
eNB_id
,
((
wideband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x
\n
"
,
eNB_id
,
((
wideband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
pmi
,
pmi2hex_2Ar1
(((
wideband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
pmi
));
break
;
case
25
:
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d
\n
"
,
eNB_id
,
((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x
\n
"
,
eNB_id
,
((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
,
pmi2hex_2Ar1
(((
wideband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
));
break
;
case
50
:
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d
\n
"
,
eNB_id
,
((
wideband_cqi_rank1_2A_10MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x
\n
"
,
eNB_id
,
((
wideband_cqi_rank1_2A_10MHz
*
)
o
)
->
pmi
,
pmi2hex_2Ar1
(((
wideband_cqi_rank1_2A_10MHz
*
)
o
)
->
pmi
));
break
;
case
100
:
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, cqi %d
\n
"
,
eNB_id
,
((
wideband_cqi_rank1_2A_20MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 1: eNB %d, pmi (%x) %8x
\n
"
,
eNB_id
,
((
wideband_cqi_rank1_2A_20MHz
*
)
o
)
->
pmi
,
pmi2hex_2Ar1
(((
wideband_cqi_rank1_2A_20MHz
*
)
o
)
->
pmi
));
break
;
}
#endif //DEBUG_UCI
break
;
case
wideband_cqi_rank2_2A
:
#ifdef DEBUG_UCI
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x
\n
"
,
eNB_id
,
pmi2hex_2Ar2
(((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
));
switch
(
N_RB_DL
)
{
case
6
:
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x
\n
"
,
eNB_id
,
pmi2hex_2Ar2
(((
wideband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
pmi
));
break
;
case
25
:
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x
\n
"
,
eNB_id
,
pmi2hex_2Ar2
(((
wideband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
));
break
;
case
50
:
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_10MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_10MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x
\n
"
,
eNB_id
,
pmi2hex_2Ar2
(((
wideband_cqi_rank2_2A_10MHz
*
)
o
)
->
pmi
));
break
;
case
100
:
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_20MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
wideband_cqi_rank2_2A_20MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] wideband_cqi rank 2: eNB %d, pmi %8x
\n
"
,
eNB_id
,
pmi2hex_2Ar2
(((
wideband_cqi_rank2_2A_20MHz
*
)
o
)
->
pmi
));
break
;
}
#endif //DEBUG_UCI
break
;
case
HLC_subband_cqi_nopmi
:
#ifdef DEBUG_UCI
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
));
switch
(
N_RB_DL
)
{
case
6
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_1_5MHz
*
)
o
)
->
diffcqi1
));
break
;
case
25
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
));
break
;
case
50
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_10MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_10MHz
*
)
o
)
->
diffcqi1
));
break
;
case
100
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_20MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi (no pmi) : eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_20MHz
*
)
o
)
->
diffcqi1
));
break
;
}
#endif //DEBUG_UCI
break
;
case
HLC_subband_cqi_rank1_2A
:
#ifdef DEBUG_UCI
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
);
switch
(
N_RB_DL
)
{
case
6
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
);
break
;
case
25
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
);
break
;
case
50
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
);
break
;
case
100
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 1: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank1_2A_5MHz
*
)
o
)
->
pmi
);
break
;
}
#endif //DEBUG_UCI
break
;
case
HLC_subband_cqi_rank2_2A
:
#ifdef DEBUG_UCI
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi2
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
);
switch
(
N_RB_DL
)
{
case
6
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
diffcqi2
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_1_5MHz
*
)
o
)
->
pmi
);
break
;
case
25
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
diffcqi2
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_5MHz
*
)
o
)
->
pmi
);
break
;
case
50
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
diffcqi2
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_10MHz
*
)
o
)
->
pmi
);
break
;
case
100
:
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi1 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
cqi1
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, cqi2 %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
cqi2
);
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi1 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
diffcqi1
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, diffcqi2 %8x
\n
"
,
eNB_id
,
cqi2hex
(((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
diffcqi2
));
LOG_I
(
PHY
,
"[PRINT CQI] hlc_cqi rank 2: eNB %d, pmi %d
\n
"
,
eNB_id
,((
HLC_subband_cqi_rank2_2A_20MHz
*
)
o
)
->
pmi
);
break
;
}
#endif //DEBUG_UCI
break
;
case
HLC_subband_cqi_mcs_CBA
:
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_coding.c
View file @
13483270
...
...
@@ -256,10 +256,10 @@ uint32_t ulsch_encoding(uint8_t *a,
sinr_eff = 0;
*/
rnti
=
phy_vars_ue
->
lte_ue_pdcch_vars
[
eNB_id
]
->
crnti
;
fill_CQI
(
ulsch
->
o
,
ulsch
->
uci_format
,
meas
,
0
,
rnti
,
tmode
,
phy_vars_ue
->
sinr_eff
);
fill_CQI
(
ulsch
,
meas
,
0
,
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
,
rnti
,
tmode
,
phy_vars_ue
->
sinr_eff
);
LOG_D
(
PHY
,
"UE CQI
\n
"
);
print_CQI
(
ulsch
->
o
,
ulsch
->
uci_format
,
0
);
print_CQI
(
ulsch
->
o
,
ulsch
->
uci_format
,
0
,
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
);
// save PUSCH pmi for later (transmission modes 4,5,6)
if
(
dlsch
[
0
])
{
...
...
@@ -310,9 +310,9 @@ uint32_t ulsch_encoding(uint8_t *a,
msg
(
"ulsch_coding: O[%d] %d
\n
"
,
i
,
ulsch
->
o
[
i
]);
}
if
((
tmode
!=
4
))
print_CQI
(
ulsch
->
o
,
wideband_cqi_rank1_2A
,
0
);
print_CQI
(
ulsch
->
o
,
wideband_cqi_rank1_2A
,
0
,
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
);
else
print_CQI
(
ulsch
->
o
,
HLC_subband_cqi_rank1_2A
,
0
);
print_CQI
(
ulsch
->
o
,
HLC_subband_cqi_rank1_2A
,
0
,
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
);
#endif
if
(
ulsch
->
harq_processes
[
harq_pid
]
->
round
==
0
)
{
// this is a new packet
...
...
@@ -901,7 +901,7 @@ int ulsch_encoding_emul(uint8_t *ulsch_buffer,
sinr_eff = meas->wideband_cqi_avg[eNB_id];
*/
fill_CQI
(
ulsch
->
o
,
ulsch
->
uci_format
,
meas
,
eNB_id
,
rnti
,
tmode
,
phy_vars_ue
->
sinr_eff
);
fill_CQI
(
ulsch
,
meas
,
eNB_id
,
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
,
rnti
,
tmode
,
phy_vars_ue
->
sinr_eff
);
//LOG_D(PHY,"UE CQI\n");
// print_CQI(ulsch->o,ulsch->uci_format,eNB_id);
...
...
openair1/PHY/MODULATION/slot_fep.c
View file @
13483270
...
...
@@ -53,6 +53,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
unsigned
int
rx_offset
;
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
int
tmp_dft_in
[
256
];
// This is for misalignment issues for 6 and 15 PRBs
switch
(
frame_parms
->
log2_symbol_size
)
{
case
7
:
...
...
@@ -95,47 +96,63 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
return
(
-
1
);
}
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
msg
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d
\n
"
,
phy_vars_ue
->
frame
,
Ns
,
symbol
,
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
);
#endif
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_rx
;
aa
++
)
{
memset
(
&
ue_common_vars
->
rxdataF
[
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
0
,
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
rx_offset
=
sample_offset
+
slot_offset
+
nb_prefix_samples0
+
subframe_offset
-
SOFFSET
;
// Align with 128 bit
rx_offset
=
rx_offset
-
rx_offset
%
4
;
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
msg
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
,
rx_offset
);
#endif
if
(
l
==
0
)
{
rx_offset
=
sample_offset
+
slot_offset
+
nb_prefix_samples0
+
subframe_offset
-
SOFFSET
;
// Align with 128 bit
rx_offset
=
rx_offset
-
rx_offset
%
4
;
if
(
rx_offset
>
(
frame_length_samples
-
frame_parms
->
ofdm_symbol_size
))
memcpy
((
short
*
)
&
ue_common_vars
->
rxdata
[
aa
][
frame_length_samples
],
(
short
*
)
&
ue_common_vars
->
rxdata
[
aa
][
0
],
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
start_meas
(
&
phy_vars_ue
->
rx_dft_stats
);
dft
((
int16_t
*
)
&
ue_common_vars
->
rxdata
[
aa
][(
rx_offset
)
%
frame_length_samples
],
(
int16_t
*
)
&
ue_common_vars
->
rxdataF
[
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
1
);
stop_meas
(
&
phy_vars_ue
->
rx_dft_stats
);
start_meas
(
&
phy_vars_ue
->
rx_dft_stats
);
dft
((
int16_t
*
)
&
ue_common_vars
->
rxdata
[
aa
][(
rx_offset
)
%
frame_length_samples
],
(
int16_t
*
)
&
ue_common_vars
->
rxdataF
[
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
1
);
stop_meas
(
&
phy_vars_ue
->
rx_dft_stats
);
}
else
{
rx_offset
=
sample_offset
+
slot_offset
+
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples0
+
nb_prefix_samples
)
+
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
*
(
l
-
1
)
+
subframe_offset
-
SOFFSET
;
rx_offset
=
rx_offset
-
(
rx_offset
%
4
);
rx_offset
+=
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
+
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
*
(
l
-
1
);
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
msg
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
,
rx_offset
);
#endif
if
(
rx_offset
>
(
frame_length_samples
-
frame_parms
->
ofdm_symbol_size
))
memcpy
((
short
*
)
&
ue_common_vars
->
rxdata
[
aa
][
frame_length_samples
],
(
short
*
)
&
ue_common_vars
->
rxdata
[
aa
][
0
],
memcpy
((
void
*
)
&
ue_common_vars
->
rxdata
[
aa
][
frame_length_samples
],
(
void
*
)
&
ue_common_vars
->
rxdata
[
aa
][
0
],
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
start_meas
(
&
phy_vars_ue
->
rx_dft_stats
);
if
((
rx_offset
&
3
)
!=
0
)
{
// if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs
memcpy
((
void
*
)
tmp_dft_in
,
(
void
*
)
&
ue_common_vars
->
rxdata
[
aa
][(
rx_offset
)
%
frame_length_samples
],
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
start_meas
(
&
phy_vars_ue
->
rx_dft_stats
);
dft
((
int16_t
*
)
tmp_dft_in
,
(
int16_t
*
)
&
ue_common_vars
->
rxdataF
[
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
1
);
}
else
// use dft input from RX buffer directly
dft
((
int16_t
*
)
&
ue_common_vars
->
rxdata
[
aa
][(
rx_offset
)
%
frame_length_samples
],
(
int16_t
*
)
&
ue_common_vars
->
rxdataF
[
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
1
);
stop_meas
(
&
phy_vars_ue
->
rx_dft_stats
);
stop_meas
(
&
phy_vars_ue
->
rx_dft_stats
);
}
}
#ifndef PERFECT_CE
if
((
l
==
0
)
||
(
l
==
(
4
-
frame_parms
->
Ncp
)))
{
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx_eNB
;
aa
++
)
{
...
...
openair1/PHY/impl_defs_top.h
View file @
13483270
...
...
@@ -319,7 +319,7 @@ typedef struct {
/// Measurement Variables
#define NUMBER_OF_SUBBANDS
7
#define NUMBER_OF_SUBBANDS
_MAX 13
#define NUMBER_OF_HARQ_PID_MAX 8
#if defined(CBMIMO1) || defined(EXMIMO)
...
...
@@ -410,23 +410,23 @@ typedef struct
/// Wideband CQI (sum of all RX antennas, in dB, for precoded transmission modes (4,5,6), up to 4 spatial streams)
int
precoded_cqi_dB
[
NUMBER_OF_CONNECTED_eNB_MAX
+
1
][
4
];
/// Subband CQI per RX antenna (= SINR)
int
subband_cqi
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NB_ANTENNAS_RX
][
NUMBER_OF_SUBBANDS
];
int
subband_cqi
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NB_ANTENNAS_RX
][
NUMBER_OF_SUBBANDS
_MAX
];
/// Total Subband CQI (= SINR)
int
subband_cqi_tot
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
];
int
subband_cqi_tot
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
_MAX
];
/// Subband CQI in dB (= SINR dB)
int
subband_cqi_dB
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NB_ANTENNAS_RX
][
NUMBER_OF_SUBBANDS
];
int
subband_cqi_dB
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NB_ANTENNAS_RX
][
NUMBER_OF_SUBBANDS
_MAX
];
/// Total Subband CQI
int
subband_cqi_tot_dB
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
];
int
subband_cqi_tot_dB
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
_MAX
];
/// Wideband PMI for each RX antenna
int
wideband_pmi_re
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NB_ANTENNAS_RX
];
/// Wideband PMI for each RX antenna
int
wideband_pmi_im
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NB_ANTENNAS_RX
];
///Subband PMI for each RX antenna
int
subband_pmi_re
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
][
NB_ANTENNAS_RX
];
int
subband_pmi_re
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
_MAX
][
NB_ANTENNAS_RX
];
///Subband PMI for each RX antenna
int
subband_pmi_im
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
][
NB_ANTENNAS_RX
];
int
subband_pmi_im
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
_MAX
][
NB_ANTENNAS_RX
];
/// chosen RX antennas (1=Rx antenna 1, 2=Rx antenna 2, 3=both Rx antennas)
unsigned
char
selected_rx_antennas
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
];
unsigned
char
selected_rx_antennas
[
NUMBER_OF_CONNECTED_eNB_MAX
][
NUMBER_OF_SUBBANDS
_MAX
];
/// Wideband Rank indication
unsigned
char
rank
[
NUMBER_OF_CONNECTED_eNB_MAX
];
/// Number of RX Antennas
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
13483270
...
...
@@ -2988,7 +2988,7 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
if
(
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
cqi_crc_status
==
1
)
{
#ifdef DEBUG_PHY_PROC
//if (((phy_vars_eNB->proc[sched_subframe].frame_tx%10) == 0) || (phy_vars_eNB->proc[sched_subframe].frame_tx < 50))
//print_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,0
);
print_CQI
(
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
o
,
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
uci_format
,
0
,
phy_vars_eNB
->
lte_frame_parms
.
N_RB_DL
);
#endif
extract_CQI
(
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
o
,
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
uci_format
,
&
phy_vars_eNB
->
eNB_UE_stats
[
i
],
&
rnti
,
&
access_mode
);
phy_vars_eNB
->
eNB_UE_stats
[
i
].
rank
=
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
o_RI
[
0
];
...
...
@@ -3610,7 +3610,7 @@ void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
if
(
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
cqi_crc_status
==
1
)
{
#ifdef DEBUG_PHY_PROC
//if (((phy_vars_eNB->proc[sched_subframe].frame_tx%10) == 0) || (phy_vars_eNB->proc[sched_subframe].frame_tx < 50))
// print_CQI(phy_vars_eNB->ulsch_eNB[i]->o,phy_vars_eNB->ulsch_eNB[i]->uci_format,0
);
print_CQI
(
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
o
,
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
uci_format
,
0
,
phy_vars_eNB
->
lte_frame_parms
.
N_RB_DL
);
#endif
extract_CQI
(
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
o
,
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
uci_format
,
&
phy_vars_eNB
->
eNB_UE_stats
[
i
],
&
rnti
,
&
access_mode
);
phy_vars_eNB
->
eNB_UE_stats
[
i
].
rank
=
phy_vars_eNB
->
ulsch_eNB
[
i
]
->
harq_processes
[
harq_pid
]
->
o_RI
[
0
];
...
...
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
13483270
...
...
@@ -1843,8 +1843,8 @@ int main(int argc, char **argv) {
// use the PMI from previous trial
if
(
DLSCH_alloc_pdu2_1E
[
0
].
tpmi
==
5
)
{
PHY_vars_eNB
->
dlsch_eNB
[
0
][
0
]
->
pmi_alloc
=
quantize_subband_pmi
(
&
PHY_vars_UE
->
PHY_measurements
,
0
);
PHY_vars_UE
->
dlsch_ue
[
0
][
0
]
->
pmi_alloc
=
quantize_subband_pmi
(
&
PHY_vars_UE
->
PHY_measurements
,
0
);
PHY_vars_eNB
->
dlsch_eNB
[
0
][
0
]
->
pmi_alloc
=
quantize_subband_pmi
(
&
PHY_vars_UE
->
PHY_measurements
,
0
,
PHY_vars_eNB
->
lte_frame_parms
.
N_RB_DL
);
PHY_vars_UE
->
dlsch_ue
[
0
][
0
]
->
pmi_alloc
=
quantize_subband_pmi
(
&
PHY_vars_UE
->
PHY_measurements
,
0
,
PHY_vars_UE
->
lte_frame_parms
.
N_RB_DL
);
if
(
n_users
>
1
)
PHY_vars_eNB
->
dlsch_eNB
[
1
][
0
]
->
pmi_alloc
=
(
PHY_vars_eNB
->
dlsch_eNB
[
0
][
0
]
->
pmi_alloc
^
0x1555
);
/*
...
...
openair1/SIMULATION/LTE_PHY/pdcchsim.c
View file @
13483270
...
...
@@ -88,7 +88,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi
lte_frame_parms
->
nb_antennas_tx_eNB
=
N_tx
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
lte_frame_parms
->
phich_config_common
.
phich_resource
=
one
;
//one
Sixth; //half
lte_frame_parms
->
phich_config_common
.
phich_resource
=
oneSixth
;
//half
lte_frame_parms
->
tdd_config
=
tdd_config
;
lte_frame_parms
->
frame_type
=
frame_type
;
...
...
@@ -453,7 +453,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
}
}
/*
// add common dci
DCI_pdu
.
dci_alloc
[
0
].
dci_length
=
BCCH_pdu_size_bits
;
DCI_pdu
.
dci_alloc
[
0
].
L
=
log2Lcommon
;
...
...
@@ -462,7 +462,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
DCI_pdu
.
dci_alloc
[
0
].
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
++
;
/*
// add ue specific dci
DCI_pdu.dci_alloc[1].dci_length = dci_length;
DCI_pdu.dci_alloc[1].L = log2L;
...
...
@@ -471,7 +471,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
DCI_pdu.dci_alloc[1].ra_flag = 0;
memcpy((void*)&DCI_pdu.dci_alloc[1].dci_pdu[0], &DLSCH_alloc_pdu[0], dci_length_bytes);
DCI_pdu.Num_ue_spec_dci++;
*/
DCI_pdu.dci_alloc[0].dci_length = UL_pdu_size_bits;
DCI_pdu.dci_alloc[0].L = log2L;
...
...
@@ -480,7 +480,7 @@ DCI_PDU *get_dci(LTE_DL_FRAME_PARMS *lte_frame_parms,uint8_t log2L, uint8_t log2
DCI_pdu.dci_alloc[0].ra_flag = 0;
memcpy((void*)&DCI_pdu.dci_alloc[0].dci_pdu[0], &UL_alloc_pdu[0], UL_pdu_size_bytes);
DCI_pdu.Num_ue_spec_dci++;
*/
DCI_pdu
.
nCCE
=
0
;
for
(
i
=
0
;
i
<
DCI_pdu
.
Num_common_dci
+
DCI_pdu
.
Num_ue_spec_dci
;
i
++
)
{
DCI_pdu
.
nCCE
+=
(
1
<<
(
DCI_pdu
.
dci_alloc
[
i
].
L
));
...
...
@@ -866,7 +866,6 @@ int main(int argc, char **argv) {
}
PHY_vars_UE
->
UE_mode
[
0
]
=
PUSCH
;
nCCE_max
=
get_nCCE
(
3
,
&
PHY_vars_eNB
->
lte_frame_parms
,
get_mi
(
&
PHY_vars_eNB
->
lte_frame_parms
,
0
));
...
...
@@ -891,29 +890,30 @@ int main(int argc, char **argv) {
for
(
aa
=
0
;
aa
<
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_tx_eNB
;
aa
++
)
{
memset
(
&
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
][
0
],
0
,
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
*
sizeof
(
mod_sym_t
));
/*
re_offset = PHY_vars_eNB->lte_frame_parms.first_carrier_offset;
txptr = (uint32_t*)&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][subframe*PHY_vars_eNB->lte_frame_parms.samples_per_tti];
for (i=0;i<PHY_vars_eNB->lte_frame_parms.N_RB_DL*6;i++) {
txptr
[
re_offset
++
]
=
QPSK
[
taus
()
&
3
];
txptr[re_offset++] =
PHY_vars_eNB->lte_frame_parms.mode1_flag==1 ? QPSK[taus()&3] : QPSK2
[taus()&3];
//printf("%i => %d,%d\n",re_offset-1,*(int16_t*)&txptr[re_offset-1],*(1+(int16_t*)&txptr[re_offset-1]));
}
re_offset=1; //skip DC
for (i=0;i<PHY_vars_eNB->lte_frame_parms.N_RB_DL*6;i++)
txptr
[
re_offset
++
]
=
QPSK
[
taus
()
&
3
];
txptr[re_offset++] = PHY_vars_eNB->lte_frame_parms.mode1_flag==1 ? QPSK[taus()&3] : QPSK2[taus()&3];
*/
}
generate_pilots_slot
(
PHY_vars_eNB
,
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
],
1024
,
(
subframe
*
2
),
0
);
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
],
AMP
,
//
1024,
(
subframe
*
2
),
0
);
generate_pilots_slot
(
PHY_vars_eNB
,
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
],
1024
,
(
subframe
*
2
)
+
1
,
0
);
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
],
AMP
,
//
1024,
(
subframe
*
2
)
+
1
,
0
);
if
(
input_fd
==
NULL
)
{
...
...
@@ -969,15 +969,15 @@ int main(int argc, char **argv) {
if
(
DCI_pdu
.
dci_alloc
[
i
].
nCCE
==-
1
)
exit
(
-
1
);
}
num_pdcch_symbols
=
generate_dci_top
(
DCI_pdu
.
Num_ue_spec_dci
,
DCI_pdu
.
Num_common_dci
,
DCI_pdu
.
dci_alloc
,
0
,
1024
,
&
PHY_vars_eNB
->
lte_frame_parms
,
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
],
subframe
);
DCI_pdu
.
Num_common_dci
,
DCI_pdu
.
dci_alloc
,
0
,
AMP
,
&
PHY_vars_eNB
->
lte_frame_parms
,
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
],
subframe
);
if
(
n_frames
==
1
)
printf
(
"num_pdcch_symbols at TX %d
\n
"
,
num_pdcch_symbols
);
...
...
@@ -999,7 +999,7 @@ int main(int argc, char **argv) {
PHY_vars_UE
->
ulsch_ue
[
0
]
->
harq_processes
[
harq_pid
]
->
n_DMRS
=
0
;
generate_phich_top
(
PHY_vars_eNB
,
subframe
,
1024
,
0
,
0
);
subframe
,
AMP
,
0
,
0
);
/*
// generate 3 interfering PHICH
if (num_phich_interf>0) {
...
...
@@ -1032,11 +1032,11 @@ int main(int argc, char **argv) {
// write_output("pilotsF.m","rsF",txdataF[0],lte_PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1);
if
(
n_frames
==
1
)
if
(
n_frames
==
1
)
{
write_output
(
"txsigF0.m"
,
"txsF0"
,
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
0
],
4
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
if
(
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_tx_eNB
>
1
)
write_output
(
"txsigF1.m"
,
"txsF1"
,
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
1
],
4
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
}
tx_lev
=
0
;
...
...
@@ -1127,10 +1127,10 @@ int main(int argc, char **argv) {
// printf("subframe_offset = %d\n",subframe_offset);
slot_fep
(
PHY_vars_UE
,
l
%
(
PHY_vars_eNB
->
lte_frame_parms
.
symbols_per_tti
/
2
),
(
2
*
subframe
)
+
(
l
/
(
PHY_vars_eNB
->
lte_frame_parms
.
symbols_per_tti
/
2
)),
0
,
0
);
l
%
(
PHY_vars_eNB
->
lte_frame_parms
.
symbols_per_tti
/
2
),
(
2
*
subframe
)
+
(
l
/
(
PHY_vars_eNB
->
lte_frame_parms
.
symbols_per_tti
/
2
)),
0
,
0
);
#ifdef PERFECT_CE
if
(
awgn_flag
==
0
)
{
...
...
@@ -1153,7 +1153,7 @@ int main(int argc, char **argv) {
}
}
else
{
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
;
aa
++
)
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
_eNB
;
aa
++
)
{
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
...
...
openair1/SIMULATION/LTE_PHY/ulsim.c
View file @
13483270
...
...
@@ -959,7 +959,7 @@ int main(int argc, char **argv) {
if
((
cqi_flag
==
1
)
&&
(
n_frames
==
1
)
)
{
printf
(
"CQI information (O %d) %d %d
\n
"
,
PHY_vars_UE
->
ulsch_ue
[
0
]
->
O
,
PHY_vars_UE
->
ulsch_ue
[
0
]
->
o
[
0
],
PHY_vars_UE
->
ulsch_ue
[
0
]
->
o
[
1
]);
print_CQI
(
PHY_vars_UE
->
ulsch_ue
[
0
]
->
o
,
PHY_vars_UE
->
ulsch_ue
[
0
]
->
uci_format
,
0
);
print_CQI
(
PHY_vars_UE
->
ulsch_ue
[
0
]
->
o
,
PHY_vars_UE
->
ulsch_ue
[
0
]
->
uci_format
,
PHY_vars_UE
->
lte_frame_parms
.
N_RB_DL
,
0
);
}
PHY_vars_UE
->
ulsch_ue
[
0
]
->
o_ACK
[
0
]
=
taus
()
&
1
;
...
...
@@ -1224,7 +1224,7 @@ int main(int argc, char **argv) {
printf
(
"No ULSCH errors found, o_ACK[0]= %d, cqi_crc_status=%d
\n
"
,
PHY_vars_eNB
->
ulsch_eNB
[
0
]
->
harq_processes
[
harq_pid
]
->
o_ACK
[
0
],
PHY_vars_eNB
->
ulsch_eNB
[
0
]
->
harq_processes
[
harq_pid
]
->
cqi_crc_status
);
if
(
PHY_vars_eNB
->
ulsch_eNB
[
0
]
->
harq_processes
[
harq_pid
]
->
cqi_crc_status
==
1
)
print_CQI
(
PHY_vars_eNB
->
ulsch_eNB
[
0
]
->
harq_processes
[
harq_pid
]
->
o
,
PHY_vars_eNB
->
ulsch_eNB
[
0
]
->
harq_processes
[
harq_pid
]
->
uci_format
,
0
);
PHY_vars_eNB
->
ulsch_eNB
[
0
]
->
harq_processes
[
harq_pid
]
->
uci_format
,
0
,
PHY_vars_eNB
->
lte_frame_parms
.
N_RB_DL
);
dump_ulsch
(
PHY_vars_eNB
,
subframe
,
0
);
exit
(
-
1
);
}
...
...
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