Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
常顺宇
OpenXG-RAN
Commits
62e56f21
Commit
62e56f21
authored
Mar 01, 2019
by
Francesco Mani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
some hardcoding removed in pbch detection still some left
parent
568fa237
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
75 additions
and
71 deletions
+75
-71
openair1/PHY/INIT/nr_parms.c
openair1/PHY/INIT/nr_parms.c
+53
-0
openair1/PHY/INIT/phy_init.h
openair1/PHY/INIT/phy_init.h
+1
-0
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+5
-9
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
+2
-1
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+1
-1
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
+2
-1
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+2
-55
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+1
-1
openair1/SIMULATION/NR_PHY/pbchsim.c
openair1/SIMULATION/NR_PHY/pbchsim.c
+8
-3
No files found.
openair1/PHY/INIT/nr_parms.c
View file @
62e56f21
...
...
@@ -27,6 +27,59 @@ uint32_t nr_subcarrier_spacing[MAX_NUM_SUBCARRIER_SPACING] = {15e3, 30e3, 60e3,
uint16_t
nr_slots_per_subframe
[
MAX_NUM_SUBCARRIER_SPACING
]
=
{
1
,
2
,
4
,
16
,
32
};
int
nr_get_ssb_start_symbol
(
NR_DL_FRAME_PARMS
*
fp
,
uint8_t
i_ssb
,
uint8_t
half_frame_index
)
{
int
mu
=
fp
->
numerology_index
;
int
symbol
=
0
;
uint8_t
n
,
n_temp
;
nr_ssb_type_e
type
=
fp
->
ssb_type
;
int
case_AC
[
2
]
=
{
2
,
8
};
int
case_BD
[
4
]
=
{
4
,
8
,
16
,
20
};
int
case_E
[
8
]
=
{
8
,
12
,
16
,
20
,
32
,
36
,
40
,
44
};
switch
(
mu
)
{
case
NR_MU_0
:
// case A
n
=
i_ssb
>>
1
;
symbol
=
case_AC
[
i_ssb
%
2
]
+
14
*
n
;
break
;
case
NR_MU_1
:
if
(
type
==
1
){
// case B
n
=
i_ssb
>>
2
;
symbol
=
case_BD
[
i_ssb
%
4
]
+
28
*
n
;
}
if
(
type
==
2
){
// case C
n
=
i_ssb
>>
1
;
symbol
=
case_AC
[
i_ssb
%
2
]
+
14
*
n
;
}
break
;
case
NR_MU_3
:
// case D
n_temp
=
i_ssb
>>
2
;
n
=
n_temp
+
(
n_temp
>>
2
);
symbol
=
case_BD
[
i_ssb
%
4
]
+
28
*
n
;
break
;
case
NR_MU_4
:
// case E
n_temp
=
i_ssb
>>
3
;
n
=
n_temp
+
(
n_temp
>>
2
);
symbol
=
case_E
[
i_ssb
%
8
]
+
56
*
n
;
break
;
default:
AssertFatal
(
0
==
1
,
"Invalid numerology index %d for the synchronization block
\n
"
,
mu
);
}
if
(
half_frame_index
)
symbol
+=
(
5
*
fp
->
symbols_per_slot
*
fp
->
slots_per_subframe
);
return
symbol
;
}
int
nr_init_frame_parms0
(
NR_DL_FRAME_PARMS
*
fp
,
int
mu
,
int
Ncp
,
...
...
openair1/PHY/INIT/phy_init.h
View file @
62e56f21
...
...
@@ -376,6 +376,7 @@ 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
);
int
nr_get_ssb_start_symbol
(
NR_DL_FRAME_PARMS
*
fp
,
uint8_t
i_ssb
,
uint8_t
half_frame_index
);
int
nr_init_frame_parms
(
nfapi_nr_config_request_t
*
config
,
NR_DL_FRAME_PARMS
*
frame_parms
);
int
nr_init_frame_parms_ue
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int
mu
,
int
Ncp
,
int
N_RB_DL
,
int
n_ssb_crb
,
int
ssb_subcarrier_offset
);
int
init_nr_ue_signal
(
PHY_VARS_NR_UE
*
ue
,
int
nb_connected_eNB
,
uint8_t
abstraction_flag
);
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
62e56f21
...
...
@@ -36,7 +36,8 @@
int
nr_pbch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
unsigned
char
Ns
,
unsigned
char
symbol
)
unsigned
char
symbol
,
int
dmrss
)
{
int
pilot
[
200
]
__attribute__
((
aligned
(
16
)));
unsigned
char
aarx
;
...
...
@@ -44,7 +45,6 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
unsigned
int
pilot_cnt
;
int16_t
ch
[
2
],
*
pil
,
*
rxF
,
*
dl_ch
,
*
fl
,
*
fm
,
*
fr
;
int
ch_offset
,
symbol_offset
;
int
dmrss
;
//uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
...
...
@@ -59,18 +59,14 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
unsigned
int
ssb_offset
=
ue
->
frame_parms
.
first_carrier_offset
+
ue
->
frame_parms
.
ssb_start_subcarrier
;
if
(
ssb_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
ssb_offset
-=
ue
->
frame_parms
.
ofdm_symbol_size
;
if
(
ue
->
is_synchronized
==
0
)
dmrss
=
symbol
-
1
;
else
dmrss
=
symbol
-
5
;
if
(
ue
->
high_speed_flag
==
0
)
// use second channel estimate position for temporary storage
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
;
else
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
symbol
;
AssertFatal
((
symbol
>
0
&&
symbol
<
4
&&
ue
->
is_synchronized
==
0
)
||
(
symbol
>
4
&&
symbol
<
8
&&
ue
->
is_synchronized
==
1
),
"symbol %d is illegal for PBCH DM-RS (is_synchronized %d)
\n
"
,
symbol
,
ue
->
is_synchronized
);
AssertFatal
(
dmrss
>=
0
&&
dmrss
<
3
,
"symbol %d is illegal for PBCH DM-RS
\n
"
,
dmrss
);
symbol_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
symbol
;
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
View file @
62e56f21
...
...
@@ -53,7 +53,8 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
int
nr_pbch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
unsigned
char
Ns
,
unsigned
char
symbol
);
unsigned
char
symbol
,
int
dmrss
);
int
nr_pdsch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
View file @
62e56f21
...
...
@@ -78,7 +78,7 @@ int nr_pbch_detection(PHY_VARS_NR_UE *ue, int pbch_initial_symbol, runmode_t mod
start_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
for
(
int
i
=
pbch_initial_symbol
;
i
<
pbch_initial_symbol
+
3
;
i
++
)
nr_pbch_channel_estimation
(
ue
,
0
,
0
,
i
);
nr_pbch_channel_estimation
(
ue
,
0
,
0
,
i
,
i
-
pbch_initial_symbol
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
View file @
62e56f21
...
...
@@ -34,6 +34,7 @@
#include "PHY/phy_extern_nr_ue.h"
#include "PHY/sse_intrin.h"
#include "PHY/LTE_REFSIG/lte_refsig.h"
#include "PHY/INIT/phy_init.h"
//#define DEBUG_PBCH 1
//#define DEBUG_PBCH_ENCODING
...
...
@@ -442,7 +443,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
int
symbol_offset
=
1
;
if
(
ue
->
is_synchronized
>
0
)
symbol_offset
=
4
;
symbol_offset
=
2
;
else
symbol_offset
=
0
;
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
62e56f21
...
...
@@ -30,6 +30,7 @@
#include "SCHED/fapi_l1.h"
#include "common/utils/LOG/log.h"
#include "common/utils/LOG/vcd_signal_dumper.h"
#include "PHY/INIT/phy_init.h"
#include "T.h"
...
...
@@ -77,60 +78,6 @@ int return_ssb_type(nfapi_config_request_t *cfg)
}*/
// First SSB starting symbol candidate is used and type B is chosen for 30kHz SCS
int
nr_get_ssb_start_symbol
(
nfapi_nr_config_request_t
*
cfg
,
NR_DL_FRAME_PARMS
*
fp
,
uint8_t
i_ssb
)
{
int
mu
=
cfg
->
subframe_config
.
numerology_index_mu
.
value
;
int
symbol
=
0
;
uint8_t
n
,
n_temp
;
nr_ssb_type_e
type
=
fp
->
ssb_type
;
int
case_AC
[
2
]
=
{
2
,
8
};
int
case_BD
[
4
]
=
{
4
,
8
,
16
,
20
};
int
case_E
[
8
]
=
{
8
,
12
,
16
,
20
,
32
,
36
,
40
,
44
};
switch
(
mu
)
{
case
NR_MU_0
:
// case A
n
=
i_ssb
>>
1
;
symbol
=
case_AC
[
i_ssb
%
2
]
+
14
*
n
;
break
;
case
NR_MU_1
:
if
(
type
==
1
){
// case B
n
=
i_ssb
>>
2
;
symbol
=
case_BD
[
i_ssb
%
4
]
+
28
*
n
;
}
if
(
type
==
2
){
// case C
n
=
i_ssb
>>
1
;
symbol
=
case_AC
[
i_ssb
%
2
]
+
14
*
n
;
}
break
;
case
NR_MU_3
:
// case D
n_temp
=
i_ssb
>>
2
;
n
=
n_temp
+
(
n_temp
>>
2
);
symbol
=
case_BD
[
i_ssb
%
4
]
+
28
*
n
;
break
;
case
NR_MU_4
:
// case E
n_temp
=
i_ssb
>>
3
;
n
=
n_temp
+
(
n_temp
>>
2
);
symbol
=
case_E
[
i_ssb
%
8
]
+
56
*
n
;
break
;
default:
AssertFatal
(
0
==
1
,
"Invalid numerology index %d for the synchronization block
\n
"
,
mu
);
}
if
(
cfg
->
sch_config
.
half_frame_index
.
value
)
symbol
+=
(
5
*
fp
->
symbols_per_slot
*
fp
->
slots_per_subframe
);
return
symbol
;
}
void
nr_set_ssb_first_subcarrier
(
nfapi_nr_config_request_t
*
cfg
,
NR_DL_FRAME_PARMS
*
fp
)
{
fp
->
ssb_start_subcarrier
=
(
12
*
cfg
->
sch_config
.
n_ssb_crb
.
value
+
cfg
->
sch_config
.
ssb_subcarrier_offset
.
value
)
/
(
1
<<
cfg
->
subframe_config
.
numerology_index_mu
.
value
);
...
...
@@ -158,7 +105,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame, int slot) {
ssb_index
=
i
+
2
*
rel_slot
;
// computing the ssb_index
if
((
fp
->
L_ssb
>>
ssb_index
)
&
0x01
)
{
// generating the ssb only if the bit of L_ssb at current ssb index is 1
int
ssb_start_symbol_abs
=
nr_get_ssb_start_symbol
(
cfg
,
fp
,
ssb_index
);
// computing the starting symbol for current ssb
int
ssb_start_symbol_abs
=
nr_get_ssb_start_symbol
(
fp
,
ssb_index
,
n_hf
);
// computing the starting symbol for current ssb
ssb_start_symbol
=
ssb_start_symbol_abs
%
14
;
// start symbol wrt slot
nr_set_ssb_first_subcarrier
(
cfg
,
fp
);
// setting the first subcarrier
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
62e56f21
...
...
@@ -5109,7 +5109,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
nr_pbch_channel_estimation
(
ue
,
0
,
0
,
5
+
i
);
nr_pbch_channel_estimation
(
ue
,
0
,
0
,
5
+
i
,
i
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
...
...
openair1/SIMULATION/NR_PHY/pbchsim.c
View file @
62e56f21
...
...
@@ -378,6 +378,8 @@ int main(int argc, char **argv)
nr_phy_config_request_sim
(
gNB
,
N_RB_DL
,
N_RB_DL
,
mu
,
Nid_cell
,
SSB_positions
);
phy_init_nr_gNB
(
gNB
,
0
,
0
);
uint8_t
n_hf
=
gNB_config
->
sch_config
.
half_frame_index
.
value
;
double
fs
,
bw
,
scs
,
eps
;
switch
(
mu
)
{
...
...
@@ -494,7 +496,6 @@ int main(int argc, char **argv)
nr_common_signal_procedures
(
gNB
,
frame
,
slot
);
//TODO: loop over slots
for
(
aa
=
0
;
aa
<
gNB
->
frame_parms
.
nb_antennas_tx
;
aa
++
)
{
if
(
gNB_config
->
subframe_config
.
dl_cyclic_prefix_type
.
value
==
1
)
{
PHY_ofdm_mod
(
gNB
->
common_vars
.
txdataF
[
aa
],
...
...
@@ -605,8 +606,12 @@ int main(int argc, char **argv)
}
else
{
UE
->
rx_offset
=
0
;
uint8_t
ssb_index
=
0
;
while
(
!
((
SSB_positions
>>
ssb_index
)
&
0x01
))
ssb_index
++
;
// to select the first transmitted ssb
for
(
int
i
=
5
;
i
<
8
;
i
++
)
{
int
start_symbol
=
nr_get_ssb_start_symbol
(
frame_parms
,
ssb_index
,
n_hf
);
for
(
int
i
=
start_symbol
+
1
;
i
<
start_symbol
+
4
;
i
++
)
{
nr_slot_fep
(
UE
,
i
,
0
,
...
...
@@ -615,7 +620,7 @@ int main(int argc, char **argv)
NR_PBCH_EST
);
}
ret
=
nr_pbch_detection
(
UE
,
5
,
0
);
// start pbch detection from symbol 5 and mode 0
ret
=
nr_pbch_detection
(
UE
,
start_symbol
+
1
,
0
);
if
(
ret
==
0
)
{
//UE->rx_ind.rx_indication_body->mib_pdu.ssb_index; //not yet detected automatically
...
...
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