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
99b262d7
Commit
99b262d7
authored
May 09, 2022
by
Roberto Louro Magueta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Compute and fill timing_advance field for SRS indication
parent
bdff42cf
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
48 additions
and
1 deletion
+48
-1
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
+43
-0
openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
+3
-0
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+2
-1
No files found.
openair1/PHY/NR_ESTIMATION/nr_measurements_gNB.c
View file @
99b262d7
...
@@ -67,6 +67,49 @@ int nr_est_timing_advance_pusch(PHY_VARS_gNB* gNB, int UE_id)
...
@@ -67,6 +67,49 @@ int nr_est_timing_advance_pusch(PHY_VARS_gNB* gNB, int UE_id)
return
max_pos
-
sync_pos
;
return
max_pos
-
sync_pos
;
}
}
int
nr_est_timing_advance_srs
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
**
srs_estimated_channel_time
)
{
int
timing_advance
=
0
;
int
max_val
=
0
;
for
(
int
i
=
0
;
i
<
frame_parms
->
ofdm_symbol_size
;
i
++
)
{
int
temp
=
0
;
for
(
int
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_rx
;
aa
++
)
{
int
Re
=
((
int16_t
*
)
srs_estimated_channel_time
[
aa
])[(
i
<<
1
)];
int
Im
=
((
int16_t
*
)
srs_estimated_channel_time
[
aa
])[
1
+
(
i
<<
1
)];
temp
+=
(
Re
*
Re
/
2
)
+
(
Im
*
Im
/
2
);
}
if
(
temp
>
max_val
)
{
timing_advance
=
i
;
max_val
=
temp
;
}
}
if
(
timing_advance
>
frame_parms
->
ofdm_symbol_size
/
2
)
{
timing_advance
=
timing_advance
-
frame_parms
->
ofdm_symbol_size
;
}
// Scale the 16 factor in N_TA calculation in 38.213 section 4.2 according to the used FFT size
uint16_t
bw_scaling
=
frame_parms
->
ofdm_symbol_size
>>
11
;
// do some integer rounding to improve TA accuracy
int
sync_pos_rounded
;
if
(
timing_advance
>
0
)
{
sync_pos_rounded
=
timing_advance
+
(
bw_scaling
>>
1
)
-
1
;
}
else
{
sync_pos_rounded
=
timing_advance
-
(
bw_scaling
>>
1
)
+
1
;
}
int
timing_advance_update
=
sync_pos_rounded
/
bw_scaling
;
// put timing advance command in 0..63 range
timing_advance_update
+=
31
;
if
(
timing_advance_update
<
0
)
timing_advance_update
=
0
;
if
(
timing_advance_update
>
63
)
timing_advance_update
=
63
;
return
timing_advance_update
;
}
void
dump_nr_I0_stats
(
FILE
*
fd
,
PHY_VARS_gNB
*
gNB
)
{
void
dump_nr_I0_stats
(
FILE
*
fd
,
PHY_VARS_gNB
*
gNB
)
{
...
...
openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
View file @
99b262d7
...
@@ -55,6 +55,9 @@ void nr_gnb_measurements(PHY_VARS_gNB *gNB, uint8_t ulsch_id, unsigned char harq
...
@@ -55,6 +55,9 @@ void nr_gnb_measurements(PHY_VARS_gNB *gNB, uint8_t ulsch_id, unsigned char harq
int
nr_est_timing_advance_pusch
(
PHY_VARS_gNB
*
phy_vars_gNB
,
int
UE_id
);
int
nr_est_timing_advance_pusch
(
PHY_VARS_gNB
*
phy_vars_gNB
,
int
UE_id
);
int
nr_est_timing_advance_srs
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
**
srs_estimated_channel_time
);
void
nr_pusch_ptrs_processing
(
PHY_VARS_gNB
*
gNB
,
void
nr_pusch_ptrs_processing
(
PHY_VARS_gNB
*
gNB
,
NR_DL_FRAME_PARMS
*
frame_parms
,
NR_DL_FRAME_PARMS
*
frame_parms
,
nfapi_nr_pusch_pdu_t
*
rel15_ul
,
nfapi_nr_pusch_pdu_t
*
rel15_ul
,
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
99b262d7
...
@@ -877,7 +877,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
...
@@ -877,7 +877,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
gNB
->
UL_INFO
.
srs_ind
.
slot
=
slot_rx
;
gNB
->
UL_INFO
.
srs_ind
.
slot
=
slot_rx
;
gNB
->
srs_pdu_list
[
num_srs
].
handle
=
srs_pdu
->
handle
;
gNB
->
srs_pdu_list
[
num_srs
].
handle
=
srs_pdu
->
handle
;
gNB
->
srs_pdu_list
[
num_srs
].
rnti
=
srs_pdu
->
rnti
;
gNB
->
srs_pdu_list
[
num_srs
].
rnti
=
srs_pdu
->
rnti
;
//gNB->srs_pdu_list[num_srs].timing_advance
;
gNB
->
srs_pdu_list
[
num_srs
].
timing_advance
=
nr_est_timing_advance_srs
(
&
gNB
->
frame_parms
,
gNB
->
nr_srs_info
[
i
]
->
srs_estimated_channel_time
)
;
gNB
->
srs_pdu_list
[
num_srs
].
num_symbols
=
1
<<
srs_pdu
->
num_symbols
;
gNB
->
srs_pdu_list
[
num_srs
].
num_symbols
=
1
<<
srs_pdu
->
num_symbols
;
gNB
->
srs_pdu_list
[
num_srs
].
wide_band_snr
=
(
*
gNB
->
nr_srs_info
[
i
]
->
snr
+
64
)
<<
1
;
gNB
->
srs_pdu_list
[
num_srs
].
wide_band_snr
=
(
*
gNB
->
nr_srs_info
[
i
]
->
snr
+
64
)
<<
1
;
gNB
->
srs_pdu_list
[
num_srs
].
num_reported_symbols
=
1
<<
srs_pdu
->
num_symbols
;
gNB
->
srs_pdu_list
[
num_srs
].
num_reported_symbols
=
1
<<
srs_pdu
->
num_symbols
;
...
@@ -895,6 +895,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
...
@@ -895,6 +895,7 @@ int phy_procedures_gNB_uespec_RX(PHY_VARS_gNB *gNB, int frame_rx, int slot_rx) {
LOG_I
(
NR_PHY
,
"gNB->UL_INFO.srs_ind.sfn = %i
\n
"
,
gNB
->
UL_INFO
.
srs_ind
.
sfn
);
LOG_I
(
NR_PHY
,
"gNB->UL_INFO.srs_ind.sfn = %i
\n
"
,
gNB
->
UL_INFO
.
srs_ind
.
sfn
);
LOG_I
(
NR_PHY
,
"gNB->UL_INFO.srs_ind.slot = %i
\n
"
,
gNB
->
UL_INFO
.
srs_ind
.
slot
);
LOG_I
(
NR_PHY
,
"gNB->UL_INFO.srs_ind.slot = %i
\n
"
,
gNB
->
UL_INFO
.
srs_ind
.
slot
);
LOG_I
(
NR_PHY
,
"gNB->srs_pdu_list[%i].rnti = 0x%04x
\n
"
,
num_srs
,
gNB
->
srs_pdu_list
[
num_srs
].
rnti
);
LOG_I
(
NR_PHY
,
"gNB->srs_pdu_list[%i].rnti = 0x%04x
\n
"
,
num_srs
,
gNB
->
srs_pdu_list
[
num_srs
].
rnti
);
LOG_I
(
NR_PHY
,
"gNB->srs_pdu_list[%i].timing_advance = %i
\n
"
,
num_srs
,
gNB
->
srs_pdu_list
[
num_srs
].
timing_advance
);
LOG_I
(
NR_PHY
,
"gNB->srs_pdu_list[%i].num_symbols = %i
\n
"
,
num_srs
,
gNB
->
srs_pdu_list
[
num_srs
].
num_symbols
);
LOG_I
(
NR_PHY
,
"gNB->srs_pdu_list[%i].num_symbols = %i
\n
"
,
num_srs
,
gNB
->
srs_pdu_list
[
num_srs
].
num_symbols
);
LOG_I
(
NR_PHY
,
"gNB->srs_pdu_list[%i].wide_band_snr = %i
\n
"
,
num_srs
,
gNB
->
srs_pdu_list
[
num_srs
].
wide_band_snr
);
LOG_I
(
NR_PHY
,
"gNB->srs_pdu_list[%i].wide_band_snr = %i
\n
"
,
num_srs
,
gNB
->
srs_pdu_list
[
num_srs
].
wide_band_snr
);
LOG_I
(
NR_PHY
,
"gNB->srs_pdu_list[%i].num_reported_symbols = %i
\n
"
,
num_srs
,
gNB
->
srs_pdu_list
[
num_srs
].
num_reported_symbols
);
LOG_I
(
NR_PHY
,
"gNB->srs_pdu_list[%i].num_reported_symbols = %i
\n
"
,
num_srs
,
gNB
->
srs_pdu_list
[
num_srs
].
num_reported_symbols
);
...
...
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