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
ZhouShuya
OpenXG-RAN
Commits
830bf079
Commit
830bf079
authored
Feb 26, 2019
by
Khalid Ahmed
Committed by
Thomas Schlichter
Jun 04, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pusch scrambling
parent
ac1682f9
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
117 additions
and
11 deletions
+117
-11
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-0
openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h
openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h
+3
-0
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+7
-4
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch.c
+66
-0
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
+1
-1
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+1
-1
openair1/SIMULATION/NR_PHY/ulschsim.c
openair1/SIMULATION/NR_PHY/ulschsim.c
+37
-4
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+1
-1
No files found.
cmake_targets/CMakeLists.txt
View file @
830bf079
...
@@ -1322,6 +1322,7 @@ set(PHY_SRC_UE
...
@@ -1322,6 +1322,7 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/dci_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/dci_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/dci_tools_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/dci_tools_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/pucch_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/pucch_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_UE_TRANSPORT/nr_ulsch.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/ul_ref_seq_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/ul_ref_seq_nr.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/nr_dmrs_rx.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/nr_dmrs_rx.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/nr_gold_ue.c
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/nr_gold_ue.c
...
...
openair1/PHY/NR_TRANSPORT/nr_transport_common_proto.h
View file @
830bf079
...
@@ -43,6 +43,9 @@
...
@@ -43,6 +43,9 @@
#define MAX_NUM_NR_CHANNEL_BITS (14*273*12*6) // 14 symbols, 273 RB
#define MAX_NUM_NR_CHANNEL_BITS (14*273*12*6) // 14 symbols, 273 RB
#define MAX_NUM_NR_RE (14*273*12)
#define MAX_NUM_NR_RE (14*273*12)
#define NR_PUSCH_x 2 // UCI placeholder bit TS 38.212 V15.4.0 subclause 5.3.3.1
#define NR_PUSCH_y 3 // UCI placeholder bit
// Functions below implement minor procedures from 38-214
// Functions below implement minor procedures from 38-214
/** \brief Computes Q based on I_MCS PDSCH and when 'MCS-Table-PDSCH' is set to "256QAM". Implements Table 5.1.3.1-2 from 38.214.
/** \brief Computes Q based on I_MCS PDSCH and when 'MCS-Table-PDSCH' is set to "256QAM". Implements Table 5.1.3.1-2 from 38.214.
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
View file @
830bf079
...
@@ -152,11 +152,12 @@ typedef struct {
...
@@ -152,11 +152,12 @@ typedef struct {
// int calibration_flag;
// int calibration_flag;
/// Number of soft channel bits
/// Number of soft channel bits
uint32_t
G
;
uint32_t
G
;
// number of symbols
// Number of modulated symbols carrying data
uint8_t
nb_symbols
;
uint8_t
num_of_mod_symbols
;
// first symbol in the slot
// This is "L" in TS 38.214 V15.4.0 subclause 6.1.2.1
uint8_t
number_of_symbols
;
// This is "S" in TS 38.214 V15.4.0 subclause 6.1.2.1
uint8_t
start_symbol
;
uint8_t
start_symbol
;
// decode phich
// decode phich
uint8_t
decode_phich
;
uint8_t
decode_phich
;
}
NR_UL_UE_HARQ_t
;
}
NR_UL_UE_HARQ_t
;
...
@@ -166,6 +167,8 @@ typedef struct {
...
@@ -166,6 +167,8 @@ typedef struct {
uint8_t
Nsymb_pusch
;
uint8_t
Nsymb_pusch
;
/// number of DMRS resource elements
/// number of DMRS resource elements
uint8_t
nb_re_dmrs
;
uint8_t
nb_re_dmrs
;
/// DMRS length
uint8_t
length_dmrs
;
/// SRS active flag
/// SRS active flag
uint8_t
srs_active
;
uint8_t
srs_active
;
//#if defined(UPGRADE_RAT_NR)
//#if defined(UPGRADE_RAT_NR)
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch.c
0 → 100644
View file @
830bf079
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*! \file PHY/NR_UE_TRANSPORT/nr_ulsch.c
* \brief Top-level routines for transmission of the PUSCH TS 38.211 v 15.4.0
* \author Khalid Ahmed
* \date 2019
* \version 0.1
* \company Fraunhofer IIS
* \email: khalid.ahmed@iis.fraunhofer.de
* \note
* \warning
*/
#include <stdint.h>
#include "PHY/NR_TRANSPORT/nr_transport_common_proto.h"
void
nr_pusch_codeword_scrambling
(
uint8_t
*
in
,
uint16_t
size
,
uint32_t
Nid
,
uint32_t
n_RNTI
,
uint32_t
*
out
)
{
uint8_t
reset
,
b_idx
;
uint32_t
x1
,
x2
,
s
=
0
;
reset
=
1
;
x2
=
(
n_RNTI
<<
15
)
+
Nid
;
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
b_idx
=
i
&
0x1f
;
if
(
b_idx
==
0
)
{
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
reset
);
reset
=
0
;
if
(
i
)
out
++
;
}
if
(
in
[
i
]
==
NR_PUSCH_x
)
*
out
^=
1
<<
b_idx
;
else
if
(
in
[
i
]
==
NR_PUSCH_y
)
*
out
^=
(
*
out
&
(
1
<<
b_idx
-
1
))
<<
b_idx
;
else
*
out
^=
(((
in
[
i
])
&
1
)
^
((
s
>>
b_idx
)
&
1
))
<<
b_idx
;
//printf("i %d b_idx %d in %d s 0x%08x out 0x%08x\n", i, b_idx, in[i], s, *out);
}
}
\ No newline at end of file
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
View file @
830bf079
...
@@ -224,7 +224,7 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch,
...
@@ -224,7 +224,7 @@ int nr_ulsch_encoding(NR_UE_ULSCH_t *ulsch,
crc
=
1
;
crc
=
1
;
harq_process
=
ulsch
->
harq_processes
[
harq_pid
];
harq_process
=
ulsch
->
harq_processes
[
harq_pid
];
nb_rb
=
harq_process
->
nb_rb
;
nb_rb
=
harq_process
->
nb_rb
;
nb_symb_sch
=
harq_process
->
n
b
_symbols
;
nb_symb_sch
=
harq_process
->
n
umber_of
_symbols
;
A
=
harq_process
->
TBS
;
A
=
harq_process
->
TBS
;
pz
=
&
Z
;
pz
=
&
Z
;
mod_order
=
nr_get_Qm
(
harq_process
->
mcs
,
1
);
mod_order
=
nr_get_Qm
(
harq_process
->
mcs
,
1
);
...
...
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
View file @
830bf079
...
@@ -142,7 +142,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
...
@@ -142,7 +142,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){
uint8_t
current_harq_pid
=
pusch_config_pdu
->
harq_process_nbr
;
uint8_t
current_harq_pid
=
pusch_config_pdu
->
harq_process_nbr
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
nb_rb
=
pusch_config_pdu
->
number_rbs
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
nb_rb
=
pusch_config_pdu
->
number_rbs
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
first_rb
=
pusch_config_pdu
->
start_rb
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
first_rb
=
pusch_config_pdu
->
start_rb
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
n
b
_symbols
=
pusch_config_pdu
->
number_symbols
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
n
umber_of
_symbols
=
pusch_config_pdu
->
number_symbols
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
start_symbol
=
pusch_config_pdu
->
start_symbol
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
start_symbol
=
pusch_config_pdu
->
start_symbol
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
mcs
=
pusch_config_pdu
->
mcs
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
mcs
=
pusch_config_pdu
->
mcs
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
DCINdi
=
pusch_config_pdu
->
ndi
;
ulsch0
->
harq_processes
[
current_harq_pid
]
->
DCINdi
=
pusch_config_pdu
->
ndi
;
...
...
openair1/SIMULATION/NR_PHY/ulschsim.c
View file @
830bf079
...
@@ -138,7 +138,7 @@ int main(int argc, char **argv) {
...
@@ -138,7 +138,7 @@ int main(int argc, char **argv) {
// int subframe_offset;
// int subframe_offset;
// char fname[40], vname[40];
// char fname[40], vname[40];
int
trial
,
n_trials
=
1
,
n_errors
=
0
,
n_false_positive
=
0
;
int
trial
,
n_trials
=
1
,
n_errors
=
0
,
n_false_positive
=
0
;
uint8_t
n_tx
=
1
,
n_rx
=
1
;
uint8_t
n_tx
=
1
,
n_rx
=
1
,
nb_codewords
=
1
;
//uint8_t transmission_mode = 1;
//uint8_t transmission_mode = 1;
uint16_t
Nid_cell
=
0
;
uint16_t
Nid_cell
=
0
;
channel_desc_t
*
gNB2UE
;
channel_desc_t
*
gNB2UE
;
...
@@ -475,6 +475,8 @@ int main(int argc, char **argv) {
...
@@ -475,6 +475,8 @@ int main(int argc, char **argv) {
unsigned
int
available_bits
;
unsigned
int
available_bits
;
uint8_t
nb_re_dmrs
=
6
;
uint8_t
nb_re_dmrs
=
6
;
uint16_t
length_dmrs
=
1
;
uint16_t
length_dmrs
=
1
;
uint8_t
N_PRB_oh
;
uint16_t
N_RE_prime
;
unsigned
char
mod_order
;
unsigned
char
mod_order
;
uint8_t
Nl
=
1
;
uint8_t
Nl
=
1
;
uint8_t
rvidx
=
0
;
uint8_t
rvidx
=
0
;
...
@@ -485,8 +487,6 @@ int main(int argc, char **argv) {
...
@@ -485,8 +487,6 @@ int main(int argc, char **argv) {
NR_UE_ULSCH_t
*
ulsch_ue
=
UE
->
ulsch
[
0
][
0
][
0
];
NR_UE_ULSCH_t
*
ulsch_ue
=
UE
->
ulsch
[
0
][
0
][
0
];
ulsch_ue
->
nb_re_dmrs
=
nb_re_dmrs
;
//[adk] A HOT FIX until cearting nfapi_nr_ul_config_ulsch_pdu_rel15_t
mod_order
=
nr_get_Qm
(
Imcs
,
1
);
mod_order
=
nr_get_Qm
(
Imcs
,
1
);
available_bits
=
nr_get_G
(
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
,
length_dmrs
,
mod_order
,
1
);
available_bits
=
nr_get_G
(
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
,
length_dmrs
,
mod_order
,
1
);
TBS
=
nr_compute_tbs
(
Imcs
,
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
,
length_dmrs
,
Nl
);
TBS
=
nr_compute_tbs
(
Imcs
,
nb_rb
,
nb_symb_sch
,
nb_re_dmrs
,
length_dmrs
,
Nl
);
...
@@ -522,16 +522,28 @@ int main(int argc, char **argv) {
...
@@ -522,16 +522,28 @@ int main(int argc, char **argv) {
// estimated_output = ulsch_gNB->harq_processes[harq_pid]->b;
// estimated_output = ulsch_gNB->harq_processes[harq_pid]->b;
/////////////////////////[adk] preparing NR_UE_ULSCH_t parameters///////////////////////// A HOT FIX until creating nfapi_nr_ul_config_ulsch_pdu_rel15_t
///////////
ulsch_ue
->
nb_re_dmrs
=
nb_re_dmrs
;
ulsch_ue
->
length_dmrs
=
length_dmrs
;
ulsch_ue
->
rnti
=
n_rnti
;
///////////
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////[adk] preparing UL harq_process parameters/////////////////////////
/////////////////////////[adk] preparing UL harq_process parameters/////////////////////////
///////////
///////////
NR_UL_UE_HARQ_t
*
harq_process_ul_ue
=
ulsch_ue
->
harq_processes
[
harq_pid
];
NR_UL_UE_HARQ_t
*
harq_process_ul_ue
=
ulsch_ue
->
harq_processes
[
harq_pid
];
N_PRB_oh
=
0
;
// higher layer (RRC) parameter xOverhead in PUSCH-ServingCellConfig
N_RE_prime
=
NR_NB_SC_PER_RB
*
nb_symb_sch
-
nb_re_dmrs
-
N_PRB_oh
;
if
(
harq_process_ul_ue
)
{
if
(
harq_process_ul_ue
)
{
harq_process_ul_ue
->
mcs
=
Imcs
;
harq_process_ul_ue
->
mcs
=
Imcs
;
harq_process_ul_ue
->
Nl
=
Nl
;
harq_process_ul_ue
->
Nl
=
Nl
;
harq_process_ul_ue
->
nb_rb
=
nb_rb
;
harq_process_ul_ue
->
nb_rb
=
nb_rb
;
harq_process_ul_ue
->
nb_symbols
=
nb_symb_sch
;
harq_process_ul_ue
->
number_of_symbols
=
nb_symb_sch
;
harq_process_ul_ue
->
num_of_mod_symbols
=
N_RE_prime
*
nb_rb
*
nb_codewords
;
harq_process_ul_ue
->
rvidx
=
rvidx
;
harq_process_ul_ue
->
rvidx
=
rvidx
;
harq_process_ul_ue
->
TBS
=
TBS
;
harq_process_ul_ue
->
TBS
=
TBS
;
harq_process_ul_ue
->
a
=
&
test_input
[
0
];
harq_process_ul_ue
->
a
=
&
test_input
[
0
];
...
@@ -560,6 +572,27 @@ int main(int argc, char **argv) {
...
@@ -560,6 +572,27 @@ int main(int argc, char **argv) {
///////////
///////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
/////////////////////////[adk] ULSCH scrambling/////////////////////////
///////////
uint32_t
scrambled_output
[
NR_MAX_NB_CODEWORDS
][
NR_MAX_PDSCH_ENCODED_LENGTH
>>
5
];
uint16_t
encoded_length
;
encoded_length
=
harq_process_ul_ue
->
num_of_mod_symbols
*
mod_order
;
for
(
int
q
=
0
;
q
<
nb_codewords
;
q
++
){
memset
((
void
*
)
scrambled_output
[
q
],
0
,
(
encoded_length
>>
5
)
*
sizeof
(
uint32_t
));
}
nr_pusch_codeword_scrambling
(
ulsch_ue
->
g
,
encoded_length
,
Nid_cell
,
ulsch_ue
->
rnti
,
scrambled_output
[
0
]);
// assume one codeword for the moment
/////////////
//////////////////////////////////////////////////////////////////////////
for
(
SNR
=
snr0
;
SNR
<
snr1
;
SNR
+=
snr_step
)
{
for
(
SNR
=
snr0
;
SNR
<
snr1
;
SNR
+=
snr_step
)
{
n_errors
=
0
;
n_errors
=
0
;
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
830bf079
...
@@ -531,7 +531,7 @@ int main(int argc, char **argv) {
...
@@ -531,7 +531,7 @@ int main(int argc, char **argv) {
harq_process_ul_ue
->
mcs
=
Imcs
;
harq_process_ul_ue
->
mcs
=
Imcs
;
harq_process_ul_ue
->
Nl
=
Nl
;
harq_process_ul_ue
->
Nl
=
Nl
;
harq_process_ul_ue
->
nb_rb
=
nb_rb
;
harq_process_ul_ue
->
nb_rb
=
nb_rb
;
harq_process_ul_ue
->
n
b
_symbols
=
nb_symb_sch
;
harq_process_ul_ue
->
n
umber_of
_symbols
=
nb_symb_sch
;
harq_process_ul_ue
->
rvidx
=
rvidx
;
harq_process_ul_ue
->
rvidx
=
rvidx
;
harq_process_ul_ue
->
TBS
=
TBS
;
harq_process_ul_ue
->
TBS
=
TBS
;
harq_process_ul_ue
->
a
=
&
test_input
[
0
];
harq_process_ul_ue
->
a
=
&
test_input
[
0
];
...
...
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