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
spbro
OpenXG-RAN
Commits
99c8dd42
Commit
99c8dd42
authored
Jul 26, 2024
by
Laurent THOMAS
Committed by
Robert Schmidt
Jul 30, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use gold cache for PDCCH decoding, scrambling, unscrambling
parent
0316431e
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
42 additions
and
184 deletions
+42
-184
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+0
-28
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+0
-24
openair1/PHY/NR_REFSIG/nr_gold.c
openair1/PHY/NR_REFSIG/nr_gold.c
+0
-22
openair1/PHY/NR_REFSIG/nr_gold_ue.c
openair1/PHY/NR_REFSIG/nr_gold_ue.c
+0
-21
openair1/PHY/NR_REFSIG/nr_refsig.h
openair1/PHY/NR_REFSIG/nr_refsig.h
+0
-1
openair1/PHY/NR_REFSIG/nr_refsig_common.h
openair1/PHY/NR_REFSIG/nr_refsig_common.h
+1
-0
openair1/PHY/NR_REFSIG/refsig.c
openair1/PHY/NR_REFSIG/refsig.c
+11
-0
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
+0
-3
openair1/PHY/NR_TRANSPORT/nr_dci.c
openair1/PHY/NR_TRANSPORT/nr_dci.c
+10
-32
openair1/PHY/NR_TRANSPORT/nr_dci.h
openair1/PHY/NR_TRANSPORT/nr_dci.h
+0
-6
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+14
-12
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
+6
-17
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+0
-4
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+0
-4
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+0
-6
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+0
-4
No files found.
openair1/PHY/INIT/nr_init.c
View file @
99c8dd42
...
...
@@ -143,31 +143,11 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB)
gNB
->
max_nb_pdsch
=
MAX_MOBILES_PER_GNB
;
init_delay_table
(
fp
->
ofdm_symbol_size
,
MAX_DELAY_COMP
,
NR_MAX_OFDM_SYMBOL_SIZE
,
fp
->
delay_table
);
//PDCCH DMRS init
gNB
->
nr_gold_pdcch_dmrs
=
(
uint32_t
***
)
malloc16
(
fp
->
slots_per_frame
*
sizeof
(
uint32_t
**
));
uint32_t
***
pdcch_dmrs
=
gNB
->
nr_gold_pdcch_dmrs
;
AssertFatal
(
pdcch_dmrs
!=
NULL
,
"NR init: pdcch_dmrs malloc failed
\n
"
);
gNB
->
bad_pucch
=
0
;
if
(
gNB
->
TX_AMP
==
0
)
gNB
->
TX_AMP
=
AMP
;
// ceil(((NB_RB<<1)*3)/32) // 3 RE *2(QPSK)
int
pdcch_dmrs_init_length
=
(((
fp
->
N_RB_DL
<<
1
)
*
3
)
>>
5
)
+
1
;
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
pdcch_dmrs
[
slot
]
=
(
uint32_t
**
)
malloc16
(
fp
->
symbols_per_slot
*
sizeof
(
uint32_t
*
));
AssertFatal
(
pdcch_dmrs
[
slot
]
!=
NULL
,
"NR init: pdcch_dmrs for slot %d - malloc failed
\n
"
,
slot
);
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
pdcch_dmrs
[
slot
][
symb
]
=
(
uint32_t
*
)
malloc16
(
pdcch_dmrs_init_length
*
sizeof
(
uint32_t
));
LOG_D
(
PHY
,
"pdcch_dmrs[%d][%d] %p
\n
"
,
slot
,
symb
,
pdcch_dmrs
[
slot
][
symb
]);
AssertFatal
(
pdcch_dmrs
[
slot
][
symb
]
!=
NULL
,
"NR init: pdcch_dmrs for slot %d symbol %d - malloc failed
\n
"
,
slot
,
symb
);
}
}
nr_generate_modulation_table
();
gNB
->
pdcch_gold_init
=
cfg
->
cell_config
.
phy_cell_id
.
value
;
nr_init_pdcch_dmrs
(
gNB
,
cfg
->
cell_config
.
phy_cell_id
.
value
);
nr_init_pbch_interleaver
(
gNB
->
nr_pbch_interleaver
);
//PDSCH DMRS init
...
...
@@ -340,14 +320,6 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
free_and_zero
(
meas
->
n0_subband_power
);
free_and_zero
(
meas
->
n0_subband_power_dB
);
uint32_t
***
pdcch_dmrs
=
gNB
->
nr_gold_pdcch_dmrs
;
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
free_and_zero
(
pdcch_dmrs
[
slot
][
symb
]);
free_and_zero
(
pdcch_dmrs
[
slot
]);
}
free_and_zero
(
pdcch_dmrs
);
uint32_t
****
pdsch_dmrs
=
gNB
->
nr_gold_pdsch_dmrs
;
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
...
...
openair1/PHY/INIT/nr_init_ue.c
View file @
99c8dd42
...
...
@@ -304,23 +304,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
common_vars
->
rxdata
[
i
]
=
malloc16_clear
(
num_samples
*
sizeof
(
c16_t
));
}
// ceil(((NB_RB<<1)*3)/32) // 3 RE *2(QPSK)
int
pdcch_dmrs_init_length
=
(((
fp
->
N_RB_DL
<<
1
)
*
3
)
>>
5
)
+
1
;
//PDCCH DMRS init (gNB offset = 0)
ue
->
nr_gold_pdcch
[
0
]
=
malloc16
(
fp
->
slots_per_frame
*
sizeof
(
uint32_t
**
));
uint32_t
***
pdcch_dmrs
=
ue
->
nr_gold_pdcch
[
0
];
AssertFatal
(
pdcch_dmrs
!=
NULL
,
"NR init: pdcch_dmrs malloc failed
\n
"
);
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
pdcch_dmrs
[
slot
]
=
malloc16
(
fp
->
symbols_per_slot
*
sizeof
(
uint32_t
*
));
AssertFatal
(
pdcch_dmrs
[
slot
]
!=
NULL
,
"NR init: pdcch_dmrs for slot %d - malloc failed
\n
"
,
slot
);
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
pdcch_dmrs
[
slot
][
symb
]
=
malloc16
(
pdcch_dmrs_init_length
*
sizeof
(
uint32_t
));
AssertFatal
(
pdcch_dmrs
[
slot
][
symb
]
!=
NULL
,
"NR init: pdcch_dmrs for slot %d symbol %d - malloc failed
\n
"
,
slot
,
symb
);
}
}
// ceil(((NB_RB*6(k)*2(QPSK)/32) // 3 RE *2(QPSK)
int
pdsch_dmrs_init_length
=
((
fp
->
N_RB_DL
*
12
)
>>
5
)
+
1
;
...
...
@@ -425,13 +408,6 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
}
free_and_zero
(
common_vars
->
rxdata
);
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
free_and_zero
(
ue
->
nr_gold_pdcch
[
0
][
slot
][
symb
]);
free_and_zero
(
ue
->
nr_gold_pdcch
[
0
][
slot
]);
}
free_and_zero
(
ue
->
nr_gold_pdcch
[
0
]);
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
for
(
int
q
=
0
;
q
<
NR_NB_NSCID
;
q
++
)
...
...
openair1/PHY/NR_REFSIG/nr_gold.c
View file @
99c8dd42
...
...
@@ -21,28 +21,6 @@
#include "nr_refsig.h"
void
nr_init_pdcch_dmrs
(
PHY_VARS_gNB
*
gNB
,
uint32_t
Nid
)
{
NR_DL_FRAME_PARMS
*
fp
=
&
gNB
->
frame_parms
;
uint32_t
***
pdcch_dmrs
=
gNB
->
nr_gold_pdcch_dmrs
;
int
pdcch_dmrs_init_length
=
(((
fp
->
N_RB_DL
<<
1
)
*
3
)
>>
5
)
+
1
;
for
(
int
slot
=
0
;
slot
<
fp
->
slots_per_frame
;
slot
++
)
{
for
(
int
symb
=
0
;
symb
<
fp
->
symbols_per_slot
;
symb
++
)
{
uint8_t
reset
=
1
;
uint32_t
x1
=
0
;
uint64_t
temp_x2
=
((
1UL
<<
17
)
*
(
fp
->
symbols_per_slot
*
slot
+
symb
+
1
)
*
((
Nid
<<
1
)
+
1
)
+
(
Nid
<<
1
));
uint32_t
x2
=
temp_x2
%
(
1U
<<
31
);
LOG_D
(
PHY
,
"PDCCH DMRS slot %d, symb %d, Nid %d, x2 %x
\n
"
,
slot
,
symb
,
Nid
,
x2
);
for
(
uint32_t
n
=
0
;
n
<
pdcch_dmrs_init_length
;
n
++
)
{
pdcch_dmrs
[
slot
][
symb
][
n
]
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
}
}
}
}
void
nr_init_pdsch_dmrs
(
PHY_VARS_gNB
*
gNB
,
uint8_t
nscid
,
uint32_t
Nid
)
{
NR_DL_FRAME_PARMS
*
fp
=
&
gNB
->
frame_parms
;
...
...
openair1/PHY/NR_REFSIG/nr_gold_ue.c
View file @
99c8dd42
...
...
@@ -22,27 +22,6 @@
#include "refsig_defs_ue.h"
#include "openair1/PHY/LTE_TRANSPORT/transport_proto.h" // for lte_gold_generic()
void
nr_gold_pdcch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
nid
)
{
int
pdcch_dmrs_init_length
=
(((
ue
->
frame_parms
.
N_RB_DL
<<
1
)
*
3
)
>>
5
)
+
1
;
for
(
int
ns
=
0
;
ns
<
ue
->
frame_parms
.
slots_per_frame
;
ns
++
)
{
for
(
int
l
=
0
;
l
<
ue
->
frame_parms
.
symbols_per_slot
;
l
++
)
{
uint8_t
reset
=
1
;
uint64_t
x2tmp0
=
((
ue
->
frame_parms
.
symbols_per_slot
*
ns
+
l
+
1
)
*
((
nid
<<
1
)
+
1
));
x2tmp0
<<=
17
;
x2tmp0
+=
(
nid
<<
1
);
uint32_t
x1
=
0
;
uint32_t
x2
=
x2tmp0
%
(
1U
<<
31
);
//cinit
LOG_D
(
PHY
,
"PDCCH DMRS slot %d, symb %d, Nid %d, x2 %x
\n
"
,
ns
,
l
,
nid
,
x2
);
for
(
int
n
=
0
;
n
<
pdcch_dmrs_init_length
;
n
++
)
{
ue
->
nr_gold_pdcch
[
0
][
ns
][
l
][
n
]
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
}
}
}
}
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
int
nscid
,
uint32_t
nid
)
...
...
openair1/PHY/NR_REFSIG/nr_refsig.h
View file @
99c8dd42
...
...
@@ -39,7 +39,6 @@ void nr_init_prs(PHY_VARS_gNB* gNB);
@param PHY_VARS_gNB* gNB structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
@param Nid is used for the initialization of x2, Physical cell Id by default or upper layer configured pdcch_scrambling_ID
*/
void
nr_init_pdcch_dmrs
(
PHY_VARS_gNB
*
gNB
,
uint32_t
Nid
);
void
nr_init_pdsch_dmrs
(
PHY_VARS_gNB
*
gNB
,
uint8_t
nscid
,
uint32_t
Nid
);
void
nr_init_csi_rs
(
const
NR_DL_FRAME_PARMS
*
fp
,
uint32_t
***
csi_rs
,
uint32_t
Nid
);
...
...
openair1/PHY/NR_REFSIG/nr_refsig_common.h
View file @
99c8dd42
...
...
@@ -26,5 +26,6 @@
uint32_t
*
gold_cache
(
uint32_t
key
,
int
length
);
uint32_t
*
nr_gold_pbch
(
int
Lmax
,
int
Nid
,
int
n_hf
,
int
ssb
);
uint32_t
*
nr_gold_pdcch
(
int
N_RB_DL
,
int
symbols_per_slot
,
unsigned
short
n_idDMRS
,
int
ns
,
int
l
);
#endif
openair1/PHY/NR_REFSIG/refsig.c
View file @
99c8dd42
...
...
@@ -172,3 +172,14 @@ uint32_t *nr_gold_pbch(int Lmax, int Nid, int n_hf, int l)
uint32_t
x2
=
(
1
<<
11
)
*
(
i_ssb2
+
1
)
*
((
Nid
>>
2
)
+
1
)
+
(
1
<<
6
)
*
(
i_ssb2
+
1
)
+
(
Nid
&
3
);
return
gold_cache
(
x2
,
NR_PBCH_DMRS_LENGTH_DWORD
);
}
uint32_t
*
nr_gold_pdcch
(
int
N_RB_DL
,
int
symbols_per_slot
,
unsigned
short
nid
,
int
ns
,
int
l
)
{
int
pdcch_dmrs_init_length
=
(((
N_RB_DL
<<
1
)
*
3
)
>>
5
)
+
1
;
uint64_t
x2tmp0
=
(((
uint64_t
)
symbols_per_slot
*
ns
+
l
+
1
)
*
((
nid
<<
1
)
+
1
));
x2tmp0
<<=
17
;
x2tmp0
+=
(
nid
<<
1
);
uint32_t
x2
=
x2tmp0
%
(
1U
<<
31
);
// cinit
LOG_D
(
PHY
,
"PDCCH DMRS slot %d, symb %d, Nid %d, x2 %x
\n
"
,
ns
,
l
,
nid
,
x2
);
return
gold_cache
(
x2
,
pdcch_dmrs_init_length
);
}
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
View file @
99c8dd42
...
...
@@ -51,9 +51,6 @@ int nr_pdsch_dmrs_rx(const PHY_VARS_NR_UE *ue,
unsigned
short
nb_pdsch_rb
,
uint8_t
config_type
);
void
nr_gold_pdcch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
n_idDMRS
);
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
int
nscid
,
uint32_t
nid
);
...
...
openair1/PHY/NR_TRANSPORT/nr_dci.c
View file @
99c8dd42
...
...
@@ -41,29 +41,13 @@
//#define DEBUG_DCI
//#define DEBUG_CHANNEL_CODING
void
nr_pdcch_scrambling
(
uint32_t
*
in
,
uint32_t
size
,
uint32_t
Nid
,
uint32_t
scrambling_RNTI
,
uint32_t
*
out
)
{
uint8_t
reset
;
uint32_t
x1
=
0
,
x2
=
0
,
s
=
0
;
reset
=
1
;
x2
=
(
scrambling_RNTI
<<
16
)
+
Nid
;
LOG_D
(
NR_PHY_DCI
,
"PDCCH Scrambling x2 %x : scrambling_RNTI %x
\n
"
,
x2
,
scrambling_RNTI
);
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
if
((
i
&
0x1f
)
==
0
)
{
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
if
(
i
)
{
in
++
;
out
++
;
}
}
(
*
out
)
^=
((((
*
in
)
>>
(
i
&
0x1f
))
&
1
)
^
((
s
>>
(
i
&
0x1f
))
&
1
))
<<
(
i
&
0x1f
);
}
static
void
nr_pdcch_scrambling
(
uint32_t
*
in
,
uint32_t
size
,
uint32_t
Nid
,
uint32_t
scrambling_RNTI
,
uint32_t
*
out
)
{
int
roundedSz
=
((
size
+
31
)
/
32
);
uint32_t
*
seq
=
gold_cache
((
scrambling_RNTI
<<
16
)
+
Nid
,
roundedSz
);
LOG_D
(
NR_PHY_DCI
,
"PDCCH scrambling_RNTI %x
\n
"
,
scrambling_RNTI
);
for
(
int
i
=
0
;
i
<
roundedSz
;
i
++
)
out
[
i
]
=
in
[
i
]
^
seq
[
i
];
}
void
nr_generate_dci
(
PHY_VARS_gNB
*
gNB
,
...
...
@@ -95,13 +79,6 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
* in time: by its first slot and its first symbol*/
const
nfapi_nr_dl_dci_pdu_t
*
dci_pdu
=
&
pdcch_pdu_rel15
->
dci_pdu
[
d
];
if
(
dci_pdu
->
ScramblingId
!=
gNB
->
pdcch_gold_init
)
{
gNB
->
pdcch_gold_init
=
dci_pdu
->
ScramblingId
;
nr_init_pdcch_dmrs
(
gNB
,
dci_pdu
->
ScramblingId
);
}
uint32_t
**
gold_pdcch_dmrs
=
gNB
->
nr_gold_pdcch_dmrs
[
slot
];
cset_start_symb
=
pdcch_pdu_rel15
->
StartSymbolIndex
;
cset_nsymb
=
pdcch_pdu_rel15
->
DurationSymbols
;
dci_idx
=
0
;
...
...
@@ -131,9 +108,10 @@ void nr_generate_dci(PHY_VARS_gNB *gNB,
/// DMRS QPSK modulation
for
(
int
symb
=
cset_start_symb
;
symb
<
cset_start_symb
+
pdcch_pdu_rel15
->
DurationSymbols
;
symb
++
)
{
const
uint32_t
*
gold
=
nr_gold_pdcch
(
frame_parms
->
N_RB_DL
,
frame_parms
->
symbols_per_slot
,
dci_pdu
->
ScramblingId
,
slot
,
symb
);
nr_modulation
(
gold
,
dmrs_length
,
DMRS_MOD_ORDER
,
mod_dmrs
[
symb
]);
// Qm = 2 as DMRS is QPSK modulated
nr_modulation
(
gold_pdcch_dmrs
[
symb
],
dmrs_length
,
DMRS_MOD_ORDER
,
mod_dmrs
[
symb
]);
//Qm = 2 as DMRS is QPSK modulated
#ifdef DEBUG_PDCCH_DMRS
if
(
dci_pdu
->
RNTI
!=
0xFFFF
)
{
for
(
int
i
=
0
;
i
<
dmrs_length
>>
1
;
i
++
)
...
...
openair1/PHY/NR_TRANSPORT/nr_dci.h
View file @
99c8dd42
...
...
@@ -32,12 +32,6 @@ void nr_generate_dci_top(processingData_L1tx_t *msgTx,
int16_t
amp
,
NR_DL_FRAME_PARMS
*
frame_parms
);
void
nr_pdcch_scrambling
(
uint32_t
*
in
,
uint32_t
size
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
uint32_t
*
out
);
int16_t
find_nr_pdcch
(
int
frame
,
int
slot
,
PHY_VARS_gNB
*
gNB
,
find_type_t
type
);
void
nr_fill_dci
(
PHY_VARS_gNB
*
gNB
,
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
99c8dd42
...
...
@@ -842,9 +842,7 @@ void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
c16_t
pdcch_dl_ch_estimates
[][
pdcch_est_size
],
c16_t
rxdataF
[][
ue
->
frame_parms
.
samples_per_slot_wCP
])
{
int
Ns
=
proc
->
nr_slot_rx
;
int
gNB_id
=
proc
->
gNB_id
;
int
slot
=
proc
->
nr_slot_rx
;
unsigned
char
aarx
;
unsigned
short
k
;
unsigned
int
pilot_cnt
;
...
...
@@ -868,8 +866,13 @@ void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
unsigned
short
coreset_start_subcarrier
=
first_carrier_offset
+
(
BWPStart
+
coreset_start_rb
)
*
12
;
#ifdef DEBUG_PDCCH
printf
(
"PDCCH Channel Estimation : gNB_id %d ch_offset %d, OFDM size %d, Ncp=%d, Ns=%d, symbol %d
\n
"
,
gNB_id
,
ch_offset
,
ue
->
frame_parms
.
ofdm_symbol_size
,
ue
->
frame_parms
.
Ncp
,
Ns
,
symbol
);
printf
(
"PDCCH Channel Estimation : gNB_id %d ch_offset %d, OFDM size %d, Ncp=%d, slot=%d, symbol %d
\n
"
,
gNB_id
,
ch_offset
,
ue
->
frame_parms
.
ofdm_symbol_size
,
ue
->
frame_parms
.
Ncp
,
slot
,
symbol
);
#endif
#if CH_INTERP
...
...
@@ -879,19 +882,18 @@ void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
#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
);
}
int
dmrs_ref
=
0
;
if
(
coreset
->
CoreSetType
==
NFAPI_NR_CSET_CONFIG_PDCCH_CONFIG
)
dmrs_ref
=
BWPStart
;
// generate pilot
int
pilot
[(
nb_rb_coreset
+
dmrs_ref
)
*
3
]
__attribute__
((
aligned
(
16
)));
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
nr_pdcch_dmrs_rx
(
ue
,
Ns
,
ue
->
nr_gold_pdcch
[
gNB_id
][
Ns
][
symbol
],
(
c16_t
*
)
pilot
,
2000
,
(
nb_rb_coreset
+
dmrs_ref
));
nr_pdcch_dmrs_rx
(
ue
,
slot
,
nr_gold_pdcch
(
ue
->
frame_parms
.
N_RB_DL
,
ue
->
frame_parms
.
symbols_per_slot
,
scrambling_id
,
slot
,
symbol
),
(
c16_t
*
)
pilot
,
2000
,
(
nb_rb_coreset
+
dmrs_ref
));
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
...
...
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
View file @
99c8dd42
...
...
@@ -39,6 +39,7 @@
#include "PHY/sse_intrin.h"
#include "common/utils/nr/nr_common.h"
#include <openair1/PHY/TOOLS/phy_scope_interface.h>
#include "openair1/PHY/NR_REFSIG/nr_refsig_common.h"
#include "assertions.h"
#include "T.h"
...
...
@@ -655,25 +656,13 @@ static void nr_pdcch_unscrambling(c16_t *e_rx,
uint16_t
pdcch_DMRS_scrambling_id
,
int16_t
*
z2
)
{
int
i
;
uint8_t
reset
;
uint32_t
x1
=
0
,
x2
=
0
,
s
=
0
;
uint16_t
n_id
;
//{0,1,...,65535}
uint32_t
rnti
=
(
uint32_t
)
scrambling_RNTI
;
reset
=
1
;
// x1 is set in first call to lte_gold_generic
n_id
=
pdcch_DMRS_scrambling_id
;
x2
=
((
rnti
<<
16
)
+
n_id
)
%
(
1U
<<
31
);
// this is c_init in 38.211 v15.1.0 Section 7.3.2.3
LOG_D
(
NR_PHY_DCI
,
"PDCCH Unscrambling x2 %x : scrambling_RNTI %x
\n
"
,
x2
,
rnti
);
uint16_t
n_id
=
pdcch_DMRS_scrambling_id
;
uint32_t
*
seq
=
gold_cache
(((
rnti
<<
16
)
+
n_id
)
%
(
1U
<<
31
),
length
/
32
);
// this is c_init in 38.211 v15.1.0 Section 7.3.2.3
LOG_D
(
NR_PHY_DCI
,
"PDCCH Unscrambling: scrambling_RNTI %x
\n
"
,
rnti
);
int16_t
*
ptr
=
&
e_rx
[
0
].
r
;
for
(
i
=
0
;
i
<
length
;
i
++
)
{
if
((
i
&
0x1f
)
==
0
)
{
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
}
if
(((
s
>>
(
i
%
32
))
&
1
)
==
1
)
for
(
int
i
=
0
;
i
<
length
;
i
++
)
{
if
(
seq
[
i
/
32
]
&
(
1UL
<<
(
i
%
32
)))
z2
[
i
]
=
-
ptr
[
i
];
else
z2
[
i
]
=
ptr
[
i
];
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
View file @
99c8dd42
...
...
@@ -407,10 +407,6 @@ nr_initial_sync_t nr_initial_sync(UE_nr_rxtx_proc_t *proc,
// the n_frames we got sync
ue
->
init_sync_frame
=
n_frames
-
1
-
res
.
syncRes
.
frame_id
;
// compute the scramblingID_pdcch and the gold pdcch
ue
->
scramblingID_pdcch
=
fp
->
Nid_cell
;
nr_gold_pdcch
(
ue
,
fp
->
Nid_cell
);
// compute the scrambling IDs for PDSCH DMRS
for
(
int
i
=
0
;
i
<
NR_NB_NSCID
;
i
++
)
{
ue
->
scramblingID_dlsch
[
i
]
=
fp
->
Nid_cell
;
...
...
openair1/PHY/defs_gNB.h
View file @
99c8dd42
...
...
@@ -609,9 +609,6 @@ typedef struct PHY_VARS_gNB_s {
/// PBCH interleaver
uint8_t
nr_pbch_interleaver
[
NR_POLAR_PBCH_PAYLOAD_BITS
];
/// PDCCH DMRS sequence
uint32_t
***
nr_gold_pdcch_dmrs
;
/// PDSCH DMRS sequence
uint32_t
****
nr_gold_pdsch_dmrs
;
...
...
@@ -638,7 +635,6 @@ typedef struct PHY_VARS_gNB_s {
/// counter to average prach energh over first 100 prach opportunities
int
prach_energy_counter
;
int
pdcch_gold_init
;
int
pdsch_gold_init
[
2
];
int
pusch_gold_init
[
2
];
...
...
openair1/PHY/defs_nr_UE.h
View file @
99c8dd42
...
...
@@ -417,12 +417,6 @@ typedef struct PHY_VARS_NR_UE_s {
// Scrambling IDs used in PUSCH DMRS
uint16_t
scramblingID_ulsch
[
2
];
/// PDCCH DMRS
uint32_t
***
nr_gold_pdcch
[
NUMBER_OF_CONNECTED_eNB_MAX
];
// Scrambling IDs used in PDCCH DMRS
uint16_t
scramblingID_pdcch
;
/// PUSCH DMRS sequence
uint32_t
****
nr_gold_pusch_dmrs
;
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
99c8dd42
...
...
@@ -840,10 +840,6 @@ int main(int argc, char **argv)
init_nr_ue_transport
(
UE
);
// compute the scramblingID_pdcch and the gold pdcch
UE
->
scramblingID_pdcch
=
frame_parms
->
Nid_cell
;
nr_gold_pdcch
(
UE
,
frame_parms
->
Nid_cell
);
// compute the scrambling IDs for PDSCH DMRS
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
UE
->
scramblingID_dlsch
[
i
]
=
frame_parms
->
Nid_cell
;
...
...
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