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
spbro
OpenXG-RAN
Commits
450346c7
Commit
450346c7
authored
Sep 02, 2024
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/NR_gNB_cleanup' into integration_2024_w35
parents
fa7040f3
01ae8fbb
Changes
15
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
365 additions
and
565 deletions
+365
-565
executables/nr-gnb.c
executables/nr-gnb.c
+1
-2
executables/nr-softmodem.c
executables/nr-softmodem.c
+0
-5
nfapi/oai_integration/nfapi_vnf.c
nfapi/oai_integration/nfapi_vnf.c
+2
-3
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+0
-14
openair1/PHY/NR_TRANSPORT/nr_pbch.c
openair1/PHY/NR_TRANSPORT/nr_pbch.c
+161
-128
openair1/PHY/NR_TRANSPORT/nr_prach.c
openair1/PHY/NR_TRANSPORT/nr_prach.c
+100
-99
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+17
-19
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+26
-21
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
+1
-1
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+1
-1
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+28
-170
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+5
-12
openair1/SIMULATION/NR_PHY/pbchsim.c
openair1/SIMULATION/NR_PHY/pbchsim.c
+11
-12
openair1/SIMULATION/NR_PHY/prachsim.c
openair1/SIMULATION/NR_PHY/prachsim.c
+10
-16
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+2
-62
No files found.
executables/nr-gnb.c
View file @
450346c7
...
...
@@ -498,7 +498,6 @@ void init_gNB(int wait_for_sync) {
LOG_I
(
PHY
,
"[nr-gnb.c] gNB structure RC.gNB[%d] allocated @ %p
\n
"
,
inst
,
RC
.
gNB
[
inst
]);
}
gNB
=
RC
.
gNB
[
inst
];
gNB
->
abstraction_flag
=
0
;
/*nr_polar_init(&gNB->nrPolar_params,
NR_POLAR_PBCH_MESSAGE_TYPE,
NR_POLAR_PBCH_PAYLOAD_BITS,
...
...
executables/nr-softmodem.c
View file @
450346c7
...
...
@@ -163,11 +163,6 @@ void pdcp_run(const protocol_ctxt_t *const ctxt_pP)
abort
();
}
/* see file openair2/LAYER2/MAC/main.c for why abstraction_flag is needed
* this is very hackish - find a proper solution
*/
uint8_t
abstraction_flag
=
0
;
/* forward declarations */
void
set_default_frame_parms
(
nfapi_nr_config_request_scf_t
*
config
[
MAX_NUM_CCs
],
NR_DL_FRAME_PARMS
*
frame_parms
[
MAX_NUM_CCs
]);
...
...
nfapi/oai_integration/nfapi_vnf.c
View file @
450346c7
...
...
@@ -262,7 +262,6 @@ void oai_create_gnb(void) {
gNB
->
Mod_id
=
bodge_counter
;
gNB
->
CC_id
=
bodge_counter
;
gNB
->
abstraction_flag
=
0
;
RC
.
nb_nr_CC
[
bodge_counter
]
=
1
;
if
(
gNB
->
if_inst
==
0
)
{
...
...
openair1/PHY/INIT/nr_init.c
View file @
450346c7
...
...
@@ -190,7 +190,6 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB)
common_vars
->
debugBuff_sample_offset
=
0
;
// PRACH
prach_vars
->
prachF
=
(
int16_t
*
)
malloc16_clear
(
1024
*
2
*
sizeof
(
int16_t
)
);
prach_vars
->
rxsigF
=
(
int16_t
**
)
malloc16_clear
(
Prx
*
sizeof
(
int16_t
*
));
prach_vars
->
prach_ifft
=
(
int32_t
*
)
malloc16_clear
(
1024
*
2
*
sizeof
(
int32_t
));
...
...
@@ -205,19 +204,13 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB)
gNB
->
pusch_vars
=
(
NR_gNB_PUSCH
*
)
malloc16_clear
(
gNB
->
max_nb_pusch
*
sizeof
(
NR_gNB_PUSCH
));
for
(
int
ULSCH_id
=
0
;
ULSCH_id
<
gNB
->
max_nb_pusch
;
ULSCH_id
++
)
{
NR_gNB_PUSCH
*
pusch
=
&
gNB
->
pusch_vars
[
ULSCH_id
];
pusch
->
rxdataF_ext
=
(
int32_t
**
)
malloc16
(
Prx
*
sizeof
(
int32_t
*
));
pusch
->
ul_ch_estimates
=
(
int32_t
**
)
malloc16
(
n_buf
*
sizeof
(
int32_t
*
));
pusch
->
ul_ch_estimates_ext
=
(
int32_t
**
)
malloc16
(
n_buf
*
sizeof
(
int32_t
*
));
pusch
->
ptrs_phase_per_slot
=
(
int32_t
**
)
malloc16
(
n_buf
*
sizeof
(
int32_t
*
));
pusch
->
ul_ch_estimates_time
=
(
int32_t
**
)
malloc16
(
n_buf
*
sizeof
(
int32_t
*
));
pusch
->
rxdataF_comp
=
(
int32_t
**
)
malloc16
(
n_buf
*
sizeof
(
int32_t
*
));
pusch
->
llr_layers
=
(
int16_t
**
)
malloc16
(
max_ul_mimo_layers
*
sizeof
(
int32_t
*
));
for
(
i
=
0
;
i
<
Prx
;
i
++
)
{
pusch
->
rxdataF_ext
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
nb_re_pusch2
*
fp
->
symbols_per_slot
);
}
for
(
i
=
0
;
i
<
n_buf
;
i
++
)
{
pusch
->
ul_ch_estimates
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_slot
);
pusch
->
ul_ch_estimates_ext
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
nb_re_pusch2
*
fp
->
symbols_per_slot
);
pusch
->
ul_ch_estimates_time
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
fp
->
ofdm_symbol_size
);
pusch
->
ptrs_phase_per_slot
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
fp
->
symbols_per_slot
);
// symbols per slot
pusch
->
rxdataF_comp
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
nb_re_pusch2
*
fp
->
symbols_per_slot
);
...
...
@@ -279,7 +272,6 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
free_and_zero
(
common_vars
->
debugBuff
);
NR_gNB_PRACH
*
prach_vars
=
&
gNB
->
prach_vars
;
free_and_zero
(
prach_vars
->
prachF
);
free_and_zero
(
prach_vars
->
rxsigF
);
free_and_zero
(
prach_vars
->
prach_ifft
);
...
...
@@ -287,20 +279,14 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
NR_gNB_PUSCH
*
pusch_vars
=
&
gNB
->
pusch_vars
[
ULSCH_id
];
for
(
int
i
=
0
;
i
<
max_ul_mimo_layers
;
i
++
)
free_and_zero
(
pusch_vars
->
llr_layers
[
i
]);
for
(
int
i
=
0
;
i
<
Prx
;
i
++
)
{
free_and_zero
(
pusch_vars
->
rxdataF_ext
[
i
]);
}
for
(
int
i
=
0
;
i
<
n_buf
;
i
++
)
{
free_and_zero
(
pusch_vars
->
ul_ch_estimates
[
i
]);
free_and_zero
(
pusch_vars
->
ul_ch_estimates_ext
[
i
]);
free_and_zero
(
pusch_vars
->
ul_ch_estimates_time
[
i
]);
free_and_zero
(
pusch_vars
->
ptrs_phase_per_slot
[
i
]);
free_and_zero
(
pusch_vars
->
rxdataF_comp
[
i
]);
}
free_and_zero
(
pusch_vars
->
llr_layers
);
free_and_zero
(
pusch_vars
->
rxdataF_ext
);
free_and_zero
(
pusch_vars
->
ul_ch_estimates
);
free_and_zero
(
pusch_vars
->
ul_ch_estimates_ext
);
free_and_zero
(
pusch_vars
->
ptrs_phase_per_slot
);
free_and_zero
(
pusch_vars
->
ul_ch_estimates_time
);
free_and_zero
(
pusch_vars
->
ul_valid_re_per_slot
);
...
...
openair1/PHY/NR_TRANSPORT/nr_pbch.c
View file @
450346c7
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_TRANSPORT/nr_prach.c
View file @
450346c7
...
...
@@ -432,18 +432,14 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
uint16_t
*
max_preamble_energy
,
uint16_t
*
max_preamble_delay
)
{
AssertFatal
(
gNB
!=
NULL
,
"Can only be called from gNB
\n
"
);
int
i
;
nfapi_nr_prach_config_t
*
cfg
=&
gNB
->
gNB_config
.
prach_config
;
AssertFatal
(
gNB
!=
NULL
,
"Can only be called from gNB
\n
"
);
nfapi_nr_prach_config_t
*
cfg
=
&
gNB
->
gNB_config
.
prach_config
;
NR_DL_FRAME_PARMS
*
fp
;
uint16_t
rootSequenceIndex
;
int
numrootSequenceIndex
;
uint8_t
restricted_set
;
uint8_t
n_ra_prb
=
0xFF
;
int16_t
*
prachF
=
NULL
;
int
nb_rx
;
int16_t
**
rxsigF
=
gNB
->
prach_vars
.
rxsigF
;
...
...
@@ -460,10 +456,8 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
uint8_t
not_found
;
uint16_t
u
;
int16_t
*
Xu
=
0
;
uint16_t
offset
;
uint16_t
first_nonzero_root_idx
=
0
;
uint8_t
new_dft
=
0
;
uint8_t
aa
;
int32_t
lev
;
int16_t
levdB
;
int
log2_ifft_size
=
10
;
...
...
@@ -489,7 +483,6 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
LOG_D
(
PHY
,
"L1 PRACH RX: rooSequenceIndex %d, numRootSeqeuences %d, NCS %d, N_ZC %d, format %d
\n
"
,
rootSequenceIndex
,
numrootSequenceIndex
,
NCS
,
N_ZC
,
prach_fmt
);
prach_ifft
=
gNB
->
prach_vars
.
prach_ifft
;
prachF
=
gNB
->
prach_vars
.
prachF
;
if
(
LOG_DEBUGFLAG
(
PRACH
)){
if
((
frame
&
1023
)
<
20
)
LOG_D
(
PHY
,
"PRACH (gNB) : running rx_prach for slot %d, msg1_frequencystart %d, rootSequenceIndex %d
\n
"
,
slot
,
msg1_frequencystart
,
rootSequenceIndex
);
}
...
...
@@ -508,10 +501,10 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
preamble_offset_old
=
99
;
*
max_preamble_energy
=
0
;
*
max_preamble_delay
=
0
;
*
max_preamble
=
0
;
*
max_preamble_energy
=
0
;
*
max_preamble_delay
=
0
;
*
max_preamble
=
0
;
int16_t
prachF
[
2
*
1024
];
for
(
preamble_index
=
0
;
preamble_index
<
64
;
preamble_index
++
)
{
if
(
LOG_DEBUGFLAG
(
PRACH
)){
...
...
@@ -555,29 +548,28 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
uint16_t
n_group_ra
=
0
;
if
(
(
nr_du
[
u
]
<
(
N_ZC
/
3
))
&&
(
nr_du
[
u
]
>=
NCS
)
)
{
n_shift_ra
=
nr_du
[
u
]
/
NCS
;
d_start
=
(
nr_du
[
u
]
<<
1
)
+
(
n_shift_ra
*
NCS
);
n_group_ra
=
N_ZC
/
d_start
;
n_shift_ra_bar
=
max
(
0
,(
N_ZC
-
(
nr_du
[
u
]
<<
1
)
-
(
n_group_ra
*
d_start
))
/
N_ZC
);
}
else
if
(
(
nr_du
[
u
]
>=
(
N_ZC
/
3
))
&&
(
nr_du
[
u
]
<=
((
N_ZC
-
NCS
)
>>
1
))
)
{
n_shift_ra
=
(
N_ZC
-
(
nr_du
[
u
]
<<
1
))
/
NCS
;
d_start
=
N_ZC
-
(
nr_du
[
u
]
<<
1
)
+
(
n_shift_ra
*
NCS
);
n_group_ra
=
nr_du
[
u
]
/
d_start
;
n_shift_ra_bar
=
min
(
n_shift_ra
,
max
(
0
,(
nr_du
[
u
]
-
(
n_group_ra
*
d_start
))
/
NCS
));
if
((
nr_du
[
u
]
<
(
N_ZC
/
3
))
&&
(
nr_du
[
u
]
>=
NCS
)
)
{
n_shift_ra
=
nr_du
[
u
]
/
NCS
;
d_start
=
(
nr_du
[
u
]
<<
1
)
+
(
n_shift_ra
*
NCS
);
n_group_ra
=
N_ZC
/
d_start
;
n_shift_ra_bar
=
max
(
0
,
(
N_ZC
-
(
nr_du
[
u
]
<<
1
)
-
(
n_group_ra
*
d_start
))
/
N_ZC
);
}
else
if
((
nr_du
[
u
]
>=
(
N_ZC
/
3
))
&&
(
nr_du
[
u
]
<=
((
N_ZC
-
NCS
)
>>
1
))
)
{
n_shift_ra
=
(
N_ZC
-
(
nr_du
[
u
]
<<
1
))
/
NCS
;
d_start
=
N_ZC
-
(
nr_du
[
u
]
<<
1
)
+
(
n_shift_ra
*
NCS
);
n_group_ra
=
nr_du
[
u
]
/
d_start
;
n_shift_ra_bar
=
min
(
n_shift_ra
,
max
(
0
,
(
nr_du
[
u
]
-
(
n_group_ra
*
d_start
))
/
NCS
));
}
else
{
n_shift_ra
=
0
;
n_shift_ra_bar
=
0
;
}
// This is the number of cyclic shifts for the current root u
numshift
=
(
n_shift_ra
*
n_group_ra
)
+
n_shift_ra_bar
;
numshift
=
(
n_shift_ra
*
n_group_ra
)
+
n_shift_ra_bar
;
// skip to next root and recompute parameters if numshift==0
(
numshift
>
0
)
?
(
not_found
=
0
)
:
(
preamble_offset
++
);
}
}
if
(
n_shift_ra
>
0
)
preamble_shift
=
-
((
d_start
*
(
preamble_index0
/
n_shift_ra
))
+
((
preamble_index0
%
n_shift_ra
)
*
NCS
));
// minus because the channel is h(t -\tau + Cv)
else
...
...
@@ -595,8 +587,17 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
if
(
LOG_DEBUGFLAG
(
PRACH
))
{
int
en
=
dB_fixed
(
signal_energy
((
int32_t
*
)
&
rxsigF
[
0
][
0
],
840
));
if
(
en
>
60
)
LOG_D
(
PHY
,
"frame %d, slot %d : preamble index %d, NCS %d, N_ZC/NCS %d: offset %d, preamble shift %d , en %d)
\n
"
,
frame
,
slot
,
preamble_index
,
NCS
,
N_ZC
/
NCS
,
preamble_offset
,
preamble_shift
,
en
);
if
(
en
>
60
)
LOG_D
(
PHY
,
"frame %d, slot %d : preamble index %d, NCS %d, N_ZC/NCS %d: offset %d, preamble shift %d , en %d)
\n
"
,
frame
,
slot
,
preamble_index
,
NCS
,
N_ZC
/
NCS
,
preamble_offset
,
preamble_shift
,
en
);
}
LOG_D
(
PHY
,
"PRACH RX preamble_index %d, preamble_offset %d
\n
"
,
preamble_index
,
preamble_offset
);
...
...
@@ -605,57 +606,56 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
if
(
new_dft
==
1
)
{
new_dft
=
0
;
Xu
=
(
int16_t
*
)
gNB
->
X_u
[
preamble_offset
-
first_nonzero_root_idx
];
Xu
=
(
int16_t
*
)
gNB
->
X_u
[
preamble_offset
-
first_nonzero_root_idx
];
LOG_D
(
PHY
,
"PRACH RX new dft preamble_offset-first_nonzero_root_idx %d
\n
"
,
preamble_offset
-
first_nonzero_root_idx
);
memset
(
prach_ifft
,
0
,((
N_ZC
==
839
)
?
2048
:
256
)
*
sizeof
(
int32_t
));
memset
(
prachF
,
0
,
sizeof
(
int16_t
)
*
2
*
1024
);
memset
(
prachF
,
0
,
sizeof
(
int16_t
)
*
2
*
1024
);
if
(
LOG_DUMPFLAG
(
PRACH
))
{
LOG_M
(
"prach_rxF0.m"
,
"prach_rxF0"
,
rxsigF
[
0
],
N_ZC
,
1
,
1
);
LOG_M
(
"prach_rxF1.m"
,
"prach_rxF1"
,
rxsigF
[
1
],
6144
,
1
,
1
);
}
for
(
aa
=
0
;
aa
<
nb_rx
;
aa
++
)
{
for
(
int
aa
=
0
;
aa
<
nb_rx
;
aa
++
)
{
// Do componentwise product with Xu* on each antenna
for
(
offset
=
0
;
offset
<
(
N_ZC
<<
1
);
offset
+=
2
)
{
for
(
int
offset
=
0
;
offset
<
(
N_ZC
<<
1
);
offset
+=
2
)
{
prachF
[
offset
]
=
(
int16_t
)(((
int32_t
)
Xu
[
offset
]
*
rxsigF
[
aa
][
offset
]
+
(
int32_t
)
Xu
[
offset
+
1
]
*
rxsigF
[
aa
][
offset
+
1
])
>>
15
);
prachF
[
offset
+
1
]
=
(
int16_t
)(((
int32_t
)
Xu
[
offset
]
*
rxsigF
[
aa
][
offset
+
1
]
-
(
int32_t
)
Xu
[
offset
+
1
]
*
rxsigF
[
aa
][
offset
])
>>
15
);
}
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
if
(
N_ZC
==
839
)
{
idft
(
IDFT_1024
,
prachF
,
prach_ifft_tmp
,
1
);
idft
(
IDFT_1024
,
prachF
,
prach_ifft_tmp
,
1
);
// compute energy and accumulate over receive antennas
for
(
i
=
0
;
i
<
1024
;
i
++
)
for
(
int
i
=
0
;
i
<
1024
;
i
++
)
prach_ifft
[
i
]
+=
(
int32_t
)
prach_ifft_tmp
[
i
<<
1
]
*
(
int32_t
)
prach_ifft_tmp
[
i
<<
1
]
+
(
int32_t
)
prach_ifft_tmp
[
1
+
(
i
<<
1
)]
*
(
int32_t
)
prach_ifft_tmp
[
1
+
(
i
<<
1
)];
}
else
{
idft
(
IDFT_256
,
prachF
,
prach_ifft_tmp
,
1
);
idft
(
IDFT_256
,
prachF
,
prach_ifft_tmp
,
1
);
log2_ifft_size
=
8
;
// compute energy and accumulate over receive antennas and repetitions for BR
for
(
i
=
0
;
i
<
256
;
i
++
)
for
(
int
i
=
0
;
i
<
256
;
i
++
)
prach_ifft
[
i
]
+=
(
int32_t
)
prach_ifft_tmp
[
i
<<
1
]
*
(
int32_t
)
prach_ifft_tmp
[(
i
<<
1
)]
+
(
int32_t
)
prach_ifft_tmp
[
1
+
(
i
<<
1
)]
*
(
int32_t
)
prach_ifft_tmp
[
1
+
(
i
<<
1
)];
}
if
(
LOG_DUMPFLAG
(
PRACH
))
{
if
(
aa
==
0
)
LOG_M
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
if
(
aa
==
1
)
LOG_M
(
"prach_rxF_comp1.m"
,
"prach_rxF_comp1"
,
prachF
,
1024
,
1
,
1
);
if
(
aa
==
0
)
LOG_M
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
if
(
aa
==
1
)
LOG_M
(
"prach_rxF_comp1.m"
,
"prach_rxF_comp1"
,
prachF
,
1024
,
1
,
1
);
}
}
// antennas_rx
}
// antennas_rx
// Normalization of energy over ifft and receive antennas
if
(
N_ZC
==
839
)
{
log2_ifft_size
=
10
;
for
(
i
=
0
;
i
<
1024
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
1024
;
i
++
)
prach_ifft
[
i
]
=
(
prach_ifft
[
i
]
>>
log2_ifft_size
)
/
nb_rx
;
}
else
{
log2_ifft_size
=
8
;
for
(
i
=
0
;
i
<
256
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
256
;
i
++
)
prach_ifft
[
i
]
=
(
prach_ifft
[
i
]
>>
log2_ifft_size
)
/
nb_rx
;
}
...
...
@@ -665,7 +665,7 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
preamble_shift2
=
((
preamble_shift
==
0
)
?
0
:
((
preamble_shift
<<
log2_ifft_size
)
/
N_ZC
));
for
(
i
=
0
;
i
<
NCS2
;
i
++
)
{
for
(
i
nt
i
=
0
;
i
<
NCS2
;
i
++
)
{
lev
=
(
int32_t
)
prach_ifft
[(
preamble_shift2
+
i
)];
levdB
=
dB_fixed_times10
(
lev
);
if
(
levdB
>*
max_preamble_energy
)
{
...
...
@@ -695,9 +695,11 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
// max_preamble_delay * ( (2048/2^mu*(fs/30.72M)) / 256 ) / fs = TA * 16 * 64 / 2^mu * Tc
uint16_t
*
TA
=
max_preamble_delay
;
int
mu
=
fp
->
numerology_index
;
if
(
cfg
->
prach_sequence_length
.
value
==
0
)
{
if
(
prach_fmt
==
0
||
prach_fmt
==
1
||
prach_fmt
==
2
)
*
TA
=
*
TA
*
3
*
(
1
<<
mu
)
/
2
;
else
if
(
prach_fmt
==
3
)
*
TA
=
*
TA
*
3
*
(
1
<<
mu
)
/
8
;
if
(
cfg
->
prach_sequence_length
.
value
==
0
)
{
if
(
prach_fmt
==
0
||
prach_fmt
==
1
||
prach_fmt
==
2
)
*
TA
=
*
TA
*
3
*
(
1
<<
mu
)
/
2
;
else
if
(
prach_fmt
==
3
)
*
TA
=
*
TA
*
3
*
(
1
<<
mu
)
/
8
;
}
else
*
TA
=
*
TA
/
2
;
...
...
@@ -705,19 +707,18 @@ void rx_nr_prach(PHY_VARS_gNB *gNB,
if
(
LOG_DUMPFLAG
(
PRACH
))
{
//int en = dB_fixed(signal_energy((int32_t*)&rxsigF[0][0],840));
// if (en>60) {
int
k
=
(
12
*
n_ra_prb
)
-
6
*
fp
->
N_RB_UL
;
if
(
k
<
0
)
k
+=
fp
->
ofdm_symbol_size
;
int
k
=
(
12
*
n_ra_prb
)
-
6
*
fp
->
N_RB_UL
;
if
(
k
<
0
)
k
+=
fp
->
ofdm_symbol_size
;
k
*=
12
;
k
+=
13
;
k
*=
2
;
LOG_M
(
"rxsigF.m"
,
"prach_rxF"
,
&
rxsigF
[
0
][
0
],
12288
,
1
,
1
);
LOG_M
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
LOG_M
(
"Xu.m"
,
"xu"
,
Xu
,
N_ZC
,
1
,
1
);
LOG_M
(
"prach_ifft0.m"
,
"prach_t0"
,
prach_ifft
,
1024
,
1
,
1
);
LOG_M
(
"rxsigF.m"
,
"prach_rxF"
,
&
rxsigF
[
0
][
0
],
12288
,
1
,
1
);
LOG_M
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
LOG_M
(
"Xu.m"
,
"xu"
,
Xu
,
N_ZC
,
1
,
1
);
LOG_M
(
"prach_ifft0.m"
,
"prach_t0"
,
prach_ifft
,
1024
,
1
,
1
);
// }
}
/* LOG_DUMPFLAG(PRACH) */
stop_meas
(
&
gNB
->
rx_prach
);
...
...
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
View file @
450346c7
...
...
@@ -72,12 +72,11 @@ int nr_generate_sss(c16_t *txdataF,
NR_DL_FRAME_PARMS
*
frame_parms
);
/*!
\fn
int
nr_generate_pbch_dmrs
\fn
void
nr_generate_pbch_dmrs
\brief Generation of the DMRS for the PBCH
@param
@returns 0 on success
*/
int
nr_generate_pbch_dmrs
(
uint32_t
*
gold_pbch_dmrs
,
void
nr_generate_pbch_dmrs
(
uint32_t
*
gold_pbch_dmrs
,
c16_t
*
txdataF
,
int16_t
amp
,
uint8_t
ssb_start_symbol
,
...
...
@@ -85,15 +84,13 @@ int nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
NR_DL_FRAME_PARMS
*
frame_parms
);
/*!
\fn
int
nr_generate_pbch
\fn
void
nr_generate_pbch
\brief Generation of the PBCH
@param
@returns 0 on success
*/
int
nr_generate_pbch
(
nfapi_nr_dl_tti_ssb_pdu
*
ssb_pdu
,
uint8_t
*
interleaver
,
void
nr_generate_pbch
(
PHY_VARS_gNB
*
gNB
,
const
nfapi_nr_dl_tti_ssb_pdu
*
ssb_pdu
,
c16_t
*
txdataF
,
int16_t
amp
,
uint8_t
ssb_start_symbol
,
uint8_t
n_hf
,
int
sfn
,
...
...
@@ -107,6 +104,7 @@ int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
@returns the bit index of the output
*/
void
nr_init_pbch_interleaver
(
uint8_t
*
interleaver
);
uint32_t
nr_pbch_extra_byte_generation
(
int
sfn
,
int
n_hf
,
int
ssb_index
,
int
ssb_sc_offset
,
int
Lmax
);
NR_gNB_DLSCH_t
new_gNB_dlsch
(
NR_DL_FRAME_PARMS
*
frame_parms
,
uint16_t
N_RB
);
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
View file @
450346c7
...
...
@@ -288,11 +288,8 @@ static void nr_ulsch_extract_rbs(c16_t* const rxdataF,
NR_DL_FRAME_PARMS
*
frame_parms
)
{
uint8_t
delta
=
0
;
int
start_re
=
(
frame_parms
->
first_carrier_offset
+
(
pusch_pdu
->
rb_start
+
pusch_pdu
->
bwp_start
)
*
NR_NB_SC_PER_RB
)
%
frame_parms
->
ofdm_symbol_size
;
int
nb_re_pusch
=
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
;
c16_t
*
rxF
=
&
rxdataF
[
rxoffset
];
c16_t
*
rxF_ext
=
&
rxFext
[
0
];
c16_t
*
ul_ch0
=
&
chF
[
choffset
];
...
...
@@ -367,7 +364,8 @@ static void nr_ulsch_extract_rbs(c16_t* const rxdataF,
}
}
static
void
nr_ulsch_scale_channel
(
int
**
ul_ch_estimates_ext
,
static
void
nr_ulsch_scale_channel
(
int
size_est
,
int
ul_ch_estimates_ext
[][
size_est
],
NR_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
symbol
,
uint8_t
is_dmrs_symbol
,
...
...
@@ -419,7 +417,8 @@ static int get_nb_re_pusch (NR_DL_FRAME_PARMS *frame_parms, nfapi_nr_pusch_pdu_t
}
// compute average channel_level on each (TX,RX) antenna pair
static
void
nr_ulsch_channel_level
(
int
**
ul_ch_estimates_ext
,
static
void
nr_ulsch_channel_level
(
int
size_est
,
int
ul_ch_estimates_ext
[][
size_est
],
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
avg
,
uint8_t
symbol
,
...
...
@@ -436,7 +435,7 @@ static void nr_ulsch_channel_level(int **ul_ch_estimates_ext,
//clear average level
avg128U
=
simde_mm_setzero_si128
();
ul_ch128
=
(
simde__m128i
*
)
&
ul_ch_estimates_ext
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
][
symbol
*
len
];
ul_ch128
=
(
simde__m128i
*
)
&
ul_ch_estimates_ext
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
][
symbol
*
len
];
for
(
int
i
=
0
;
i
<
len
>>
2
;
i
++
)
{
avg128U
=
simde_mm_add_epi32
(
avg128U
,
simde_mm_srai_epi32
(
simde_mm_madd_epi16
(
ul_ch128
[
i
],
ul_ch128
[
i
]),
x
));
...
...
@@ -1638,13 +1637,17 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
dmrs_symbol
=
get_valid_dmrs_idx_for_channel_est
(
rel15_ul
->
ul_dmrs_symb_pos
,
meas_symbol
);
else
// average of channel estimates stored in first symbol
dmrs_symbol
=
get_next_dmrs_symbol_in_slot
(
rel15_ul
->
ul_dmrs_symb_pos
,
rel15_ul
->
start_symbol_index
,
end_symbol
);
int
size_est
=
nb_re_pusch
*
frame_parms
->
symbols_per_slot
;
__attribute__
((
aligned
(
32
)))
int
ul_ch_estimates_ext
[
rel15_ul
->
nrOfLayers
*
frame_parms
->
nb_antennas_rx
][
size_est
];
memset
(
ul_ch_estimates_ext
,
0
,
sizeof
(
ul_ch_estimates_ext
));
int
buffer_length
=
rel15_ul
->
rb_size
*
NR_NB_SC_PER_RB
;
c16_t
temp_rxFext
[
frame_parms
->
nb_antennas_rx
][
buffer_length
]
__attribute__
((
aligned
(
32
)));
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
for
(
int
aatx
=
0
;
aatx
<
rel15_ul
->
nrOfLayers
;
aatx
++
)
for
(
int
nl
=
0
;
nl
<
rel15_ul
->
nrOfLayers
;
nl
++
)
nr_ulsch_extract_rbs
(
gNB
->
common_vars
.
rxdataF
[
aarx
],
(
c16_t
*
)
pusch_vars
->
ul_ch_estimates
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
],
(
c16_t
*
)
&
pusch_vars
->
rxdataF_ext
[
aarx
][
meas_symbol
*
nb_re_pusch
],
(
c16_t
*
)
&
pusch_vars
->
ul_ch_estimates_ext
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
][
meas_symbol
*
nb_re_pusch
],
(
c16_t
*
)
pusch_vars
->
ul_ch_estimates
[
nl
*
frame_parms
->
nb_antennas_rx
+
aarx
],
temp_rxFext
[
aarx
],
(
c16_t
*
)
&
ul_ch_estimates_ext
[
nl
*
frame_parms
->
nb_antennas_rx
+
aarx
][
meas_symbol
*
nb_re_pusch
],
soffset
+
meas_symbol
*
frame_parms
->
ofdm_symbol_size
,
dmrs_symbol
*
frame_parms
->
ofdm_symbol_size
,
aarx
,
...
...
@@ -1659,7 +1662,8 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
//----------------------------------------------------------
//--------------------- Channel Scaling --------------------
//----------------------------------------------------------
nr_ulsch_scale_channel
(
pusch_vars
->
ul_ch_estimates_ext
,
nr_ulsch_scale_channel
(
size_est
,
ul_ch_estimates_ext
,
frame_parms
,
meas_symbol
,
(
rel15_ul
->
ul_dmrs_symb_pos
>>
meas_symbol
)
&
0x01
,
...
...
@@ -1668,16 +1672,17 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB,
rel15_ul
->
rb_size
,
shift_ch_ext
);
nr_ulsch_channel_level
(
pusch_vars
->
ul_ch_estimates_ext
,
nr_ulsch_channel_level
(
size_est
,
ul_ch_estimates_ext
,
frame_parms
,
avg
,
meas_symbol
,
// index of the start symbol
nb_re_pusch
,
// number of the re in pusch
rel15_ul
->
nrOfLayers
);
for
(
int
aatx
=
0
;
aatx
<
rel15_ul
->
nrOfLayers
;
aatx
++
)
for
(
int
nl
=
0
;
nl
<
rel15_ul
->
nrOfLayers
;
nl
++
)
for
(
int
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
avgs
=
cmax
(
avgs
,
avg
[
aatx
*
frame_parms
->
nb_antennas_rx
+
aarx
]);
avgs
=
cmax
(
avgs
,
avg
[
nl
*
frame_parms
->
nb_antennas_rx
+
aarx
]);
pusch_vars
->
log2_maxh
=
(
log2_approx
(
avgs
)
>>
1
);
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
View file @
450346c7
...
...
@@ -24,7 +24,7 @@
#include "PHY/defs_nr_UE.h"
//#include "PHY/defs_gNB.h"
/** @addtogroup _PHY_PARAMETER_ESTIMATION_BLOCKS_
* @{
*/
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
View file @
450346c7
...
...
@@ -417,7 +417,7 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
//printf("start rx segment %d\n",r);
uint32_t
E
=
nr_get_E
(
G
,
harq_process
->
C
,
dlsch
->
dlsch_config
.
qamModOrder
,
dlsch
->
Nl
,
r
);
decParams
.
R
=
nr_get_R_ldpc_decoder
(
dlsch
->
dlsch_config
.
rv
,
E
,
decParams
.
BG
,
decParams
.
Z
,
&
harq_process
->
llrLen
,
harq_process
->
DLround
);
union
ldpcReqUnion
id
=
{.
s
=
{
dlsch
->
rnti
,
frame
,
nr_slot_rx
,
0
,
0
}};
union
ldpcReqUnion
id
=
{.
s
=
{
dlsch
->
rnti
,
frame
,
nr_slot_rx
,
0
,
0
}};
notifiedFIFO_elt_t
*
req
=
newNotifiedFIFO_elt
(
sizeof
(
ldpcDecode_ue_t
),
id
.
p
,
&
nf
,
&
nr_processDLSegment
);
ldpcDecode_ue_t
*
rdata
=
(
ldpcDecode_ue_t
*
)
NotifiedFifoData
(
req
);
...
...
openair1/PHY/defs_gNB.h
View file @
450346c7
...
...
@@ -53,23 +53,6 @@ typedef struct {
int
lut
[
MAX_PUCCH0_NID
][
160
][
14
];
}
NR_gNB_PUCCH0_LUT_t
;
typedef
struct
{
uint32_t
pbch_a
;
uint32_t
pbch_a_interleaved
;
uint32_t
pbch_a_prime
;
uint32_t
pbch_e
[
NR_POLAR_PBCH_E_DWORD
];
}
NR_gNB_PBCH
;
typedef
enum
{
NR_SCH_IDLE
,
NR_ACTIVE
,
NR_CBA_ACTIVE
,
NR_DISABLED
}
NR_SCH_status_t
;
typedef
struct
{
/// Nfapi DLSCH PDU
nfapi_nr_dl_tti_pdsch_pdu
pdsch_pdu
;
...
...
@@ -81,8 +64,6 @@ typedef struct {
uint8_t
**
c
;
/// Frame where current HARQ round was sent
uint32_t
frame
;
/// Subframe where current HARQ round was sent
uint32_t
subframe
;
/// Interleaver outputs
uint8_t
*
f
;
/// LDPC lifting size
...
...
@@ -164,9 +145,6 @@ typedef struct {
#define NUMBER_OF_NR_PRACH_MAX 8
typedef
struct
{
/// \brief ?.
/// first index: ? [0..1023] (hard coded)
int16_t
*
prachF
;
/// \brief ?.
/// second index: rx antenna [0..63] (hard coded) \note Hard coded array size indexed by \c nb_antennas_rx.
/// third index: frequency-domain sample [0..ofdm_symbol_size*12[
...
...
@@ -221,6 +199,7 @@ typedef struct {
int
llrLen
;
//////////////////////////////////////////////////////////////
}
NR_UL_gNB_HARQ_t
;
static
inline
int
lenWithCrc
(
int
nbSeg
,
int
len
)
{
if
(
nbSeg
>
1
)
...
...
@@ -237,24 +216,8 @@ static inline int crcType(int nbSeg, int len)
typedef
struct
{
//! estimated rssi (dBm)
int
rx_rssi_dBm
;
//! estimated correlation (wideband linear) between spatial channels (computed in dlsch_demodulation)
int
rx_correlation
[
2
];
//! estimated correlation (wideband dB) between spatial channels (computed in dlsch_demodulation)
int
rx_correlation_dB
[
2
];
/// Wideband CQI (= SINR)
int
wideband_cqi
[
MAX_NUM_RU_PER_gNB
];
/// Wideband CQI in dB (= SINR dB)
int
wideband_cqi_dB
[
MAX_NUM_RU_PER_gNB
];
/// Wideband CQI (sum of all RX antennas, in dB)
char
wideband_cqi_tot
;
/// Subband CQI per RX antenna and RB (= SINR)
int
subband_cqi
[
MAX_NUM_RU_PER_gNB
][
275
];
/// Total Subband CQI and RB (= SINR)
int
subband_cqi_tot
[
275
];
/// Subband CQI in dB and RB (= SINR dB)
int
subband_cqi_dB
[
MAX_NUM_RU_PER_gNB
][
275
];
/// Total Subband CQI and RB
int
subband_cqi_tot_dB
[
275
];
}
ulsch_measurements_gNB
;
typedef
struct
{
...
...
@@ -320,10 +283,6 @@ typedef struct {
typedef
struct
{
/// \brief Holds the received data in the frequency domain for the allocated RBs in repeated format.
/// - first index: rx antenna id [0..nb_antennas_rx[
/// - second index: ? [0..2*ofdm_symbol_size[
int32_t
**
rxdataF_ext
;
/// \brief Hold the channel estimates in time domain based on DRS.
/// - first index: rx antenna id [0..nb_antennas_rx[
/// - second index: ? [0..4*ofdm_symbol_size[
...
...
@@ -332,10 +291,6 @@ typedef struct {
/// - first index: rx antenna id [0..nb_antennas_rx[
/// - second index: ? [0..12*N_RB_UL*frame_parms->symbols_per_tti[
int32_t
**
ul_ch_estimates
;
/// \brief Uplink channel estimates extracted in PRBS.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..12*N_RB_UL*frame_parms->symbols_per_tti[
int32_t
**
ul_ch_estimates_ext
;
/// \brief Holds the compensated signal.
/// - first index: rx antenna id [0..nb_antennas_rx[
/// - second index: ? [0..12*N_RB_UL*frame_parms->symbols_per_tti[
...
...
@@ -393,25 +348,10 @@ typedef struct {
/// \brief Instance count for RXn-TXnp4 processing thread.
/// \internal This variable is protected by \ref mutex_rxtx.
int
instance_cnt
;
/// pthread structure for RXn-TXnp4 processing thread
pthread_t
pthread
;
/// pthread attributes for RXn-TXnp4 processing thread
pthread_attr_t
attr
;
/// condition variable for tx processing thread
pthread_cond_t
cond
;
/// mutex for RXn-TXnp4 processing thread
pthread_mutex_t
mutex
;
/// scheduling parameters for RXn-TXnp4 thread
struct
sched_param
sched_param_rxtx
;
/// \internal This variable is protected by \ref mutex_RUs_tx.
int
instance_cnt_RUs
;
/// condition variable for tx processing thread
pthread_cond_t
cond_RUs
;
/// mutex for L1 RXTX processing thread
pthread_mutex_t
mutex_RUs
;
/// mutex for L1 TX FH synchronization
pthread_mutex_t
mutex_RUs_tx
;
}
gNB_L1_rxtx_proc_t
;
...
...
@@ -419,85 +359,21 @@ typedef struct {
typedef
struct
gNB_L1_proc_t_s
{
/// Component Carrier index
uint8_t
CC_id
;
/// thread index
int
thread_index
;
/// timestamp received from HW
openair0_timestamp
timestamp_rx
;
/// timestamp to send to "slave rru"
openair0_timestamp
timestamp_tx
;
/// slot to act upon for reception
int
slot_rx
;
/// slot to act upon for PRACH
int
slot_prach
;
/// frame to act upon for reception
int
frame_rx
;
/// frame to act upon for transmission
int
frame_tx
;
/// frame to act upon for PRACH
int
frame_prach
;
/// \internal This variable is protected by \ref mutex_td.
int
instance_cnt_td
;
/// \internal This variable is protected by \ref mutex_te.
int
instance_cnt_te
;
/// \internal This variable is protected by \ref mutex_prach.
int
instance_cnt_prach
;
/// \internal This variable is protected by \ref mutex_asynch_rxtx.
int
instance_cnt_asynch_rxtx
;
/// pthread structure for eNB single processing thread
pthread_t
pthread_single
;
/// pthread structure for asychronous RX/TX processing thread
pthread_t
pthread_asynch_rxtx
;
/// pthread structure for dumping L1 stats
pthread_t
L1_stats_thread
;
/// pthread structure for printing time meas
pthread_t
process_stats_thread
;
/// pthread structure for reordering L1 tx thread messages
pthread_t
pthread_tx_reorder
;
/// flag to indicate first RX acquisition
int
first_rx
;
/// flag to indicate first TX transmission
int
first_tx
;
/// pthread attributes for single gNB processing thread
pthread_attr_t
attr_single
;
/// pthread attributes for prach processing thread
pthread_attr_t
attr_prach
;
/// pthread attributes for asynchronous RX thread
pthread_attr_t
attr_asynch_rxtx
;
/// scheduling parameters for parallel turbo-decoder thread
struct
sched_param
sched_param_td
;
/// scheduling parameters for parallel turbo-encoder thread
struct
sched_param
sched_param_te
;
/// scheduling parameters for single eNB thread
struct
sched_param
sched_param_single
;
/// scheduling parameters for prach thread
struct
sched_param
sched_param_prach
;
/// scheduling parameters for asynch_rxtx thread
struct
sched_param
sched_param_asynch_rxtx
;
pthread_cond_t
cond_prach
;
/// condition variable for asynch RX/TX thread
pthread_cond_t
cond_asynch_rxtx
;
/// mutex for parallel turbo-decoder thread
pthread_mutex_t
mutex_td
;
/// mutex for parallel turbo-encoder thread
pthread_mutex_t
mutex_te
;
/// mutex for PRACH thread
pthread_mutex_t
mutex_prach
;
/// mutex for asynch RX/TX thread
pthread_mutex_t
mutex_asynch_rxtx
;
/// mutex for RU access to eNB processing (PDSCH/PUSCH)
pthread_mutex_t
mutex_RU
;
/// mutex for RU_tx access to eNB_tx processing (PDSCH/PUSCH)
pthread_mutex_t
mutex_RU_tx
;
/// mutex for RU access to eNB processing (PRACH)
pthread_mutex_t
mutex_RU_PRACH
;
/// mutex for RU access to eNB processing (PRACH BR)
pthread_mutex_t
mutex_RU_PRACH_br
;
/// mask for RUs serving eNB (PDSCH/PUSCH)
int
RU_mask
,
RU_mask_tx
;
/// mask for RUs serving eNB (PRACH)
int
RU_mask_prach
;
/// set of scheduling variables RXn-TXnp4 threads
gNB_L1_rxtx_proc_t
L1_proc
,
L1_proc_tx
;
gNB_L1_rxtx_proc_t
L1_proc
;
gNB_L1_rxtx_proc_t
L1_proc_tx
;
}
gNB_L1_proc_t
;
typedef
struct
{
...
...
@@ -524,7 +400,6 @@ typedef struct {
int
n0_subband_power_tot_dBm
[
275
];
/// PRACH background noise level
int
prach_I0
;
}
PHY_MEASUREMENTS_gNB
;
...
...
@@ -543,7 +418,6 @@ typedef struct PHY_VARS_gNB_s {
uint8_t
CC_id
;
uint8_t
configured
;
gNB_L1_proc_t
proc
;
int
abstraction_flag
;
int
num_RU
;
RU_t
*
RU_list
[
MAX_NUM_RU_PER_gNB
];
/// Ethernet parameters for northbound midhaul interface
...
...
@@ -552,7 +426,6 @@ typedef struct PHY_VARS_gNB_s {
eth_params_t
eth_params
;
int
rx_total_gain_dB
;
int
(
*
nr_start_if
)(
struct
RU_t_s
*
ru
,
struct
PHY_VARS_gNB_s
*
gNB
);
uint8_t
local_flag
;
nfapi_nr_config_request_scf_t
gNB_config
;
NR_DL_FRAME_PARMS
frame_parms
;
PHY_MEASUREMENTS_gNB
measurements
;
...
...
@@ -578,7 +451,6 @@ typedef struct PHY_VARS_gNB_s {
int
max_nb_pdsch
;
int
max_nb_pusch
;
NR_gNB_PBCH
pbch
;
NR_gNB_COMMON
common_vars
;
NR_gNB_PRACH
prach_vars
;
NR_gNB_PRS
prs_vars
;
...
...
@@ -635,15 +507,11 @@ typedef struct PHY_VARS_gNB_s {
uint64_t
bad_pucch
;
int
num_ulprbbl
;
int
ulprbbl
[
275
];
/*
time_stats_t phy_proc;
*/
time_stats_t
phy_proc_tx
;
time_stats_t
phy_proc_rx
;
time_stats_t
rx_prach
;
/*
time_stats_t ofdm_mod_stats;
*/
time_stats_t
dlsch_encoding_stats
;
time_stats_t
dlsch_modulation_stats
;
time_stats_t
dlsch_scrambling_stats
;
...
...
@@ -678,10 +546,6 @@ typedef struct PHY_VARS_gNB_s {
time_stats_t
srs_beam_report_stats
;
time_stats_t
srs_iq_matrix_stats
;
/*
time_stats_t rx_dft_stats;
time_stats_t ulsch_freq_offset_estimation_stats;
*/
notifiedFIFO_t
respPuschSymb
;
notifiedFIFO_t
respDecode
;
notifiedFIFO_t
resp_L1
;
...
...
@@ -739,7 +603,7 @@ typedef struct LDPCDecode_s {
struct
ldpcReqId
{
uint16_t
rnti
;
uint16_t
frame
;
uint8_t
s
ubframe
;
uint8_t
s
lot
;
uint8_t
codeblock
;
uint16_t
spare
;
}
__attribute__
((
packed
));
...
...
@@ -756,12 +620,6 @@ typedef struct processingData_L1 {
PHY_VARS_gNB
*
gNB
;
}
processingData_L1_t
;
typedef
enum
{
FILLED
,
FILLING
,
NOT_FILLED
}
msgStatus_t
;
typedef
struct
processingData_L1tx
{
int
frame
;
int
slot
;
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
450346c7
...
...
@@ -45,7 +45,7 @@
extern
uint8_t
nfapi_mode
;
void
nr_common_signal_procedures
(
PHY_VARS_gNB
*
gNB
,
int
frame
,
int
slot
,
nfapi_nr_dl_tti_ssb_pdu
ssb_pdu
)
void
nr_common_signal_procedures
(
PHY_VARS_gNB
*
gNB
,
int
frame
,
int
slot
,
nfapi_nr_dl_tti_ssb_pdu
ssb_pdu
)
{
NR_DL_FRAME_PARMS
*
fp
=
&
gNB
->
frame_parms
;
nfapi_nr_config_request_scf_t
*
cfg
=
&
gNB
->
gNB_config
;
...
...
@@ -135,10 +135,9 @@ void nr_common_signal_procedures(PHY_VARS_gNB *gNB,int frame,int slot, nfapi_nr_
gNB
->
common_vars
.
beam_id
[
0
][
slot
*
fp
->
symbols_per_slot
+
j
]
=
cfg
->
ssb_table
.
ssb_beam_id_list
[
ssb_index
].
beam_id
.
value
;
}
nr_generate_pbch
(
&
ssb_pdu
,
gNB
->
nr_pbch_interleaver
,
nr_generate_pbch
(
gNB
,
&
ssb_pdu
,
&
txdataF
[
0
][
txdataF_offset
],
gNB
->
TX_AMP
,
ssb_start_symbol
,
n_hf
,
frame
,
...
...
@@ -346,10 +345,7 @@ static void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req)
ulsch_harq->ulsch_pdu.rb_size],ulsch_harq->ulsch_pdu.nr_of_symbols*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size)),1,1); LOG_M("chestF0.m","chF0",
&gNB->pusch_vars[0].ul_ch_estimates[0][ulsch_harq->ulsch_pdu.start_symbol_index*gNB->frame_parms.ofdm_symbol_size],gNB->frame_parms.ofdm_symbol_size,1,1);
LOG_M("chestF0_ext.m","chF0_ext",
&gNB->pusch_vars[0]->ul_ch_estimates_ext[0][(ulsch_harq->ulsch_pdu.start_symbol_index+1)*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size))], (ulsch_harq->ulsch_pdu.nr_of_symbols-1)*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size)),1,1); LOG_M("rxsigF0_comp.m","rxsF0_comp",
LOG_M("rxsigF0_comp.m","rxsF0_comp",
&gNB->pusch_vars[0].rxdataF_comp[0][ulsch_harq->ulsch_pdu.start_symbol_index*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size))],ulsch_harq->ulsch_pdu.nr_of_symbols*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size)),1,1); LOG_M("rxsigF0_llr.m","rxsF0_llr",
...
...
@@ -361,10 +357,7 @@ static void nr_postDecode(PHY_VARS_gNB *gNB, notifiedFIFO_elt_t *req)
ulsch_harq->ulsch_pdu.rb_size],ulsch_harq->ulsch_pdu.nr_of_symbols*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size)),1,1); LOG_M("chestF1.m","chF1",
&gNB->pusch_vars[0].ul_ch_estimates[1][ulsch_harq->ulsch_pdu.start_symbol_index*gNB->frame_parms.ofdm_symbol_size],gNB->frame_parms.ofdm_symbol_size,1,1);
LOG_M("chestF1_ext.m","chF1_ext",
&gNB->pusch_vars[0].ul_ch_estimates_ext[1][(ulsch_harq->ulsch_pdu.start_symbol_index+1)*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size))], (ulsch_harq->ulsch_pdu.nr_of_symbols-1)*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size)),1,1); LOG_M("rxsigF1_comp.m","rxsF1_comp",
LOG_M("rxsigF1_comp.m","rxsF1_comp",
&gNB->pusch_vars[0].rxdataF_comp[1][ulsch_harq->ulsch_pdu.start_symbol_index*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size))],ulsch_harq->ulsch_pdu.nr_of_symbols*(off+(NR_NB_SC_PER_RB *
ulsch_harq->ulsch_pdu.rb_size)),1,1);
...
...
openair1/SIMULATION/NR_PHY/pbchsim.c
View file @
450346c7
...
...
@@ -204,6 +204,7 @@ int main(int argc, char **argv)
channel_desc_t
*
gNB2UE
;
get_softmodem_params
()
->
sa
=
1
;
get_softmodem_params
()
->
usim_test
=
1
;
//uint8_t extended_prefix_flag=0;
//int8_t interf1=-21,interf2=-21;
...
...
@@ -230,7 +231,7 @@ int main(int argc, char **argv)
int
frame_length_complex_samples_no_prefix
;
NR_DL_FRAME_PARMS
*
frame_parms
;
int
ret
,
payload_ret
=
0
;
int
ret
;
int
run_initial_sync
=
0
;
int
loglvl
=
OAILOG_WARNING
;
...
...
@@ -835,17 +836,15 @@ int main(int argc, char **argv)
rxdataF
);
if
(
ret
==
0
)
{
// UE->rx_ind.rx_indication_body->mib_pdu.ssb_index; //not yet detected automatically
// UE->rx_ind.rx_indication_body->mib_pdu.ssb_length; //Lmax, not yet detected automatically
uint8_t
gNB_xtra_byte
=
0
;
for
(
int
i
=
0
;
i
<
8
;
i
++
)
gNB_xtra_byte
|=
((
gNB
->
pbch
.
pbch_a
>>
(
31
-
i
))
&
1
)
<<
(
7
-
i
);
payload_ret
=
(
result
.
xtra_byte
==
gNB_xtra_byte
);
for
(
i
=
0
;
i
<
3
;
i
++
)
{
payload_ret
+=
(
result
.
decoded_output
[
i
]
==
((
msgDataTx
.
ssb
[
ssb_index
].
ssb_pdu
.
ssb_pdu_rel15
.
bchPayload
>>
(
8
*
i
))
&
0xff
));
}
uint32_t
xtra_byte
=
nr_pbch_extra_byte_generation
(
frame
,
n_hf
,
ssb_index
,
gNB
->
gNB_config
.
ssb_table
.
ssb_subcarrier_offset
.
value
,
frame_parms
->
Lmax
);
int
payload_ret
=
(
result
.
xtra_byte
==
xtra_byte
);
nfapi_nr_dl_tti_ssb_pdu_rel15_t
*
pdu
=
&
msgDataTx
.
ssb
[
ssb_index
].
ssb_pdu
.
ssb_pdu_rel15
;
for
(
int
i
=
0
;
i
<
3
;
i
++
)
payload_ret
+=
(
result
.
decoded_output
[
i
]
==
((
pdu
->
bchPayload
>>
(
8
*
i
))
&
0xff
));
// printf("ret %d\n", payload_ret);
if
(
payload_ret
!=
4
)
n_errors_payload
++
;
...
...
openair1/SIMULATION/NR_PHY/prachsim.c
View file @
450346c7
...
...
@@ -135,11 +135,6 @@ int main(int argc, char **argv){
int
prachOccasion
=
0
;
double
DS_TDL
=
.
03
;
// int8_t interf1=-19,interf2=-19;
// uint8_t abstraction_flag=0,calibration_flag=0;
// double prach_sinr;
// uint32_t nsymb;
// uint16_t preamble_max, preamble_energy_max;
FILE
*
input_fd
=
NULL
;
char
*
input_file
=
NULL
;
int
n_bytes
=
0
;
...
...
@@ -784,16 +779,15 @@ int main(int argc, char **argv){
if
(
n_frames
==
1
)
{
printf
(
"preamble %d (tx %d) : energy %d, delay %d
\n
"
,
preamble_rx
,
preamble_tx
,
preamble_energy
,
preamble_delay
);
#ifdef NR_PRACH_DEBUG
#ifdef NR_PRACH_DEBUG
LOG_M
(
"prach0.m"
,
"prach0"
,
&
txdata
[
0
][
prach_start
],
frame_parms
->
samples_per_subframe
,
1
,
1
);
LOG_M
(
"prachF0.m"
,
"prachF0"
,
&
gNB
->
prach_vars
.
prachF
[
0
],
N_ZC
,
1
,
1
);
LOG_M
(
"rxsig0.m"
,
"rxs0"
,
&
ru
->
common
.
rxdata
[
0
][
subframe
*
frame_parms
->
samples_per_subframe
],
frame_parms
->
samples_per_subframe
,
1
,
1
);
LOG_M
(
"ru_rxsig0.m"
,
"rxs0"
,
&
ru
->
common
.
rxdata
[
0
][
subframe
*
frame_parms
->
samples_per_subframe
],
frame_parms
->
samples_per_subframe
,
1
,
1
);
LOG_M
(
"ru_rxsigF0.m"
,
"rxsF0"
,
ru
->
common
.
rxdataF
[
0
],
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_slot
,
1
,
1
);
LOG_M
(
"ru_prach_rxsigF0.m"
,
"rxsF0"
,
ru
->
prach_rxsigF
[
0
][
0
],
N_ZC
,
1
,
1
);
LOG_M
(
"prach_preamble.m"
,
"prachp"
,
&
gNB
->
X_u
[
0
],
N_ZC
,
1
,
1
);
LOG_M
(
"ue_prach_preamble.m"
,
"prachp"
,
&
UE
->
X_u
[
0
],
N_ZC
,
1
,
1
);
#endif
#endif
}
}
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
450346c7
...
...
@@ -1266,30 +1266,20 @@ int main(int argc, char *argv[])
if
(
n_trials
==
1
&&
round
==
0
)
{
__attribute__
((
unused
))
int
off
=
((
nb_rb
&
1
)
==
1
)
?
4
:
0
;
LOG_M
(
"rxsigF0_ext.m"
,
"rxsF0_ext"
,
&
pusch_vars
->
rxdataF_ext
[
0
][
start_symbol
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
],
nb_symb_sch
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"chestF0.m"
,
"chF0"
,
&
pusch_vars
->
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"
,
&
pusch_vars
->
ul_ch_estimates_ext
[
0
][(
start_symbol
+
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
(
nb_symb_sch
-
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"rxsigF0_comp.m"
,
"rxsF0_comp"
,
&
pusch_vars
->
rxdataF_comp
[
0
][
start_symbol
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
nb_symb_sch
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"rxsigF0_llrlayers0.m"
,
"rxsF0_llrlayers0"
,
&
pusch_vars
->
llr_layers
[
0
][
0
],
...
...
@@ -1298,12 +1288,6 @@ int main(int argc, char *argv[])
0
);
if
(
precod_nbr_layers
==
2
)
{
LOG_M
(
"rxsigF1_ext.m"
,
"rxsF1_ext"
,
&
pusch_vars
->
rxdataF_ext
[
1
][
start_symbol
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
],
nb_symb_sch
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"chestF3.m"
,
"chF3"
,
...
...
@@ -1312,13 +1296,6 @@ int main(int argc, char *argv[])
1
,
1
);
LOG_M
(
"chestF3_ext.m"
,
"chF3_ext"
,
&
pusch_vars
->
ul_ch_estimates_ext
[
3
][(
start_symbol
+
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
(
nb_symb_sch
-
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"rxsigF2_comp.m"
,
"rxsF2_comp"
,
&
pusch_vars
->
rxdataF_comp
[
2
][
start_symbol
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
...
...
@@ -1335,24 +1312,6 @@ int main(int argc, char *argv[])
}
if
(
precod_nbr_layers
==
4
)
{
LOG_M
(
"rxsigF1_ext.m"
,
"rxsF1_ext"
,
&
pusch_vars
->
rxdataF_ext
[
1
][
start_symbol
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
],
nb_symb_sch
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"rxsigF2_ext.m"
,
"rxsF2_ext"
,
&
pusch_vars
->
rxdataF_ext
[
2
][
start_symbol
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
],
nb_symb_sch
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"rxsigF3_ext.m"
,
"rxsF3_ext"
,
&
pusch_vars
->
rxdataF_ext
[
3
][
start_symbol
*
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
],
nb_symb_sch
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"chestF5.m"
,
"chF5"
,
...
...
@@ -1373,25 +1332,6 @@ int main(int argc, char *argv[])
1
,
1
);
LOG_M
(
"chestF5_ext.m"
,
"chF5_ext"
,
&
pusch_vars
->
ul_ch_estimates_ext
[
5
][(
start_symbol
+
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
(
nb_symb_sch
-
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"chestF10_ext.m"
,
"chF10_ext"
,
&
pusch_vars
->
ul_ch_estimates_ext
[
10
][(
start_symbol
+
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
(
nb_symb_sch
-
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"chestF15_ext.m"
,
"chF15_ext"
,
&
pusch_vars
->
ul_ch_estimates_ext
[
15
][(
start_symbol
+
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
(
nb_symb_sch
-
1
)
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
)),
1
,
1
);
LOG_M
(
"rxsigF4_comp.m"
,
"rxsF4_comp"
,
&
pusch_vars
->
rxdataF_comp
[
4
][
start_symbol
*
(
off
+
(
NR_NB_SC_PER_RB
*
pusch_pdu
->
rb_size
))],
...
...
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