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
zzha zzha
OpenXG-RAN
Commits
7a3dea31
Commit
7a3dea31
authored
Sep 05, 2022
by
francescomani
Committed by
luis_pereira87
Sep 05, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix at UE for DMRS when there is a bwp start offset
parent
fc10fd3f
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
71 additions
and
72 deletions
+71
-72
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
+9
-10
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
+0
-1
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+31
-17
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
+10
-10
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+10
-14
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+11
-20
No files found.
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
View file @
7a3dea31
...
...
@@ -142,17 +142,17 @@ int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
for
(
int
i
=
0
;
i
<
nb_pdsch_rb
*
((
config_type
==
NFAPI_NR_DMRS_TYPE1
)
?
6
:
4
);
i
++
)
{
w
=
(
wf
[
p
-
1000
][
i
&
1
])
*
(
wt
[
p
-
1000
][
lp
]);
mod_table
=
(
w
==
1
)
?
nr_rx_mod_table
:
nr_rx_nmod_table
;
w
=
(
wf
[
p
-
1000
][
i
&
1
])
*
(
wt
[
p
-
1000
][
lp
]);
mod_table
=
(
w
==
1
)
?
nr_rx_mod_table
:
nr_rx_nmod_table
;
idx
=
((((
nr_gold_pdsch
[(
i
<<
1
)
>>
5
])
>>
((
i
<<
1
)
&
0x1f
))
&
1
)
<<
1
)
^
(((
nr_gold_pdsch
[((
i
<<
1
)
+
1
)
>>
5
])
>>
(((
i
<<
1
)
+
1
)
&
0x1f
))
&
1
);
((
int16_t
*
)
output
)[
i
<<
1
]
=
mod_table
[(
NR_MOD_TABLE_QPSK_OFFSET
+
idx
)
<<
1
];
((
int16_t
*
)
output
)[(
i
<<
1
)
+
1
]
=
mod_table
[((
NR_MOD_TABLE_QPSK_OFFSET
+
idx
)
<<
1
)
+
1
];
idx
=
((((
nr_gold_pdsch
[(
i
<<
1
)
>>
5
])
>>
((
i
<<
1
)
&
0x1f
))
&
1
)
<<
1
)
^
(((
nr_gold_pdsch
[((
i
<<
1
)
+
1
)
>>
5
])
>>
(((
i
<<
1
)
+
1
)
&
0x1f
))
&
1
);
((
int16_t
*
)
output
)[
i
<<
1
]
=
mod_table
[(
NR_MOD_TABLE_QPSK_OFFSET
+
idx
)
<<
1
];
((
int16_t
*
)
output
)[(
i
<<
1
)
+
1
]
=
mod_table
[((
NR_MOD_TABLE_QPSK_OFFSET
+
idx
)
<<
1
)
+
1
];
#ifdef DEBUG_PDSCH
printf
(
"nr_pdsch_dmrs_rx dmrs config type %d port %d nb_pdsch_rb %d
\n
"
,
config_type
,
p
,
nb_pdsch_rb
);
printf
(
"wf[%d] = %d wt[%d]= %d
\n
"
,
i
&
1
,
wf
[
p
-
1000
][
i
&
1
],
lp
,
wt
[
p
-
1000
][
lp
]);
printf
(
"i %d idx %d pdsch gold %u b0-b1 %d-%d mod_dmrs %d %d
\n
"
,
i
,
idx
,
nr_gold_pdsch
[(
i
<<
1
)
>>
5
],
(((
nr_gold_pdsch
[(
i
<<
1
)
>>
5
])
>>
((
i
<<
1
)
&
0x1f
))
&
1
),
(((
nr_gold_pdsch
[((
i
<<
1
)
+
1
)
>>
5
])
>>
(((
i
<<
1
)
+
1
)
&
0x1f
))
&
1
),
((
int16_t
*
)
output
)[
i
<<
1
],
((
int16_t
*
)
output
)[(
i
<<
1
)
+
1
]);
printf
(
"nr_pdsch_dmrs_rx dmrs config type %d port %d nb_pdsch_rb %d
\n
"
,
config_type
,
p
,
nb_pdsch_rb
);
printf
(
"wf[%d] = %d wt[%d]= %d
\n
"
,
i
&
1
,
wf
[
p
-
1000
][
i
&
1
],
lp
,
wt
[
p
-
1000
][
lp
]);
printf
(
"i %d idx %d pdsch gold %u b0-b1 %d-%d mod_dmrs %d %d
\n
"
,
i
,
idx
,
nr_gold_pdsch
[(
i
<<
1
)
>>
5
],
(((
nr_gold_pdsch
[(
i
<<
1
)
>>
5
])
>>
((
i
<<
1
)
&
0x1f
))
&
1
),
(((
nr_gold_pdsch
[((
i
<<
1
)
+
1
)
>>
5
])
>>
(((
i
<<
1
)
+
1
)
&
0x1f
))
&
1
),
((
int16_t
*
)
output
)[
i
<<
1
],
((
int16_t
*
)
output
)[(
i
<<
1
)
+
1
]);
#endif
}
}
else
{
...
...
@@ -167,7 +167,6 @@ int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
int
nr_pdcch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
unsigned
int
Ns
,
unsigned
int
*
nr_gold_pdcch
,
int32_t
*
output
,
...
...
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
View file @
7a3dea31
...
...
@@ -39,7 +39,6 @@ int nr_pbch_dmrs_rx(int dmrss,
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
*/
int
nr_pdcch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
unsigned
int
Ns
,
unsigned
int
*
nr_gold_pdcch
,
int32_t
*
output
,
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
7a3dea31
...
...
@@ -28,6 +28,7 @@
#include "PHY/NR_REFSIG/dmrs_nr.h"
#include "PHY/NR_REFSIG/ptrs_nr.h"
#include "PHY/NR_TRANSPORT/nr_sch_dmrs.h"
#include "common/utils/nr/nr_common.h"
#include "filt16a_32.h"
#include <openair1/PHY/TOOLS/phy_scope_interface.h>
...
...
@@ -463,16 +464,16 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
return
(
0
);
}
int
nr_pdcch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
uint8_t
gNB_id
,
unsigned
char
Ns
,
unsigned
char
symbol
,
unsigned
short
scrambling_id
,
unsigned
short
coreset_start_subcarrier
,
unsigned
short
nb_rb_corese
t
,
int32_t
pdcch_est_size
,
int32_t
pdcch_dl_ch_estimates
[][
pdcch_est_size
])
void
nr_pdcch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
uint8_t
gNB_id
,
unsigned
char
Ns
,
unsigned
char
symbol
,
fapi_nr_coreset_t
*
coreset
,
uint16_t
first_carrier_offset
,
uint16_t
BWPStar
t
,
int32_t
pdcch_est_size
,
int32_t
pdcch_dl_ch_estimates
[][
pdcch_est_size
])
{
unsigned
char
aarx
;
...
...
@@ -487,6 +488,17 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
symbol_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
symbol
;
int
nb_rb_coreset
=
0
;
int
coreset_start_rb
=
0
;
get_coreset_rballoc
(
coreset
->
frequency_domain_resource
,
&
nb_rb_coreset
,
&
coreset_start_rb
);
if
(
nb_rb_coreset
==
0
)
return
;
#ifdef DEBUG_PDCCH
printf
(
PHY
,
"pdcch_channel_estimation: first_carrier_offset %d, BWPStart %d, coreset_start_rb %d, coreset_nb_rb %d
\n
"
,
first_carrier_offset
,
BWPStart
,
coreset_start_rb
,
nb_rb_coreset
);
#endif
unsigned
short
coreset_start_subcarrier
=
first_carrier_offset
+
(
BWPStart
+
coreset_start_rb
)
*
12
;
#ifdef DEBUG_PDCCH
printf
(
"PDCCH Channel Estimation : ThreadId %d, gNB_id %d ch_offset %d, OFDM size %d, Ncp=%d, Ns=%d, symbol %d
\n
"
,
...
...
@@ -499,28 +511,32 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
int16_t
*
fr
=
filt16a_r1
;
#endif
unsigned
short
scrambling_id
=
coreset
->
pdcch_dmrs_scrambling_id
;
// checking if re-initialization of scrambling IDs is needed (should be done here but scrambling ID for PDCCH is not taken from RRC)
if
(
scrambling_id
!=
ue
->
scramblingID_pdcch
){
ue
->
scramblingID_pdcch
=
scrambling_id
;
nr_gold_pdcch
(
ue
,
ue
->
scramblingID_pdcch
);
}
// generate pilot
i
nt
pilot
[
nb_rb_coreset
*
3
]
__attribute__
((
aligned
(
16
)));
nr_pdcch_dmrs_rx
(
ue
,
gNB_id
,
Ns
,
ue
->
nr_gold_pdcch
[
gNB_id
][
Ns
][
symbol
],
&
pilot
[
0
],
2000
,
nb_rb_coreset
)
;
int
dmrs_ref
=
0
;
i
f
(
coreset
->
CoreSetType
==
NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG
)
dmrs_ref
=
BWPStart
;
// generate pilot
int
pilot
[(
nb_rb_coreset
+
dmrs_ref
)
*
3
]
__attribute__
((
aligned
(
16
)));
nr_pdcch_dmrs_rx
(
ue
,
Ns
,
ue
->
nr_gold_pdcch
[
gNB_id
][
Ns
][
symbol
],
&
pilot
[
0
],
2000
,(
nb_rb_coreset
+
dmrs_ref
));
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
k
=
coreset_start_subcarrier
;
pil
=
(
int16_t
*
)
&
pilot
[
0
];
pil
=
(
int16_t
*
)
&
pilot
[
dmrs_ref
*
3
];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
1
)];
dl_ch
=
(
int16_t
*
)
&
pdcch_dl_ch_estimates
[
aarx
][
ch_offset
];
memset
(
dl_ch
,
0
,
4
*
(
ue
->
frame_parms
.
ofdm_symbol_size
));
#ifdef DEBUG_PDCCH
printf
(
"pdcch ch est pilot addr %p RB_DL %d
\n
"
,
&
pilot
[
0
],
ue
->
frame_parms
.
N_RB_DL
);
printf
(
"pdcch ch est pilot addr %p RB_DL %d
\n
"
,
&
pilot
[
dmrs_ref
*
3
],
ue
->
frame_parms
.
N_RB_DL
);
printf
(
"k %d, first_carrier %d
\n
"
,
k
,
ue
->
frame_parms
.
first_carrier_offset
);
printf
(
"rxF addr %p
\n
"
,
rxF
);
...
...
@@ -687,8 +703,6 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
//}
}
return
(
0
);
}
int
nr_pdsch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
View file @
7a3dea31
...
...
@@ -39,16 +39,16 @@
\param Ns slot number (0..19)
\param symbol symbol within slot
*/
int
nr_pdcch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
uint8_t
gNB_id
,
unsigned
char
Ns
,
unsigned
char
symbol
,
unsigned
short
scrambling_id
,
unsigned
short
coreset_start_subcarrier
,
unsigned
short
nb_rb_corese
t
,
int32_t
pdcch_est_size
,
int32_t
pdcch_dl_ch_estimates
[][
pdcch_est_size
]);
void
nr_pdcch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
uint8_t
gNB_id
,
unsigned
char
Ns
,
unsigned
char
symbol
,
fapi_nr_coreset_t
*
coreset
,
uint16_t
first_carrier_offset
,
uint16_t
BWPStar
t
,
int32_t
pdcch_est_size
,
int32_t
pdcch_dl_ch_estimates
[][
pdcch_est_size
]);
int
nr_pbch_dmrs_correlation
(
PHY_VARS_NR_UE
*
ue
,
UE_nr_rxtx_proc_t
*
proc
,
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
View file @
7a3dea31
...
...
@@ -532,8 +532,6 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
if
(
sa
==
1
&&
ret
==
0
)
{
bool
dec
=
false
;
int
gnb_id
=
0
;
//FIXME
int
coreset_nb_rb
=
0
;
int
coreset_start_rb
=
0
;
// Hold the channel estimates in frequency domain.
int32_t
pdcch_est_size
=
((((
fp
->
symbols_per_slot
*
(
fp
->
ofdm_symbol_size
+
LTE_CE_FILTER_LENGTH
))
+
15
)
/
16
)
*
16
);
...
...
@@ -543,7 +541,6 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
for
(
int
n_ss
=
0
;
n_ss
<
phy_pdcch_config
.
nb_search_space
;
n_ss
++
)
{
uint8_t
nb_symb_pdcch
=
phy_pdcch_config
.
pdcch_config
[
n_ss
].
coreset
.
duration
;
int
start_symb
=
phy_pdcch_config
.
pdcch_config
[
n_ss
].
coreset
.
StartSymbolIndex
;
get_coreset_rballoc
(
phy_pdcch_config
.
pdcch_config
[
n_ss
].
coreset
.
frequency_domain_resource
,
&
coreset_nb_rb
,
&
coreset_start_rb
);
for
(
uint16_t
l
=
start_symb
;
l
<
start_symb
+
nb_symb_pdcch
;
l
++
)
{
nr_slot_fep_init_sync
(
ue
,
proc
,
...
...
@@ -551,17 +548,16 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc,
phy_pdcch_config
.
slot
,
is
*
fp
->
samples_per_frame
+
phy_pdcch_config
.
sfn
*
fp
->
samples_per_frame
+
ue
->
rx_offset
);
if
(
coreset_nb_rb
>
0
)
nr_pdcch_channel_estimation
(
ue
,
proc
,
0
,
phy_pdcch_config
.
slot
,
l
,
fp
->
Nid_cell
,
fp
->
first_carrier_offset
+
(
phy_pdcch_config
.
pdcch_config
[
n_ss
].
BWPStart
+
coreset_start_rb
)
*
12
,
coreset_nb_rb
,
pdcch_est_size
,
pdcch_dl_ch_estimates
);
nr_pdcch_channel_estimation
(
ue
,
proc
,
0
,
phy_pdcch_config
.
slot
,
l
,
&
phy_pdcch_config
.
pdcch_config
[
n_ss
].
coreset
,
fp
->
first_carrier_offset
,
phy_pdcch_config
.
pdcch_config
[
n_ss
].
BWPStart
,
pdcch_est_size
,
pdcch_dl_ch_estimates
);
}
int
dci_cnt
=
nr_ue_pdcch_procedures
(
gnb_id
,
ue
,
proc
,
pdcch_est_size
,
pdcch_dl_ch_estimates
,
&
phy_pdcch_config
,
n_ss
);
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
7a3dea31
...
...
@@ -1445,31 +1445,22 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
int32_t
pdcch_est_size
=
((((
fp
->
symbols_per_slot
*
(
fp
->
ofdm_symbol_size
+
LTE_CE_FILTER_LENGTH
))
+
15
)
/
16
)
*
16
);
__attribute__
((
aligned
(
16
)))
int32_t
pdcch_dl_ch_estimates
[
4
*
fp
->
nb_antennas_rx
][
pdcch_est_size
];
int
coreset_nb_rb
=
0
;
int
coreset_start_rb
=
0
;
if
(
phy_pdcch_config
->
nb_search_space
>
0
)
get_coreset_rballoc
(
phy_pdcch_config
->
pdcch_config
[
0
].
coreset
.
frequency_domain_resource
,
&
coreset_nb_rb
,
&
coreset_start_rb
);
uint8_t
dci_cnt
=
0
;
for
(
int
n_ss
=
0
;
n_ss
<
phy_pdcch_config
->
nb_search_space
;
n_ss
++
)
{
for
(
uint16_t
l
=
0
;
l
<
nb_symb_pdcch
;
l
++
)
{
// note: this only works if RBs for PDCCH are contigous!
LOG_D
(
PHY
,
"pdcch_channel_estimation: first_carrier_offset %d, BWPStart %d, coreset_start_rb %d, coreset_nb_rb %d
\n
"
,
fp
->
first_carrier_offset
,
phy_pdcch_config
->
pdcch_config
[
n_ss
].
BWPStart
,
coreset_start_rb
,
coreset_nb_rb
);
if
(
coreset_nb_rb
>
0
)
nr_pdcch_channel_estimation
(
ue
,
proc
,
gNB_id
,
nr_slot_rx
,
l
,
phy_pdcch_config
->
pdcch_config
[
n_ss
].
coreset
.
pdcch_dmrs_scrambling_id
,
fp
->
first_carrier_offset
+
(
phy_pdcch_config
->
pdcch_config
[
n_ss
].
BWPStart
+
coreset_start_rb
)
*
12
,
coreset_nb_rb
,
pdcch_est_size
,
pdcch_dl_ch_estimates
);
nr_pdcch_channel_estimation
(
ue
,
proc
,
gNB_id
,
nr_slot_rx
,
l
,
&
phy_pdcch_config
->
pdcch_config
[
n_ss
].
coreset
,
fp
->
first_carrier_offset
,
phy_pdcch_config
->
pdcch_config
[
n_ss
].
BWPStart
,
pdcch_est_size
,
pdcch_dl_ch_estimates
);
stop_meas
(
&
ue
->
ofdm_demod_stats
);
...
...
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