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
lizhongxiao
OpenXG-RAN
Commits
51462360
Commit
51462360
authored
Oct 30, 2019
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/nr_time_tracking_ssb' into integration-develop-nr-2019w44
parents
3c16c57a
397480c1
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
123 additions
and
113 deletions
+123
-113
executables/nr-ue.c
executables/nr-ue.c
+3
-3
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+2
-0
openair1/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c
openair1/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c
+3
-3
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+66
-63
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
+1
-1
openair1/PHY/TOOLS/nr_phy_scope.c
openair1/PHY/TOOLS/nr_phy_scope.c
+4
-4
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+4
-0
openair1/SCHED_NR_UE/defs.h
openair1/SCHED_NR_UE/defs.h
+1
-1
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+39
-38
No files found.
executables/nr-ue.c
View file @
51462360
...
...
@@ -695,12 +695,12 @@ void *UE_thread(void *arg) {
//LOG_I(PHY,"Process slot %d thread Idx %d total gain %d\n", slot_nr, thread_idx, UE->rx_total_gain_dB);
#ifdef OAI_ADRV9371_ZC706
uint32_t
total_gain_dB_prev
=
0
;
/*
uint32_t total_gain_dB_prev = 0;
if (total_gain_dB_prev != UE->rx_total_gain_dB) {
total_gain_dB_prev = UE->rx_total_gain_dB;
openair0_cfg
[
0
].
rx_gain
[
0
]
=
UE
->
rx_total_gain_dB
-
20
;
openair0_cfg[0].rx_gain[0] = UE->rx_total_gain_dB;
UE->rfdevice.trx_set_gains_func(&UE->rfdevice,&openair0_cfg[0]);
}
}
*/
#endif
for
(
int
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_rx
;
i
++
)
...
...
openair1/PHY/INIT/nr_init_ue.c
View file @
51462360
...
...
@@ -877,6 +877,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
pbch_vars
[
eNB_id
]
->
rxdataF_comp
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pbch_vars
[
eNB_id
]
->
dl_ch_estimates
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pbch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pbch_vars
[
eNB_id
]
->
dl_ch_estimates_time
=
(
int32_t
**
)
malloc16_clear
(
8
*
sizeof
(
int32_t
*
)
);
pbch_vars
[
eNB_id
]
->
llr
=
(
int16_t
*
)
malloc16_clear
(
1920
);
//
prach_vars
[
eNB_id
]
->
prachF
=
(
int16_t
*
)
malloc16_clear
(
sizeof
(
int
)
*
(
7
*
2
*
sizeof
(
int
)
*
(
fp
->
ofdm_symbol_size
*
12
))
);
prach_vars
[
eNB_id
]
->
prach
=
(
int16_t
*
)
malloc16_clear
(
sizeof
(
int
)
*
(
7
*
2
*
sizeof
(
int
)
*
(
fp
->
ofdm_symbol_size
*
12
))
);
...
...
@@ -888,6 +889,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
int
idx
=
(
j
<<
1
)
+
i
;
pbch_vars
[
eNB_id
]
->
rxdataF_comp
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
20
*
12
*
4
);
pbch_vars
[
eNB_id
]
->
dl_ch_estimates
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
7
*
2
*
sizeof
(
int
)
*
(
fp
->
ofdm_symbol_size
)
);
pbch_vars
[
eNB_id
]
->
dl_ch_estimates_time
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
7
*
2
*
sizeof
(
int
)
*
(
fp
->
ofdm_symbol_size
)
);
pbch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
[
idx
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
20
*
12
*
4
);
}
}
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c
View file @
51462360
...
...
@@ -60,8 +60,8 @@ void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms,
temp
=
0
;
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_rx
;
aa
++
)
{
Re
=
((
int16_t
*
)
ue
->
p
dcch_vars
[
ue
->
current_thread_id
[
subframe
]]
[
eNB_id
]
->
dl_ch_estimates_time
[
aa
])[(
i
<<
1
)];
Im
=
((
int16_t
*
)
ue
->
p
dcch_vars
[
ue
->
current_thread_id
[
subframe
]]
[
eNB_id
]
->
dl_ch_estimates_time
[
aa
])[
1
+
(
i
<<
1
)];
Re
=
((
int16_t
*
)
ue
->
p
bch_vars
[
eNB_id
]
->
dl_ch_estimates_time
[
aa
])[(
i
<<
1
)];
Im
=
((
int16_t
*
)
ue
->
p
bch_vars
[
eNB_id
]
->
dl_ch_estimates_time
[
aa
])[
1
+
(
i
<<
1
)];
temp
+=
(
Re
*
Re
/
2
)
+
(
Im
*
Im
/
2
);
}
...
...
@@ -80,7 +80,7 @@ void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms,
// do not filter to have proactive timing adjustment
//max_pos_fil = max_pos;
if
(
subframe
==
1
)
if
(
subframe
==
0
)
{
diff
=
max_pos_fil
-
(
frame_parms
->
nb_prefix_samples
>>
3
);
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
51462360
...
...
@@ -21,7 +21,7 @@
#include <string.h>
#include "SCHED_NR_UE/defs.h"
#include "nr_estimation.h"
#include "PHY/NR_REFSIG/refsig_defs_ue.h"
#include "filt16a_32.h"
...
...
@@ -199,19 +199,23 @@ int nr_pbch_dmrs_correlation(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
,
int
dmrss
,
uint8_t
ssb_index
,
uint8_t
n_hf
)
uint8_t
eNB_offset
,
unsigned
char
Ns
,
unsigned
char
symbol
,
int
dmrss
,
uint8_t
ssb_index
,
uint8_t
n_hf
)
{
int
pilot
[
200
]
__attribute__
((
aligned
(
16
)));
unsigned
char
aarx
;
unsigned
char
aarx
,
p
;
unsigned
short
k
;
unsigned
int
pilot_cnt
;
int16_t
ch
[
2
],
*
pil
,
*
rxF
,
*
dl_ch
,
*
fl
,
*
fm
,
*
fr
;
int
ch_offset
,
symbol_offset
;
int
slot_pbch
;
fapi_nr_pbch_config_t
*
pbch_config
=
&
ue
->
nrUE_config
.
pbch_config
;
// initialized to 5ms in nr_init_ue for scenarios where UE is not configured (otherwise acquired by cell configuration from gNB or LTE)
uint8_t
ssb_periodicity
=
10
;
// ue->ssb_periodicity;
//uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
...
...
@@ -418,6 +422,59 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
}
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
ue
->
frame_parms
.
ofdm_symbol_size
)
{
case
128
:
idft
=
idft128
;
break
;
case
256
:
idft
=
idft256
;
break
;
case
512
:
idft
=
idft512
;
break
;
case
1024
:
idft
=
idft1024
;
break
;
case
1536
:
idft
=
idft1536
;
break
;
case
2048
:
idft
=
idft2048
;
break
;
case
3072
:
idft
=
idft3072
;
break
;
case
4096
:
idft
=
idft4096
;
break
;
default:
printf
(
"unsupported ofdm symbol size
\n
"
);
assert
(
0
);
}
if
(
symbol
==
3
)
{
// do ifft of channel estimate
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
for
(
p
=
0
;
p
<
ue
->
frame_parms
.
nb_antenna_ports_eNB
;
p
++
)
{
if
(
ue
->
pbch_vars
[
eNB_offset
]
->
dl_ch_estimates
[(
p
<<
1
)
+
aarx
])
{
LOG_D
(
PHY
,
"Channel Impulse Computation Slot %d ThreadId %d Symbol %d ch_offset %d
\n
"
,
Ns
,
ue
->
current_thread_id
[
Ns
],
symbol
,
ch_offset
);
idft
((
int16_t
*
)
&
ue
->
pbch_vars
[
eNB_offset
]
->
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
ch_offset
],
(
int16_t
*
)
ue
->
pbch_vars
[
eNB_offset
]
->
dl_ch_estimates_time
[(
p
<<
1
)
+
aarx
],
1
);
}
}
}
//}
...
...
@@ -433,7 +490,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
unsigned
short
nb_rb_coreset
)
{
int
pilot
[
200
]
__attribute__
((
aligned
(
16
)));
unsigned
char
aarx
,
p
;
unsigned
char
aarx
;
unsigned
short
k
;
unsigned
int
pilot_cnt
;
int16_t
ch
[
2
],
*
pil
,
*
rxF
,
*
dl_ch
,
*
fl
,
*
fm
,
*
fr
;
...
...
@@ -597,60 +654,6 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
//}
}
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
ue
->
frame_parms
.
ofdm_symbol_size
)
{
case
128
:
idft
=
idft128
;
break
;
case
256
:
idft
=
idft256
;
break
;
case
512
:
idft
=
idft512
;
break
;
case
1024
:
idft
=
idft1024
;
break
;
case
1536
:
idft
=
idft1536
;
break
;
case
2048
:
idft
=
idft2048
;
break
;
case
3072
:
idft
=
idft3072
;
break
;
case
4096
:
idft
=
idft4096
;
break
;
default:
printf
(
"unsupported ofdm symbol size
\n
"
);
assert
(
0
);
}
if
(
(
Ns
==
1
)
&&
(
symbol
==
0
))
{
// do ifft of channel estimate
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
for
(
p
=
0
;
p
<
ue
->
frame_parms
.
nb_antenna_ports_eNB
;
p
++
)
{
if
(
ue
->
pdcch_vars
[
ue
->
current_thread_id
[
Ns
]][
eNB_offset
]
->
dl_ch_estimates
[(
p
<<
1
)
+
aarx
])
{
LOG_D
(
PHY
,
"Channel Impulse Computation Slot %d ThreadId %d Symbol %d
\n
"
,
Ns
,
ue
->
current_thread_id
[
Ns
],
symbol
);
idft
((
int16_t
*
)
&
ue
->
pdcch_vars
[
ue
->
current_thread_id
[
Ns
]][
eNB_offset
]
->
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
0
],
(
int16_t
*
)
ue
->
pdcch_vars
[
ue
->
current_thread_id
[
Ns
]][
eNB_offset
]
->
dl_ch_estimates_time
[(
p
<<
1
)
+
aarx
],
1
);
}
}
}
return
(
0
);
}
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_ue_measurements.c
View file @
51462360
...
...
@@ -726,7 +726,7 @@ void nr_ue_measurements(PHY_VARS_NR_UE *ue,
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
2
;
printf
(
"testing measurements
\n
"
);
//
printf("testing measurements\n");
// signal measurements
for
(
eNB_id
=
0
;
eNB_id
<
ue
->
n_connected_eNB
;
eNB_id
++
)
{
...
...
openair1/PHY/TOOLS/nr_phy_scope.c
View file @
51462360
...
...
@@ -589,8 +589,8 @@ void phy_scope_nrUE(FD_phy_scope_nrue *form,
time
=
calloc
(
samples_per_frame
,
sizeof
(
float
));
corr
=
calloc
(
samples_per_frame
,
sizeof
(
float
));
chest_t
=
(
int16_t
**
)
phy_vars_ue
->
p
dcch_vars
[
phy_vars_ue
->
current_thread_id
[
subframe
]]
[
eNB_id
]
->
dl_ch_estimates_time
;
chest_f
=
(
int16_t
**
)
phy_vars_ue
->
p
dcch_vars
[
phy_vars_ue
->
current_thread_id
[
subframe
]]
[
eNB_id
]
->
dl_ch_estimates
;
chest_t
=
(
int16_t
**
)
phy_vars_ue
->
p
bch_vars
[
eNB_id
]
->
dl_ch_estimates_time
;
chest_f
=
(
int16_t
**
)
phy_vars_ue
->
p
bch_vars
[
eNB_id
]
->
dl_ch_estimates
;
pbch_llr
=
(
int16_t
*
)
phy_vars_ue
->
pbch_vars
[
eNB_id
]
->
llr
;
pbch_comp
=
(
int16_t
*
)
phy_vars_ue
->
pbch_vars
[
eNB_id
]
->
rxdataF_comp
[
0
];
...
...
@@ -697,8 +697,8 @@ void phy_scope_nrUE(FD_phy_scope_nrue *form,
if
(
chest_f
[(
atx
<<
1
)
+
arx
]
!=
NULL
)
{
for
(
k
=
0
;
k
<
frame_parms
->
ofdm_symbol_size
;
k
++
)
{
freq
[
ind
]
=
(
float
)
ind
;
Re
=
(
float
)(
chest_f
[(
atx
<<
1
)
+
arx
][(
2
*
k
)]);
Im
=
(
float
)(
chest_f
[(
atx
<<
1
)
+
arx
][(
2
*
k
)
+
1
]);
Re
=
(
float
)(
chest_f
[(
atx
<<
1
)
+
arx
][
6144
+
(
2
*
k
)]);
Im
=
(
float
)(
chest_f
[(
atx
<<
1
)
+
arx
][
6144
+
(
2
*
k
)
+
1
]);
chest_f_abs
[
ind
]
=
(
short
)
10
*
log10
(
1
.
0
+
((
double
)
Re
*
Re
+
(
double
)
Im
*
Im
));
ind
++
;
...
...
openair1/PHY/defs_nr_UE.h
View file @
51462360
...
...
@@ -810,6 +810,10 @@ typedef struct {
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..287] (hard coded)
int32_t
**
dl_ch_estimates_ext
;
/// \brief Hold the channel estimates in time domain (used for tracking).
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: samples? [0..2*ofdm_symbol_size[
int32_t
**
dl_ch_estimates_time
;
int
log2_maxh
;
uint8_t
pbch_a
[
NR_POLAR_PBCH_PAYLOAD_BITS
>>
3
];
uint32_t
pbch_a_interleaved
;
...
...
openair1/SCHED_NR_UE/defs.h
View file @
51462360
...
...
@@ -370,7 +370,7 @@ void nr_compute_srs_pos(lte_frame_type_t frameType,uint16_t isrs,uint16_t *psrsP
void
set_tx_harq_id
(
NR_UE_ULSCH_t
*
ulsch
,
int
harq_pid
,
int
slot_tx
);
int
get_tx_harq_id
(
NR_UE_ULSCH_t
*
ulsch
,
int
slot_tx
);
int
is_pbch_in_slot
(
fapi_nr_pbch_config_t
*
pbch_config
,
int
frame
,
int
slot
,
int
periodicity
,
uint16_t
slots_per_frame
);
/*@}*/
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
51462360
...
...
@@ -4165,6 +4165,43 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
}
uint16_t
coreset_nb_rb
=
6
*
coreset_count
;
uint16_t
coreset_start_rb
=
6
*
coreset_start
;
slot_pbch
=
is_pbch_in_slot
(
pbch_config
,
frame_rx
,
nr_tti_rx
,
ssb_periodicity
,
ue
->
frame_parms
.
slots_per_frame
);
// looking for pbch only in slot where it is supposed to be
if
((
ue
->
decode_MIB
==
1
)
&&
slot_pbch
)
{
LOG_I
(
PHY
,
" ------ PBCH ChannelComp/LLR: frame.slot %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_tti_rx
);
for
(
int
i
=
1
;
i
<
4
;
i
++
)
{
nr_slot_fep
(
ue
,
(
ue
->
symbol_offset
+
i
)
%
(
ue
->
frame_parms
.
symbols_per_slot
),
nr_tti_rx
,
0
,
0
);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
nr_pbch_channel_estimation
(
ue
,
0
,
nr_tti_rx
,(
ue
->
symbol_offset
+
i
)
%
(
ue
->
frame_parms
.
symbols_per_slot
),
i
-
1
,(
pbch_config
->
ssb_index
)
&
7
,
pbch_config
->
half_frame_bit
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
}
nr_ue_pbch_procedures
(
eNB_id
,
ue
,
proc
,
0
);
if
(
ue
->
no_timing_correction
==
0
)
{
LOG_I
(
PHY
,
"start adjust sync slot = %d no timing %d
\n
"
,
nr_tti_rx
,
ue
->
no_timing_correction
);
nr_adjust_synch_ue
(
&
ue
->
frame_parms
,
ue
,
eNB_id
,
nr_tti_rx
,
0
,
16384
);
}
}
#ifdef NR_PDCCH_SCHED
nr_gold_pdcch
(
ue
,
0
,
2
);
...
...
@@ -4204,16 +4241,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
if
(
dci_cnt
>
0
)
{
LOG_I
(
PHY
,
"[UE %d] Frame %d, nr_tti_rx %d: found %d DCIs
\n
"
,
ue
->
Mod_id
,
frame_rx
,
nr_tti_rx
,
dci_cnt
);
if
(
ue
->
no_timing_correction
==
0
)
{
LOG_D
(
PHY
,
"start adjust sync slot = %d no timing %d
\n
"
,
nr_tti_rx
,
ue
->
no_timing_correction
);
nr_adjust_synch_ue
(
&
ue
->
frame_parms
,
ue
,
eNB_id
,
nr_tti_rx
,
0
,
16384
);
}
}
else
{
LOG_D
(
PHY
,
"[UE %d] Frame %d, nr_tti_rx %d: No DCIs found
\n
"
,
ue
->
Mod_id
,
frame_rx
,
nr_tti_rx
);
}
...
...
@@ -4308,34 +4336,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA
,
VCD_FUNCTION_OUT
);
}
slot_pbch
=
is_pbch_in_slot
(
pbch_config
,
frame_rx
,
nr_tti_rx
,
ssb_periodicity
,
ue
->
frame_parms
.
slots_per_frame
);
// looking for pbch only in slot where it is supposed to be
if
((
ue
->
decode_MIB
==
1
)
&&
slot_pbch
)
{
LOG_I
(
PHY
,
" ------ PBCH ChannelComp/LLR: frame.slot %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_tti_rx
);
for
(
int
i
=
1
;
i
<
4
;
i
++
)
{
nr_slot_fep
(
ue
,
(
ue
->
symbol_offset
+
i
)
%
(
ue
->
frame_parms
.
symbols_per_slot
),
nr_tti_rx
,
0
,
0
);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
nr_pbch_channel_estimation
(
ue
,
0
,
nr_tti_rx
,(
ue
->
symbol_offset
+
i
)
%
(
ue
->
frame_parms
.
symbols_per_slot
),
i
-
1
,(
pbch_config
->
ssb_index
)
&
7
,
pbch_config
->
half_frame_bit
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
}
nr_ue_pbch_procedures
(
eNB_id
,
ue
,
proc
,
0
);
}
// do procedures for C-RNTI
if
(
ue
->
dlsch
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
][
0
]
->
active
==
1
)
{
...
...
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