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
wangjie
OpenXG-RAN
Commits
97d1f98f
Commit
97d1f98f
authored
May 13, 2020
by
matzakos
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_RRC_harq_hacks' into NR_RRC_PDCP
parents
bd1c4dd0
88e5203d
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
473 additions
and
376 deletions
+473
-376
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+1
-0
openair1/PHY/MODULATION/slot_fep_nr.c
openair1/PHY/MODULATION/slot_fep_nr.c
+3
-1
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+13
-5
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
+9
-7
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+6
-6
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+43
-37
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+41
-11
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+19
-3
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+323
-231
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+3
-3
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
+8
-1
openair2/NR_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_PHY_INTERFACE/NR_IF_Module.c
+4
-71
No files found.
openair1/PHY/INIT/nr_init.c
View file @
97d1f98f
...
...
@@ -176,6 +176,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
}
uint32_t
Nid_pusch
[
2
]
=
{
cfg
->
cell_config
.
phy_cell_id
.
value
,
cfg
->
cell_config
.
phy_cell_id
.
value
};
LOG_D
(
PHY
,
"Initializing PUSCH DMRS Gold sequence with (%x,%x)
\n
"
,
Nid_pusch
[
0
],
Nid_pusch
[
1
]);
nr_gold_pusch
(
gNB
,
&
Nid_pusch
[
0
]);
/// Transport init necessary for NR synchro
...
...
openair1/PHY/MODULATION/slot_fep_nr.c
View file @
97d1f98f
...
...
@@ -463,6 +463,8 @@ int nr_slot_fep_ul(NR_DL_FRAME_PARMS *frame_parms,
else
dft
((
int16_t
*
)
&
rxdata
[
rxdata_offset
-
sample_offset
],
(
int16_t
*
)
&
rxdataF
[
symbol
*
frame_parms
->
ofdm_symbol_size
],
1
);
// clear DC carrier from OFDM symbols
rxdataF
[
symbol
*
frame_parms
->
ofdm_symbol_size
]
=
0
;
return
(
0
);
}
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
View file @
97d1f98f
...
...
@@ -28,7 +28,7 @@
#include "PHY/NR_UE_ESTIMATION/filt16a_32.h"
//#define DEBUG_CH
//#define DEBUG_PUSCH
int
nr_pusch_channel_estimation
(
PHY_VARS_gNB
*
gNB
,
unsigned
char
Ns
,
...
...
@@ -116,7 +116,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
//------------------generate DMRS------------------//
if
(
pusch_pdu
->
transform_precoding
)
// if transform precoding is disabled
if
(
pusch_pdu
->
transform_precoding
==
1
)
// if transform precoding is disabled
nr_pusch_dmrs_rx
(
gNB
,
Ns
,
gNB
->
nr_gold_pusch_dmrs
[
pusch_pdu
->
scid
][
Ns
][
symbol
],
&
pilot
[
0
],
1000
,
0
,
nb_rb_pusch
,
pusch_pdu
->
rb_start
*
NR_NB_SC_PER_RB
,
pusch_pdu
->
dmrs_config_type
);
else
nr_pusch_dmrs_rx
(
gNB
,
Ns
,
gNB
->
nr_gold_pusch_dmrs
[
pusch_pdu
->
scid
][
Ns
][
symbol
],
&
pilot
[
0
],
1000
,
0
,
nb_rb_pusch
,
0
,
pusch_pdu
->
dmrs_config_type
);
...
...
@@ -132,8 +132,9 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
memset
(
ul_ch
,
0
,
4
*
(
gNB
->
frame_parms
.
ofdm_symbol_size
));
#ifdef DEBUG_PUSCH
printf
(
"symbol_offset %d, nushift %d
\n
"
,
symbol_offset
,
nushift
);
printf
(
"ch est pilot addr %p RB_DL %d
\n
"
,
&
pilot
[
0
],
gNB
->
frame_parms
.
N_RB_UL
);
printf
(
"
k %d, first_carrier %d
\n
"
,
k
,
gNB
->
frame_parms
.
first_carrier_offset
);
printf
(
"
bwp_start_subcarrier %d, k %d, first_carrier %d
\n
"
,
bwp_start_subcarrier
,
k
,
gNB
->
frame_parms
.
first_carrier_offset
);
printf
(
"rxF addr %p p %d
\n
"
,
rxF
,
p
);
printf
(
"ul_ch addr %p nushift %d
\n
"
,
ul_ch
,
nushift
);
#endif
...
...
@@ -148,7 +149,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
#ifdef DEBUG_PUSCH
printf
(
"ch 0 %d
\n
"
,((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
]));
printf
(
"pilot 0 : rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
&
rxF
[
0
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"data 0 : rxF - > (%d,%d)
addr %p ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
2
],
rxF
[
3
],
&
rxF
[
2
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"data 0 : rxF - > (%d,%d)
\n
"
,
rxF
[
2
],
rxF
[
3
]);
#endif
multadd_real_vector_complex_scalar
(
fl
,
...
...
@@ -166,6 +167,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
#ifdef DEBUG_PUSCH
printf
(
"pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"data 1 : rxF - > (%d,%d)
\n
"
,
rxF
[
2
],
rxF
[
3
]);
#endif
multadd_real_vector_complex_scalar
(
fml
,
ch
,
...
...
@@ -181,6 +183,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
#ifdef DEBUG_PUSCH
printf
(
"pilot 2 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"data 2 : rxF - > (%d,%d)
\n
"
,
rxF
[
2
],
rxF
[
3
]);
#endif
multadd_real_vector_complex_scalar
(
fmm
,
ch
,
...
...
@@ -201,7 +204,8 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_PUSCH
printf
(
"pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"data %d : rxF - > (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
2
],
rxF
[
3
]);
#endif
multadd_real_vector_complex_scalar
(
fml
,
ch
,
...
...
@@ -217,6 +221,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
#ifdef DEBUG_PUSCH
printf
(
"pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"data %d : rxF - > (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
2
],
rxF
[
3
]);
#endif
multadd_real_vector_complex_scalar
(
fmm
,
ch
,
...
...
@@ -238,6 +243,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_PUSCH
printf
(
"pilot %u : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"data %d : rxF - > (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
2
],
rxF
[
3
]);
#endif
multadd_real_vector_complex_scalar
(
fm
,
ch
,
...
...
@@ -256,6 +262,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
#ifdef DEBUG_PUSCH
printf
(
"ch 0 %d
\n
"
,((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
]));
printf
(
"pilot %u: rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
0
],
rxF
[
1
],
&
rxF
[
0
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"data %d : rxF - > (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
2
],
rxF
[
3
]);
#endif
multadd_real_vector_complex_scalar
(
fmr
,
ch
,
...
...
@@ -271,6 +278,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_PUSCH
printf
(
"pilot %u: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
2
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"data %d : rxF - > (%d,%d)
\n
"
,
pilot_cnt
+
2
,
rxF
[
2
],
rxF
[
3
]);
#endif
multadd_real_vector_complex_scalar
(
fr
,
ch
,
...
...
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
View file @
97d1f98f
...
...
@@ -32,7 +32,7 @@
//#define NR_PBCH_DMRS_LENGTH_DWORD 5
//#define NR_PBCH_DMRS_LENGTH 144
//#define DEBUG_P
DC
CH
//#define DEBUG_P
US
CH
#include "refsig_defs_ue.h"
#include "PHY/defs_nr_UE.h"
...
...
@@ -63,32 +63,34 @@ int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
int8_t
w
,
nb_dmrs
;
short
*
mod_table
;
unsigned
char
idx
=
0
;
int
k
;
typedef
int
array_of_w
[
2
];
array_of_w
*
wf
;
array_of_w
*
wt
;
wf
=
(
dmrs_type
==
pusch_dmrs_type1
)
?
wf1
:
wf2
;
wt
=
(
dmrs_type
==
pusch_dmrs_type1
)
?
wt1
:
wt2
;
int
dmrs_offset
=
re_offset
/
((
dmrs_type
==
pusch_dmrs_type1
)
?
2
:
3
);
if
(
dmrs_type
>
2
)
LOG_E
(
PHY
,
"PUSCH DMRS config type %d not valid
\n
"
,
dmrs_type
+
1
);
if
((
p
>=
1000
)
&&
(
p
<
((
dmrs_type
==
pusch_dmrs_type1
)
?
1008
:
1012
)))
{
if
(
gNB
->
frame_parms
.
Ncp
==
NORMAL
)
{
nb_dmrs
=
((
dmrs_type
==
pusch_dmrs_type1
)
?
6
:
4
);
for
(
int
i
=
re_offset
;
i
<
re
_offset
+
(
nb_pusch_rb
*
nb_dmrs
);
i
++
)
{
for
(
int
i
=
dmrs_offset
;
i
<
dmrs
_offset
+
(
nb_pusch_rb
*
nb_dmrs
);
i
++
)
{
k
=
i
-
dmrs_offset
;
w
=
(
wf
[
p
-
1000
][
i
&
1
])
*
(
wt
[
p
-
1000
][
lp
]);
mod_table
=
(
w
==
1
)
?
nr_rx_mod_table
:
nr_rx_nmod_table
;
idx
=
((((
nr_gold_pusch
[(
i
<<
1
)
>>
5
])
>>
((
i
<<
1
)
&
0x1f
))
&
1
)
<<
1
)
^
(((
nr_gold_pusch
[((
i
<<
1
)
+
1
)
>>
5
])
>>
(((
i
<<
1
)
+
1
)
&
0x1f
))
&
1
);
((
int16_t
*
)
output
)[
i
<<
1
]
=
mod_table
[(
NR_MOD_TABLE_QPSK_OFFSET
+
idx
)
<<
1
];
((
int16_t
*
)
output
)[(
i
<<
1
)
+
1
]
=
mod_table
[((
NR_MOD_TABLE_QPSK_OFFSET
+
idx
)
<<
1
)
+
1
];
((
int16_t
*
)
output
)[
k
<<
1
]
=
mod_table
[(
NR_MOD_TABLE_QPSK_OFFSET
+
idx
)
<<
1
];
((
int16_t
*
)
output
)[(
k
<<
1
)
+
1
]
=
mod_table
[((
NR_MOD_TABLE_QPSK_OFFSET
+
idx
)
<<
1
)
+
1
];
#ifdef DEBUG_PUSCH
printf
(
"nr_pusch_dmrs_rx dmrs config type %d port %d nb_pusch_rb %d
\n
"
,
dmrs_type
,
p
,
nb_pusch_rb
);
printf
(
"wf[%d] = %d wt[%d]= %d
\n
"
,
i
&
1
,
wf
[
p
-
1000
][
i
&
1
],
lp
,
wt
[
p
-
1000
][
lp
]);
printf
(
"i %d idx %d pusch gold %u b0-b1 %d-%d mod_dmrs %d %d
\n
"
,
i
,
idx
,
nr_gold_pusch
[(
i
<<
1
)
>>
5
],
(((
nr_gold_pusch
[(
i
<<
1
)
>>
5
])
>>
((
i
<<
1
)
&
0x1f
))
&
1
),
(((
nr_gold_pusch
[((
i
<<
1
)
+
1
)
>>
5
])
>>
(((
i
<<
1
)
+
1
)
&
0x1f
))
&
1
),
((
int16_t
*
)
output
)[
i
<<
1
],
((
int16_t
*
)
output
)[(
i
<<
1
)
+
1
]);
(((
nr_gold_pusch
[((
i
<<
1
)
+
1
)
>>
5
])
>>
(((
i
<<
1
)
+
1
)
&
0x1f
))
&
1
),
((
int16_t
*
)
output
)[
k
<<
1
],
((
int16_t
*
)
output
)[(
k
<<
1
)
+
1
]);
#endif
}
...
...
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
View file @
97d1f98f
...
...
@@ -46,7 +46,7 @@
@param symbol Symbol on which to act (within-in nr_TTI_rx)
@param harq_pid HARQ process ID
*/
void
nr_rx_pusch
(
PHY_VARS_gNB
*
gNB
,
int
nr_rx_pusch
(
PHY_VARS_gNB
*
gNB
,
uint8_t
UE_id
,
uint32_t
frame
,
uint8_t
nr_tti_rx
,
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
View file @
97d1f98f
...
...
@@ -1013,8 +1013,8 @@ void nr_ulsch_channel_compensation(int **rxdataF_ext,
}
void
nr_rx_pusch
(
PHY_VARS_gNB
*
gNB
,
uint8_t
UE
_id
,
int
nr_rx_pusch
(
PHY_VARS_gNB
*
gNB
,
uint8_t
ulsch
_id
,
uint32_t
frame
,
uint8_t
nr_tti_rx
,
unsigned
char
symbol
,
...
...
@@ -1027,23 +1027,23 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
int
avgs
;
int
avg
[
4
];
NR_DL_FRAME_PARMS
*
frame_parms
=
&
gNB
->
frame_parms
;
nfapi_nr_pusch_pdu_t
*
rel15_ul
=
&
gNB
->
ulsch
[
UE
_id
][
0
]
->
harq_processes
[
harq_pid
]
->
ulsch_pdu
;
nfapi_nr_pusch_pdu_t
*
rel15_ul
=
&
gNB
->
ulsch
[
ulsch
_id
][
0
]
->
harq_processes
[
harq_pid
]
->
ulsch_pdu
;
uint8_t
nodata_dmrs
=
1
;
// FIXME to be properly configured from fapi
dmrs_symbol_flag
=
0
;
ptrs_symbol_flag
=
0
;
gNB
->
pusch_vars
[
UE
_id
]
->
ptrs_sc_per_ofdm_symbol
=
0
;
gNB
->
pusch_vars
[
ulsch
_id
]
->
ptrs_sc_per_ofdm_symbol
=
0
;
if
(
symbol
==
rel15_ul
->
start_symbol_index
){
gNB
->
pusch_vars
[
UE
_id
]
->
rxdataF_ext_offset
=
0
;
gNB
->
pusch_vars
[
UE
_id
]
->
dmrs_symbol
=
0
;
gNB
->
pusch_vars
[
UE
_id
]
->
cl_done
=
0
;
gNB
->
pusch_vars
[
UE
_id
]
->
ptrs_symbols
=
0
;
gNB
->
pusch_vars
[
ulsch
_id
]
->
rxdataF_ext_offset
=
0
;
gNB
->
pusch_vars
[
ulsch
_id
]
->
dmrs_symbol
=
0
;
gNB
->
pusch_vars
[
ulsch
_id
]
->
cl_done
=
0
;
gNB
->
pusch_vars
[
ulsch
_id
]
->
ptrs_symbols
=
0
;
if
(
((
rel15_ul
->
pdu_bit_map
)
>>
2
)
&
0x01
)
{
// if there is ptrs pdu
L_ptrs
=
1
<<
(
rel15_ul
->
pusch_ptrs
.
ptrs_time_density
);
set_ptrs_symb_idx
(
&
gNB
->
pusch_vars
[
UE
_id
]
->
ptrs_symbols
,
set_ptrs_symb_idx
(
&
gNB
->
pusch_vars
[
ulsch
_id
]
->
ptrs_symbols
,
rel15_ul
->
nr_of_symbols
,
rel15_ul
->
start_symbol_index
,
rel15_ul
->
dmrs_config_type
,
...
...
@@ -1064,7 +1064,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
nb_re_pusch
=
0
;
else
nb_re_pusch
=
rel15_ul
->
rb_size
*
((
rel15_ul
->
dmrs_config_type
==
pusch_dmrs_type1
)
?
6
:
8
);
gNB
->
pusch_vars
[
UE
_id
]
->
dmrs_symbol
=
symbol
;
gNB
->
pusch_vars
[
ulsch
_id
]
->
dmrs_symbol
=
symbol
;
}
else
{
nb_re_pusch
=
rel15_ul
->
rb_size
*
NR_NB_SC_PER_RB
;
}
...
...
@@ -1077,7 +1077,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
rel15_ul
->
nr_of_symbols
,
0
,
(
rel15_ul
->
pusch_ptrs
.
ptrs_freq_density
)
?
4
:
2
,
gNB
->
pusch_vars
[
UE
_id
]
->
ptrs_symbols
,
gNB
->
pusch_vars
[
ulsch
_id
]
->
ptrs_symbols
,
0
,
frame_parms
->
ofdm_symbol_size
,
rel15_ul
->
dmrs_config_type
,
...
...
@@ -1085,7 +1085,7 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
}
if
(
ptrs_symbol_flag
==
1
){
gNB
->
pusch_vars
[
UE
_id
]
->
ptrs_symbol_index
=
symbol
;
gNB
->
pusch_vars
[
ulsch
_id
]
->
ptrs_symbol_index
=
symbol
;
}
...
...
@@ -1110,25 +1110,25 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
start_meas
(
&
gNB
->
ulsch_rbs_extraction_stats
);
nr_ulsch_extract_rbs_single
(
gNB
->
common_vars
.
rxdataF
,
gNB
->
pusch_vars
[
UE
_id
],
gNB
->
pusch_vars
[
ulsch
_id
],
symbol
,
dmrs_symbol_flag
,
rel15_ul
,
frame_parms
);
stop_meas
(
&
gNB
->
ulsch_rbs_extraction_stats
);
nr_ulsch_scale_channel
(
gNB
->
pusch_vars
[
UE
_id
]
->
ul_ch_estimates_ext
,
nr_ulsch_scale_channel
(
gNB
->
pusch_vars
[
ulsch
_id
]
->
ul_ch_estimates_ext
,
frame_parms
,
gNB
->
ulsch
[
UE
_id
],
gNB
->
ulsch
[
ulsch
_id
],
symbol
,
dmrs_symbol_flag
,
rel15_ul
->
rb_size
,
rel15_ul
->
dmrs_config_type
);
if
(
gNB
->
pusch_vars
[
UE
_id
]
->
cl_done
==
0
)
{
if
(
gNB
->
pusch_vars
[
ulsch
_id
]
->
cl_done
==
0
)
{
nr_ulsch_channel_level
(
gNB
->
pusch_vars
[
UE
_id
]
->
ul_ch_estimates_ext
,
nr_ulsch_channel_level
(
gNB
->
pusch_vars
[
ulsch
_id
]
->
ul_ch_estimates_ext
,
frame_parms
,
avg
,
symbol
,
...
...
@@ -1141,26 +1141,32 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
avgs
=
cmax
(
avgs
,
avg
[(
aatx
<<
1
)
+
aarx
]);
gNB
->
pusch_vars
[
UE
_id
]
->
log2_maxh
=
(
log2_approx
(
avgs
)
/
2
)
+
1
;
gNB
->
pusch_vars
[
UE
_id
]
->
cl_done
=
1
;
gNB
->
pusch_vars
[
ulsch
_id
]
->
log2_maxh
=
(
log2_approx
(
avgs
)
/
2
)
+
1
;
gNB
->
pusch_vars
[
ulsch
_id
]
->
cl_done
=
1
;
}
start_meas
(
&
gNB
->
ulsch_channel_compensation_stats
);
nr_ulsch_channel_compensation
(
gNB
->
pusch_vars
[
UE
_id
]
->
rxdataF_ext
,
gNB
->
pusch_vars
[
UE
_id
]
->
ul_ch_estimates_ext
,
gNB
->
pusch_vars
[
UE
_id
]
->
ul_ch_mag0
,
gNB
->
pusch_vars
[
UE
_id
]
->
ul_ch_magb0
,
gNB
->
pusch_vars
[
UE
_id
]
->
rxdataF_comp
,
(
frame_parms
->
nb_antennas_tx
>
1
)
?
gNB
->
pusch_vars
[
UE
_id
]
->
rho
:
NULL
,
nr_ulsch_channel_compensation
(
gNB
->
pusch_vars
[
ulsch
_id
]
->
rxdataF_ext
,
gNB
->
pusch_vars
[
ulsch
_id
]
->
ul_ch_estimates_ext
,
gNB
->
pusch_vars
[
ulsch
_id
]
->
ul_ch_mag0
,
gNB
->
pusch_vars
[
ulsch
_id
]
->
ul_ch_magb0
,
gNB
->
pusch_vars
[
ulsch
_id
]
->
rxdataF_comp
,
(
frame_parms
->
nb_antennas_tx
>
1
)
?
gNB
->
pusch_vars
[
ulsch
_id
]
->
rho
:
NULL
,
frame_parms
,
symbol
,
dmrs_symbol_flag
,
rel15_ul
->
qam_mod_order
,
rel15_ul
->
rb_size
,
gNB
->
pusch_vars
[
UE
_id
]
->
log2_maxh
);
gNB
->
pusch_vars
[
ulsch
_id
]
->
log2_maxh
);
stop_meas
(
&
gNB
->
ulsch_channel_compensation_stats
);
int
rxsig
=
signal_energy
(
&
gNB
->
pusch_vars
[
ulsch_id
]
->
rxdataF_comp
[
0
][(
symbol
*
rel15_ul
->
rb_size
*
12
)],
rel15_ul
->
rb_size
*
12
);
if
(
rxsig
==
1
)
return
(
rxsig
);
#ifdef NR_SC_FDMA
nr_idft
(
&
((
uint32_t
*
)
gNB
->
pusch_vars
[
UE
_id
]
->
rxdataF_ext
[
0
])[
symbol
*
rel15_ul
->
rb_size
*
NR_NB_SC_PER_RB
],
nb_re_pusch
);
nr_idft
(
&
((
uint32_t
*
)
gNB
->
pusch_vars
[
ulsch
_id
]
->
rxdataF_ext
[
0
])[
symbol
*
rel15_ul
->
rb_size
*
NR_NB_SC_PER_RB
],
nb_re_pusch
);
#endif
//----------------------------------------------------------
...
...
@@ -1168,10 +1174,10 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
//----------------------------------------------------------
start_meas
(
&
gNB
->
ulsch_llr_stats
);
nr_ulsch_compute_llr
(
&
gNB
->
pusch_vars
[
UE
_id
]
->
rxdataF_comp
[
0
][
symbol
*
rel15_ul
->
rb_size
*
NR_NB_SC_PER_RB
],
gNB
->
pusch_vars
[
UE
_id
]
->
ul_ch_mag0
,
gNB
->
pusch_vars
[
UE
_id
]
->
ul_ch_magb0
,
&
gNB
->
pusch_vars
[
UE_id
]
->
llr
[
gNB
->
pusch_vars
[
UE
_id
]
->
rxdataF_ext_offset
*
rel15_ul
->
qam_mod_order
],
nr_ulsch_compute_llr
(
&
gNB
->
pusch_vars
[
ulsch
_id
]
->
rxdataF_comp
[
0
][
symbol
*
rel15_ul
->
rb_size
*
NR_NB_SC_PER_RB
],
gNB
->
pusch_vars
[
ulsch
_id
]
->
ul_ch_mag0
,
gNB
->
pusch_vars
[
ulsch
_id
]
->
ul_ch_magb0
,
&
gNB
->
pusch_vars
[
ulsch_id
]
->
llr
[
gNB
->
pusch_vars
[
ulsch
_id
]
->
rxdataF_ext_offset
*
rel15_ul
->
qam_mod_order
],
rel15_ul
->
rb_size
,
nb_re_pusch
,
symbol
,
...
...
@@ -1180,6 +1186,6 @@ void nr_rx_pusch(PHY_VARS_gNB *gNB,
}
gNB
->
pusch_vars
[
UE_id
]
->
rxdataF_ext_offset
=
gNB
->
pusch_vars
[
UE
_id
]
->
rxdataF_ext_offset
+
nb_re_pusch
;
gNB
->
pusch_vars
[
ulsch_id
]
->
rxdataF_ext_offset
=
gNB
->
pusch_vars
[
ulsch
_id
]
->
rxdataF_ext_offset
+
nb_re_pusch
;
return
(
0
);
}
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
View file @
97d1f98f
...
...
@@ -537,21 +537,51 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE,
txdata
=
UE
->
common_vars
.
txdata
;
txdataF
=
UE
->
common_vars
.
txdataF
;
if
(
UE
->
N_TA_offset
>
tx_offset
)
{
int32_t
*
tmp_idft_out
=
(
int32_t
*
)
malloc16
(
frame_parms
->
get_samples_per_slot
(
slot
,
frame_parms
)
*
sizeof
(
int32_t
));
for
(
ap
=
0
;
ap
<
Nl
;
ap
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
{
// extended cyclic prefix
PHY_ofdm_mod
(
txdataF
[
ap
],
tmp_idft_out
,
frame_parms
->
ofdm_symbol_size
,
12
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
}
else
{
// normal cyclic prefix
nr_normal_prefix_mod
(
txdataF
[
ap
],
tmp_idft_out
,
14
,
frame_parms
);
}
memcpy
((
void
*
)
&
txdata
[
ap
][
frame_parms
->
samples_per_frame
-
UE
->
N_TA_offset
+
tx_offset
],
(
void
*
)
tmp_idft_out
,
(
UE
->
N_TA_offset
-
tx_offset
)
*
sizeof
(
int32_t
));
memcpy
((
void
*
)
&
txdata
[
ap
][
0
],
(
void
*
)
&
tmp_idft_out
[
UE
->
N_TA_offset
-
tx_offset
],
(
frame_parms
->
get_samples_per_slot
(
slot
,
frame_parms
)
-
UE
->
N_TA_offset
+
tx_offset
)
*
sizeof
(
int32_t
));
}
free
(
tmp_idft_out
);
}
else
{
// UE->N_TA_offset <= tx_offset
for
(
ap
=
0
;
ap
<
Nl
;
ap
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
{
// extended cyclic prefix
PHY_ofdm_mod
(
txdataF
[
ap
],
&
txdata
[
ap
][
tx
_offset
],
&
txdata
[
ap
][
tx_offset
-
UE
->
N_TA
_offset
],
frame_parms
->
ofdm_symbol_size
,
12
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
}
else
{
// normal cyclic prefix
nr_normal_prefix_mod
(
txdataF
[
ap
],
&
txdata
[
ap
][
tx
_offset
],
&
txdata
[
ap
][
tx_offset
-
UE
->
N_TA
_offset
],
14
,
frame_parms
);
}
}
}
///////////
////////////////////////////////////////////////////
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
97d1f98f
...
...
@@ -50,6 +50,8 @@
#include "intertask_interface.h"
//#define DEBUG_RXDATA
uint8_t
SSB_Table
[
38
]
=
{
0
,
2
,
4
,
6
,
8
,
10
,
12
,
14
,
254
,
254
,
16
,
18
,
20
,
22
,
24
,
26
,
28
,
30
,
254
,
254
,
32
,
34
,
36
,
38
,
40
,
42
,
44
,
46
,
254
,
254
,
48
,
50
,
52
,
54
,
56
,
58
,
60
,
62
};
extern
uint8_t
nfapi_mode
;
...
...
@@ -228,7 +230,7 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int ULSCH
number_dmrs_symbols
+=
((
pusch_pdu
->
ul_dmrs_symb_pos
)
>>
l
)
&
0x01
;
if
(
nodata_dmrs
)
nb_re_dmrs
=
12
*
number_dmrs_symbols
;
nb_re_dmrs
=
12
;
else
nb_re_dmrs
=
((
pusch_pdu
->
dmrs_config_type
==
pusch_dmrs_type1
)
?
6
:
4
);
...
...
@@ -243,7 +245,6 @@ void nr_ulsch_procedures(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx, int ULSCH
//----------------------------------------------------------
//------------------- ULSCH unscrambling -------------------
//----------------------------------------------------------
start_meas
(
&
gNB
->
ulsch_unscrambling_stats
);
nr_ulsch_unscrambling
(
gNB
->
pusch_vars
[
ULSCH_id
]
->
llr
,
G
,
...
...
@@ -423,6 +424,7 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
NUMBER_OF_NR_ULSCH_MAX
;
ULSCH_id
++
)
{
NR_gNB_ULSCH_t
*
ulsch
=
gNB
->
ulsch
[
ULSCH_id
][
0
];
int
harq_pid
;
int
no_sig
;
NR_UL_gNB_HARQ_t
*
ulsch_harq
;
if
((
ulsch
)
&&
...
...
@@ -436,10 +438,24 @@ void phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx)
(
ulsch_harq
->
slot
==
slot_rx
)
&&
(
ulsch_harq
->
handled
==
0
)){
#ifdef DEBUG_RXDATA
NR_DL_FRAME_PARMS
*
frame_parms
=
&
gNB
->
frame_parms
;
RU_t
*
ru
=
gNB
->
RU_list
[
0
];
int
slot_offset
=
frame_parms
->
get_samples_slot_timestamp
(
slot_rx
,
frame_parms
,
0
);
slot_offset
-=
ru
->
N_TA_offset
;
char
name
[
128
];
FILE
*
f
;
sprintf
(
name
,
"rxdata.%d.%d.raw"
,
frame_rx
,
slot_rx
);
f
=
fopen
(
name
,
"w"
);
if
(
f
==
NULL
)
exit
(
1
);
fwrite
(
&
ru
->
common
.
rxdata
[
0
][
slot_offset
],
2
,
frame_parms
->
get_samples_per_slot
(
slot_rx
,
frame_parms
)
*
2
,
f
);
fclose
(
f
);
#endif
uint8_t
symbol_start
=
ulsch_harq
->
ulsch_pdu
.
start_symbol_index
;
uint8_t
symbol_end
=
symbol_start
+
ulsch_harq
->
ulsch_pdu
.
nr_of_symbols
;
for
(
uint8_t
symbol
=
symbol_start
;
symbol
<
symbol_end
;
symbol
++
)
{
nr_rx_pusch
(
gNB
,
ULSCH_id
,
frame_rx
,
slot_rx
,
symbol
,
harq_pid
);
no_sig
=
nr_rx_pusch
(
gNB
,
ULSCH_id
,
frame_rx
,
slot_rx
,
symbol
,
harq_pid
);
if
(
no_sig
)
return
;
}
//LOG_M("rxdataF_comp.m","rxF_comp",gNB->pusch_vars[0]->rxdataF_comp[0],6900,1,1);
//LOG_M("rxdataF_ext.m","rxF_ext",gNB->pusch_vars[0]->rxdataF_ext[0],6900,1,1);
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
97d1f98f
...
...
@@ -114,7 +114,7 @@ int main(int argc, char **argv)
double
sigma
,
sigma_dB
;
double
snr_step
=
1
;
uint8_t
snr1set
=
0
;
int
slot
=
0
,
frame
=
0
;
int
slot
=
17
,
frame
=
0
;
FILE
*
output_fd
=
NULL
;
//uint8_t write_output_file = 0;
int
trial
,
n_trials
=
1
,
n_errors
=
0
,
n_false_positive
=
0
,
delay
=
0
;
...
...
@@ -147,12 +147,13 @@ int main(int argc, char **argv)
float
target_error_rate
=
0
.
01
;
int
print_perf
=
0
;
cpuf
=
get_cpu_freq_GHz
();
int
msg3_flag
=
0
;
UE_nr_rxtx_proc_t
UE_proc
;
FILE
*
scg_fd
=
NULL
;
int
ibwp_size
=
24
;
int
ibwp_rboffset
=
41
;
if
(
load_configmodule
(
argc
,
argv
,
CONFIG_ENABLECMDLINEONLY
)
==
0
)
{
exit_fun
(
"[NR_ULSIM] Error, configuration module init failed
\n
"
);
}
...
...
@@ -160,17 +161,36 @@ int main(int argc, char **argv)
//logInit();
randominit
(
0
);
while
((
c
=
getopt
(
argc
,
argv
,
"d:f:g:h:i:j:l:m:n:p:r:s:y:z:F:M:N:PR:S:L:"
))
!=
-
1
)
{
while
((
c
=
getopt
(
argc
,
argv
,
"a:b:c:d:ef:g:h:i:j:kl:m:n:p:r:s:y:z:F:M:N:PR:S:L:"
))
!=
-
1
)
{
printf
(
"handling optarg %c
\n
"
,
c
);
switch
(
c
)
{
/*case 'd':
frame_type = 1;
break;*/
case
'a'
:
start_symbol
=
atoi
(
optarg
);
AssertFatal
(
start_symbol
>=
0
&&
start_symbol
<
13
,
"start_symbol %d is not in 0..12
\n
"
,
start_symbol
);
break
;
case
'b'
:
nb_symb_sch
=
atoi
(
optarg
);
AssertFatal
(
nb_symb_sch
>
0
&&
nb_symb_sch
<
15
,
"start_symbol %d is not in 1..14
\n
"
,
nb_symb_sch
);
break
;
case
'c'
:
n_rnti
=
atoi
(
optarg
);
AssertFatal
(
n_rnti
>
0
&&
n_rnti
<=
65535
,
"Illegal n_rnti %x
\n
"
,
n_rnti
);
break
;
case
'd'
:
delay
=
atoi
(
optarg
);
break
;
case
'e'
:
msg3_flag
=
1
;
break
;
case
'f'
:
scg_fd
=
fopen
(
optarg
,
"r"
);
...
...
@@ -226,6 +246,11 @@ int main(int argc, char **argv)
interf2 = atoi(optarg);
break;*/
case
'k'
:
printf
(
"Setting threequarter_fs_flag
\n
"
);
openair0_cfg
[
0
].
threequarter_fs
=
1
;
break
;
case
'l'
:
nb_symb_sch
=
atoi
(
optarg
);
break
;
...
...
@@ -387,12 +412,15 @@ int main(int argc, char **argv)
gNB
->
UL_INFO
.
rx_ind
.
number_of_pdus
=
0
;
gNB
->
UL_INFO
.
crc_ind
.
number_crcs
=
0
;
frame_parms
=
&
gNB
->
frame_parms
;
//to be initialized I suppose (maybe not necessary for PBCH)
frame_parms
->
nb_antennas_tx
=
n_tx
;
frame_parms
->
nb_antennas_rx
=
n_rx
;
frame_parms
->
N_RB_DL
=
N_RB_DL
;
frame_parms
->
N_RB_UL
=
N_RB_UL
;
frame_parms
->
Ncp
=
extended_prefix_flag
?
EXTENDED
:
NORMAL
;
RC
.
nb_nr_macrlc_inst
=
1
;
RC
.
nb_nr_mac_CC
=
(
int
*
)
malloc
(
RC
.
nb_nr_macrlc_inst
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
RC
.
nb_nr_macrlc_inst
;
i
++
)
...
...
@@ -421,6 +449,7 @@ int main(int argc, char **argv)
xer_fprint
(
stdout
,
&
asn_DEF_NR_CellGroupConfig
,
(
const
void
*
)
secondaryCellGroup
);
AssertFatal
((
gNB
->
if_inst
=
NR_IF_Module_init
(
0
))
!=
NULL
,
"Cannot register interface"
);
gNB
->
if_inst
->
NR_PHY_config_req
=
nr_phy_config_request
;
// common configuration
rrc_mac_config_req_gNB
(
0
,
0
,
1
,
scc
,
0
,
0
,
NULL
);
...
...
@@ -429,6 +458,10 @@ int main(int argc, char **argv)
phy_init_nr_gNB
(
gNB
,
0
,
0
);
N_RB_DL
=
gNB
->
frame_parms
.
N_RB_DL
;
NR_BWP_Uplink_t
*
ubwp
=
secondaryCellGroup
->
spCellConfig
->
spCellConfigDedicated
->
uplinkConfig
->
uplinkBWP_ToAddModList
->
list
.
array
[
0
];
//crcTableInit();
//nr_phy_config_request_sim(gNB, N_RB_DL, N_RB_UL, mu, Nid_cell, SSB_positions);
...
...
@@ -570,19 +603,40 @@ int main(int argc, char **argv)
UL_tti_req
->
pdus_list
[
0
].
pdu_size
=
sizeof
(
nfapi_nr_pusch_pdu_t
);
memset
(
pusch_pdu
,
0
,
sizeof
(
nfapi_nr_pusch_pdu_t
));
int
abwp_size
=
NRRIV2BW
(
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
int
abwp_start
=
NRRIV2PRBOFFSET
(
ubwp
->
bwp_Common
->
genericParameters
.
locationAndBandwidth
,
275
);
int
ibwp_size
=
ibwp_size
;
int
ibwp_start
=
ibwp_rboffset
;
if
(
msg3_flag
==
1
)
{
if
((
ibwp_start
<
abwp_start
)
||
(
ibwp_size
>
abwp_size
))
pusch_pdu
->
bwp_start
=
abwp_start
;
else
pusch_pdu
->
bwp_start
=
ibwp_start
;
pusch_pdu
->
bwp_size
=
ibwp_size
;
start_rb
+=
(
ibwp_start
-
abwp_start
);
printf
(
"msg3: ibwp_size %d, abwp_size %d, ibwp_start %d, abwp_start %d
\n
"
,
ibwp_size
,
abwp_size
,
ibwp_start
,
abwp_start
);
}
else
{
pusch_pdu
->
bwp_start
=
abwp_start
;
pusch_pdu
->
bwp_size
=
abwp_size
;
}
pusch_pdu
->
pdu_bit_map
=
PUSCH_PDU_BITMAP_PUSCH_DATA
;
pusch_pdu
->
rnti
=
n_rnti
;
pusch_pdu
->
mcs_index
=
Imcs
;
pusch_pdu
->
mcs_table
=
0
;
pusch_pdu
->
target_code_rate
=
code_rate
;
pusch_pdu
->
qam_mod_order
=
mod_order
;
pusch_pdu
->
transform_precoding
=
0
;
pusch_pdu
->
data_scrambling_id
=
0
;
pusch_pdu
->
transform_precoding
=
1
;
pusch_pdu
->
data_scrambling_id
=
*
scc
->
physCellId
;
pusch_pdu
->
nrOfLayers
=
1
;
pusch_pdu
->
ul_dmrs_symb_pos
=
1
;
pusch_pdu
->
ul_dmrs_symb_pos
=
(
1
<<
start_symbol
)
;
pusch_pdu
->
dmrs_config_type
=
0
;
pusch_pdu
->
ul_dmrs_scrambling_id
=
0
;
pusch_pdu
->
ul_dmrs_scrambling_id
=
*
scc
->
physCellId
;
pusch_pdu
->
scid
=
0
;
pusch_pdu
->
dmrs_ports
=
1
;
pusch_pdu
->
num_dmrs_cdm_grps_no_data
=
2
;
pusch_pdu
->
resource_alloc
=
1
;
pusch_pdu
->
rb_start
=
start_rb
;
pusch_pdu
->
rb_size
=
nb_rb
;
...
...
@@ -626,6 +680,7 @@ int main(int argc, char **argv)
//there are plenty of other parameters that we don't seem to be using for now. e.g.
//ul_config.ul_config_list[0].ulsch_config_pdu.ulsch_pdu_rel15.absolute_delta_PUSCH = 0;
if
(
input_fd
!=
NULL
)
{
// set FAPI parameters for UE, put them in the scheduled response and call
nr_ue_scheduled_response
(
&
scheduled_response
);
...
...
@@ -652,6 +707,8 @@ int main(int argc, char **argv)
//AWGN
sigma_dB
=
10
*
log10
(
txlev_float
)
-
SNR
;
sigma
=
pow
(
10
,
sigma_dB
/
10
);
}
else
n_trials
=
1
;
for
(
trial
=
0
;
trial
<
n_trials
;
trial
++
)
{
...
...
@@ -661,12 +718,36 @@ int main(int argc, char **argv)
//----------------------------------------------------------
//------------------------ add noise -----------------------
//----------------------------------------------------------
if
(
input_fd
==
NULL
)
{
for
(
i
=
0
;
i
<
frame_length_complex_samples
;
i
++
)
{
for
(
ap
=
0
;
ap
<
frame_parms
->
nb_antennas_rx
;
ap
++
)
{
((
short
*
)
gNB
->
common_vars
.
rxdata
[
ap
])[(
2
*
i
)
+
(
delay
*
2
)]
=
(((
int16_t
*
)
UE
->
common_vars
.
txdata
[
ap
])[(
i
<<
1
)])
+
(
int16_t
)(
sqrt
(
sigma
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
));
// convert to fixed point
((
short
*
)
gNB
->
common_vars
.
rxdata
[
ap
])[
2
*
i
+
1
+
(
delay
*
2
)]
=
(((
int16_t
*
)
UE
->
common_vars
.
txdata
[
ap
])[(
i
<<
1
)
+
1
])
+
(
int16_t
)(
sqrt
(
sigma
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
));
}
}
}
else
{
AssertFatal
(
frame_parms
->
nb_antennas_rx
==
1
,
"nb_ant != 1
\n
"
);
// 800 samples is N_TA_OFFSET for FR1 @ 30.72 Ms/s,
AssertFatal
(
frame_parms
->
subcarrier_spacing
==
30000
,
"only 30 kHz for file input for now (%d)
\n
"
,
frame_parms
->
subcarrier_spacing
);
double
factor
=
1
;
if
(
openair0_cfg
[
0
].
threequarter_fs
==
1
)
factor
=
.
75
;
int
ta_offset
=
1600
;
if
(
N_RB_DL
<
217
)
ta_offset
=
800
;
else
if
(
N_RB_DL
<
106
)
ta_offset
=
400
;
int
slot_offset
=
frame_parms
->
get_samples_slot_timestamp
(
slot
,
frame_parms
,
0
);
// - (int)(800*factor);
int
slot_length
=
slot_offset
-
frame_parms
->
get_samples_slot_timestamp
(
slot
-
1
,
frame_parms
,
0
);
fread
((
void
*
)
&
gNB
->
common_vars
.
rxdata
[
0
][
slot_offset
],
sizeof
(
int16_t
),
slot_length
<<
1
,
input_fd
);
for
(
int
i
=
0
;
i
<
16
;
i
+=
2
)
printf
(
"slot_offset %d : %d,%d
\n
"
,
slot_offset
,
((
int16_t
*
)
&
gNB
->
common_vars
.
rxdata
[
0
][
slot_offset
])[
i
],
((
int16_t
*
)
&
gNB
->
common_vars
.
rxdata
[
0
][
slot_offset
])[
1
+
i
]);
fclose
(
input_fd
);
}
////////////////////////////////////////////////////////////
//----------------------------------------------------------
...
...
@@ -678,10 +759,21 @@ int main(int argc, char **argv)
start_meas
(
&
gNB
->
phy_proc_rx
);
phy_procedures_gNB_common_RX
(
gNB
,
frame
,
slot
);
if
(
n_trials
==
1
)
LOG_M
(
"rxsigF0.m"
,
"rxsF0"
,
gNB
->
common_vars
.
rxdataF
[
0
]
,
frame_length_complex_samples_no_prefix
,
1
,
1
);
if
(
n_trials
==
1
)
{
LOG_M
(
"rxsigF0.m"
,
"rxsF0"
,
gNB
->
common_vars
.
rxdataF
[
0
]
+
start_symbol
*
frame_parms
->
ofdm_symbol_size
,
nb_symb_sch
*
frame_parms
->
ofdm_symbol_size
,
1
,
1
);
}
phy_procedures_gNB_uespec_RX
(
gNB
,
frame
,
slot
);
if
(
n_trials
==
1
)
{
LOG_M
(
"rxsigF0_ext.m"
,
"rxsF0_ext"
,
&
gNB
->
pusch_vars
[
0
]
->
rxdataF_ext
[
0
][(
start_symbol
+
1
)
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
],(
nb_symb_sch
-
1
)
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
,
1
,
1
);
LOG_M
(
"chestF0.m"
,
"chF0"
,
&
gNB
->
pusch_vars
[
0
]
->
ul_ch_estimates
[
0
][
start_symbol
*
frame_parms
->
ofdm_symbol_size
],
frame_parms
->
ofdm_symbol_size
,
1
,
1
);
LOG_M
(
"chestF0_ext.m"
,
"chF0_ext"
,
&
gNB
->
pusch_vars
[
0
]
->
ul_ch_estimates_ext
[
0
][(
start_symbol
+
1
)
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
],(
nb_symb_sch
-
1
)
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
,
1
,
1
);
LOG_M
(
"rxsigF0_comp.m"
,
"rxsF0_comp"
,
&
gNB
->
pusch_vars
[
0
]
->
rxdataF_comp
[
0
][(
start_symbol
+
1
)
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
],(
nb_symb_sch
-
1
)
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
,
1
,
1
);
}
start_meas
(
&
gNB
->
phy_proc_rx
);
////////////////////////////////////////////////////////////
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
97d1f98f
...
...
@@ -1452,7 +1452,7 @@ void nr_get_tbs_dl(nfapi_nr_dl_tti_pdsch_pdu *pdsch_pdu,
R
,
pdsch_rel15
->
rbSize
,
N_sh_symb
,
N_PRB_DMRS
,
N_PRB_DMRS
,
// FIXME // This should be multiplied by the number of dmrs symbols
N_PRB_oh
,
tb_scaling
,
pdsch_rel15
->
nrOfLayers
)
>>
3
;
...
...
@@ -1742,7 +1742,7 @@ uint16_t nr_dci_size(NR_CellGroupConfig_t *secondaryCellGroup,
dci_pdu
->
time_domain_assignment
.
nbits
=
(
int
)
ceil
(
log2
(
num_entries
));
size
+=
dci_pdu
->
time_domain_assignment
.
nbits
;
// VRB to PRB mapping
if
(
pdsch_config
->
resourceAllocation
==
1
)
{
if
(
(
pdsch_config
->
resourceAllocation
==
1
)
&&
(
bwp
->
bwp_Dedicated
->
pdsch_Config
->
choice
.
setup
->
vrb_ToPRB_Interleaver
!=
NULL
)
)
{
dci_pdu
->
vrb_to_prb_mapping
.
nbits
=
1
;
size
+=
dci_pdu
->
vrb_to_prb_mapping
.
nbits
;
}
...
...
openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_phytest.c
View file @
97d1f98f
...
...
@@ -818,11 +818,18 @@ void nr_schedule_uss_ulsch_phytest(int Mod_idP,
pusch_pdu
->
pusch_data
.
rv_index
=
0
;
pusch_pdu
->
pusch_data
.
harq_process_id
=
0
;
pusch_pdu
->
pusch_data
.
new_data_indicator
=
0
;
uint8_t
no_data_in_dmrs
=
1
;
// temp implementation
uint8_t
num_dmrs_symb
=
0
;
for
(
int
dmrs_counter
=
pusch_pdu
->
start_symbol_index
;
dmrs_counter
<
pusch_pdu
->
start_symbol_index
+
pusch_pdu
->
nr_of_symbols
;
dmrs_counter
++
)
num_dmrs_symb
+=
((
pusch_pdu
->
ul_dmrs_symb_pos
>>
dmrs_counter
)
&
1
);
pusch_pdu
->
pusch_data
.
tb_size
=
nr_compute_tbs
(
pusch_pdu
->
qam_mod_order
,
pusch_pdu
->
target_code_rate
,
pusch_pdu
->
rb_size
,
pusch_pdu
->
nr_of_symbols
,
6
,
//nb_re_dmrs - not sure where this is coming from - its not in the FAPI
(
no_data_in_dmrs
?
12
:
((
pusch_pdu
->
dmrs_config_type
==
pusch_dmrs_type1
)
?
6
:
4
)
)
*
num_dmrs_symb
,
0
,
//nb_rb_oh
0
,
pusch_pdu
->
nrOfLayers
)
>>
3
;
...
...
openair2/NR_PHY_INTERFACE/NR_IF_Module.c
View file @
97d1f98f
...
...
@@ -76,76 +76,11 @@ void handle_nr_rach(NR_UL_IND_t *UL_info) {
}
void
handle_nr_sr
(
NR_UL_IND_t
*
UL_info
)
{
/* if (nfapi_mode == 1) // PNF
{
if (UL_info->sr_ind.sr_indication_body.number_of_srs>0)
{
// oai_nfapi_sr_indication(&UL_info->sr_ind);
}
}
else
{
for (int i=0;i<UL_info->sr_ind.sr_indication_body.number_of_srs;i++)
SR_indication(UL_info->module_id,
UL_info->CC_id,
UL_info->frame,
UL_info->slot,
UL_info->sr_ind.sr_indication_body.sr_pdu_list[i].rx_ue_information.rnti,
UL_info->sr_ind.sr_indication_body.sr_pdu_list[i].ul_cqi_information.ul_cqi);
}
UL_info->sr_ind.sr_indication_body.number_of_srs=0;*/
void
handle_nr_uci
(
NR_UL_IND_t
*
UL_info
)
{
// TODO
UL_info
->
uci_ind
.
num_ucis
=
0
;
}
void
handle_nr_cqi
(
NR_UL_IND_t
*
UL_info
)
{
/*
for (int i=0;i<UL_info->cqi_ind.number_of_cqis;i++)
cqi_indication(UL_info->module_id,
UL_info->CC_id,
UL_info->frame,
UL_info->slot,
UL_info->cqi_ind.cqi_pdu_list[i].rx_ue_information.rnti,
&UL_info->cqi_ind.cqi_pdu_list[i].cqi_indication_rel9,
UL_info->cqi_ind.cqi_raw_pdu_list[i].pdu,
&UL_info->cqi_ind.cqi_pdu_list[i].ul_cqi_information);
UL_info->cqi_ind.number_of_cqis=0;*/
}
void
handle_nr_harq
(
NR_UL_IND_t
*
UL_info
)
{
/* if (nfapi_mode == 1 && UL_info->harq_ind.harq_indication_body.number_of_harqs>0) { // PNF
//LOG_D(PHY, "UL_info->harq_ind.harq_indication_body.number_of_harqs:%d Send to VNF\n", UL_info->harq_ind.harq_indication_body.number_of_harqs);
int retval = oai_nfapi_harq_indication(&UL_info->harq_ind);
if (retval!=0) {
LOG_E(PHY, "Failed to encode NFAPI HARQ_IND retval:%d\n", retval);
}
UL_info->harq_ind.harq_indication_body.number_of_harqs = 0;
}
else
{
for (int i=0;i<UL_info->harq_ind.harq_indication_body.number_of_harqs;i++)
harq_indication(UL_info->module_id,
UL_info->CC_id,
NFAPI_SFNSF2SFN(UL_info->harq_ind.sfn_sf),
NFAPI_SFNSF2SF(UL_info->harq_ind.sfn_sf),
&UL_info->harq_ind.harq_indication_body.harq_pdu_list[i]);
UL_info->harq_ind.harq_indication_body.number_of_harqs=0;
}*/
}
void
handle_nr_ulsch
(
NR_UL_IND_t
*
UL_info
)
{
if
(
nfapi_mode
==
1
)
{
...
...
@@ -245,9 +180,7 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) {
// clear DL/UL info for new scheduling round
clear_nr_nfapi_information
(
mac
,
CC_id
,
UL_info
->
frame
,
UL_info
->
slot
);
handle_nr_rach
(
UL_info
);
handle_nr_sr
(
UL_info
);
handle_nr_cqi
(
UL_info
);
handle_nr_harq
(
UL_info
);
handle_nr_uci
(
UL_info
);
// clear HI prior to handling ULSCH
mac
->
UL_dci_req
[
CC_id
].
numPdus
=
0
;
handle_nr_ulsch
(
UL_info
);
...
...
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