Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
openairinterface5G
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Merge Requests
20
Merge Requests
20
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
oai
openairinterface5G
Commits
e9d53697
Commit
e9d53697
authored
Feb 13, 2018
by
knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated dlsim to FAPI interfaces
parent
4070f0bf
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
575 additions
and
1333 deletions
+575
-1333
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+2
-1
openair1/PHY/CODING/crc_byte.c
openair1/PHY/CODING/crc_byte.c
+2
-1
openair1/PHY/INIT/defs.h
openair1/PHY/INIT/defs.h
+7
-14
openair1/PHY/INIT/lte_param_init.c
openair1/PHY/INIT/lte_param_init.c
+37
-12
openair1/PHY/LTE_TRANSPORT/dci.c
openair1/PHY/LTE_TRANSPORT/dci.c
+26
-15
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+29
-24
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+2
-1
openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+6
-0
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+8
-6
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+1
-0
openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
+8
-5
openair1/PHY/LTE_TRANSPORT/power_control.c
openair1/PHY/LTE_TRANSPORT/power_control.c
+17
-15
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+5
-5
openair1/PHY/vars.h
openair1/PHY/vars.h
+1
-0
openair1/SCHED/fapi_l1.c
openair1/SCHED/fapi_l1.c
+9
-4
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+7
-1
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+8
-5
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+399
-1223
openair2/LAYER2/MAC/defs.h
openair2/LAYER2/MAC/defs.h
+1
-1
No files found.
cmake_targets/CMakeLists.txt
View file @
e9d53697
...
...
@@ -2157,11 +2157,12 @@ foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim pr
${
OPENAIR1_DIR
}
/SIMULATION/LTE_PHY/
${
myExe
}
.c
${
XFORMS_SOURCE
}
${
T_SOURCE
}
${
CONFIG_SOURCES
}
)
target_link_libraries
(
${
myExe
}
-Wl,--start-group SIMU UTIL SCHED_LIB PHY LFDS
${
ITTI_LIB
}
LFDS7 -Wl,--end-group
pthread m rt
${
CONFIG_LIBRARIES
}
${
ATLAS_LIBRARIES
}
${
XFORMS_LIBRARIES
}
${
T_LIB
}
pthread m rt
${
CONFIG_LIBRARIES
}
${
ATLAS_LIBRARIES
}
${
XFORMS_LIBRARIES
}
${
T_LIB
}
dl
)
endforeach
(
myExe
)
...
...
openair1/PHY/CODING/crc_byte.c
View file @
e9d53697
...
...
@@ -109,7 +109,7 @@ crc24a (unsigned char * inptr, int bitlen)
resbit
=
(
bitlen
%
8
);
while
(
octetlen
--
>
0
)
{
//
printf("
in %x => crc %x\n",crc,*inptr);
//
printf("crc24a:
in %x => crc %x\n",crc,*inptr);
crc
=
(
crc
<<
8
)
^
crc24aTable
[(
*
inptr
++
)
^
(
crc
>>
24
)];
}
...
...
@@ -128,6 +128,7 @@ unsigned int crc24b (unsigned char * inptr, int bitlen)
resbit
=
(
bitlen
%
8
);
while
(
octetlen
--
>
0
)
{
// printf("crc24b: in %x => crc %x (%x)\n",crc,*inptr,crc24bTable[(*inptr) ^ (crc >> 24)]);
crc
=
(
crc
<<
8
)
^
crc24bTable
[(
*
inptr
++
)
^
(
crc
>>
24
)];
}
...
...
openair1/PHY/INIT/defs.h
View file @
e9d53697
...
...
@@ -322,8 +322,11 @@ void init_lte_top(LTE_DL_FRAME_PARMS *lte_frame_parms);
//void copy_lte_parms_to_phy_framing(LTE_DL_FRAME_PARMS *frame_parm, PHY_FRAMING *phy_framing);
void
lte_param_init
(
unsigned
char
N_tx_port_eNB
,
unsigned
char
N_tx
,
void
lte_param_init
(
PHY_VARS_eNB
**
eNBp
,
PHY_VARS_UE
**
UEp
,
RU_t
**
rup
,
unsigned
char
N_tx_port_eNB
,
unsigned
char
N_tx_phy
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
uint8_t
extended_prefix_flag
,
...
...
@@ -331,10 +334,12 @@ void lte_param_init(unsigned char N_tx_port_eNB,
uint16_t
Nid_cell
,
uint8_t
tdd_config
,
uint8_t
N_RB_DL
,
uint8_t
pa
,
uint8_t
threequarter_fs
,
uint8_t
osf
,
uint32_t
perfect_ce
);
#if defined(Rel10) || defined(Rel14)
void
phy_config_dedicated_scell_ue
(
uint8_t
Mod_id
,
uint8_t
eNB_index
,
...
...
@@ -359,18 +364,6 @@ void phy_config_request(PHY_Config_t *phy_config);
int
init_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
osf
);
void
dump_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
);
void
lte_param_init
(
unsigned
char
N_tx_port_eNB
,
unsigned
char
N_tx_phy
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
uint8_t
extended_prefix_flag
,
frame_t
frame_type
,
uint16_t
Nid_cell
,
uint8_t
tdd_config
,
uint8_t
N_RB_DL
,
uint8_t
threequarter_fs
,
uint8_t
osf
,
uint32_t
perfect_ce
);
/** @} */
#endif
openair1/PHY/INIT/lte_param_init.c
View file @
e9d53697
...
...
@@ -32,8 +32,12 @@
extern
PHY_VARS_eNB
*
eNB
;
extern
PHY_VARS_UE
*
UE
;
extern
RU_t
*
ru
;
void
lte_param_init
(
unsigned
char
N_tx_port_eNB
,
void
lte_param_init
(
PHY_VARS_eNB
**
eNBp
,
PHY_VARS_UE
**
UEp
,
RU_t
**
rup
,
unsigned
char
N_tx_port_eNB
,
unsigned
char
N_tx_phy
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
...
...
@@ -42,6 +46,7 @@ void lte_param_init(unsigned char N_tx_port_eNB,
uint16_t
Nid_cell
,
uint8_t
tdd_config
,
uint8_t
N_RB_DL
,
uint8_t
pa
,
uint8_t
threequarter_fs
,
uint8_t
osf
,
uint32_t
perfect_ce
)
...
...
@@ -49,13 +54,27 @@ void lte_param_init(unsigned char N_tx_port_eNB,
LTE_DL_FRAME_PARMS
*
frame_parms
;
int
i
;
PHY_VARS_eNB
*
eNB
;
PHY_VARS_UE
*
UE
;
RU_t
*
ru
;
printf
(
"Start lte_param_init
\n
"
);
eNB
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
UE
=
malloc
(
sizeof
(
PHY_VARS_UE
));
*
eNBp
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
*
UEp
=
malloc
(
sizeof
(
PHY_VARS_UE
));
*
rup
=
malloc
(
sizeof
(
RU_t
));
eNB
=
*
eNBp
;
UE
=
*
UEp
;
ru
=
*
rup
;
printf
(
"eNB %p, UE %p, ru %p
\n
"
,
eNB
,
UE
,
ru
);
memset
((
void
*
)
eNB
,
0
,
sizeof
(
PHY_VARS_eNB
));
memset
((
void
*
)
UE
,
0
,
sizeof
(
PHY_VARS_UE
));
memset
((
void
*
)
ru
,
0
,
sizeof
(
RU_t
));
ru
->
eNB_list
[
0
]
=
eNB
;
eNB
->
RU_list
[
0
]
=
ru
;
ru
->
num_eNB
=
1
;
srand
(
0
);
randominit
(
0
);
...
...
@@ -90,12 +109,17 @@ void lte_param_init(unsigned char N_tx_port_eNB,
UE
->
is_secondary_ue
=
0
;
UE
->
frame_parms
=
*
frame_parms
;
eNB
->
frame_parms
=
*
frame_parms
;
// eNB->frame_parms = *frame_parms;
ru
->
frame_parms
=
*
frame_parms
;
ru
->
nb_tx
=
N_tx_phy
;
ru
->
nb_rx
=
1
;
ru
->
if_south
=
LOCAL_RF
;
eNB
->
configured
=
1
;
eNB
->
transmission_mode
[
0
]
=
transmission_mode
;
UE
->
transmission_mode
[
0
]
=
transmission_mode
;
init_lte_top
(
frame_parms
);
dump_frame_parms
(
frame_parms
);
UE
->
measurements
.
n_adj_cells
=
0
;
...
...
@@ -105,23 +129,24 @@ void lte_param_init(unsigned char N_tx_port_eNB,
for
(
i
=
0
;
i
<
3
;
i
++
)
lte_gold
(
frame_parms
,
UE
->
lte_gold_table
[
i
],
Nid_cell
+
i
);
init_lte_ue
(
UE
,
1
,
0
);
printf
(
"Calling init_lte_ue_signal
\n
"
);
init_lte_ue_signal
(
UE
,
1
,
0
);
printf
(
"Calling phy_init_lte_eNB
\n
"
);
phy_init_lte_eNB
(
eNB
,
0
,
0
);
printf
(
"Calling phy_init_RU (%p)
\n
"
,
ru
);
phy_init_RU
(
ru
);
generate_pcfich_reg_mapping
(
&
UE
->
frame_parms
);
generate_phich_reg_mapping
(
&
UE
->
frame_parms
);
// DL power control init
//if (transmission_mode == 1) {
UE
->
pdsch_config_dedicated
->
p_a
=
pa
;
if
(
transmission_mode
==
1
||
transmission_mode
==
7
)
{
eNB
->
pdsch_config_dedicated
->
p_a
=
dB0
;
// 4 = 0dB
((
eNB
->
frame_parms
).
pdsch_config_common
).
p_b
=
0
;
UE
->
pdsch_config_dedicated
->
p_a
=
dB0
;
// 4 = 0dB
((
UE
->
frame_parms
).
pdsch_config_common
).
p_b
=
0
;
}
else
{
// rho_a = rhob
eNB
->
pdsch_config_dedicated
->
p_a
=
dBm3
;
// 4 = 0dB
((
eNB
->
frame_parms
).
pdsch_config_common
).
p_b
=
1
;
UE
->
pdsch_config_dedicated
->
p_a
=
dBm3
;
// 4 = 0dB
((
UE
->
frame_parms
).
pdsch_config_common
).
p_b
=
1
;
}
...
...
openair1/PHY/LTE_TRANSPORT/dci.c
View file @
e9d53697
...
...
@@ -52,6 +52,9 @@
//extern uint16_t phich_reg[MAX_NUM_PHICH_GROUPS][3];
//extern uint16_t pcfich_reg[4];
//#undef LOG_D
//#define LOG_D(A,B,C...) printf(B,C)
uint32_t
check_phich_reg
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
kprime
,
uint8_t
lprime
,
uint8_t
mi
)
{
...
...
@@ -177,7 +180,7 @@ void dci_encoding(uint8_t *a,
// encode dci
#ifdef DEBUG_DCI_ENCODING
printf
(
"Doing DCI encoding for %d bits, e %p, rnti %x
\n
"
,
A
,
e
,
rnti
);
printf
(
"Doing DCI encoding for %d bits, e %p, rnti %x
, E %d
\n
"
,
A
,
e
,
rnti
,
E
);
#endif
memset
((
void
*
)
d
,
LTE_NULL
,
96
);
...
...
@@ -231,18 +234,23 @@ uint8_t *generate_dci0(uint8_t *dci,
coded_bits
=
72
*
aggregation_level
;
/*
#ifdef DEBUG_DCI_ENCODING
for (i=0;i<1+((DCI_LENGTH+16)/8);i++)
for
(
i
nt
i
=
0
;
i
<
1
+
((
DCI_LENGTH
+
16
)
/
8
);
i
++
)
printf
(
"i %d : %x
\n
"
,
i
,
dci
[
i
]);
#endif
*/
if
(
DCI_LENGTH
<=
32
)
{
dci_flip
[
0
]
=
dci
[
3
];
dci_flip
[
1
]
=
dci
[
2
];
dci_flip
[
2
]
=
dci
[
1
];
dci_flip
[
3
]
=
dci
[
0
];
#ifdef DEBUG_DCI_ENCODING
printf
(
"DCI => %x,%x,%x,%x
\n
"
,
dci_flip
[
0
],
dci_flip
[
1
],
dci_flip
[
2
],
dci_flip
[
3
]);
#endif
}
else
{
dci_flip
[
0
]
=
dci
[
7
];
dci_flip
[
1
]
=
dci
[
6
];
...
...
@@ -2271,7 +2279,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
/* clear all bits, the above code may generate too much false detections
* (not sure about this, to be checked somehow)
*/
//
memset(e, 0, DCI_BITS_MAX);
// memset(e, 0, DCI_BITS_MAX);
e_ptr
=
e
;
...
...
@@ -2285,11 +2293,11 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
if
(
dci_alloc
[
i
].
L
==
(
uint8_t
)
L
)
{
#ifdef DEBUG_DCI_ENCODING
if
(
dci_alloc
[
i
].
rnti
==
0x
02
)
LOG_
I
(
PHY
,
"Generating DCI %d/%d (nCCE %d) of length %d, aggregation %d (%x), rnti %x
\n
"
,
i
,
num_dci
,
dci_alloc
[
i
].
firstCCE
,
dci_alloc
[
i
].
dci_length
,
dci_alloc
[
i
].
L
,
if
(
dci_alloc
[
i
].
rnti
==
0x
1234
)
LOG_
D
(
PHY
,
"Generating DCI %d/%d (nCCE %d) of length %d, aggregation %d (%x), rnti %x
\n
"
,
i
,
num_dci
,
dci_alloc
[
i
].
firstCCE
,
dci_alloc
[
i
].
dci_length
,
dci_alloc
[
i
].
L
,
*
(
unsigned
int
*
)
dci_alloc
[
i
].
dci_pdu
,
dci_alloc
[
i
].
rnti
);
//
dump_dci(frame_parms,&dci_alloc[i]);
dump_dci
(
frame_parms
,
&
dci_alloc
[
i
]);
#endif
if
(
dci_alloc
[
i
].
firstCCE
>=
0
)
{
...
...
@@ -2894,17 +2902,17 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
LOG_D
(
PHY
,
"[DCI search nPdcch %d - common] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x)
\n
"
,
pdcch_vars
[
eNB_id
]
->
num_pdcch_symbols
,
m
,
L2
,
sizeof_bits
,
CCEind
,
nCCE
,
*
CCEmap
,
CCEmap_mask
);
else
LOG_D
(
PHY
,
"[DCI search nPdcch %d - ue spec] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x) format %d
\n
"
,
pdcch_vars
[
eNB_id
]
->
num_pdcch_symbols
,
m
,
L2
,
sizeof_bits
,
CCEind
,
nCCE
,
*
CCEmap
,
CCEmap_mask
,
format_c
);
LOG_D
(
PHY
,
"[DCI search nPdcch %d - ue spec
%x
] Attempting candidate %d Aggregation Level %d DCI length %d at CCE %d/%d (CCEmap %x,CCEmap_cand %x) format %d
\n
"
,
pdcch_vars
[
eNB_id
]
->
num_pdcch_symbols
,
pdcch_vars
[
eNB_id
]
->
crnti
,
m
,
L2
,
sizeof_bits
,
CCEind
,
nCCE
,
*
CCEmap
,
CCEmap_mask
,
format_c
);
dci_decoding
(
sizeof_bits
,
L
,
&
pdcch_vars
[
eNB_id
]
->
e_rx
[
CCEind
*
72
],
&
dci_decoded_output
[
current_thread_id
][
0
]);
/*
/*
for (i=0;i<3+(sizeof_bits>>3);i++)
printf("dci_decoded_output[%d] => %x\n",i,dci_decoded_output
[i]);
*/
printf("dci_decoded_output[%d][%d] => %x\n",current_thread_id,i,dci_decoded_output[current_thread_id]
[i]);
*/
crc
=
(
crc16
(
&
dci_decoded_output
[
current_thread_id
][
0
],
sizeof_bits
)
>>
16
)
^
extract_crc
(
&
dci_decoded_output
[
current_thread_id
][
0
],
sizeof_bits
);
#ifdef DEBUG_DCI_DECODING
...
...
@@ -3823,7 +3831,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
}
else
if
(
tmode
==
3
)
{
LOG_D
(
PHY
,
" Now check UE_SPEC format 2A_2A search aggregation 1 dci length: %d[bits] %d[bytes]
\n
"
,
format2A_size_bits
,
format2A_size_bytes
);
//
LOG_D(PHY," Now check UE_SPEC format 2A_2A search aggregation 1 dci length: %d[bits] %d[bytes]\n",format2A_size_bits,format2A_size_bytes);
// Now check UE_SPEC format 2A_2A search spaces at aggregation 1
old_dci_cnt
=
dci_cnt
;
dci_decoding_procedure0
(
pdcch_vars
,
0
,
mode
,
...
...
@@ -3895,7 +3903,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
return
(
dci_cnt
);
// Now check UE_SPEC format 2_2A search spaces at aggregation 4
LOG_D
(
PHY
,
" Now check UE_SPEC format 2_2A search spaces at aggregation 4
\n
"
);
//
LOG_D(PHY," Now check UE_SPEC format 2_2A search spaces at aggregation 4 \n");
old_dci_cnt
=
dci_cnt
;
dci_decoding_procedure0
(
pdcch_vars
,
0
,
mode
,
subframe
,
...
...
@@ -4238,3 +4246,6 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
return
(
dci_cnt
);
}
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
e9d53697
...
...
@@ -44,6 +44,11 @@
#include "LAYER2/MAC/extern.h"
#include "LAYER2/MAC/defs.h"
//#undef LOG_D
//#define LOG_D(A,B,C...) printf(B,C)
//#undef LOG_I
//#define LOG_I(A,B,C...) printf(B,C)
//#define DEBUG_DCI
uint32_t
localRIV2alloc_LUT6
[
32
];
...
...
@@ -4680,13 +4685,13 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
if
(
harq_pid
>=
8
)
{
LOG_I
(
PHY
,
"bad harq id
\n
"
);
//
LOG_I(PHY,"bad harq id \n");
return
(
0
);
}
if
(
dci_format
==
format1
&&
((
rnti
==
si_rnti
)
||
(
rnti
==
p_rnti
)
||
(
rnti
==
ra_rnti
))
)
{
LOG_I
(
PHY
,
"bad dci format
\n
"
);
//
LOG_I(PHY,"bad dci format \n");
return
(
0
);
}
...
...
@@ -4695,13 +4700,13 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
{
if
(
pdlsch0_harq
->
round
==
0
)
{
LOG_I
(
PHY
,
"bad dci mcs + round
\n
"
);
//
LOG_I(PHY,"bad dci mcs + round \n");
return
(
0
);
}
if
((
rnti
==
si_rnti
)
||
(
rnti
==
p_rnti
)
||
(
rnti
==
ra_rnti
))
{
LOG_I
(
PHY
,
"bad dci mcs + rnti
\n
"
);
//
LOG_I(PHY,"bad dci mcs + rnti \n");
return
(
0
);
}
}
...
...
@@ -4767,7 +4772,7 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
if
(
rballoc
>
RIV_max
)
{
LOG_I
(
PHY
,
"bad dci rballoc rballoc %d RIV_max %lld
\n
"
,
rballoc
,
RIV_max
);
//
LOG_I(PHY,"bad dci rballoc rballoc %d RIV_max %lld \n",rballoc, RIV_max);
// DCI false detection
return
(
0
);
}
...
...
@@ -4775,7 +4780,7 @@ int check_dci_format1_1a_coherency(DCI_format_t dci_format,
if
(
NPRB
==
0
)
{
// DCI false detection
LOG_I
(
PHY
,
"bad NPRB = 0
\n
"
);
//
LOG_I(PHY,"bad NPRB = 0 \n");
return
(
0
);
}
...
...
@@ -4894,13 +4899,13 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
// I- check dci content minimum coherency
if
(
harq_pid
>=
8
)
{
LOG_I
(
PHY
,
"bad harq pid
\n
"
);
//
LOG_I(PHY,"bad harq pid\n");
return
(
0
);
}
if
(
(
rnti
==
si_rnti
)
||
(
rnti
==
p_rnti
)
||
(
rnti
==
ra_rnti
)
)
{
LOG_I
(
PHY
,
"bad rnti
\n
"
);
//
LOG_I(PHY,"bad rnti\n");
return
(
0
);
}
...
...
@@ -4909,7 +4914,7 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
{
if
(
pdlsch0_harq
->
round
==
0
)
{
LOG_I
(
PHY
,
"bad mcs1
\n
"
);
//
LOG_I(PHY,"bad mcs1\n");
return
(
0
);
}
}
...
...
@@ -4918,7 +4923,7 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
{
if
(
pdlsch1_harq
->
round
==
0
)
{
LOG_I
(
PHY
,
"bad mcs2
\n
"
);
//
LOG_I(PHY,"bad mcs2\n");
return
(
0
);
}
}
...
...
@@ -4927,14 +4932,14 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
if
((
pdlsch0_harq
->
round
==
0
)
&&
(
rv1
>
0
)
&&
(
mcs1
!=
0
))
{
// DCI false detection
LOG_I
(
PHY
,
"bad rv1
\n
"
);
//
LOG_I(PHY,"bad rv1\n");
return
(
0
);
}
if
((
pdlsch1_harq
->
round
==
0
)
&&
(
rv2
>
0
)
&&
(
mcs2
!=
0
))
{
// DCI false detection
LOG_I
(
PHY
,
"bad rv2
\n
"
);
//
LOG_I(PHY,"bad rv2\n");
return
(
0
);
}
...
...
@@ -4995,14 +5000,14 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
if
(
(
rballoc
>
RIV_max
)
&&
(
rah
==
1
)
)
{
// DCI false detection
LOG_I
(
PHY
,
"bad rballoc %d RIV_max %lld
\n
"
,
rballoc
,
RIV_max
);
//
LOG_I(PHY,"bad rballoc %d RIV_max %lld\n", rballoc, RIV_max);
return
(
0
);
}
if
(
NPRB
==
0
)
{
// DCI false detection
LOG_I
(
PHY
,
"bad NPRB
\n
"
);
//
LOG_I(PHY,"bad NPRB\n");
return
(
0
);
}
...
...
@@ -5026,7 +5031,7 @@ void compute_llr_offset(LTE_DL_FRAME_PARMS *frame_parms,
pdsch_vars
->
llr_offset
[
pdcch_vars
->
num_pdcch_symbols
]
=
0
;
//
LOG_I(PHY,"compute_llr_offset: nb RB %d - Qm %d \n", nb_rb_alloc, dlsch0_harq->Qm);
LOG_I
(
PHY
,
"compute_llr_offset: nb RB %d - Qm %d
\n
"
,
nb_rb_alloc
,
dlsch0_harq
->
Qm
);
//dlsch0_harq->rb_alloc_even;
//dlsch0_harq->rb_alloc_odd;
...
...
@@ -5056,15 +5061,15 @@ void compute_llr_offset(LTE_DL_FRAME_PARMS *frame_parms,
if
(
symbol
<
(
frame_parms
->
symbols_per_tti
-
1
))
pdsch_vars
->
llr_offset
[
symbol
+
1
]
=
pdsch_vars
->
llr_offset
[
symbol
]
+
llr_offset
;
//
LOG_I(PHY,"Granted Re subframe %d / symbol %d => %d (%d RBs)\n", subframe, symbol_mod, granted_re,dlsch0_harq->nb_rb);
//
LOG_I(PHY,"Pbch/PSS/SSS Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, pbch_pss_sss_re);
//
LOG_I(PHY,"CRS Re Per PRB subframe %d / symbol %d => %d \n", subframe, symbol_mod, crs_re);
//
LOG_I(PHY,"Data Re subframe %d / symbol %d => %d \n", subframe, symbol_mod, data_re);
LOG_I
(
PHY
,
"Granted Re subframe %d / symbol %d => %d (%d RBs)
\n
"
,
subframe
,
symbol_mod
,
granted_re
,
dlsch0_harq
->
nb_rb
);
LOG_I
(
PHY
,
"Pbch/PSS/SSS Re subframe %d / symbol %d => %d
\n
"
,
subframe
,
symbol_mod
,
pbch_pss_sss_re
);
LOG_I
(
PHY
,
"CRS Re Per PRB subframe %d / symbol %d => %d
\n
"
,
subframe
,
symbol_mod
,
crs_re
);
LOG_I
(
PHY
,
"Data Re subframe %d / symbol %d => %d
\n
"
,
subframe
,
symbol_mod
,
data_re
);
//
LOG_I(PHY,"Data Re subframe %d-symbol %d => llr length %d, llr offset %d \n", subframe, symbol,
//
pdsch_vars->llr_length[symbol], pdsch_vars->llr_offset[symbol]);
LOG_I
(
PHY
,
"Data Re subframe %d-symbol %d => llr length %d, llr offset %d
\n
"
,
subframe
,
symbol
,
pdsch_vars
->
llr_length
[
symbol
],
pdsch_vars
->
llr_offset
[
symbol
]);
}
}
void
prepare_dl_decoding_format1_1A
(
DCI_format_t
dci_format
,
...
...
@@ -5179,7 +5184,7 @@ void prepare_dl_decoding_format1_1A(DCI_format_t dci_format,
//packet was actually decoded in previous transmission (ACK was missed by eNB)
//However, the round is not a good check as it might have been decoded in a retransmission prior to this one.
{
LOG_D
(
PHY
,
"skip pdsch decoding and report ack
\n
"
);
//
LOG_D(PHY,"skip pdsch decoding and report ack\n");
// skip pdsch decoding and report ack
//pdlsch0_harq->status = SCH_IDLE;
pdlsch0
->
active
=
0
;
...
...
@@ -5804,7 +5809,7 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
//LOG_I(PHY,"[UE] DLSCH: New Data Indicator CW0 subframe %d (pid %d, round %d)\n",
// subframe,harq_pid,dlsch0_harq->round);
if
(
dlsch0_harq
->
first_tx
==
1
)
{
LOG_D
(
PHY
,
"Format 2 DCI First TX0: Clearing flag
\n
"
);
//
LOG_D(PHY,"Format 2 DCI First TX0: Clearing flag\n");
dlsch0_harq
->
first_tx
=
0
;
}
}
...
...
@@ -5852,7 +5857,7 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
//LOG_I(PHY,"[UE] DLSCH: New Data Indicator CW1 subframe %d (pid %d, round %d)\n",
// subframe,harq_pid,dlsch0_harq->round);
if
(
dlsch1_harq
->
first_tx
==
1
)
{
LOG_D
(
PHY
,
"Format 2 DCI First TX1: Clearing flag
\n
"
);
//
LOG_D(PHY,"Format 2 DCI First TX1: Clearing flag\n");
dlsch1_harq
->
first_tx
=
0
;
}
}
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
View file @
e9d53697
...
...
@@ -604,7 +604,7 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
// if (dlsch->harq_processes[harq_pid]->Ndi == 1) { // this is a new packet
if
(
dlsch
->
harq_processes
[
harq_pid
]
->
round
==
0
)
{
// this is a new packet
#ifdef DEBUG_DLSCH_CODING
printf
(
"encoding thinks this is a new packet
\n
"
);
printf
(
"encoding thinks this is a new packet for harq_pid %d (%p)
\n
"
,
harq_pid
,
dlsch
->
harq_processes
[
harq_pid
]
->
b
);
#endif
/*
int i;
...
...
@@ -614,6 +614,7 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
printf("\n");
*/
// Add 24-bit crc (polynomial A) to payload
crc
=
crc24a
(
a
,
A
)
>>
8
;
a
[
A
>>
3
]
=
((
uint8_t
*
)
&
crc
)[
2
];
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
View file @
e9d53697
...
...
@@ -37,6 +37,12 @@
#include "SCHED/extern.h"
#include "SIMULATION/TOOLS/defs.h"
//#define DEBUG_DLSCH_DECODING
//#define UE_DEBUG_TRACE 1
//#undef LOG_D
//#define LOG_D(A,B,C...) printf(B,C)
//#undef LOG_I
//#define LOG_I(A,B,C...) printf(B,C)
extern
double
cpuf
;
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
View file @
e9d53697
...
...
@@ -49,12 +49,14 @@ int16_t interf_unaw_shift = 13;
//#define DEBUG_HARQ
//#undef LOG_D
//#define LOG_D LOG_I
//#define LOG_D(A,B,C...) printf(B,C)
//#undef LOG_I
//#define LOG_I(A,B,C...) printf(B,C)
//
#define DEBUG_PHY 1
#define DEBUG_PHY 1
//#define DEBUG_DLSCH_DEMOD 1
//#define DISABLE_LOG_X
// [MCS][i_mod (0,1,2) = (2,4,6)]
unsigned
char
offset_mumimo_llr_drange_fix
=
0
;
...
...
@@ -370,7 +372,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
//printf("nb_rb = %d, eNB_id %d\n",nb_rb,eNB_id);
if
(
nb_rb
==
0
)
{
LOG_D
(
PHY
,
"dlsch_demodulation.c: nb_rb=0
\n
"
);
//
LOG_D(PHY,"dlsch_demodulation.c: nb_rb=0\n");
return
(
-
1
);
}
...
...
@@ -845,7 +847,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
pllr_symbol_cw1
=
(
int8_t
*
)
pdsch_vars
[
eNB_id
]
->
llr
[
1
];
pllr_symbol_cw0
+=
llr_offset_symbol
;
pllr_symbol_cw1
+=
llr_offset_symbol
;
/*
LOG_I
(
PHY
,
"compute LLRs [AbsSubframe %d.%d-%d] NbRB %d Qm %d LLRs-Length %d LLR-Offset %d @LLR Buff %x @LLR Buff(symb) %x
\n
"
,
frame
,
subframe
,
symbol
,
nb_rb
,
dlsch0_harq
->
Qm
,
...
...
@@ -853,7 +855,7 @@ int rx_pdsch(PHY_VARS_UE *ue,
pdsch_vars
[
eNB_id
]
->
llr_offset
[
symbol
],
(
int16_t
*
)
pdsch_vars
[
eNB_id
]
->
llr
[
0
],
pllr_symbol_cw0
);
*/
switch
(
dlsch0_harq
->
Qm
)
{
case
2
:
if
((
rx_type
==
rx_standard
)
||
(
codeword_TB1
==
-
1
))
{
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
View file @
e9d53697
...
...
@@ -2125,6 +2125,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
amp_rho_b
=
(
int16_t
)(((
int32_t
)
amp
*
dlsch1
->
sqrt_rho_b
)
>>
13
);
}
if
(
mod_order0
==
4
)
for
(
i
=
0
;
i
<
4
;
i
++
)
{
qam16_table_a0
[
i
]
=
(
int16_t
)(((
int32_t
)
qam16_table
[
i
]
*
amp_rho_a
)
>>
15
);
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
View file @
e9d53697
...
...
@@ -124,14 +124,18 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
}
#ifdef DEBUG_SCRAMBLING
#ifdef Rel14
printf
(
"scrambling: i0 %d rnti %x, q %d, Ns %d, Nid_cell %d, G %d x2 %x
\n
"
,
dlsch
->
i0
,
dlsch
->
rnti
,
q
,
Ns
,
frame_parms
->
Nid_cell
,
G
,
x2
);
#else
printf
(
"scrambling: rnti %x, q %d, Ns %d, Nid_cell %d, G %d x2 %x
\n
"
,
dlsch
->
rnti
,
q
,
Ns
,
frame_parms
->
Nid_cell
,
G
,
x2
);
#endif
#endif
s
=
lte_gold_scram
(
&
x1
,
&
x2
,
1
);
for
(
n
=
0
;
n
<
(
1
+
(
G
>>
5
));
n
++
)
{
#ifdef DEBUG_SCRAMBLING
printf
(
"scrambling %d : %d => "
,
k
,
e
[
k
]
);
for
(
int
k
=
0
;
k
<
32
;
k
++
)
printf
(
"scrambling %d : %d xor %d = %d
\n
"
,
k
+
(
n
<<
5
),
e
[
k
],(
s
>>
k
)
&
1
,
e
[
k
]
^
((
s
>>
k
)
&
1
)
);
#endif
...
...
@@ -171,9 +175,8 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
// This is not faster for some unknown reason
// ((__m128i *)e)[0] = _mm_xor_si128(((__m128i *)e)[0],((__m128i *)scrambling_lut)[s&65535]);
// ((__m128i *)e)[1] = _mm_xor_si128(((__m128i *)e)[1],((__m128i *)scrambling_lut)[s>>16]);
#ifdef DEBUG_SCRAMBLING
printf
(
"%d
\n
"
,
e
[
k
]);
#endif
s
=
lte_gold_scram
(
&
x1
,
&
x2
,
0
);
...
...
@@ -213,7 +216,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
for
(
i
=
0
;
i
<
(
1
+
(
G
>>
5
));
i
++
)
{
for
(
j
=
0
;
j
<
32
;
j
++
,
k
++
)
{
#ifdef DEBUG_SCRAMBLING
printf
(
"unscrambling %d : %d => "
,
k
,
llr
[
k
]
);
printf
(
"unscrambling %d : %d xor %d ="
,
k
,
llr
[
k
],(
s
>>
j
)
&
1
);
#endif
llr
[
k
]
=
((
2
*
((
s
>>
j
)
&
1
))
-
1
)
*
llr
[
k
];
#ifdef DEBUG_SCRAMBLING
...
...
openair1/PHY/LTE_TRANSPORT/power_control.c
View file @
e9d53697
...
...
@@ -33,20 +33,20 @@ double ratioPB[2][4]={{ 0.00000, -0.96910, -2.21849, -3.97940}, //in db
double
pa_values
[
8
]
=
{
-
6
.
0
,
-
4
.
77
,
-
3
.
0
,
-
1
.
77
,
0
.
0
,
1
.
0
,
2
.
0
,
3
.
0
};
//reported by higher layers
double
get_pa_dB
(
PDSCH_CONFIG_DEDICATED
*
pdsch_config_dedicated
)
double
get_pa_dB
(
uint8_t
pa
)
{
if
(
pdsch_config_dedicated
)
return
(
pa_values
[
pdsch_config_dedicated
->
p_a
]);
else
return
(
0
.
0
);
AssertFatal
(
pa
<
8
,
"pa %d is not in (0...7)
\n
"
,
pa
);
return
(
pa_values
[
pa
]);
}
double
computeRhoA_eNB
(
PDSCH_CONFIG_DEDICATED
*
pdsch_config_dedicated
,
double
computeRhoA_eNB
(
uint8_t
pa
,
LTE_eNB_DLSCH_t
*
dlsch_eNB
,
int
dl_power_off
,
uint8_t
n_antenna_port
){
double
rho_a_dB
;
double
sqrt_rho_a_lin
;
rho_a_dB
=
get_pa_dB
(
p
dsch_config_dedicated
);
rho_a_dB
=
get_pa_dB
(
p
a
);
if
(
!
dl_power_off
)
//if dl_power_offset is 0, this is for MU-interference, TM5
rho_a_dB
-=
10
*
log10
(
2
);
...
...
@@ -59,14 +59,14 @@ double computeRhoA_eNB(PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated,
dlsch_eNB
->
sqrt_rho_a
=
(
short
)
(
sqrt_rho_a_lin
*
pow
(
2
,
13
));
#if DEBUG_PC
printf
(
"eNB: p_a=%d, value=%f, sqrt_rho_a=%d
\n
"
,
p
dsch_config_dedicated
->
p
_a
,
pa_values
[
pdsch_config_dedicated
->
p_a
],
dlsch_eNB
->
sqrt_rho_a
);
printf
(
"eNB: p_a=%d, value=%f, sqrt_rho_a=%d
\n
"
,
p_a
,
pa_values
[
pdsch_config_dedicated
->
p_a
],
dlsch_eNB
->
sqrt_rho_a
);
#endif