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
常顺宇
OpenXG-RAN
Commits
22cd1885
Commit
22cd1885
authored
Oct 26, 2020
by
Parminder Singh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
DMRS Specific changes from fhg-dl-dmrs branch
parent
54c89ccd
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
97 additions
and
74 deletions
+97
-74
openair1/PHY/NR_REFSIG/dmrs_nr.c
openair1/PHY/NR_REFSIG/dmrs_nr.c
+3
-1
openair1/PHY/NR_REFSIG/nr_gold_ue.c
openair1/PHY/NR_REFSIG/nr_gold_ue.c
+8
-10
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
+1
-3
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+41
-33
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+2
-2
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+20
-5
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+2
-1
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+1
-1
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+19
-18
No files found.
openair1/PHY/NR_REFSIG/dmrs_nr.c
View file @
22cd1885
...
@@ -366,10 +366,12 @@ void generate_dmrs_pbch(uint32_t dmrs_pbch_bitmap[DMRS_PBCH_I_SSB][DMRS_PBCH_N_H
...
@@ -366,10 +366,12 @@ void generate_dmrs_pbch(uint32_t dmrs_pbch_bitmap[DMRS_PBCH_I_SSB][DMRS_PBCH_N_H
int
get_next_dmrs_symbol_in_slot
(
uint16_t
ul_dmrs_symb_pos
,
uint8_t
counter
,
uint8_t
end_symbol
)
int
get_next_dmrs_symbol_in_slot
(
uint16_t
ul_dmrs_symb_pos
,
uint8_t
counter
,
uint8_t
end_symbol
)
{
{
for
(
uint8_t
symbol
=
counter
;
symbol
<
end_symbol
;
symbol
++
)
for
(
uint8_t
symbol
=
counter
;
symbol
<
end_symbol
;
symbol
++
)
if
((
ul_dmrs_symb_pos
>>
symbol
)
&
0x01
)
{
if
((
ul_dmrs_symb_pos
>>
symbol
)
&
0x01
)
{
{
return
symbol
;
return
symbol
;
}
}
}
return
0
;
return
0
;
}
}
...
...
openair1/PHY/NR_REFSIG/nr_gold_ue.c
View file @
22cd1885
...
@@ -107,9 +107,7 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue,
...
@@ -107,9 +107,7 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue,
}
}
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
lbar
,
unsigned
short
*
n_idDMRS
)
unsigned
short
*
n_idDMRS
,
unsigned
short
length_dmrs
)
{
{
unsigned
char
ns
,
l
;
unsigned
char
ns
,
l
;
unsigned
int
n
,
x1
,
x2
,
x2tmp0
;
unsigned
int
n
,
x1
,
x2
,
x2tmp0
;
...
@@ -129,11 +127,11 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,
...
@@ -129,11 +127,11 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,
for
(
ns
=
0
;
ns
<
20
;
ns
++
)
{
for
(
ns
=
0
;
ns
<
20
;
ns
++
)
{
for
(
l
=
0
;
l
<
length_dmrs
;
l
++
)
{
for
(
l
=
0
;
l
<
14
;
l
++
)
{
x2tmp0
=
((
14
*
ns
+
(
lbar
+
l
)
+
1
)
*
((
nid
<<
1
)
+
1
))
<<
17
;
x2tmp0
=
((
14
*
ns
+
l
+
1
)
*
((
nid
<<
1
)
+
1
))
<<
17
;
x2
=
(
x2tmp0
+
(
nid
<<
1
)
+
nscid
)
%
(
1
<<
31
);
//cinit
x2
=
(
x2tmp0
+
(
nid
<<
1
)
+
nscid
)
%
(
1
<<
31
);
//cinit
LOG_D
(
PHY
,
"UE DMRS slot %d, symb %d, lbar %d, x2 %x, nscid %d
\n
"
,
ns
,
l
,
lbar
,
x2
,
nscid
);
LOG_D
(
PHY
,
"UE DMRS slot %d, symb %d, x2 %x, nscid %d
\n
"
,
ns
,
l
,
x2
,
nscid
);
//printf("ns %d gold pdsch x2 %d\n",ns,x2);
//printf("ns %d gold pdsch x2 %d\n",ns,x2);
x1
=
1
+
(
1
<<
31
);
x1
=
1
+
(
1
<<
31
);
...
...
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
View file @
22cd1885
...
@@ -61,9 +61,7 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue,
...
@@ -61,9 +61,7 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue,
unsigned
short
length_dmrs
);
unsigned
short
length_dmrs
);
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
lbar
,
unsigned
short
*
n_idDMRS
);
unsigned
short
*
n_idDMRS
,
unsigned
short
length_dmrs
);
void
nr_init_pusch_dmrs
(
PHY_VARS_NR_UE
*
ue
,
void
nr_init_pusch_dmrs
(
PHY_VARS_NR_UE
*
ue
,
uint16_t
*
N_n_scid
,
uint16_t
*
N_n_scid
,
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
View file @
22cd1885
...
@@ -39,6 +39,8 @@
...
@@ -39,6 +39,8 @@
//#define DEBUG_DLSCH
//#define DEBUG_DLSCH
//#define DEBUG_DLSCH_MAPPING
//#define DEBUG_DLSCH_MAPPING
// forward declarations for mac function to avoid semantic issues
extern
int
get_num_dmrs
(
uint16_t
dmrs_mask
);
void
nr_pdsch_codeword_scrambling
(
uint8_t
*
in
,
void
nr_pdsch_codeword_scrambling
(
uint8_t
*
in
,
uint32_t
size
,
uint32_t
size
,
...
@@ -118,7 +120,6 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
...
@@ -118,7 +120,6 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
int32_t
**
txdataF
=
gNB
->
common_vars
.
txdataF
;
int32_t
**
txdataF
=
gNB
->
common_vars
.
txdataF
;
int16_t
amp
=
AMP
;
int16_t
amp
=
AMP
;
NR_DL_FRAME_PARMS
*
frame_parms
=
&
gNB
->
frame_parms
;
NR_DL_FRAME_PARMS
*
frame_parms
=
&
gNB
->
frame_parms
;
int
xOverhead
=
0
;
time_stats_t
*
dlsch_encoding_stats
=&
gNB
->
dlsch_encoding_stats
;
time_stats_t
*
dlsch_encoding_stats
=&
gNB
->
dlsch_encoding_stats
;
time_stats_t
*
dlsch_scrambling_stats
=&
gNB
->
dlsch_scrambling_stats
;
time_stats_t
*
dlsch_scrambling_stats
=&
gNB
->
dlsch_scrambling_stats
;
time_stats_t
*
dlsch_modulation_stats
=&
gNB
->
dlsch_modulation_stats
;
time_stats_t
*
dlsch_modulation_stats
=&
gNB
->
dlsch_modulation_stats
;
...
@@ -140,7 +141,7 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
...
@@ -140,7 +141,7 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
uint32_t
scrambled_output
[
NR_MAX_NB_CODEWORDS
][
NR_MAX_PDSCH_ENCODED_LENGTH
>>
5
];
uint32_t
scrambled_output
[
NR_MAX_NB_CODEWORDS
][
NR_MAX_PDSCH_ENCODED_LENGTH
>>
5
];
int16_t
**
mod_symbs
=
(
int16_t
**
)
dlsch
->
mod_symbs
;
int16_t
**
mod_symbs
=
(
int16_t
**
)
dlsch
->
mod_symbs
;
int16_t
**
tx_layers
=
(
int16_t
**
)
dlsch
->
txdataF
;
int16_t
**
tx_layers
=
(
int16_t
**
)
dlsch
->
txdataF
;
int8_t
Wf
[
2
],
Wt
[
2
],
l
0
,
l
_prime
[
2
],
delta
;
int8_t
Wf
[
2
],
Wt
[
2
],
l_prime
[
2
],
delta
;
uint8_t
dmrs_Type
=
rel15
->
dmrsConfigType
;
uint8_t
dmrs_Type
=
rel15
->
dmrsConfigType
;
int
nb_re_dmrs
;
int
nb_re_dmrs
;
uint16_t
n_dmrs
;
uint16_t
n_dmrs
;
...
@@ -152,8 +153,12 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
...
@@ -152,8 +153,12 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
nb_re_dmrs
=
4
*
rel15
->
numDmrsCdmGrpsNoData
;
nb_re_dmrs
=
4
*
rel15
->
numDmrsCdmGrpsNoData
;
n_dmrs
=
((
rel15
->
rbSize
+
rel15
->
rbStart
)
*
4
)
<<
1
;
n_dmrs
=
((
rel15
->
rbSize
+
rel15
->
rbStart
)
*
4
)
<<
1
;
}
}
uint16_t
dmrs_symbol_map
=
rel15
->
dlDmrsSymbPos
;
//single DMRS: 010000100 Double DMRS 110001100
uint8_t
dmrs_len
=
get_num_dmrs
(
rel15
->
dlDmrsSymbPos
);
uint16_t
nb_re
;
uint16_t
nb_re
;
nb_re
=
((
12
*
rel15
->
NrOfSymbols
)
-
nb_re_dmrs
-
xOverhead
)
*
rel15
->
rbSize
*
rel15
->
NrOfCodewords
;
nb_re
=
((
12
*
rel15
->
NrOfSymbols
)
-
nb_re_dmrs
-
dmrs_len
)
*
rel15
->
rbSize
*
rel15
->
NrOfCodewords
;
uint8_t
Qm
=
rel15
->
qamModOrder
[
0
];
uint8_t
Qm
=
rel15
->
qamModOrder
[
0
];
uint32_t
encoded_length
=
nb_re
*
Qm
;
uint32_t
encoded_length
=
nb_re
*
Qm
;
int16_t
mod_dmrs
[
n_dmrs
<<
1
]
__attribute__
((
aligned
(
16
)));
int16_t
mod_dmrs
[
n_dmrs
<<
1
]
__attribute__
((
aligned
(
16
)));
...
@@ -249,22 +254,6 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
...
@@ -249,22 +254,6 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
/// Antenna port mapping
/// Antenna port mapping
//to be moved to init phase potentially, for now tx_layers 1-8 are mapped on antenna ports 1000-1007
//to be moved to init phase potentially, for now tx_layers 1-8 are mapped on antenna ports 1000-1007
/// DMRS QPSK modulation
l0
=
get_l0
(
rel15
->
dlDmrsSymbPos
);
nr_modulation
(
pdsch_dmrs
[
l0
][
0
],
n_dmrs
,
DMRS_MOD_ORDER
,
mod_dmrs
);
// currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
#ifdef DEBUG_DLSCH
printf
(
"DMRS modulation (single symbol %d, %d symbols, type %d):
\n
"
,
l0
,
n_dmrs
>>
1
,
dmrs_Type
);
for
(
int
i
=
0
;
i
<
n_dmrs
>>
4
;
i
++
)
{
for
(
int
j
=
0
;
j
<
8
;
j
++
)
{
printf
(
"%d %d
\t
"
,
mod_dmrs
[((
i
<<
3
)
+
j
)
<<
1
],
mod_dmrs
[(((
i
<<
3
)
+
j
)
<<
1
)
+
1
]);
}
printf
(
"
\n
"
);
}
#endif
/// Resource mapping
/// Resource mapping
...
@@ -284,24 +273,43 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
...
@@ -284,24 +273,43 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
get_Wf
(
Wf
,
ap
,
dmrs_Type
);
get_Wf
(
Wf
,
ap
,
dmrs_Type
);
delta
=
get_delta
(
ap
,
dmrs_Type
);
delta
=
get_delta
(
ap
,
dmrs_Type
);
l_prime
[
0
]
=
0
;
// single symbol ap 0
l_prime
[
0
]
=
0
;
// single symbol ap 0
uint8_t
dmrs_symbol
=
l0
+
l_prime
[
0
];
#ifdef DEBUG_DLSCH_MAPPING
#ifdef DEBUG_DLSCH_MAPPING
printf
(
"DMRS Type %d params for ap %d: Wt %d %d
\t
Wf %d %d
\t
delta %d
\t
l_prime %d
\t
l0 %d
\t
DMRS symbol %d
\n
"
,
printf
(
"DMRS Type %d params for ap %d: Wt %d %d
\t
Wf %d %d
\t
delta %d
\t
l_prime %d
\t
\t
DMRS symbol map 0x%x
\n
"
,
1
+
dmrs_Type
,
ap
,
Wt
[
0
],
Wt
[
1
],
Wf
[
0
],
Wf
[
1
],
delta
,
l_prime
[
0
],
l0
,
dmrs_symbol
);
1
+
dmrs_Type
,
ap
,
Wt
[
0
],
Wt
[
1
],
Wf
[
0
],
Wf
[
1
],
delta
,
l_prime
[
0
],
dmrs_symbol_map
);
#endif
#endif
uint8_t
k_prime
=
0
;
uint16_t
m
=
0
,
n
=
0
,
dmrs_idx
=
0
,
k
=
0
;
uint16_t
m
=
0
,
dmrs_idx
=
0
,
k
=
0
;
int
txdataF_offset
=
(
slot
%
2
)
*
frame_parms
->
samples_per_slot_wCP
;
int
txdataF_offset
=
(
slot
%
2
)
*
frame_parms
->
samples_per_slot_wCP
;
// Loop Over OFDM symbols:
for
(
int
l
=
rel15
->
StartSymbolIndex
;
l
<
rel15
->
StartSymbolIndex
+
rel15
->
NrOfSymbols
;
l
++
)
{
/// DMRS QPSK modulation
uint8_t
k_prime
=
0
;
uint16_t
n
=
0
;
if
((
dmrs_symbol_map
&
(
1
<<
l
))){
//DMRS time occasion
if
(
dmrs_Type
==
NFAPI_NR_DMRS_TYPE1
)
// another if condition to be included to check pdsch config type (reference of k)
if
(
dmrs_Type
==
NFAPI_NR_DMRS_TYPE1
)
// another if condition to be included to check pdsch config type (reference of k)
dmrs_idx
=
rel15
->
rbStart
*
6
;
dmrs_idx
=
rel15
->
rbStart
*
6
;
else
else
dmrs_idx
=
rel15
->
rbStart
*
4
;
dmrs_idx
=
rel15
->
rbStart
*
4
;
nr_modulation
(
pdsch_dmrs
[
l
][
0
],
n_dmrs
,
DMRS_MOD_ORDER
,
mod_dmrs
);
// currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
}
#ifdef DEBUG_DLSCH
printf
(
"DMRS modulation (symbol %d, %d symbols, type %d):
\n
"
,
l
,
n_dmrs
>>
1
,
dmrs_Type
);
for
(
int
i
=
0
;
i
<
n_dmrs
>>
4
;
i
++
)
{
for
(
int
j
=
0
;
j
<
8
;
j
++
)
{
printf
(
"%d %d
\t
"
,
mod_dmrs
[((
i
<<
3
)
+
j
)
<<
1
],
mod_dmrs
[(((
i
<<
3
)
+
j
)
<<
1
)
+
1
]);
}
printf
(
"
\n
"
);
}
#endif
//FixMe l_prime should be updated here in the case of double DMRS config
for
(
int
l
=
rel15
->
StartSymbolIndex
;
l
<
rel15
->
StartSymbolIndex
+
rel15
->
NrOfSymbols
;
l
++
)
{
k
=
start_sc
;
k
=
start_sc
;
// Loop Over SCs:
for
(
int
i
=
0
;
i
<
rel15
->
rbSize
*
NR_NB_SC_PER_RB
;
i
++
)
{
for
(
int
i
=
0
;
i
<
rel15
->
rbSize
*
NR_NB_SC_PER_RB
;
i
++
)
{
if
(
(
l
==
dmrs_symbol
)
&&
(
k
==
((
start_sc
+
get_dmrs_freq_idx
(
n
,
k_prime
,
delta
,
dmrs_Type
))
%
(
frame_parms
->
ofdm_symbol_size
))))
{
if
(
(
dmrs_symbol_map
&
(
1
<<
l
)
)
&&
(
k
==
((
start_sc
+
get_dmrs_freq_idx
(
n
,
k_prime
,
delta
,
dmrs_Type
))
%
(
frame_parms
->
ofdm_symbol_size
))))
{
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
txdataF_offset
)]
=
(
Wt
[
l_prime
[
0
]]
*
Wf
[
k_prime
]
*
amp
*
mod_dmrs
[
dmrs_idx
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
txdataF_offset
)]
=
(
Wt
[
l_prime
[
0
]]
*
Wf
[
k_prime
]
*
amp
*
mod_dmrs
[
dmrs_idx
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
txdataF_offset
)]
=
(
Wt
[
l_prime
[
0
]]
*
Wf
[
k_prime
]
*
amp
*
mod_dmrs
[(
dmrs_idx
<<
1
)
+
1
])
>>
15
;
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
txdataF_offset
)]
=
(
Wt
[
l_prime
[
0
]]
*
Wf
[
k_prime
]
*
amp
*
mod_dmrs
[(
dmrs_idx
<<
1
)
+
1
])
>>
15
;
#ifdef DEBUG_DLSCH_MAPPING
#ifdef DEBUG_DLSCH_MAPPING
...
@@ -316,7 +324,7 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
...
@@ -316,7 +324,7 @@ uint8_t nr_generate_pdsch(PHY_VARS_gNB *gNB,
}
}
else
{
else
{
if
(
(
l
!=
dmrs_symbol
)
||
allowed_xlsch_re_in_dmrs_symbol
(
k
,
start_sc
,
rel15
->
numDmrsCdmGrpsNoData
,
dmrs_Type
))
{
if
(
(
!
(
dmrs_symbol_map
&
(
1
<<
l
))
)
||
allowed_xlsch_re_in_dmrs_symbol
(
k
,
start_sc
,
rel15
->
numDmrsCdmGrpsNoData
,
dmrs_Type
))
{
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
txdataF_offset
)]
=
(
amp
*
tx_layers
[
ap
][
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
(
2
*
txdataF_offset
)]
=
(
amp
*
tx_layers
[
ap
][
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
txdataF_offset
)]
=
(
amp
*
tx_layers
[
ap
][(
m
<<
1
)
+
1
])
>>
15
;
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
+
(
2
*
txdataF_offset
)]
=
(
amp
*
tx_layers
[
ap
][(
m
<<
1
)
+
1
])
>>
15
;
#ifdef DEBUG_DLSCH_MAPPING
#ifdef DEBUG_DLSCH_MAPPING
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
22cd1885
...
@@ -665,7 +665,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -665,7 +665,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
nushift
=
(
p
>>
1
)
&
1
;
nushift
=
(
p
>>
1
)
&
1
;
ue
->
frame_parms
.
nushift
=
nushift
;
ue
->
frame_parms
.
nushift
=
nushift
;
if
(
ue
->
high_speed_flag
==
0
)
// use second channel estimate position for temporary storage
if
(
ue
->
high_speed_flag
==
0
)
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
;
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
;
else
else
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
symbol
;
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
symbol
;
...
@@ -717,7 +717,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -717,7 +717,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
// generate pilot
// generate pilot
uint16_t
rb_offset
=
(
bwp_start_subcarrier
-
ue
->
frame_parms
.
first_carrier_offset
)
/
12
;
uint16_t
rb_offset
=
(
bwp_start_subcarrier
-
ue
->
frame_parms
.
first_carrier_offset
)
/
12
;
int
config_type
=
0
;
// needs to be updated from higher layer
int
config_type
=
0
;
// needs to be updated from higher layer
nr_pdsch_dmrs_rx
(
ue
,
Ns
,
ue
->
nr_gold_pdsch
[
eNB_offset
][
Ns
][
0
],
&
pilot
[
0
],
1000
,
0
,
nb_rb_pdsch
+
rb_offset
);
nr_pdsch_dmrs_rx
(
ue
,
Ns
,
ue
->
nr_gold_pdsch
[
eNB_offset
][
Ns
][
symbol
],
&
pilot
[
0
],
1000
,
0
,
nb_rb_pdsch
+
rb_offset
);
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
22cd1885
...
@@ -377,7 +377,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
...
@@ -377,7 +377,8 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
nb_rb_pdsch
,
nb_rb_pdsch
,
nr_tti_rx
,
nr_tti_rx
,
ue
->
high_speed_flag
,
ue
->
high_speed_flag
,
frame_parms
);
frame_parms
,
dlsch0_harq
->
dlDmrsSymbPos
);
}
/*else if(beamforming_mode>7) {
}
/*else if(beamforming_mode>7) {
LOG_W(PHY,"dlsch_demodulation: beamforming mode not supported yet.\n");
LOG_W(PHY,"dlsch_demodulation: beamforming mode not supported yet.\n");
...
@@ -2355,7 +2356,8 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
...
@@ -2355,7 +2356,8 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
unsigned
short
nb_rb_pdsch
,
unsigned
short
nb_rb_pdsch
,
unsigned
char
nr_tti_rx
,
unsigned
char
nr_tti_rx
,
uint32_t
high_speed_flag
,
uint32_t
high_speed_flag
,
NR_DL_FRAME_PARMS
*
frame_parms
)
{
NR_DL_FRAME_PARMS
*
frame_parms
,
uint16_t
dlDmrsSymbPos
)
{
...
@@ -2363,7 +2365,9 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
...
@@ -2363,7 +2365,9 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
unsigned
char
i
,
aarx
;
//,nsymb,sss_symb,pss_symb=0,l;
unsigned
char
i
,
aarx
;
//,nsymb,sss_symb,pss_symb=0,l;
int
*
dl_ch0
,
*
dl_ch0_ext
,
*
rxF
,
*
rxF_ext
;
int
*
dl_ch0
,
*
dl_ch0_ext
,
*
rxF
,
*
rxF_ext
;
uint8_t
ClosestDMRSIdx
=
15
;
//closest DMRS index to the current OFDM symbol
uint8_t
ClosestDMRSdist
=
15
;
//temporarily save the distance to the closest DMRS symbol
int8_t
DMRSdist
=
15
;
//temporarily save the distance to the DMRS symbol
unsigned
char
j
=
0
;
unsigned
char
j
=
0
;
...
@@ -2374,8 +2378,19 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
...
@@ -2374,8 +2378,19 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
k
=
frame_parms
->
first_carrier_offset
+
NR_NB_SC_PER_RB
*
start_rb
;
k
=
frame_parms
->
first_carrier_offset
+
NR_NB_SC_PER_RB
*
start_rb
;
if
(
high_speed_flag
==
1
)
if
(
high_speed_flag
==
1
)
{
dl_ch0
=
&
dl_ch_estimates
[
aarx
][(
2
*
(
frame_parms
->
ofdm_symbol_size
))];
for
(
int
i
=
0
;
i
<
16
;
i
++
)
{
//loop over all possible DMRS symbols
if
(
(
1
<<
i
&
dlDmrsSymbPos
)
>
0
)
{
DMRSdist
=
symbol
-
i
;
DMRSdist
=
DMRSdist
>=
0
?
DMRSdist
:
-
DMRSdist
;
if
(
DMRSdist
<
ClosestDMRSdist
)
{
ClosestDMRSIdx
=
i
;
ClosestDMRSdist
=
DMRSdist
;
}
}
}
dl_ch0
=
&
dl_ch_estimates
[
aarx
][(
ClosestDMRSIdx
*
(
frame_parms
->
ofdm_symbol_size
))];
//use closest DMRS
}
else
else
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
0
];
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
0
];
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
22cd1885
...
@@ -719,7 +719,8 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
...
@@ -719,7 +719,8 @@ unsigned short nr_dlsch_extract_rbs_single(int **rxdataF,
unsigned
short
nb_pdsch_rb
,
unsigned
short
nb_pdsch_rb
,
unsigned
char
nr_tti_rx
,
unsigned
char
nr_tti_rx
,
uint32_t
high_speed_flag
,
uint32_t
high_speed_flag
,
NR_DL_FRAME_PARMS
*
frame_parms
);
NR_DL_FRAME_PARMS
*
frame_parms
,
uint16_t
dlDmrsSymbPos
);
/** \fn dlsch_extract_rbs_dual(int32_t **rxdataF,
/** \fn dlsch_extract_rbs_dual(int32_t **rxdataF,
int32_t **dl_ch_estimates,
int32_t **dl_ch_estimates,
...
...
openair1/PHY/defs_nr_UE.h
View file @
22cd1885
...
@@ -892,7 +892,7 @@ typedef struct {
...
@@ -892,7 +892,7 @@ typedef struct {
uint32_t
nr_gold_pbch
[
2
][
64
][
NR_PBCH_DMRS_LENGTH_DWORD
];
uint32_t
nr_gold_pbch
[
2
][
64
][
NR_PBCH_DMRS_LENGTH_DWORD
];
/// PDSCH DMRS
/// PDSCH DMRS
uint32_t
nr_gold_pdsch
[
2
][
20
][
2
][
NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD
];
uint32_t
nr_gold_pdsch
[
2
][
20
][
14
][
NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD
];
/// PDCCH DMRS
/// PDCCH DMRS
uint32_t
nr_gold_pdcch
[
7
][
20
][
3
][
52
];
uint32_t
nr_gold_pdcch
[
7
][
20
][
3
][
52
];
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
22cd1885
...
@@ -724,7 +724,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB_
...
@@ -724,7 +724,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB_
LOG_D
(
PHY
,
"[UE %d] PDSCH type %d active in nr_tti_rx %d, harq_pid %d (%d), rb_start %d, nb_rb %d, symbol_start %d, nb_symbols %d, DMRS mask %x
\n
"
,
ue
->
Mod_id
,
pdsch
,
nr_tti_rx
,
harq_pid
,
dlsch0
->
harq_processes
[
harq_pid
]
->
status
,
pdsch_start_rb
,
pdsch_nb_rb
,
s0
,
s1
,
dlsch0
->
harq_processes
[
harq_pid
]
->
dlDmrsSymbPos
);
LOG_D
(
PHY
,
"[UE %d] PDSCH type %d active in nr_tti_rx %d, harq_pid %d (%d), rb_start %d, nb_rb %d, symbol_start %d, nb_symbols %d, DMRS mask %x
\n
"
,
ue
->
Mod_id
,
pdsch
,
nr_tti_rx
,
harq_pid
,
dlsch0
->
harq_processes
[
harq_pid
]
->
status
,
pdsch_start_rb
,
pdsch_nb_rb
,
s0
,
s1
,
dlsch0
->
harq_processes
[
harq_pid
]
->
dlDmrsSymbPos
);
// do channel estimation for first DMRS only
// do channel estimation for first DMRS only
for
(
m
=
s0
;
m
<
3
;
m
++
)
{
for
(
m
=
s0
;
m
<
(
s0
+
s1
)
;
m
++
)
{
if
(((
1
<<
m
)
&
dlsch0
->
harq_processes
[
harq_pid
]
->
dlDmrsSymbPos
)
>
0
)
{
if
(((
1
<<
m
)
&
dlsch0
->
harq_processes
[
harq_pid
]
->
dlDmrsSymbPos
)
>
0
)
{
nr_pdsch_channel_estimation
(
ue
,
nr_pdsch_channel_estimation
(
ue
,
0
/*eNB_id*/
,
0
/*eNB_id*/
,
...
@@ -734,6 +734,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB_
...
@@ -734,6 +734,7 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB_
ue
->
frame_parms
.
first_carrier_offset
+
(
BWPStart
+
pdsch_start_rb
)
*
12
,
ue
->
frame_parms
.
first_carrier_offset
+
(
BWPStart
+
pdsch_start_rb
)
*
12
,
pdsch_nb_rb
);
pdsch_nb_rb
);
LOG_D
(
PHY
,
"Channel Estimation in symbol %d
\n
"
,
m
);
LOG_D
(
PHY
,
"Channel Estimation in symbol %d
\n
"
,
m
);
if
(
ue
->
high_speed_flag
==
0
)
//for slow speed case only estimate the channel once per slot
break
;
break
;
}
}
}
}
...
@@ -902,7 +903,7 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -902,7 +903,7 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
uint8_t
is_cw0_active
=
0
;
uint8_t
is_cw0_active
=
0
;
uint8_t
is_cw1_active
=
0
;
uint8_t
is_cw1_active
=
0
;
uint8_t
dmrs_type
,
nb_re_dmrs
;
uint8_t
dmrs_type
,
nb_re_dmrs
;
uint16_t
length_dmrs
=
1
;
uint16_t
dmrs_len
=
get_num_dmrs
(
dlsch0
->
harq_processes
[
dlsch0
->
current_harq_pid
]
->
dlDmrsSymbPos
);
uint16_t
nb_symb_sch
=
9
;
uint16_t
nb_symb_sch
=
9
;
nr_downlink_indication_t
dl_indication
;
nr_downlink_indication_t
dl_indication
;
fapi_nr_rx_indication_t
rx_ind
;
fapi_nr_rx_indication_t
rx_ind
;
...
@@ -991,7 +992,7 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -991,7 +992,7 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
dlsch0
->
harq_processes
[
harq_pid
]
->
G
=
nr_get_G
(
dlsch0
->
harq_processes
[
harq_pid
]
->
nb_rb
,
dlsch0
->
harq_processes
[
harq_pid
]
->
G
=
nr_get_G
(
dlsch0
->
harq_processes
[
harq_pid
]
->
nb_rb
,
nb_symb_sch
,
nb_symb_sch
,
nb_re_dmrs
,
nb_re_dmrs
,
length_dmrs
,
dmrs_len
,
dlsch0
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch0
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch0
->
harq_processes
[
harq_pid
]
->
Nl
);
dlsch0
->
harq_processes
[
harq_pid
]
->
Nl
);
#if UE_TIMING_TRACE
#if UE_TIMING_TRACE
...
@@ -1075,7 +1076,7 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
...
@@ -1075,7 +1076,7 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
dlsch1
->
harq_processes
[
harq_pid
]
->
G
=
nr_get_G
(
dlsch1
->
harq_processes
[
harq_pid
]
->
nb_rb
,
dlsch1
->
harq_processes
[
harq_pid
]
->
G
=
nr_get_G
(
dlsch1
->
harq_processes
[
harq_pid
]
->
nb_rb
,
nb_symb_sch
,
nb_symb_sch
,
nb_re_dmrs
,
nb_re_dmrs
,
length_dmrs
,
dmrs_len
,
dlsch1
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch1
->
harq_processes
[
harq_pid
]
->
Qm
,
dlsch1
->
harq_processes
[
harq_pid
]
->
Nl
);
dlsch1
->
harq_processes
[
harq_pid
]
->
Nl
);
#if UE_TIMING_TRACE
#if UE_TIMING_TRACE
...
@@ -1764,7 +1765,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
...
@@ -1764,7 +1765,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue,
for
(
int
i
=
0
;
i
<
4
;
i
++
)
if
(((
1
<<
i
)
&
dlsch0_harq
->
dlDmrsSymbPos
)
>
0
)
{
symb_dmrs
=
i
;
break
;}
for
(
int
i
=
0
;
i
<
4
;
i
++
)
if
(((
1
<<
i
)
&
dlsch0_harq
->
dlDmrsSymbPos
)
>
0
)
{
symb_dmrs
=
i
;
break
;}
AssertFatal
(
symb_dmrs
>=
0
,
"no dmrs in 0..3
\n
"
);
AssertFatal
(
symb_dmrs
>=
0
,
"no dmrs in 0..3
\n
"
);
LOG_D
(
PHY
,
"Initializing dmrs for symb %d DMRS mask %x
\n
"
,
symb_dmrs
,
dlsch0_harq
->
dlDmrsSymbPos
);
LOG_D
(
PHY
,
"Initializing dmrs for symb %d DMRS mask %x
\n
"
,
symb_dmrs
,
dlsch0_harq
->
dlDmrsSymbPos
);
nr_gold_pdsch
(
ue
,
symb_dmrs
,
0
,
1
);
nr_gold_pdsch
(
ue
,
0
);
for
(
uint16_t
m
=
start_symb_sch
;
m
<
(
nb_symb_sch
+
start_symb_sch
)
;
m
++
){
for
(
uint16_t
m
=
start_symb_sch
;
m
<
(
nb_symb_sch
+
start_symb_sch
)
;
m
++
){
nr_slot_fep
(
ue
,
nr_slot_fep
(
ue
,
...
...
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