Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
Michael Black
OpenXG UE
Commits
7270c9b2
Commit
7270c9b2
authored
Mar 26, 2019
by
Khalid Ahmed
Committed by
Thomas Schlichter
Jun 04, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Data + DMRS RE mapping
parent
f8d1c602
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
121 additions
and
12 deletions
+121
-12
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+9
-1
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
+2
-6
openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.c
openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.c
+13
-2
openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.h
openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.h
+3
-1
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+94
-2
No files found.
openair1/PHY/INIT/nr_init_ue.c
View file @
7270c9b2
...
...
@@ -740,6 +740,14 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
///////////
// default values until overwritten by RRCConnectionReconfiguration
for
(
i
=
0
;
i
<
MAX_NR_OF_UL_ALLOCATIONS
;
i
++
){
ue
->
pusch_config
.
pusch_TimeDomainResourceAllocation
[
i
]
=
(
PUSCH_TimeDomainResourceAllocation_t
*
)
malloc16
(
sizeof
(
PUSCH_TimeDomainResourceAllocation_t
));
ue
->
pusch_config
.
pusch_TimeDomainResourceAllocation
[
i
]
->
mappingType
=
typeA
;
}
//------------- config DMRS parameters--------------//
ue
->
dmrs_UplinkConfig
.
pusch_dmrs_type
=
pusch_dmrs_type1
;
ue
->
dmrs_UplinkConfig
.
pusch_dmrs_AdditionalPosition
=
pusch_dmrs_pos0
;
...
...
@@ -780,7 +788,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
for
(
i
=
0
;
i
<
fp
->
nb_antennas_tx
;
i
++
)
{
common_vars
->
txdata
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_subframe
*
10
*
sizeof
(
int32_t
)
);
common_vars
->
txdataF
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_slot
*
10
*
sizeof
(
int32_t
)
);
common_vars
->
txdataF
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
fp
->
symbols_per_slot
*
fp
->
slots_per_frame
*
sizeof
(
int32_t
)
);
}
// init RX buffers
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.c
View file @
7270c9b2
...
...
@@ -65,10 +65,6 @@ void nr_pdsch_codeword_scrambling(uint8_t *in,
}
static
inline
uint16_t
get_pdsch_dmrs_idx
(
uint8_t
n
,
uint8_t
k_prime
,
uint8_t
delta
,
uint8_t
dmrs_type
)
{
uint16_t
dmrs_idx
=
(
dmrs_type
)
?
(
6
*
n
+
k_prime
+
delta
)
:
((
n
<<
2
)
+
(
k_prime
<<
1
)
+
delta
);
return
dmrs_idx
;
}
uint8_t
nr_generate_pdsch
(
NR_gNB_DLSCH_t
*
dlsch
,
NR_gNB_DCI_ALLOC_t
*
dci_alloc
,
...
...
@@ -176,7 +172,7 @@ for (int l=0; l<rel15->nb_layers; l++)
uint8_t
dmrs_type
=
config
->
pdsch_config
.
dmrs_type
.
value
;
uint8_t
mapping_type
=
config
->
pdsch_config
.
mapping_type
.
value
;
l0
=
get_l0
(
mapping_type
,
2
);
//config->pdsch_config.dmrs_typeA_position.value);
l0
=
get_l0
(
mapping_type
,
2
,
0
);
//config->pdsch_config.dmrs_typeA_position.value);
nr_modulation
(
pdsch_dmrs
[
l0
][
0
],
n_dmrs
,
2
,
mod_dmrs
);
// currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
#ifdef DEBUG_DLSCH
...
...
@@ -220,7 +216,7 @@ ap, Wt[0], Wt[1], Wf[0], Wf[1], delta, l_prime[0], l0, dmrs_symbol);
for
(
int
l
=
rel15
->
start_symbol
;
l
<
rel15
->
start_symbol
+
rel15
->
nb_symbols
;
l
++
)
{
k
=
start_sc
;
for
(
int
i
=
0
;
i
<
rel15
->
n_prb
*
NR_NB_SC_PER_RB
;
i
++
)
{
if
((
l
==
dmrs_symbol
)
&&
(
k
==
((
start_sc
+
get_
pdsch_dmrs
_idx
(
n
,
k_prime
,
delta
,
dmrs_type
))
%
(
frame_parms
->
ofdm_symbol_size
))))
{
if
((
l
==
dmrs_symbol
)
&&
(
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
]
=
(
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
]
=
(
Wt
[
l_prime
[
0
]]
*
Wf
[
k_prime
]
*
amp
*
mod_dmrs
[(
dmrs_idx
<<
1
)
+
1
])
>>
15
;
#ifdef DEBUG_DLSCH_MAPPING
...
...
openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.c
View file @
7270c9b2
...
...
@@ -34,6 +34,7 @@
/*Table 7.4.1.1.2-1 and 7.4.1.1.2-2 38211 Columns: ap - CDM group - Delta - Wf(0) - Wf(1) - Wt(0) - Wt(1)*/
/*Table 6.4.1.1.3-1 is identical to Table 7.4.1.1.2-1 and Table 6.4.1.1.3-2 is identical to Table 7.4.1.1.2-2. UL DMRS can reuse these tables*/
int8_t
pdsch_dmrs_1
[
8
][
7
]
=
{{
0
,
0
,
0
,
1
,
1
,
1
,
1
},
{
1
,
0
,
0
,
1
,
-
1
,
1
,
1
},
{
2
,
1
,
1
,
1
,
1
,
1
,
1
},
...
...
@@ -84,6 +85,16 @@ uint8_t get_delta(uint8_t ap, uint8_t config) {
return
((
config
==
NFAPI_NR_DMRS_TYPE1
)
?
(
pdsch_dmrs_1
[
ap
][
2
])
:
(
pdsch_dmrs_2
[
ap
][
2
]));
}
uint8_t
get_l0
(
uint8_t
mapping_type
,
uint8_t
dmrs_typeA_position
)
{
return
((
mapping_type
==
NFAPI_NR_PDSCH_MAPPING_TYPE_A
)
?
dmrs_typeA_position
:
0
);
uint16_t
get_dmrs_freq_idx
(
uint8_t
n
,
uint8_t
k_prime
,
uint8_t
delta
,
uint8_t
dmrs_type
)
{
uint16_t
dmrs_idx
=
(
dmrs_type
)
?
(
6
*
n
+
k_prime
+
delta
)
:
((
n
<<
2
)
+
(
k_prime
<<
1
)
+
delta
);
return
dmrs_idx
;
}
uint8_t
get_l0
(
uint8_t
mapping_type
,
uint8_t
dmrs_typeA_position
,
int
ul_flag
)
{
if
(
ul_flag
)
return
((
mapping_type
==
NFAPI_NR_PDSCH_MAPPING_TYPE_A
)
?
dmrs_typeA_position
:
0
);
else
return
((
mapping_type
==
typeA
)
?
dmrs_typeA_position
:
0
);
}
openair1/PHY/NR_TRANSPORT/nr_sch_dmrs.h
View file @
7270c9b2
...
...
@@ -45,4 +45,6 @@ void get_Wf(int8_t *Wf, uint8_t ap, uint8_t config);
uint8_t
get_delta
(
uint8_t
ap
,
uint8_t
config
);
uint8_t
get_l0
(
uint8_t
mapping_type
,
uint8_t
dmrs_typeA_position
);
uint16_t
get_dmrs_freq_idx
(
uint8_t
n
,
uint8_t
k_prime
,
uint8_t
delta
,
uint8_t
dmrs_type
);
uint8_t
get_l0
(
uint8_t
mapping_type
,
uint8_t
dmrs_typeA_position
,
int
ul_flag
);
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
7270c9b2
...
...
@@ -130,7 +130,9 @@ int main(int argc, char **argv) {
double
SNR
,
SNR_lin
,
snr0
=
-
2
.
0
,
snr1
=
2
.
0
;
double
snr_step
=
0
.
1
;
uint8_t
snr1set
=
0
;
int
slot
=
0
;
int
**
txdata
;
int32_t
**
txdataF
;
double
**
s_re
,
**
s_im
,
**
r_re
,
**
r_im
;
FILE
*
output_fd
=
NULL
;
//uint8_t write_output_file = 0;
...
...
@@ -155,9 +157,11 @@ int main(int argc, char **argv) {
float
target_error_rate
=
0
.
01
;
uint64_t
SSB_positions
=
0x01
;
uint16_t
nb_symb_sch
=
12
;
int
start_symbol
=
14
-
nb_symb_sch
;
uint16_t
nb_rb
=
50
;
uint8_t
Imcs
=
9
;
int
eNB_id
=
0
;
int
ap
;
cpuf
=
get_cpu_freq_GHz
();
...
...
@@ -434,7 +438,7 @@ int main(int argc, char **argv) {
uint8_t
is_crnti
=
0
,
llr8_flag
=
0
;
unsigned
int
TBS
=
8424
;
unsigned
int
available_bits
;
uint8_t
nb_re_dmrs
=
6
;
uint8_t
nb_re_dmrs
=
UE
->
dmrs_UplinkConfig
.
pusch_maxLength
*
(
UE
->
dmrs_UplinkConfig
.
pusch_dmrs_type
==
pusch_dmrs_type1
)
?
6
:
4
;
uint16_t
length_dmrs
=
1
;
uint8_t
N_PRB_oh
;
uint16_t
N_RE_prime
;
...
...
@@ -443,6 +447,10 @@ int main(int argc, char **argv) {
uint8_t
rvidx
=
0
;
uint8_t
UE_id
=
1
;
uint8_t
cwd
;
uint16_t
start_sc
,
start_rb
;
int8_t
Wf
[
2
],
Wt
[
2
],
l0
,
l_prime
[
2
],
delta
;
uint32_t
***
pusch_dmrs
;
NR_gNB_ULSCH_t
*
ulsch_gNB
=
gNB
->
ulsch
[
UE_id
][
0
];
nfapi_nr_ul_config_ulsch_pdu_rel15_t
*
rel15_ul
=
&
ulsch_gNB
->
harq_processes
[
harq_pid
]
->
ulsch_pdu
.
ulsch_pdu_rel15
;
...
...
@@ -482,6 +490,10 @@ int main(int argc, char **argv) {
uint32_t
scrambling_index
;
int16_t
**
tx_layers
;
int32_t
*
mod_symbols
[
MAX_NUM_NR_RE
];
uint16_t
n_dmrs
;
uint8_t
dmrs_type
;
uint8_t
mapping_type
;
int
amp
;
test_input
=
(
unsigned
char
*
)
malloc16
(
sizeof
(
unsigned
char
)
*
TBS
/
8
);
...
...
@@ -573,16 +585,96 @@ int main(int argc, char **argv) {
}
/////////////////////////DMRS Modulation/////////////////////////
///////////
pusch_dmrs
=
UE
->
nr_gold_pusch_dmrs
[
slot
];
n_dmrs
=
(
nb_rb
*
nb_re_dmrs
);
int16_t
mod_dmrs
[
n_dmrs
<<
1
];
dmrs_type
=
UE
->
dmrs_UplinkConfig
.
pusch_dmrs_type
;
mapping_type
=
UE
->
pusch_config
.
pusch_TimeDomainResourceAllocation
[
0
]
->
mappingType
;
l0
=
get_l0
(
mapping_type
,
2
,
1
);
nr_modulation
(
pusch_dmrs
[
l0
][
0
],
n_dmrs
,
2
,
mod_dmrs
);
// currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated
///////////
////////////////////////////////////////////////////////////////////////
/////////////////////////ULSCH layer mapping/////////////////////////
///////////
tx_layers
=
(
int16_t
**
)
pusch_ue
->
txdataF_layers
;
nr_layer_mapping
((
int16_t
**
)
mod_symbols
,
Nl
,
harq_process_ul_ue
->
Nl
,
available_bits
/
mod_order
,
tx_layers
);
///////////
////////////////////////////////////////////////////////////////////////
/////////////////////////ULSCH RE mapping/////////////////////////
///////////
txdataF
=
UE
->
common_vars
.
txdataF
;
amp
=
AMP
;
start_rb
=
10
;
start_sc
=
frame_parms
->
first_carrier_offset
+
start_rb
*
NR_NB_SC_PER_RB
;
if
(
start_sc
>=
frame_parms
->
ofdm_symbol_size
)
start_sc
-=
frame_parms
->
ofdm_symbol_size
;
for
(
ap
=
0
;
ap
<
harq_process_ul_ue
->
Nl
;
ap
++
)
{
// DMRS params for this ap
get_Wt
(
Wt
,
ap
,
dmrs_type
);
get_Wf
(
Wf
,
ap
,
dmrs_type
);
delta
=
get_delta
(
ap
,
dmrs_type
);
l_prime
[
0
]
=
0
;
// single symbol ap 0
uint8_t
dmrs_symbol
=
l0
+
l_prime
[
0
];
// Assuming dmrs-AdditionalPosition = 0
uint8_t
k_prime
=
0
,
l
;
uint16_t
m
=
0
,
n
=
0
,
dmrs_idx
=
0
,
k
=
0
;
for
(
l
=
start_symbol
;
l
<
start_symbol
+
nb_symb_sch
;
l
++
)
{
k
=
start_sc
;
for
(
i
=
0
;
i
<
nb_rb
*
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
))))
{
((
int16_t
*
)
txdataF
[
ap
])[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
]
=
(
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
]
=
(
Wt
[
l_prime
[
0
]]
*
Wf
[
k_prime
]
*
amp
*
mod_dmrs
[(
dmrs_idx
<<
1
)
+
1
])
>>
15
;
#ifdef DEBUG_PUSCH_MAPPING
printf
(
"dmrs_idx %d
\t
l %d
\t
k %d
\t
k_prime %d
\t
n %d
\t
txdataF: %d %d
\n
"
,
dmrs_idx
,
l
,
k
,
k_prime
,
n
,
((
int16_t
*
)
txdataF
[
ap
])[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
],
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]);
#endif
dmrs_idx
++
;
k_prime
++
;
k_prime
&=
1
;
n
+=
(
k_prime
)
?
0
:
1
;
}
else
{
((
int16_t
*
)
txdataF
[
ap
])[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
]
=
(
amp
*
tx_layers
[
ap
][
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]
=
(
amp
*
tx_layers
[
ap
][(
m
<<
1
)
+
1
])
>>
15
;
#ifdef DEBUG_PUSCH_MAPPING
printf
(
"m %d
\t
l %d
\t
k %d
\t
txdataF: %d %d
\n
"
,
m
,
l
,
k
,
((
int16_t
*
)
txdataF
[
ap
])[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
],
((
int16_t
*
)
txdataF
[
ap
])[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]);
#endif
m
++
;
}
if
(
++
k
>=
frame_parms
->
ofdm_symbol_size
)
k
-=
frame_parms
->
ofdm_symbol_size
;
}
}
}
///////////
////////////////////////////////////////////////////////////////////////
...
...
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