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
2aa32eff
Commit
2aa32eff
authored
6 years ago
by
Francesco Mani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
brute force multiple ssb detection works in pbchsim
parent
62e56f21
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
53 additions
and
33 deletions
+53
-33
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+3
-3
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
+3
-1
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+17
-14
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
+16
-6
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+1
-0
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+1
-2
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+8
-3
openair1/SIMULATION/NR_PHY/pbchsim.c
openair1/SIMULATION/NR_PHY/pbchsim.c
+4
-4
No files found.
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
2aa32eff
...
...
@@ -37,7 +37,9 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
uint8_t
eNB_offset
,
unsigned
char
Ns
,
unsigned
char
symbol
,
int
dmrss
)
int
dmrss
,
uint8_t
ssb_index
,
uint8_t
n_hf
)
{
int
pilot
[
200
]
__attribute__
((
aligned
(
16
)));
unsigned
char
aarx
;
...
...
@@ -49,8 +51,6 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
//uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
uint8_t
nushift
;
uint8_t
ssb_index
=
ue
->
i_ssb
;
uint8_t
n_hf
=
ue
->
n_hf
;
int
**
dl_ch_estimates
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
Ns
>>
1
]].
dl_ch_estimates
[
eNB_offset
];
int
**
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
Ns
>>
1
]].
rxdataF
;
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
View file @
2aa32eff
...
...
@@ -54,7 +54,9 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
uint8_t
eNB_offset
,
unsigned
char
Ns
,
unsigned
char
symbol
,
int
dmrss
);
int
dmrss
,
uint8_t
ssb_index
,
uint8_t
n_hf
);
int
nr_pdsch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
View file @
2aa32eff
...
...
@@ -71,14 +71,12 @@ int nr_pbch_detection(PHY_VARS_NR_UE *ue, int pbch_initial_symbol, runmode_t mod
for
(
int
hf
=
0
;
hf
<
N_hf
;
hf
++
)
{
for
(
int
l
=
0
;
l
<
N_L
;
l
++
)
{
if
(
ret
!=
0
)
{
ue
->
i_ssb
=
l
;
ue
->
n_hf
=
hf
;
#if UE_TIMING_TRACE
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
,
i
-
pbch_initial_symbol
);
nr_pbch_channel_estimation
(
ue
,
0
,
0
,
i
,
i
-
pbch_initial_symbol
,
l
,
hf
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
...
...
@@ -88,6 +86,7 @@ int nr_pbch_detection(PHY_VARS_NR_UE *ue, int pbch_initial_symbol, runmode_t mod
ue
->
pbch_vars
[
0
],
frame_parms
,
0
,
l
,
SISO
,
ue
->
high_speed_flag
);
...
...
@@ -130,7 +129,7 @@ char prefix_string[2][9] = {"NORMAL","EXTENDED"};
int
nr_initial_sync
(
PHY_VARS_NR_UE
*
ue
,
runmode_t
mode
)
{
int32_t
sync_pos
,
sync_pos_
slot
;
// k_ssb, N_ssb_crb, sync_pos2,
int32_t
sync_pos
,
sync_pos_
frame
;
// k_ssb, N_ssb_crb, sync_pos2,
int32_t
metric_tdd_ncp
=
0
;
uint8_t
phase_tdd_ncp
;
double
im
,
re
;
...
...
@@ -173,20 +172,17 @@ int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode)
/* process pss search on received buffer */
sync_pos
=
pss_synchro_nr
(
ue
,
NO_RATE_CHANGE
);
sync_pos_slot
=
(
fp
->
samples_per_subframe
/
fp
->
slots_per_subframe
)
-
10
*
(
fp
->
ofdm_symbol_size
+
fp
->
nb_prefix_samples
);
if
(
sync_pos
>=
fp
->
nb_prefix_samples
)
ue
->
ssb_offset
=
sync_pos
-
fp
->
nb_prefix_samples
;
else
ue
->
ssb_offset
=
sync_pos
+
(
fp
->
samples_per_subframe
*
10
)
-
fp
->
nb_prefix_samples
;
if
(
sync_pos
>=
fp
->
nb_prefix_samples
){
ue
->
ssb_offset
=
sync_pos
-
fp
->
nb_prefix_samples
;}
else
{
ue
->
ssb_offset
=
sync_pos
+
(
fp
->
samples_per_subframe
*
10
)
-
fp
->
nb_prefix_samples
;}
ue
->
rx_offset
=
ue
->
ssb_offset
-
sync_pos_slot
;
//write_output("rxdata1.m","rxd1",ue->common_vars.rxdata[0],10*fp->samples_per_subframe,1,1);
#ifdef DEBUG_INITIAL_SYNCH
LOG_I
(
PHY
,
"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d
\n
"
,
ue
->
Mod_id
,
sync_pos
,
ue
->
common_vars
.
eNb_id
);
LOG_I
(
PHY
,
"sync_pos %d ssb_offset %d
sync_pos_slot %d
\n
"
,
sync_pos
,
ue
->
ssb_offset
,
sync_pos_slo
t
);
LOG_I
(
PHY
,
"sync_pos %d ssb_offset %d
\n
"
,
sync_pos
,
ue
->
ssb_offse
t
);
#endif
// digital compensation of FFO for SSB symbols
...
...
@@ -239,7 +235,14 @@ int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode)
nr_gold_pbch
(
ue
);
ret
=
nr_pbch_detection
(
ue
,
1
,
mode
);
// start pbch detection at first symbol after pss
if
(
ret
==
0
)
{
// sync at symbol ue->symbol_offset
// computing the offset wrt the beginning of the frame
sync_pos_frame
=
(
fp
->
ofdm_symbol_size
+
fp
->
nb_prefix_samples0
)
+
((
ue
->
symbol_offset
)
-
1
)
*
(
fp
->
ofdm_symbol_size
+
fp
->
nb_prefix_samples
);
ue
->
rx_offset
=
ue
->
ssb_offset
-
sync_pos_frame
;
}
nr_gold_pdcch
(
ue
,
0
,
2
);
/*
int nb_prefix_samples0 = fp->nb_prefix_samples0;
...
...
@@ -263,7 +266,7 @@ int nr_initial_sync(PHY_VARS_NR_UE *ue, runmode_t mode)
}
else
{
#ifdef DEBUG_INITIAL_SYNCH
LOG_I
(
PHY
,
"TDD Normal prefix: SSS error condition: sync_pos %d
, sync_pos_slot %d
\n
"
,
sync_pos
,
sync_pos_slot
);
LOG_I
(
PHY
,
"TDD Normal prefix: SSS error condition: sync_pos %d
\n
"
,
sync_pos
);
#endif
}
}
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
View file @
2aa32eff
...
...
@@ -414,6 +414,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
NR_UE_PBCH
*
nr_ue_pbch_vars
,
NR_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
eNB_id
,
uint8_t
i_ssb
,
MIMO_mode_t
mimo_mode
,
uint32_t
high_speed_flag
)
{
NR_UE_COMMON
*
nr_ue_common_vars
=
&
ue
->
common_vars
;
...
...
@@ -424,10 +425,9 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
//uint32_t pbch_a_prime;
int16_t
*
pbch_e_rx
;
uint8_t
*
decoded_output
=
nr_ue_pbch_vars
->
decoded_output
;
uint8_t
nushift
;
uint8_t
nushift
,
n_hf
,
ssb_index
;
uint16_t
M
;
uint8_t
Lmax
=
frame_parms
->
Lmax
;
uint8_t
ssb_index
=
ue
->
i_ssb
;
//uint16_t crc;
//unsigned short idx_demod =0;
uint32_t
decoderState
=
0
;
...
...
@@ -443,7 +443,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
int
symbol_offset
=
1
;
if
(
ue
->
is_synchronized
>
0
)
symbol_offset
=
2
;
symbol_offset
=
ue
->
symbol_offset
;
else
symbol_offset
=
0
;
...
...
@@ -527,7 +527,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
#endif
//un-scrambling
M
=
NR_POLAR_PBCH_E
;
nushift
=
(
Lmax
==
4
)
?
ssb_index
&
3
:
ssb_index
&
7
;
nushift
=
(
Lmax
==
4
)
?
i_ssb
&
3
:
i_ssb
&
7
;
uint32_t
unscrambling_mask
=
(
Lmax
==
64
)
?
0x100006D
:
0x1000041
;
nr_pbch_unscrambling
(
nr_ue_pbch_vars
,
frame_parms
->
Nid_cell
,
nushift
,
M
,
NR_POLAR_PBCH_E
,
0
,
0
);
//polar decoding de-rate matching
...
...
@@ -571,6 +571,16 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
for
(
int
i
=
0
;
i
<
3
;
i
++
)
decoded_output
[
i
]
=
(
uint8_t
)((
payload
>>
((
3
-
i
)
<<
3
))
&
0xff
);
n_hf
=
((
xtra_byte
>>
4
)
&
0x01
);
// computing the half frame index from the extra byte
ssb_index
=
i_ssb
;
// ssb index corresponds to i_ssb for Lmax = 4,8
if
(
Lmax
==
64
)
{
// for Lmax = 64 ssb index 4th,5th and 6th bits are in extra byte
for
(
int
i
=
0
;
i
<
3
;
i
++
)
ssb_index
+=
(((
xtra_byte
>>
(
7
-
i
))
&
0x01
)
<<
(
3
+
i
));
}
ue
->
symbol_offset
=
nr_get_ssb_start_symbol
(
frame_parms
,
ssb_index
,
n_hf
);
#ifdef DEBUG_PBCH
printf
(
"xtra_byte %x payload %x
\n
"
,
xtra_byte
,
payload
);
...
...
@@ -578,14 +588,14 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
// printf("unscrambling pbch_a[%d] = %x \n", i,pbch_a[i]);
printf
(
"[PBCH] decoder payload[%d] = %x
\n
"
,
i
,
decoded_output
[
i
]);
}
#endif
ue
->
dl_indication
.
rx_ind
=
&
ue
->
rx_ind
;
// hang on rx_ind instance
//ue->rx_ind.sfn_slot = 0; //should be set by higher-1-layer, i.e. clean_and_set_if_instance()
ue
->
rx_ind
.
rx_indication_body
[
0
].
pdu_type
=
FAPI_NR_RX_PDU_TYPE_MIB
;
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
pdu
=
&
decoded_output
[
0
];
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
additional_bits
=
xtra_byte
;
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
ssb_index
=
ssb_index
;
// confirm with TCL
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
ssb_index
=
i_ssb
;
// confirm with TCL
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
ssb_length
=
Lmax
;
// confirm with TCL
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
cell_id
=
frame_parms
->
Nid_cell
;
// confirm with TCL
ue
->
rx_ind
.
number_pdus
=
1
;
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
2aa32eff
...
...
@@ -1122,6 +1122,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
NR_UE_PBCH
*
nr_ue_pbch_vars
,
NR_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
eNB_id
,
uint8_t
i_ssb
,
MIMO_mode_t
mimo_mode
,
uint32_t
high_speed_flag
);
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/defs_nr_UE.h
View file @
2aa32eff
...
...
@@ -1143,8 +1143,7 @@ typedef struct {
uint8_t
decode_MIB
;
/// temporary offset during cell search prior to MIB decoding
int
ssb_offset
;
uint8_t
i_ssb
;
uint8_t
n_hf
;
uint16_t
symbol_offset
;
// offset in terms of symbols for detected ssb in sync
int
rx_offset
;
/// Timing offset
int
rx_offset_diff
;
/// Timing adjustment for ofdm symbol0 on HW USRP
int
time_sync_cell
;
...
...
This diff is collapsed.
Click to expand it.
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
2aa32eff
...
...
@@ -2973,6 +2973,7 @@ void nr_ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *
ue
->
pbch_vars
[
eNB_id
],
&
ue
->
frame_parms
,
eNB_id
,
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
ssb_index
,
SISO
,
ue
->
high_speed_flag
);
...
...
@@ -5098,9 +5099,13 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eN
if
(
(
nr_tti_rx
==
0
)
&&
(
ue
->
decode_MIB
==
1
))
{
LOG_D
(
PHY
,
" ------ PBCH ChannelComp/LLR: frame.slot %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_tti_rx
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
uint8_t
i_ssb
=
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
ssb_index
;
uint8_t
n_hf
=
(((
ue
->
rx_ind
.
rx_indication_body
[
0
].
mib_pdu
.
additional_bits
)
>>
4
)
&
0x01
);
for
(
int
i
=
1
;
i
<
4
;
i
++
)
{
nr_slot_fep
(
ue
,
(
5
+
i
),
//mu=1 case B
(
ue
->
symbol_offset
+
i
),
//mu=1 case B
nr_tti_rx
,
0
,
0
,
...
...
@@ -5109,7 +5114,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
,
i
);
nr_pbch_channel_estimation
(
ue
,
0
,
0
,
ue
->
symbol_offset
+
i
,
i
-
1
,
i_ssb
,
n_hf
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
...
...
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/NR_PHY/pbchsim.c
View file @
2aa32eff
...
...
@@ -129,7 +129,7 @@ int main(int argc, char **argv)
unsigned
char
frame_type
=
0
;
unsigned
char
pbch_phase
=
0
;
int
frame
=
0
,
subframe
=
0
;
int
frame
=
0
;
int
frame_length_complex_samples
;
int
frame_length_complex_samples_no_prefix
;
NR_DL_FRAME_PARMS
*
frame_parms
;
...
...
@@ -610,8 +610,8 @@ int main(int argc, char **argv)
uint8_t
ssb_index
=
0
;
while
(
!
((
SSB_positions
>>
ssb_index
)
&
0x01
))
ssb_index
++
;
// to select the first transmitted ssb
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
++
)
{
UE
->
symbol_offset
=
nr_get_ssb_start_symbol
(
frame_parms
,
ssb_index
,
n_hf
);
for
(
int
i
=
UE
->
symbol_offset
+
1
;
i
<
UE
->
symbol_offset
+
4
;
i
++
)
{
nr_slot_fep
(
UE
,
i
,
0
,
...
...
@@ -620,7 +620,7 @@ int main(int argc, char **argv)
NR_PBCH_EST
);
}
ret
=
nr_pbch_detection
(
UE
,
start_symbol
+
1
,
0
);
ret
=
nr_pbch_detection
(
UE
,
UE
->
symbol_offset
+
1
,
0
);
if
(
ret
==
0
)
{
//UE->rx_ind.rx_indication_body->mib_pdu.ssb_index; //not yet detected automatically
...
...
This diff is collapsed.
Click to expand it.
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