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
wangjie
OpenXG-RAN
Commits
bb4cf0df
Commit
bb4cf0df
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
714452ba
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 @
bb4cf0df
...
...
@@ -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 @
bb4cf0df
...
...
@@ -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 @
bb4cf0df
...
...
@@ -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 @
bb4cf0df
...
...
@@ -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 @
bb4cf0df
...
...
@@ -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