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
Michael Black
OpenXG-RAN
Commits
759f5f75
Commit
759f5f75
authored
Dec 22, 2016
by
hbilel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[OAI-UE] 1- ignore bad dci
2- reset dataTx buff correctly 3- pucch/pusch power control fix
parent
8d2bb6cb
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
85 additions
and
55 deletions
+85
-55
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+37
-26
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+42
-23
openair1/SCHED/pucch_pc.c
openair1/SCHED/pucch_pc.c
+2
-2
openair1/SCHED/pusch_pc.c
openair1/SCHED/pusch_pc.c
+4
-4
No files found.
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
759f5f75
...
...
@@ -3885,7 +3885,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
NPRB
=
RIV2nb_rb_LUT6
[
rballoc
];
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
}
if
(
vrb_type
==
LOCALIZED
)
{
...
...
@@ -3941,7 +3940,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
NPRB
=
RIV2nb_rb_LUT25
[
rballoc
];
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
}
if
(
vrb_type
==
LOCALIZED
)
{
...
...
@@ -3994,7 +3992,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
NPRB
=
RIV2nb_rb_LUT50
[
rballoc
];
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
}
if
(
vrb_type
==
LOCALIZED
)
{
...
...
@@ -4061,7 +4058,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
NPRB
=
RIV2nb_rb_LUT100
[
rballoc
];
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
}
if
(
vrb_type
==
LOCALIZED
)
{
...
...
@@ -4114,6 +4110,17 @@ int generate_ue_dlsch_params_from_dci(int frame,
return
(
-
1
);
}
if
((
mcs
>
28
)
&&
(
(
dlsch0_harq
->
round
==
0
)
||
(
rnti
==
si_rnti
)
||
(
rnti
==
p_rnti
)
||
(
rnti
==
ra_rnti
)
))
{
// DCI false detection
return
(
-
1
);
}
if
((
rv
!=
0
)
&&
(
dlsch0_harq
->
round
==
0
)
&&
(
rnti
!=
si_rnti
)
&&
(
rnti
!=
p_rnti
)
&&
(
rnti
!=
ra_rnti
))
{
// DCI false detection
return
(
-
1
);
}
// change the mcs limit from 7 to 8, supported by MAC
/* if (mcs > 10) {
LOG_E(PHY,"Format 1A: subframe %d unlikely mcs for format 1A (%d), TPC %d rv %d\n",subframe,mcs,TPC,rv);
...
...
@@ -4164,7 +4171,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
if
(
dlsch0_harq
->
round
)
{
// compare old TBS to new TBS
if
(
dlsch0_harq
->
TBS
!=
TBStable
[
get_I_TBS
(
mcs
)][
NPRB
-
1
]
)
if
(
(
mcs
<
29
)
&&
(
dlsch0_harq
->
TBS
!=
TBStable
[
get_I_TBS
(
mcs
)][
NPRB
-
1
])
)
{
// this is an eNB issue
// retransmisison but old and new TBS are different !!!
...
...
@@ -4174,12 +4181,17 @@ int generate_ue_dlsch_params_from_dci(int frame,
}
}
if
(
mcs
<
29
)
{
dlsch0_harq
->
mcs
=
mcs
;
}
if
((
rnti
==
si_rnti
)
||
(
rnti
==
p_rnti
)
||
(
rnti
==
ra_rnti
))
{
dlsch0_harq
->
TBS
=
TBStable
[
mcs
][
NPRB
-
1
];
dlsch0_harq
->
Qm
=
2
;
}
else
{
if
(
mcs
<
29
)
dlsch0_harq
->
TBS
=
TBStable
[
get_I_TBS
(
mcs
)][
NPRB
-
1
];
dlsch0_harq
->
Qm
=
get_Qm
(
mcs
);
}
...
...
@@ -4410,14 +4422,27 @@ int generate_ue_dlsch_params_from_dci(int frame,
break
;
}
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
if
(
harq_pid
>=
8
)
{
LOG_E
(
PHY
,
"Format 1: harq_pid >= 8
\n
"
);
return
(
-
1
);
}
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
if
((
mcs
>
28
)
&&
(
dlsch0_harq
->
round
==
0
)
)
{
// DCI false detection
return
(
-
1
);
}
if
((
rv
!=
0
)
&&
(
dlsch0_harq
->
round
==
0
)
)
{
// DCI false detection
return
(
-
1
);
}
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch
[
0
]
->
current_harq_pid
=
harq_pid
;
dlsch
[
0
]
->
harq_ack
[
subframe
].
harq_id
=
harq_pid
;
...
...
@@ -4441,9 +4466,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
return
(
-
1
);
}
// printf("NPRB %d\n",NPRB);
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
if
(
TPC
!=
1
)
LOG_D
(
PHY
,
"format1 TPC %d, dlsch0_harq->delta_PUCCH %d
\n
"
,
TPC
,
dlsch0_harq
->
delta_PUCCH
);
...
...
@@ -4470,16 +4492,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
LOG_D
(
PHY
,
"[PDSCH %x/%d] Format 1 DCI First TX: Clearing flag
\n
"
);
dlsch0_harq
->
first_tx
=
0
;
}
}
else
if
(
dlsch0_harq
->
status
==
SCH_IDLE
)
{
// we got an Ndi = 0 for a previously decoded process,
// this happens if either another harq process in the same
// is NAK or an ACK was not received
dlsch
[
0
]
->
harq_ack
[
subframe
].
ack
=
1
;
dlsch
[
0
]
->
harq_ack
[
subframe
].
harq_id
=
harq_pid
;
dlsch
[
0
]
->
harq_ack
[
subframe
].
send_harq_status
=
1
;
dlsch
[
0
]
->
active
=
0
;
// printf("Got NDI=0 for correctly decoded SDU (harq_pid %d) subframe %d\n",harq_pid,subframe);
return
(
0
);
}
dlsch0_harq
->
mcs
=
mcs
;
...
...
@@ -4776,7 +4788,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch0_harq
->
mcs
=
mcs1
;
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
/*
if (dlsch0_harq->mcs>20) {
printf("dci_tools.c: mcs > 20 disabled for now (asked %d)\n",dlsch0_harq->mcs);
...
...
@@ -5196,9 +5207,7 @@ int generate_ue_dlsch_params_from_dci(int frame,
// printf("NPRB %d\n",NPRB);
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch0
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch1_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch1
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
dlsch0_harq
->
mcs
=
mcs1
;
dlsch1_harq
->
mcs
=
mcs2
;
...
...
@@ -5449,7 +5458,6 @@ int generate_ue_dlsch_params_from_dci(int frame,
dlsch0_harq
->
mcs
=
((
DCI1E_5MHz_2A_M10PRB_TDD_t
*
)
dci_pdu
)
->
mcs
;
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[((
DCI1E_5MHz_2A_M10PRB_TDD_t
*
)
dci_pdu
)
->
TPC
&
3
];
dlsch
[
0
]
->
g_pucch
+=
delta_PUCCH_lut
[
TPC
&
3
];
...
...
@@ -5572,11 +5580,14 @@ int generate_ue_dlsch_params_from_dci(int frame,
#ifdef DEBUG_DCI
if
(
dlsch
[
0
]
&&
(
dlsch
[
0
]
->
rnti
!=
0xffff
))
{
printf
(
"dci_format:%d Abssubframe: %d.%d
\n
"
,
dci_format
,
frame
,
subframe
);
printf
(
"dci_format:%d Abssubframe: %d.%d
\n
"
,
dci_format
,
frame
%
1024
,
subframe
);
printf
(
"PDSCH dlsch0 UE: rnti %x
\n
"
,
dlsch
[
0
]
->
rnti
);
printf
(
"PDSCH dlsch0 UE: NBRB %d
\n
"
,
dlsch0_harq
->
nb_rb
);
printf
(
"PDSCH dlsch0 UE: rballoc %x
\n
"
,
dlsch0_harq
->
rb_alloc_even
[
0
]);
printf
(
"PDSCH dlsch0 UE: harq_pid %d
\n
"
,
harq_pid
);
printf
(
"PDSCH dlsch0 UE: tpc %d
\n
"
,
TPC
);
printf
(
"PDSCH dlsch0 UE: g %d
\n
"
,
dlsch
[
0
]
->
g_pucch
);
printf
(
"PDSCH dlsch0 UE: round %d
\n
"
,
dlsch0_harq
->
round
);
printf
(
"PDSCH dlsch0 UE: DCINdi %d
\n
"
,
dlsch0_harq
->
DCINdi
);
printf
(
"PDSCH dlsch0 UE: rvidx %d
\n
"
,
dlsch0_harq
->
rvidx
);
printf
(
"PDSCH dlsch0 UE: TBS %d
\n
"
,
dlsch0_harq
->
TBS
);
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
759f5f75
...
...
@@ -205,9 +205,6 @@ unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb
int
gain_dB
=
power_dBm
-
power_max_dBm
;
double
gain_lin
;
//if (gain_dB < -20)
// return(AMP/10);
gain_lin
=
pow
(
10
,.
1
*
gain_dB
);
if
((
nb_rb
>
0
)
&&
(
nb_rb
<=
N_RB_UL
))
{
return
((
int
)(
AMP
*
sqrt
(
gain_lin
*
N_RB_UL
/
(
double
)
nb_rb
)));
...
...
@@ -934,7 +931,7 @@ uint16_t get_n1_pucch(PHY_VARS_UE *ue,
*/
#endif
void
ulsch_common_procedures
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
)
{
void
ulsch_common_procedures
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
empty_subframe
)
{
int
aa
;
LTE_DL_FRAME_PARMS
*
frame_parms
=&
ue
->
frame_parms
;
...
...
@@ -971,6 +968,37 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) {
#else //this is the normal case
ulsch_start
=
(
frame_parms
->
samples_per_tti
*
subframe_tx
)
-
ue
->
N_TA_offset
;
//-ue->timing_advance;
#endif //else EXMIMO
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
if
(
empty_subframe
)
{
//#if 1
overflow
=
ulsch_start
-
9
*
frame_parms
->
samples_per_tti
;
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
;
aa
++
)
{
memset
(
&
ue
->
common_vars
.
txdata
[
aa
][
ulsch_start
],
0
,
4
*
cmin
(
frame_parms
->
samples_per_tti
*
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
,
ulsch_start
+
frame_parms
->
samples_per_tti
));
if
(
overflow
>
0
)
memset
(
&
ue
->
common_vars
.
txdata
[
aa
][
0
],
0
,
4
*
overflow
);
}
/*#else
overflow = ulsch_start - 9*frame_parms->samples_per_tti;
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
for (k=ulsch_start; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++) {
((short*)ue->common_vars.txdata[aa])[2*k] = 0;
((short*)ue->common_vars.txdata[aa])[2*k+1] = 0;
}
for (k=0; k<overflow; k++) {
((short*)ue->common_vars.txdata[aa])[2*k] = 0;
((short*)ue->common_vars.txdata[aa])[2*k+1] = 0;
}
}
#endif*/
return
;
}
#endif
if
((
frame_tx
%
100
)
==
0
)
LOG_D
(
PHY
,
"[UE %d] Frame %d, subframe %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d
\n
"
,
ue
->
Mod_id
,
frame_tx
,
subframe_tx
,
...
...
@@ -1978,25 +2006,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
if
(
abstraction_flag
==
0
)
{
if
(
ue
->
generate_ul_signal
[
eNB_id
]
==
1
)
{
ulsch_common_procedures
(
ue
,
proc
);
}
else
{
// no uplink so clear signal buffer instead
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)//this is the EXPRESS MIMO case
ulsch_start
=
(
ue
->
rx_offset
+
subframe_tx
*
frame_parms
->
samples_per_tti
-
ue
->
hw_timing_advance
-
ue
->
timing_advance
-
ue
->
N_TA_offset
+
5
)
%
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
frame_parms
->
samples_per_tti
);
#else //this is the normal case
ulsch_start
=
(
frame_parms
->
samples_per_tti
*
subframe_tx
)
-
ue
->
N_TA_offset
;
//-ue->timing_advance;
#endif //else EXMIMO
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
;
aa
++
)
{
memset
(
&
ue
->
common_vars
.
txdata
[
aa
][
ulsch_start
],
0
,
frame_parms
->
samples_per_tti
<<
2
);
}
}
ulsch_common_procedures
(
ue
,
proc
,
(
ue
->
generate_ul_signal
[
eNB_id
]
==
0
));
}
// mode != PRACH
...
...
@@ -2602,6 +2612,15 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
P_RNTI
,
ue
->
transmission_mode
[
eNB_id
]
<
7
?
0
:
ue
->
transmission_mode
[
eNB_id
])
==
0
))
{
// update TPC for PUCCH
if
((
dci_alloc_rx
[
i
].
format
==
format1
)
||
(
dci_alloc_rx
[
i
].
format
==
format1A
)
||
(
dci_alloc_rx
[
i
].
format
==
format2
)
||
(
dci_alloc_rx
[
i
].
format
==
format2A
))
{
ue
->
dlsch
[
eNB_id
][
0
]
->
g_pucch
+=
ue
->
dlsch
[
eNB_id
][
0
]
->
harq_processes
[
ue
->
dlsch
[
eNB_id
][
0
]
->
current_harq_pid
]
->
delta_PUCCH
;
}
ue
->
dlsch_received
[
eNB_id
]
++
;
#ifdef DEBUG_PHY_PROC
...
...
openair1/SCHED/pucch_pc.c
View file @
759f5f75
...
...
@@ -34,10 +34,10 @@
#include "PHY/LTE_TRANSPORT/proto.h"
#include "PHY/extern.h"
int
8
_t
pucch_power_cntl
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
subframe
,
uint8_t
eNB_id
,
PUCCH_FMT_t
pucch_fmt
)
int
16
_t
pucch_power_cntl
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
uint8_t
subframe
,
uint8_t
eNB_id
,
PUCCH_FMT_t
pucch_fmt
)
{
int
8
_t
Po_PUCCH
;
int
16
_t
Po_PUCCH
;
//uint8_t harq_pid;
// P_pucch = P_opucch+ PL + h(nCQI,nHARQ) + delta_pucchF(pucch_fmt) + g(i))
...
...
openair1/SCHED/pusch_pc.c
View file @
759f5f75
...
...
@@ -103,13 +103,13 @@ int16_t get_hundred_times_delta_IF_mac(module_id_t module_idP, uint8_t CC_id, rn
int16_t
get_hundred_times_delta_IF
(
PHY_VARS_UE
*
ue
,
uint8_t
eNB_id
,
uint8_t
harq_pid
)
{
uint32_t
Nre
=
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
Nsymb_initial
*
uint32_t
Nre
=
2
*
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
Nsymb_initial
*
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
*
12
;
if
(
Nre
==
0
)
return
(
0
);
uint32_t
MPR_x100
=
100
*
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
sumKr
/
Nre
;
uint32_t
MPR_x100
=
100
*
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
TBS
/
Nre
;
// Note: MPR=is the effective spectral efficiency of the PUSCH
// FK 20140908 sumKr is only set after the ulsch_encoding
...
...
@@ -174,8 +174,8 @@ void pusch_power_cntl(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_
else
if
(
ue
->
ulsch
[
eNB_id
]
->
PHR
>
40
)
ue
->
ulsch
[
eNB_id
]
->
PHR
=
40
;
LOG_D
(
PHY
,
"[UE %d][PUSCH %d]
frame %d, subframe %d:
Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d
\n
"
,
ue
->
Mod_id
,
harq_pid
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
LOG_D
(
PHY
,
"[UE %d][PUSCH %d]
AbsSubframe %d.%d: nb_rb: %d,
Po_PUSCH %d dBm : tx power %d, Po_NOMINAL_PUSCH %d,log10(NPRB) %f,PHR %d, PL %d, alpha*PL %f,delta_IF %f,f_pusch %d
\n
"
,
ue
->
Mod_id
,
harq_pid
,
proc
->
frame_tx
,
proc
->
subframe_tx
,
nb_rb
,
ue
->
ulsch
[
eNB_id
]
->
Po_PUSCH
,
ue
->
tx_power_max_dBm
,
ue
->
frame_parms
.
ul_power_control_config_common
.
p0_NominalPUSCH
,
...
...
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