Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
openairinterface5G
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Merge Requests
20
Merge Requests
20
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
oai
openairinterface5G
Commits
ed211ca2
Commit
ed211ca2
authored
Aug 23, 2018
by
Guy De Souza
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'nr_pdcch' of
https://gitlab.eurecom.fr/oai/openairinterface5g
into nr_pdcch
parents
d2f2dfc0
742700fa
Changes
68
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
68 changed files
with
2810 additions
and
1626 deletions
+2810
-1626
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+24
-13
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
+57
-0
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
+174
-187
openair1/PHY/CODING/TESTBENCH/polartest.c
openair1/PHY/CODING/TESTBENCH/polartest.c
+71
-20
openair1/PHY/CODING/coding_defs.h
openair1/PHY/CODING/coding_defs.h
+8
-0
openair1/PHY/CODING/crc_byte.c
openair1/PHY/CODING/crc_byte.c
+42
-14
openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c
openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c
+13
-0
openair1/PHY/CODING/nrPolar_tools/nr_polar_bit_insertion.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_bit_insertion.c
+0
-52
openair1/PHY/CODING/nrPolar_tools/nr_polar_channel_interleaver_pattern.c
...DING/nrPolar_tools/nr_polar_channel_interleaver_pattern.c
+0
-63
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
+10
-10
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c
+62
-17
openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
+192
-69
openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
+122
-26
openair1/PHY/CODING/nrPolar_tools/nr_polar_interleaving_pattern.c
.../PHY/CODING/nrPolar_tools/nr_polar_interleaving_pattern.c
+11
-0
openair1/PHY/CODING/nrPolar_tools/nr_polar_kronecker_power_matrices.c
.../CODING/nrPolar_tools/nr_polar_kronecker_power_matrices.c
+11
-0
openair1/PHY/CODING/nrPolar_tools/nr_polar_matrix_and_array.c
...air1/PHY/CODING/nrPolar_tools/nr_polar_matrix_and_array.c
+11
-0
openair1/PHY/CODING/nrPolar_tools/nr_polar_output_length.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_output_length.c
+0
-46
openair1/PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h
openair1/PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h
+1
-1
openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c
+315
-0
openair1/PHY/CODING/nrPolar_tools/nr_polar_rate_match.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_rate_match.c
+0
-81
openair1/PHY/CODING/nr_polar_init.c
openair1/PHY/CODING/nr_polar_init.c
+24
-10
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+3
-0
openair1/PHY/INIT/nr_parms.c
openair1/PHY/INIT/nr_parms.c
+2
-3
openair1/PHY/INIT/phy_init.h
openair1/PHY/INIT/phy_init.h
+2
-1
openair1/PHY/MODULATION/slot_fep.c
openair1/PHY/MODULATION/slot_fep.c
+2
-2
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
+31
-5
openair1/PHY/NR_REFSIG/nr_gold_ue.c
openair1/PHY/NR_REFSIG/nr_gold_ue.c
+5
-5
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
+1
-4
openair1/PHY/NR_REFSIG/ss_pbch_nr.h
openair1/PHY/NR_REFSIG/ss_pbch_nr.h
+10
-4
openair1/PHY/NR_TRANSPORT/nr_dci.c
openair1/PHY/NR_TRANSPORT/nr_dci.c
+11
-22
openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
openair1/PHY/NR_TRANSPORT/nr_dci_tools.c
+31
-30
openair1/PHY/NR_TRANSPORT/nr_pbch.c
openair1/PHY/NR_TRANSPORT/nr_pbch.c
+5
-0
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+8
-8
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
+41
-43
openair1/PHY/NR_UE_TRANSPORT/dci_tools_nr.c
openair1/PHY/NR_UE_TRANSPORT/dci_tools_nr.c
+7
-5
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c
+18
-5
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
+25
-12
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+1
-19
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h
+6
-0
openair1/PHY/NR_UE_TRANSPORT/pss_nr.c
openair1/PHY/NR_UE_TRANSPORT/pss_nr.c
+4
-4
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
+40
-26
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+18
-11
openair1/PHY/impl_defs_nr.h
openair1/PHY/impl_defs_nr.h
+3
-0
openair1/SCHED_NR_UE/defs.h
openair1/SCHED_NR_UE/defs.h
+1
-1
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
openair1/SCHED_NR_UE/fapi_nr_ue_l1.c
+104
-52
openair1/SCHED_NR_UE/phy_frame_config_nr.c
openair1/SCHED_NR_UE/phy_frame_config_nr.c
+6
-6
openair1/SCHED_NR_UE/phy_frame_config_nr.h
openair1/SCHED_NR_UE/phy_frame_config_nr.h
+1
-1
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+138
-518
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
openair1/SCHED_NR_UE/pucch_uci_ue_nr.c
+86
-5
openair1/SIMULATION/NR_UE_PHY/unit_tests/build/CMakeLists.txt
...air1/SIMULATION/NR_UE_PHY/unit_tests/build/CMakeLists.txt
+7
-7
openair1/SIMULATION/NR_UE_PHY/unit_tests/src/dummy_functions.c
...ir1/SIMULATION/NR_UE_PHY/unit_tests/src/dummy_functions.c
+11
-1
openair1/SIMULATION/NR_UE_PHY/unit_tests/src/frame_config_test.c
...1/SIMULATION/NR_UE_PHY/unit_tests/src/frame_config_test.c
+8
-10
openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.c
openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.c
+1
-1
openair2/LAYER2/NR_MAC_UE/mac.h
openair2/LAYER2/NR_MAC_UE/mac.h
+62
-2
openair2/LAYER2/NR_MAC_UE/mac_defs.h
openair2/LAYER2/NR_MAC_UE/mac_defs.h
+50
-8
openair2/LAYER2/NR_MAC_UE/mac_extern.h
openair2/LAYER2/NR_MAC_UE/mac_extern.h
+10
-2
openair2/LAYER2/NR_MAC_UE/mac_proto.h
openair2/LAYER2/NR_MAC_UE/mac_proto.h
+23
-7
openair2/LAYER2/NR_MAC_UE/mac_vars.c
openair2/LAYER2/NR_MAC_UE/mac_vars.c
+49
-5
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+514
-70
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c
+113
-29
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h
+19
-9
openair2/RRC/LTE/rrc_UE.c
openair2/RRC/LTE/rrc_UE.c
+8
-6
openair2/RRC/NR_UE/L2_interface_ue.c
openair2/RRC/NR_UE/L2_interface_ue.c
+2
-1
openair2/RRC/NR_UE/rrc_UE.c
openair2/RRC/NR_UE/rrc_UE.c
+49
-36
openair2/RRC/NR_UE/rrc_proto.h
openair2/RRC/NR_UE/rrc_proto.h
+1
-1
targets/RT/USER/nr-softmodem.c
targets/RT/USER/nr-softmodem.c
+1
-0
targets/RT/USER/nr-ue.c
targets/RT/USER/nr-ue.c
+116
-22
targets/RT/USER/nr-uesoftmodem.c
targets/RT/USER/nr-uesoftmodem.c
+8
-8
No files found.
cmake_targets/CMakeLists.txt
View file @
ed211ca2
...
...
@@ -361,11 +361,14 @@ message( FATAL_ERROR "The script ${asn1c_call} must be present" )
endif
(
NOT EXISTS
${
asn1c_call
}
)
message
(
"calling ASN1C_PREFIX=NR_ asn1c -findirect-choice -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D
${
RRC_FULL_DIR
}
${
RRC_GRAMMAR
}
"
)
execute_process
(
COMMAND
${
asn1c_call
}
${
NR_RRC_FULL_DIR
}
${
NR_RRC_GRAMMAR
}
NR_RRC
RESULT_VARIABLE ret
)
RESULT_VARIABLE ret
OUTPUT_QUIET
ERROR_QUIET
)
if
(
NOT
${
ret
}
STREQUAL 0
)
message
(
FATAL_ERROR
"
${
asn1c_call
}
: error"
)
...
...
@@ -374,7 +377,6 @@ endif (NOT ${ret} STREQUAL 0)
if
(
NOT EXISTS
${
fix_asn1c_call
}
)
message
(
FATAL_ERROR
"The script
${
fix_asn1c_call
}
must be present"
)
endif
(
NOT EXISTS
${
fix_asn1c_call
}
)
execute_process
(
COMMAND
${
fix_asn1c_call
}
${
NR_RRC_FULL_DIR
}
NR_RRC
...
...
@@ -398,6 +400,7 @@ include_directories ("${NR_RRC_FULL_DIR}")
# add the command to generate the source code
# Warning: if you modify ASN.1 source file to generate new C files, cmake should be re-run instead of make
add_custom_command
(
OUTPUT
${
NR_RRC_FULL_DIR
}
/asn1_constants.h
COMMAND
${
asn1c_call
}
${
NR_RRC_FULL_DIR
}
${
NR_RRC_GRAMMAR
}
RRC
...
...
@@ -434,7 +437,11 @@ message("calling ASN1C_PREFIX=S1AP_ asn1c -fcompound-names -fno-include-deps -ge
execute_process
(
COMMAND mkdir -p
${
S1AP_C_DIR
}
COMMAND env
"ASN1C_PREFIX=S1AP_"
asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D
${
S1AP_C_DIR
}
${
S1AP_ASN_DIR
}
/
${
S1AP_ASN_FILES
}
RESULT_VARIABLE ret
)
RESULT_VARIABLE ret
OUTPUT_QUIET
ERROR_QUIET
)
if
(
NOT
${
ret
}
STREQUAL 0
)
message
(
FATAL_ERROR
"
${
ret
}
: error"
)
...
...
@@ -499,7 +506,9 @@ message("calling asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -
execute_process
(
COMMAND mkdir -p
${
X2AP_C_DIR
}
COMMAND env
"ASN1C_PREFIX=X2AP_"
asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D
${
X2AP_C_DIR
}
${
X2AP_ASN_DIR
}
/
${
X2AP_ASN_FILES
}
RESULT_VARIABLE ret
)
RESULT_VARIABLE ret
OUTPUT_QUIET
ERROR_QUIET
)
#execute_process(COMMAND ${asn1c_call}
# ${X2AP_C_DIR}
...
...
@@ -1121,20 +1130,16 @@ set(PHY_POLARSRC
${
OPENAIR1_DIR
}
/PHY/CODING/nr_polar_init.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_crc_byte.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_bit_insertion.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_channel_interleaver_pattern.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_crc.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_
info_bit_pattern
.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_
encoder
.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_interleaving_pattern.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_kernal_operation.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_kronecker_power_matrices.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_matrix_and_array.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_output_length.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_rate_match.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_procedures.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_sequence_pattern.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
)
set
(
PHY_TURBOIF
${
OPENAIR1_DIR
}
/PHY/CODING/coding_load.c
...
...
@@ -1342,6 +1347,10 @@ if (${COMPILATION_AVX2} STREQUAL "True")
set
(
PHY_SRC_UE
${
PHY_SRC_UE
}
${
OPENAIR1_DIR
}
/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c
)
endif
()
if
(
${
COMPILATION_AVX2
}
STREQUAL
"True"
)
set
(
PHY_NR_UE_SRC
${
PHY_NR_UE_SRC
}
${
OPENAIR1_DIR
}
/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c
)
endif
()
add_library
(
PHY_COMMON
${
PHY_SRC_COMMON
}
)
add_library
(
PHY
${
PHY_SRC
}
)
add_library
(
PHY_UE
${
PHY_SRC_UE
}
)
...
...
@@ -1463,6 +1472,7 @@ set(NR_L2_SRC_UE
${
NR_UE_RRC_DIR
}
/main_ue.c
${
NR_UE_RRC_DIR
}
/rrc_UE.c
# ${NR_UE_RRC_DIR}/mac_vars.c
#${RRC_DIR}/rrc_UE.c
)
set
(
L2_NR_SRC_UE
...
...
@@ -1582,6 +1592,7 @@ set ( NR_LTE_UE_REUSE_SRC
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_ue_measurements.c
${
OPENAIR1_DIR
}
/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
#${OPENAIR1_DIR}/PHY/LTE_UE_TRANSPORT/dlsch_llr_computation_avx2.c
)
add_library
(
NR_LTE_UE_REUSE_LIB
...
...
@@ -2265,6 +2276,7 @@ target_link_libraries (lte-uesoftmodem-nos1 ${T_LIB})
add_executable
(
nr-softmodem
${
rrc_h
}
${
nr_rrc_h
}
${
s1ap_h
}
${
OPENAIR_BIN_DIR
}
/messages_xml.h
${
OPENAIR_TARGETS
}
/RT/USER/rt_wrapper.c
...
...
@@ -2272,7 +2284,6 @@ add_executable(nr-softmodem
${
OPENAIR_TARGETS
}
/RT/USER/nr-ru.c
${
OPENAIR_TARGETS
}
/RT/USER/nr-softmodem.c
${
OPENAIR1_DIR
}
/SIMULATION/TOOLS/taus.c
${
OPENAIR_TARGETS
}
/COMMON/create_tasks.c
${
OPENAIR_TARGETS
}
/COMMON/create_nr_tasks.c
${
OPENAIR_TARGETS
}
/ARCH/COMMON/common_lib.c
${
OPENAIR1_DIR
}
/SIMULATION/ETH_TRANSPORT/netlink_init.c
...
...
@@ -2543,7 +2554,7 @@ target_link_libraries (dlsim_tm4
)
add_executable
(
polartest
${
OPENAIR1_DIR
}
/PHY/CODING/TESTBENCH/polartest.c
)
target_link_libraries
(
polartest m SIMU PHY PHY_NR -lm
${
ATLAS_LIBRARIES
}
)
target_link_libraries
(
polartest m SIMU PHY PHY_NR
PHY_COMMON
-lm
${
ATLAS_LIBRARIES
}
)
foreach
(
myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim
)
...
...
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_constants.h
0 → 100644
View file @
ed211ca2
#ifndef _FAPI_NR_UE_CONSTANTS_H_
#define _FAPI_NR_UE_CONSTANTS_H_
// constants defined by specification 38.331
#define FAPI_NR_MAX_NUM_DL_ALLOCATIONS 16
#define FAPI_NR_MAX_NUM_UL_ALLOCATIONS 16
#define FAPI_NR_MAX_NUM_SERVING_CELLS 32
#define FAPI_NR_MAX_NUM_ZP_CSI_RS_RESOURCE_PER_SET 16
#define FAPI_NR_MAX_NUM_CANDIDATE_BEAMS 16
#define FAPI_NR_MAX_RA_OCCASION_PER_CSIRS 64
/// RX_IND
#define FAPI_NR_RX_PDU_TYPE_MIB 0x01
#define FAPI_NR_RX_PDU_TYPE_SIB 0x02
#define FAPI_NR_RX_PDU_TYPE_DLSCH 0x03
#define FAPI_NR_DCI_IND 0x04
#define FAPI_NR_SIBS_MASK_SIB1 0x1
/// DCI_IND
#define FAPI_NR_DCI_TYPE_0_0 0x01
#define FAPI_NR_DCI_TYPE_0_1 0x02
#define FAPI_NR_DCI_TYPE_1_0 0x03
#define FAPI_NR_DCI_TYPE_1_1 0x04
#define FAPI_NR_DCI_TYPE_2_0 0x05
#define FAPI_NR_DCI_TYPE_2_1 0x06
#define FAPI_NR_DCI_TYPE_2_2 0x07
#define FAPI_NR_DCI_TYPE_2_3 0x08
/// TX_REQ
/// DL_CONFIG_REQ
#define FAPI_NR_DL_CONFIG_LIST_NUM 10
#define FAPI_NR_DL_CONFIG_TYPE_DCI 0x01
#define FAPI_NR_DL_CONFIG_TYPE_DLSCH 0x02
#define CCE_REG_MAPPING_TYPE_INTERLEAVED 0x01
#define CCE_REG_MAPPING_TYPE_NON_INTERLEAVED 0x02
#define PRECODER_GRANULARITY_SAME_AS_REG_BUNDLE 0x01
#define PRECODER_GRANULARITY_ALL_CONTIGUOUS_RBS 0x02
/// UL_CONFIG_REQ
#define FAPI_NR_UL_CONFIG_LIST_NUM 10
#define FAPI_NR_DL_CONFIG_TYPE_PRACH 0x01
#define FAPI_NR_DL_CONFIG_TYPE_PUCCH 0x02
#define FAPI_NR_DL_CONFIG_TYPE_PUSCH 0x03
#endif
\ No newline at end of file
nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h
View file @
ed211ca2
This diff is collapsed.
Click to expand it.
openair1/PHY/CODING/TESTBENCH/polartest.c
View file @
ed211ca2
...
...
@@ -7,9 +7,11 @@
#include <time.h>
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
#include "PHY/CODING/coding_defs.h"
#include "SIMULATION/TOOLS/sim.h"
//#define DEBUG_POLAR_PARAMS
#define DEBUG_DCI_POLAR_PARAMS
int
main
(
int
argc
,
char
*
argv
[])
{
...
...
@@ -21,6 +23,8 @@ int main(int argc, char *argv[]) {
reset_meas
(
&
timeDecoder
);
randominit
(
0
);
crcTableInit
();
uint32_t
crc
;
//Default simulation values (Aim for iterations = 1000000.)
int
itr
,
iterations
=
1000
,
arguments
,
polarMessageType
=
0
;
//0=PBCH, 1=DCI, -1=UCI
double
SNRstart
=
-
20
.
0
,
SNRstop
=
0
.
0
,
SNRinc
=
0
.
5
;
//dB
...
...
@@ -30,7 +34,7 @@ int main(int argc, char *argv[]) {
int8_t
decoderState
=
0
,
blockErrorState
=
0
;
//0 = Success, -1 = Decoding failed, 1 = Block Error.
uint16_t
testLength
=
0
,
coderLength
=
0
,
blockErrorCumulative
=
0
,
bitErrorCumulative
=
0
;
double
timeEncoderCumulative
=
0
,
timeDecoderCumulative
=
0
;
uint8_t
aggregation_level
;
uint8_t
aggregation_level
,
decoderListSize
,
pathMetricAppr
;
while
((
arguments
=
getopt
(
argc
,
argv
,
"s:d:f:m:i:l:a:"
))
!=
-
1
)
switch
(
arguments
)
...
...
@@ -105,36 +109,83 @@ int main(int argc, char *argv[]) {
}
fprintf
(
logFile
,
",SNR,nBitError,blockErrorState,t_encoder[us],t_decoder[us]
\n
"
);
uint8_t
*
testInput
=
malloc
(
sizeof
(
uint8_t
)
*
testLength
);
//generate randomly
uint8_t
*
encoderOutput
=
malloc
(
sizeof
(
uint8_t
)
*
coderLength
);
//uint8_t *testInput = malloc(sizeof(uint8_t) * testLength); //generate randomly
//uint8_t *encoderOutput = malloc(sizeof(uint8_t) * coderLength);
uint32_t
testInput
[
4
],
encoderOutput
[
4
];
memset
(
testInput
,
0
,
sizeof
(
testInput
));
memset
(
encoderOutput
,
0
,
sizeof
(
encoderOutput
));
double
*
modulatedInput
=
malloc
(
sizeof
(
double
)
*
coderLength
);
//channel input
double
*
channelOutput
=
malloc
(
sizeof
(
double
)
*
coderLength
);
//add noise
uint
8
_t
*
estimatedOutput
=
malloc
(
sizeof
(
uint8_t
)
*
testLength
);
//decoder output
uint
32
_t
*
estimatedOutput
=
malloc
(
sizeof
(
uint8_t
)
*
testLength
);
//decoder output
t_nrPolar_paramsPtr
nrPolar_params
=
NULL
;
nr_polar_init
(
&
nrPolar_params
,
polarMessageType
,
testLength
,
aggregation_level
);
#ifdef DEBUG_POLAR_PARAMS
t_nrPolar_paramsPtr
nrPolar_params
=
NULL
,
currentPtr
=
NULL
;
nr_polar_init
(
&
nrPolar_params
,
polarMessageType
,
testLength
,
aggregation_level
);
nr_polar_init
(
&
nrPolar_params
,
1
,
20
,
1
);
nr_polar_init
(
&
nrPolar_params
,
1
,
21
,
1
);
#ifdef DEBUG_DCI_POLAR_PARAMS
unsigned
int
poly24c
=
0xb2b11700
;
printf
(
"testInput: [0]->0x%08x
\t
[1]->0x%08x
\t
[2]->0x%08x
\t
[3]->0x%08x
\n
"
,
testInput
[
0
],
testInput
[
1
],
testInput
[
2
],
testInput
[
3
]);
printf
(
"encOutput: [0]->0x%08x
\t
[1]->0x%08x
\t
[2]->0x%08x
\t
[3]->0x%08x
\n
"
,
encoderOutput
[
0
],
encoderOutput
[
1
],
encoderOutput
[
2
],
encoderOutput
[
3
]);
testInput
[
0
]
=
0x01189400
;
uint8_t
testInput2
[
8
];
nr_crc_bit2bit_uint32_8_t
(
testInput
,
32
,
testInput2
);
printf
(
"testInput2: [0]->%x
\t
[1]->%x
\t
[2]->%x
\t
[3]->%x
\n
[4]->%x
\t
[5]->%x
\t
[6]->%x
\t
[7]->%x
\t\n
"
,
testInput2
[
0
],
testInput2
[
1
],
testInput2
[
2
],
testInput2
[
3
],
testInput2
[
4
],
testInput2
[
5
],
testInput2
[
6
],
testInput2
[
7
]);
printf
(
"crc32: [0]->0x%08x
\n
"
,
crc24c
(
testInput2
,
32
));
printf
(
"crc56: [0]->0x%08x
\n
"
,
crc24c
(
testInput2
,
56
));
return
0
;
uint8_t
testInput8
[
4
];
/*testInput8[0]=0x00;
testInput8[1]=0x49;
testInput8[2]=0x81;
testInput8[3]=0x10;
testInput8[4]=0x00;*/
testInput8
[
0
]
=
0xff
;
testInput8
[
1
]
=
0xd0
;
testInput8
[
2
]
=
0xff
;
testInput8
[
3
]
=
0x82
;
crc
=
crc24c
(
testInput8
,
31
);
for
(
int
i
=
0
;
i
<
24
;
i
++
)
printf
(
"[i]=%d
\n
"
,(
crc
>>
i
)
&
1
);
printf
(
"crc: [0]->0x%08x
\n
"
,
crc
);
printf
(
"crcbit: %x
\n
"
,
crcbit
(
testInput8
,
3
,
poly24c
));
return
0
;
unsigned
char
test
[]
=
"Thebigredfox"
;
for
(
int
i
=
0
;
i
<
8
;
i
++
)
printf
(
"[i]=%d
\n
"
,(
test
[
0
]
>>
i
)
&
1
);
printf
(
"test[0]=%x
\n
"
,
test
[
0
]);
printf
(
"%s -- sizeof=%d
\n
"
,
test
,
sizeof
(
test
));
printf
(
"%x
\n
"
,
crcbit
(
test
,
sizeof
(
test
)
-
1
,
poly24c
));
printf
(
"%x
\n
"
,
crc24c
(
test
,
(
sizeof
(
test
)
-
1
)
*
8
));
polarMessageType
=
1
;
testLength
=
41
;
aggregation_level
=
1
;
coderLength
=
108
;
nr_polar_init
(
&
nrPolar_params
,
polarMessageType
,
testLength
,
aggregation_level
);
nr_polar_print_polarParams
(
nrPolar_params
);
uint32_t
in
[
4
];
in
[
0
]
=
0x01189400
;
in
[
1
]
=
0xffffff0f
;
uint8_t
*
out
=
malloc
(
sizeof
(
uint8_t
)
*
41
);
nr_bit2byte_uint32_8_t
(
in
,
41
,
out
);
for
(
int
i
=
0
;
i
<
41
;
i
++
)
printf
(
"out[%d]=%d
\n
"
,
i
,
out
[
i
]);
uint32_t
inn
[
4
];
nr_byte2bit_uint8_32_t
(
out
,
41
,
inn
);
printf
(
"inn[0]=%#x, inn[1]=%#x
\n
"
,
inn
[
0
],
inn
[
1
]);
crc
=
crc24c
(
testInput
,
testLength
)
>>
8
;
for
(
int
i
=
0
;
i
<
24
;
i
++
)
printf
(
"[i]=%d
\n
"
,(
crc
>>
i
)
&
1
);
printf
(
"crc: [0]->0x%08x
\n
"
,
crc
);
testInput
[
testLength
>>
3
]
=
((
uint8_t
*
)
&
crc
)[
2
];
testInput
[
1
+
(
testLength
>>
3
)]
=
((
uint8_t
*
)
&
crc
)[
1
];
testInput
[
2
+
(
testLength
>>
3
)]
=
((
uint8_t
*
)
&
crc
)[
0
];
printf
(
"testInput: [0]->0x%08x
\t
[1]->0x%08x
\t
[2]->0x%08x
\t
[3]->0x%08x
\n
"
,
testInput
[
0
],
testInput
[
1
],
testInput
[
2
],
testInput
[
3
]);
return
(
0
);
currentPtr
=
nr_polar_params
(
nrPolar_params
,
polarMessageType
,
testLength
,
aggregation_level
);
polar_encoder
(
testInput
,
encoderOutput
,
currentPtr
);
printf
(
"AFTER POLAR ENCODING
\n
"
);
printf
(
"testInput: [0]->0x%08x
\t
[1]->0x%08x
\t
[2]->0x%08x
\t
[3]->0x%08x
\n
"
,
testInput
[
0
],
testInput
[
1
],
testInput
[
2
],
testInput
[
3
]);
printf
(
"encOutput: [0]->0x%08x
\t
[1]->0x%08x
\t
[2]->0x%08x
\t
[3]->0x%08x
\n
"
,
encoderOutput
[
0
],
encoderOutput
[
1
],
encoderOutput
[
2
],
encoderOutput
[
3
]);
return
(
0
);
#endif
t_nrPolar_paramsPtr
currentPtr
=
nr_polar_params
(
nrPolar_params
,
polarMessageType
,
testLength
);
currentPtr
=
nr_polar_params
(
nrPolar_params
,
polarMessageType
,
testLength
,
aggregation_level
);
// We assume no a priori knowledge available about the payload.
double
aPrioriArray
[
currentPtr
->
payloadBits
];
...
...
openair1/PHY/CODING/coding_defs.h
View file @
ed211ca2
...
...
@@ -341,6 +341,14 @@ based on 3GPP UMTS/LTE specifications.
*/
uint32_t
crc24b
(
uint8_t
*
inPtr
,
int32_t
bitlen
);
/*!\fn uint32_t crc24c(uint8_t *inPtr, int32_t bitlen)
\brief This computes a 24-bit crc ('c' variant for transport-block segments)
based on 3GPP Rel 15 specifications.
@param inPtr Pointer to input byte stream
@param bitlen length of inputs in bits
*/
uint32_t
crc24c
(
uint8_t
*
inPtr
,
int32_t
bitlen
);
/*!\fn uint32_t crc16(uint8_t *inPtr, int32_t bitlen)
\brief This computes a 16-bit crc based on 3GPP UMTS specifications.
@param inPtr Pointer to input byte stream
...
...
openair1/PHY/CODING/crc_byte.c
View file @
ed211ca2
...
...
@@ -36,8 +36,12 @@
/*ref 36-212 v8.6.0 , pp 8-9 */
/* the highest degree is set by default */
unsigned
int
poly24a
=
0x864cfb00
;
//1000 0110 0100 1100 1111 1011 D^24 + D^23 + D^18 + D^17 + D^14 + D^11 + D^10 + D^7 + D^6 + D^5 + D^4 + D^3 + D + 1
unsigned
int
poly24b
=
0x80006300
;
// 1000 0000 0000 0000 0110 0011 D^24 + D^23 + D^6 + D^5 + D + 1
unsigned
int
poly24a
=
0x864cfb00
;
// 1000 0110 0100 1100 1111 1011
// D^24 + D^23 + D^18 + D^17 + D^14 + D^11 + D^10 + D^7 + D^6 + D^5 + D^4 + D^3 + D + 1
unsigned
int
poly24b
=
0x80006300
;
// 1000 0000 0000 0000 0110 0011
// D^24 + D^23 + D^6 + D^5 + D + 1
unsigned
int
poly24c
=
0xb2b11700
;
// 1011 0010 1011 0001 0001 0111
// D^24+D^23+D^21+D^20+D^17+D^15+D^13+D^12+D^8+D^4+D^2+D+1
unsigned
int
poly16
=
0x10210000
;
// 0001 0000 0010 0001 D^16 + D^12 + D^5 + 1
unsigned
int
poly12
=
0x80F00000
;
// 1000 0000 1111 D^12 + D^11 + D^3 + D^2 + D + 1
unsigned
int
poly8
=
0x9B000000
;
// 1001 1011 D^8 + D^7 + D^4 + D^3 + D + 1
...
...
@@ -49,10 +53,11 @@ For initialization && verification purposes,
The first bit is in the MSB of each byte
*********************************************************/
unsigned
int
crcbit
(
unsigned
char
*
inputptr
,
int
octetlen
,
unsigned
int
poly
)
unsigned
int
crcbit
(
unsigned
char
*
inputptr
,
int
octetlen
,
unsigned
int
poly
)
{
unsigned
int
i
,
crc
=
0
,
c
;
unsigned
int
i
,
crc
=
0
,
c
;
while
(
octetlen
--
>
0
)
{
c
=
(
*
inputptr
++
)
<<
24
;
...
...
@@ -75,19 +80,21 @@ crcbit (unsigned char * inputptr, int octetlen, unsigned int poly)
crc table initialization
*********************************************************/
static
unsigned
int
crc24aTable
[
256
];
static
unsigned
int
crc24bTable
[
256
];
static
unsigned
int
crc24aTable
[
256
];
static
unsigned
int
crc24bTable
[
256
];
static
unsigned
int
crc24cTable
[
256
];
static
unsigned
short
crc16Table
[
256
];
static
unsigned
short
crc12Table
[
256
];
static
unsigned
char
crc8Table
[
256
];
void
crcTableInit
(
void
)
{
unsigned
char
c
=
0
;
unsigned
char
c
=
0
;
do
{
crc24aTable
[
c
]
=
crcbit
(
&
c
,
1
,
poly24a
);
crc24bTable
[
c
]
=
crcbit
(
&
c
,
1
,
poly24b
);
crc24cTable
[
c
]
=
crcbit
(
&
c
,
1
,
poly24c
);
crc16Table
[
c
]
=
(
unsigned
short
)
(
crcbit
(
&
c
,
1
,
poly16
)
>>
16
);
crc12Table
[
c
]
=
(
unsigned
short
)
(
crcbit
(
&
c
,
1
,
poly12
)
>>
16
);
crc8Table
[
c
]
=
(
unsigned
char
)
(
crcbit
(
&
c
,
1
,
poly8
)
>>
24
);
...
...
@@ -99,8 +106,8 @@ Byte by byte implementations,
assuming initial byte is 0 padded (in MSB) if necessary
*********************************************************/
unsigned
int
crc24a
(
unsigned
char
*
inptr
,
int
bitlen
)
unsigned
int
crc24a
(
unsigned
char
*
inptr
,
int
bitlen
)
{
int
octetlen
,
resbit
;
...
...
@@ -119,11 +126,11 @@ crc24a (unsigned char * inptr, int bitlen)
return
crc
;
}
unsigned
int
crc24b
(
unsigned
char
*
inptr
,
int
bitlen
)
unsigned
int
crc24b
(
unsigned
char
*
inptr
,
int
bitlen
)
{
int
octetlen
,
resbit
;
unsigned
int
crc
=
0
;
int
octetlen
,
resbit
;
unsigned
int
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
...
...
@@ -138,6 +145,27 @@ unsigned int crc24b (unsigned char * inptr, int bitlen)
return
crc
;
}
unsigned
int
crc24c
(
unsigned
char
*
inptr
,
int
bitlen
)
{
int
octetlen
,
resbit
;
unsigned
int
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
while
(
octetlen
--
>
0
)
{
/*#ifdef DEBUG_CRC24C
printf("crc24c: in %x => crc %x (%x)\n",crc,*inptr,crc24cTable[(*inptr) ^ (crc >> 24)]);
#endif*/
crc
=
(
crc
<<
8
)
^
crc24cTable
[(
*
inptr
++
)
^
(
crc
>>
24
)];
}
if
(
resbit
>
0
)
crc
=
(
crc
<<
resbit
)
^
crc24cTable
[((
*
inptr
)
>>
(
8
-
resbit
))
^
(
crc
>>
(
32
-
resbit
))];
return
crc
;
}
unsigned
int
crc16
(
unsigned
char
*
inptr
,
int
bitlen
)
{
...
...
openair1/PHY/CODING/nrPolar_tools/nr_bitwise_operations.c
View file @
ed211ca2
...
...
@@ -41,3 +41,16 @@ void nr_byte2bit_uint8_32_t(uint8_t *in, uint16_t arraySize, uint32_t *out) {
out
[
i
]
|=
in
[(
i
*
32
)];
}
}
void
nr_crc_bit2bit_uint32_8_t
(
uint32_t
*
in
,
uint16_t
arraySize
,
uint8_t
*
out
)
{
out
[
0
]
=
0xff
;
out
[
1
]
=
0xff
;
out
[
2
]
=
0xff
;
uint8_t
arrayInd
=
ceil
(
arraySize
/
32
.
0
);
for
(
int
i
=
0
;
i
<
arrayInd
;
i
++
)
{
out
[
3
+
i
*
4
]
=
((
in
[
i
]
&
(
0x0000000f
))
<<
4
)
|
((
in
[
i
]
&
(
0x000000f0
))
>>
4
);
out
[
4
+
i
*
4
]
=
(((
in
[
i
]
&
(
0x00000f00
))
<<
4
)
|
((
in
[
i
]
&
(
0x0000f000
))
>>
4
))
>>
8
;
out
[
5
+
i
*
4
]
=
(((
in
[
i
]
&
(
0x000f0000
))
<<
4
)
|
((
in
[
i
]
&
(
0x00f00000
))
>>
4
))
>>
16
;
out
[
6
+
i
*
4
]
=
(((
in
[
i
]
&
(
0x0f000000
))
<<
4
)
|
((
in
[
i
]
&
(
0xf0000000
))
>>
4
))
>>
24
;
}
}
openair1/PHY/CODING/nrPolar_tools/nr_polar_bit_insertion.c
deleted
100644 → 0
View file @
d2f2dfc0
/*
* 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
*/
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
void
nr_polar_bit_insertion
(
uint8_t
*
input
,
uint8_t
*
output
,
uint16_t
N
,
uint16_t
K
,
int16_t
*
Q_I_N
,
int16_t
*
Q_PC_N
,
uint8_t
n_PC
){
uint16_t
k
=
0
;
uint8_t
flag
;
if
(
n_PC
>
0
)
{
/*
*
*/
}
else
{
for
(
int
n
=
0
;
n
<=
N
-
1
;
n
++
)
{
flag
=
0
;
for
(
int
m
=
0
;
m
<=
(
K
+
n_PC
)
-
1
;
m
++
)
{
if
(
n
==
Q_I_N
[
m
])
{
flag
=
1
;
break
;
}
}
if
(
flag
)
{
// n ϵ Q_I_N
output
[
n
]
=
input
[
k
];
k
++
;
}
else
{
output
[
n
]
=
0
;
}
}
}
}
openair1/PHY/CODING/nrPolar_tools/nr_polar_channel_interleaver_pattern.c
deleted
100644 → 0
View file @
d2f2dfc0
/*
* 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
*/
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
void
nr_polar_channel_interleaver_pattern
(
uint16_t
*
cip
,
uint8_t
I_BIL
,
uint16_t
E
){
if
(
I_BIL
==
1
)
{
uint16_t
T
=
0
,
k
;
while
(
((
T
/
2
)
*
(
T
+
1
))
<
E
)
T
++
;
int16_t
**
v
=
malloc
(
T
*
sizeof
(
*
v
));
for
(
int
i
=
0
;
i
<=
T
-
1
;
i
++
)
v
[
i
]
=
malloc
((
T
-
i
)
*
sizeof
(
*
(
v
[
i
])));
k
=
0
;
for
(
int
i
=
0
;
i
<=
T
-
1
;
i
++
)
{
for
(
int
j
=
0
;
j
<=
(
T
-
1
)
-
i
;
j
++
)
{
if
(
k
<
E
)
{
v
[
i
][
j
]
=
k
;
}
else
{
v
[
i
][
j
]
=
(
-
1
);
}
k
++
;
}
}
k
=
0
;
for
(
int
j
=
0
;
j
<=
T
-
1
;
j
++
)
{
for
(
int
i
=
0
;
i
<=
(
T
-
1
)
-
j
;
i
++
)
{
if
(
v
[
i
][
j
]
!=
(
-
1
)
)
{
cip
[
k
]
=
v
[
i
][
j
];
k
++
;
}
}
}
for
(
int
i
=
0
;
i
<=
T
-
1
;
i
++
)
free
(
v
[
i
]);
free
(
v
);
}
else
{
for
(
int
i
=
0
;
i
<=
E
-
1
;
i
++
)
cip
[
i
]
=
i
;
}
}
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
View file @
ed211ca2
...
...
@@ -247,16 +247,16 @@ int8_t polar_decoder(
for
(
uint8_t
i
=
0
;
i
<
fmin
(
listSize
,
(
pow
(
2
,
polarParams
->
crcCorrectionBits
))
);
i
++
)
{
if
(
crcState
[
listIndex
[
i
]]
==
1
)
{
for
(
int
j
=
0
;
j
<
polarParams
->
N
;
j
++
)
polarParams
->
nr_polar_
u
[
j
]
=
bit
[
j
][
0
][
listIndex
[
i
]];
for
(
int
j
=
0
;
j
<
polarParams
->
N
;
j
++
)
polarParams
->
nr_polar_
U
[
j
]
=
bit
[
j
][
0
][
listIndex
[
i
]];
//Extract the information bits (û to ĉ)
nr_polar_info_bit_extraction
(
polarParams
->
nr_polar_
u
,
polarParams
->
nr_polar_c
Prime
,
polarParams
->
information_bit_pattern
,
polarParams
->
N
);
nr_polar_info_bit_extraction
(
polarParams
->
nr_polar_
U
,
polarParams
->
nr_polar_C
Prime
,
polarParams
->
information_bit_pattern
,
polarParams
->
N
);
//Deinterleaving (ĉ to b)
nr_polar_deinterleaver
(
polarParams
->
nr_polar_
cPrime
,
polarParams
->
nr_polar_b
,
polarParams
->
interleaving_pattern
,
polarParams
->
K
);
nr_polar_deinterleaver
(
polarParams
->
nr_polar_
CPrime
,
polarParams
->
nr_polar_B
,
polarParams
->
interleaving_pattern
,
polarParams
->
K
);
//Remove the CRC (â)
for
(
int
j
=
0
;
j
<
polarParams
->
payloadBits
;
j
++
)
polarParams
->
nr_polar_
a
[
j
]
=
polarParams
->
nr_polar_b
[
j
];
for
(
int
j
=
0
;
j
<
polarParams
->
payloadBits
;
j
++
)
polarParams
->
nr_polar_
A
[
j
]
=
polarParams
->
nr_polar_B
[
j
];
break
;
}
...
...
@@ -274,7 +274,7 @@ int8_t polar_decoder(