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
canghaiwuhen
OpenXG-RAN
Commits
860c9907
Commit
860c9907
authored
May 18, 2018
by
Guy De Souza
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Polar encoding init
parent
5cf8d93a
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
38 additions
and
112 deletions
+38
-112
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+25
-0
openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c
openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c
+4
-112
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+5
-0
openair1/PHY/defs_nr_common.h
openair1/PHY/defs_nr_common.h
+4
-0
No files found.
cmake_targets/CMakeLists.txt
View file @
860c9907
...
@@ -1061,11 +1061,35 @@ set(PHY_LDPCSRC
...
@@ -1061,11 +1061,35 @@ set(PHY_LDPCSRC
${
OPENAIR1_DIR
}
/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrLDPC_encoder/ldpc_encoder2.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrLDPC_encoder/ldpc_generate_coefficient.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrLDPC_encoder/ldpc_generate_coefficient.c
)
)
set
(
PHY_POLARSRC
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_init.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/get_3GPP_info_bit_pattern.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/get_crc_generator_matrix.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/get_PC_bit_pattern.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_2.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_decoding_tools.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_info_bit_pattern.c
${
OPENAIR1_DIR
}
/PHY/CODING/nrPolar_tools/nr_polar_interleave.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_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
set
(
PHY_TURBOIF
${
OPENAIR1_DIR
}
/PHY/CODING/coding_load.c
${
OPENAIR1_DIR
}
/PHY/CODING/coding_load.c
)
)
add_library
(
coding MODULE
${
PHY_TURBOSRC
}
)
add_library
(
coding MODULE
${
PHY_TURBOSRC
}
)
set
(
PHY_SRC_COMMON
set
(
PHY_SRC_COMMON
# depend on code generation from asn1c
# depend on code generation from asn1c
${
RRC_FULL_DIR
}
/asn1_constants.h
${
RRC_FULL_DIR
}
/asn1_constants.h
...
@@ -1214,6 +1238,7 @@ set(PHY_SRC_UE
...
@@ -1214,6 +1238,7 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/TOOLS/sqrt.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/sqrt.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/time_meas.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/time_meas.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lut.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lut.c
${
PHY_POLARSRC
}
)
)
set
(
PHY_NR_UE_SRC
set
(
PHY_NR_UE_SRC
...
...
openair1/PHY/CODING/nrPolar_tools/nr_crc_byte.c
View file @
860c9907
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
/*ref 38-212 v15.0.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
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
poly11
=
0xe2100000
;
// 1110 0010 0001 D^11 + D^10 + D^9 + D^5 + 1
unsigned
int
poly6
=
0x61000000
;
// 0110 0001 D^6 + D^5 + 1
/*********************************************************
For initialization && verification purposes,
bit by bit implementation with any polynomial
The first bit is in the MSB of each byte
*********************************************************/
unsigned
int
crcbit
(
unsigned
char
*
inputptr
,
int
octetlen
,
unsigned
int
poly
)
{
unsigned
int
i
,
crc
=
0
,
c
;
while
(
octetlen
--
>
0
)
{
c
=
(
*
inputptr
++
)
<<
24
;
for
(
i
=
8
;
i
!=
0
;
i
--
)
{
if
((
1
<<
31
)
&
(
c
^
crc
))
crc
=
(
crc
<<
1
)
^
poly
;
else
crc
<<=
1
;
c
<<=
1
;
}
}
return
crc
;
}
/*********************************************************
/*********************************************************
crc table initialization
crc table initialization
*********************************************************/
*********************************************************/
static
unsigned
int
crc24aTable
[
256
];
/*static unsigned int crc24cTable[256];
static
unsigned
int
crc24bTable
[
256
];
static
unsigned
int
crc24cTable
[
256
];
static
unsigned
short
crc16Table
[
256
];
static unsigned short crc11Table[256];
static unsigned short crc11Table[256];
static unsigned char crc6Table[256];
static unsigned char crc6Table[256];
void
crcTableInit
(
void
)
{
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
);
crc11Table
[
c
]
=
(
unsigned
short
)
(
crcbit
(
&
c
,
1
,
poly11
)
>>
16
);
crc6Table
[
c
]
=
(
unsigned
char
)
(
crcbit
(
&
c
,
1
,
poly6
)
>>
24
);
}
while
(
++
c
);
}
/*********************************************************
Byte by byte implementations,
assuming initial byte is 0 padded (in MSB) if necessary
*********************************************************/
unsigned
int
crc24a
(
unsigned
char
*
inptr
,
int
bitlen
)
{
int
octetlen
,
resbit
;
unsigned
int
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
while
(
octetlen
--
>
0
)
{
// printf("in %x => crc %x\n",crc,*inptr);
crc
=
(
crc
<<
8
)
^
crc24aTable
[(
*
inptr
++
)
^
(
crc
>>
24
)];
}
if
(
resbit
>
0
)
crc
=
(
crc
<<
resbit
)
^
crc24aTable
[((
*
inptr
)
>>
(
8
-
resbit
))
^
(
crc
>>
(
32
-
resbit
))];
return
crc
;
}
unsigned
int
crc24b
(
unsigned
char
*
inptr
,
int
bitlen
)
{
int
octetlen
,
resbit
;
unsigned
int
crc
=
0
;
octetlen
=
bitlen
/
8
;
resbit
=
(
bitlen
%
8
);
while
(
octetlen
--
>
0
)
{
crc
=
(
crc
<<
8
)
^
crc24bTable
[(
*
inptr
++
)
^
(
crc
>>
24
)];
}
if
(
resbit
>
0
)
crc
=
(
crc
<<
resbit
)
^
crc24bTable
[((
*
inptr
)
>>
(
8
-
resbit
))
^
(
crc
>>
(
32
-
resbit
))];
return
crc
;
}
unsigned int crc24c (unsigned char * inptr, int bitlen)
unsigned int crc24c (unsigned char * inptr, int bitlen)
{
{
...
@@ -122,29 +30,13 @@ unsigned int crc24c (unsigned char * inptr, int bitlen)
...
@@ -122,29 +30,13 @@ unsigned int crc24c (unsigned char * inptr, int bitlen)
return crc;
return crc;
}
}
unsigned
int
crc16
(
unsigned
char
*
inptr
,
int
bitlen
)
{
int
octetlen
,
resbit
;
unsigned
int
crc
=
0
;
octetlen
=
bitlen
/
8
;
/* Change in octets */
resbit
=
(
bitlen
%
8
);
while
(
octetlen
--
>
0
)
{
crc
=
(
crc
<<
8
)
^
(
crc16Table
[(
*
inptr
++
)
^
(
crc
>>
24
)]
<<
16
);
}
if
(
resbit
>
0
)
crc
=
(
crc
<<
resbit
)
^
(
crc16Table
[((
*
inptr
)
>>
(
8
-
resbit
))
^
(
crc
>>
(
32
-
resbit
))]
<<
16
);
return
crc
;
}
unsigned int crc11 (unsigned char * inptr, int bitlen)
unsigned int crc11 (unsigned char * inptr, int bitlen)
{
{
int octetlen, resbit;
int octetlen, resbit;
unsigned int crc = 0;
unsigned int crc = 0;
octetlen
=
bitlen
/
8
;
/
* Change in octets */
octetlen = bitlen / 8; /
/ Change in octets
resbit = (bitlen % 8);
resbit = (bitlen % 8);
while (octetlen-- > 0) {
while (octetlen-- > 0) {
...
@@ -161,7 +53,7 @@ unsigned int crc6 (unsigned char * inptr, int bitlen)
...
@@ -161,7 +53,7 @@ unsigned int crc6 (unsigned char * inptr, int bitlen)
{
{
int octetlen, resbit;
int octetlen, resbit;
unsigned int crc = 0;
unsigned int crc = 0;
octetlen
=
bitlen
/
8
;
/
* Change in octets */
octetlen = bitlen / 8; /
/ Change in octets
resbit = (bitlen % 8);
resbit = (bitlen % 8);
while (octetlen-- > 0) {
while (octetlen-- > 0) {
...
@@ -237,7 +129,7 @@ uint8_t check_crc(uint8_t *decoded_bytes, uint16_t len, uint8_t crc_type)
...
@@ -237,7 +129,7 @@ uint8_t check_crc(uint8_t *decoded_bytes, uint16_t len, uint8_t crc_type)
printf("old CRC %x, CRC %x \n",oldcrc,crc);
printf("old CRC %x, CRC %x \n",oldcrc,crc);
return (crc == oldcrc);
return (crc == oldcrc);
}
}
*/
uint8_t
**
crc24c_generator_matrix
(
uint16_t
payloadSizeBits
){
uint8_t
**
crc24c_generator_matrix
(
uint16_t
payloadSizeBits
){
...
...
openair1/PHY/INIT/nr_init.c
View file @
860c9907
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
#include "SCHED/sched_eNB.h"
#include "SCHED/sched_eNB.h"
#include "PHY/phy_extern.h"
#include "PHY/phy_extern.h"
#include "PHY/INIT/phy_init.h"
#include "PHY/INIT/phy_init.h"
#include "PHY/CODING/nrPolar_tools/nr_polar_pbch_defs.h"
#include "RadioResourceConfigCommonSIB.h"
#include "RadioResourceConfigCommonSIB.h"
#include "RadioResourceConfigDedicated.h"
#include "RadioResourceConfigDedicated.h"
#include "TDD-Config.h"
#include "TDD-Config.h"
...
@@ -112,7 +113,11 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
...
@@ -112,7 +113,11 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
);*/
);*/
LOG_D
(
PHY
,
"[MSC_NEW][FRAME 00000][PHY_gNB][MOD %02"
PRIu8
"][]
\n
"
,
gNB
->
Mod_id
);
LOG_D
(
PHY
,
"[MSC_NEW][FRAME 00000][PHY_gNB][MOD %02"
PRIu8
"][]
\n
"
,
gNB
->
Mod_id
);
// PBCH DMRS gold sequences generation
nr_init_pbch_dmrs
(
gNB
);
nr_init_pbch_dmrs
(
gNB
);
// Polar encoder init for PBCH
nr_polar_init
(
&
fp
->
pbch_polar_params
,
1
);
/*
/*
lte_gold(fp,gNB->lte_gold_table,fp->Nid_cell);
lte_gold(fp,gNB->lte_gold_table,fp->Nid_cell);
generate_pcfich_reg_mapping(fp);
generate_pcfich_reg_mapping(fp);
...
...
openair1/PHY/defs_nr_common.h
View file @
860c9907
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
#define __PHY_DEFS_NR_COMMON__H__
#define __PHY_DEFS_NR_COMMON__H__
#include "defs_common.h"
#include "defs_common.h"
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
#define nr_subframe_t lte_subframe_t
#define nr_subframe_t lte_subframe_t
...
@@ -110,7 +111,10 @@ typedef struct NR_DL_FRAME_PARMS {
...
@@ -110,7 +111,10 @@ typedef struct NR_DL_FRAME_PARMS {
//SSB related params
//SSB related params
/// Start in Subcarrier index of the SSB block
/// Start in Subcarrier index of the SSB block
uint16_t
ssb_start_subcarrier
;
uint16_t
ssb_start_subcarrier
;
/// SSB type
nr_ssb_type_e
ssb_type
;
nr_ssb_type_e
ssb_type
;
/// PBCH polar encoder params
t_nrPolar_params
pbch_polar_params
;
}
NR_DL_FRAME_PARMS
;
}
NR_DL_FRAME_PARMS
;
...
...
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