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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
61340365
Commit
61340365
authored
Mar 05, 2024
by
mir
Committed by
sagar arora
May 22, 2024
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improved polar encoder
parent
f2bb622e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
114 additions
and
6 deletions
+114
-6
openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
+2
-0
openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
+9
-6
openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c
+103
-0
No files found.
openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
View file @
61340365
...
...
@@ -284,6 +284,8 @@ void nr_polar_generate_u(uint64_t *u,
void
nr_polar_uxG
(
uint64_t
*
D
,
const
uint64_t
*
u
,
const
fourDimArray_t
*
G_N_tab
,
uint16_t
N
);
void
nr_polar_uxG2
(
uint8_t
*
D
,
uint8_t
const
*
u
,
size_t
N
);
void
nr_polar_info_extraction_from_u
(
uint64_t
*
Cprime
,
const
uint8_t
*
u
,
const
uint8_t
*
information_bit_pattern
,
...
...
openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
View file @
61340365
...
...
@@ -485,12 +485,13 @@ void build_polar_tables(t_nrPolar_params *polarParams) {
polarParams
->
rm_tab
[
tcnt
]
=
polarParams
->
rate_matching_pattern
[
outpos
]
>>
shift
;
}
void
polar_encoder_fast
(
uint64_t
*
A
,
void
*
out
,
int32_t
crcmask
,
uint8_t
ones_flag
,
int8_t
messageType
,
uint16_t
messageLength
,
int32_t
crcmask
,
uint8_t
ones_flag
,
int8_t
messageType
,
uint16_t
messageLength
,
uint8_t
aggregation_level
)
{
t_nrPolar_params
*
polarParams
=
nr_polar_params
(
messageType
,
messageLength
,
aggregation_level
,
false
);
...
...
@@ -687,8 +688,9 @@ void polar_encoder_fast(uint64_t *A,
printf
(
"
\n
"
);
#endif
uint64_t
D
[
8
]
=
{
0
};
nr_polar_uxG
(
D
,
u
,
polarParams
->
G_N_tab
,
polarParams
->
N
);
uint64_t
D
[
8
];
// nr_polar_uxG(D, u, polarParams->G_N_tab, polarParams->N);
nr_polar_uxG2
((
uint8_t
*
)
D
,
(
uint8_t
*
)
u
,
polarParams
->
N
);
#ifdef POLAR_CODING_DEBUG
printf
(
"d: "
);
...
...
@@ -701,6 +703,7 @@ void polar_encoder_fast(uint64_t *A,
printf
(
"%lu"
,
(
D
[
n1
]
>>
n2
)
&
1
);
}
printf
(
"
\n
"
);
fflush
(
stdout
);
#endif
memset
((
void
*
)
out
,
0
,
polarParams
->
encoderLength
>>
3
);
...
...
openair1/PHY/CODING/nrPolar_tools/nr_polar_procedures.c
View file @
61340365
...
...
@@ -32,6 +32,8 @@
#include "PHY/CODING/nrPolar_tools/nr_polar_defs.h"
#include <stdlib.h>
#include <stdint.h>
// TS 38.212 - Section 5.3.1.2 Polar encoding
void
nr_polar_generate_u
(
uint64_t
*
u
,
...
...
@@ -119,6 +121,107 @@ void nr_polar_info_extraction_from_u(uint64_t *Cprime,
}
}
static
void
encode_packed_byte
(
uint8_t
*
in_out
)
{
// *in_out ^= 0xAA & (*in_out << 1);
// *in_out ^= 0xCC & (*in_out << 2);
// *in_out ^= *in_out in_out << 4;
//
*
in_out
^=
0x55
&
(
*
in_out
>>
1
);
*
in_out
^=
0x33
&
(
*
in_out
>>
2
);
*
in_out
^=
*
in_out
>>
4
;
}
static
void
polar_encode_bits
(
uint8_t
*
in_out
,
size_t
N
)
{
int
num_bytes_per_block
=
N
>>
3
;
for
(
int
i
=
0
;
i
<
num_bytes_per_block
;
++
i
){
encode_packed_byte
(
&
in_out
[
i
]);
}
}
static
uint32_t
log2_floor
(
uint32_t
x
)
{
if
(
x
==
0
)
return
0
;
uint32_t
clz
=
__builtin_clz
(
x
);
return
31U
-
clz
;
}
static
void
polar_encode_bytes
(
uint8_t
*
in_out
,
size_t
N
)
{
int
brnch_sz
=
1
;
int
n_brnch
=
N
>>
4
;
size_t
const
blck_pwr
=
log2_floor
(
N
);
for
(
int
stage
=
3
;
stage
<
blck_pwr
;
++
stage
)
{
for
(
int
brnch
=
0
;
brnch
<
n_brnch
;
++
brnch
)
{
for
(
int
byte
=
0
;
byte
<
brnch_sz
;
++
byte
){
size_t
const
dst
=
2
*
brnch_sz
*
brnch
+
byte
;
in_out
[
dst
]
^=
in_out
[
dst
+
brnch_sz
];
}
}
n_brnch
>>=
1
;
brnch_sz
<<=
1
;
}
}
static
const
uint8_t
reverse_tbl
[]
=
{
0x00
,
0x80
,
0x40
,
0xc0
,
0x20
,
0xa0
,
0x60
,
0xe0
,
0x10
,
0x90
,
0x50
,
0xd0
,
0x30
,
0xb0
,
0x70
,
0xf0
,
0x08
,
0x88
,
0x48
,
0xc8
,
0x28
,
0xa8
,
0x68
,
0xe8
,
0x18
,
0x98
,
0x58
,
0xd8
,
0x38
,
0xb8
,
0x78
,
0xf8
,
0x04
,
0x84
,
0x44
,
0xc4
,
0x24
,
0xa4
,
0x64
,
0xe4
,
0x14
,
0x94
,
0x54
,
0xd4
,
0x34
,
0xb4
,
0x74
,
0xf4
,
0x0c
,
0x8c
,
0x4c
,
0xcc
,
0x2c
,
0xac
,
0x6c
,
0xec
,
0x1c
,
0x9c
,
0x5c
,
0xdc
,
0x3c
,
0xbc
,
0x7c
,
0xfc
,
0x02
,
0x82
,
0x42
,
0xc2
,
0x22
,
0xa2
,
0x62
,
0xe2
,
0x12
,
0x92
,
0x52
,
0xd2
,
0x32
,
0xb2
,
0x72
,
0xf2
,
0x0a
,
0x8a
,
0x4a
,
0xca
,
0x2a
,
0xaa
,
0x6a
,
0xea
,
0x1a
,
0x9a
,
0x5a
,
0xda
,
0x3a
,
0xba
,
0x7a
,
0xfa
,
0x06
,
0x86
,
0x46
,
0xc6
,
0x26
,
0xa6
,
0x66
,
0xe6
,
0x16
,
0x96
,
0x56
,
0xd6
,
0x36
,
0xb6
,
0x76
,
0xf6
,
0x0e
,
0x8e
,
0x4e
,
0xce
,
0x2e
,
0xae
,
0x6e
,
0xee
,
0x1e
,
0x9e
,
0x5e
,
0xde
,
0x3e
,
0xbe
,
0x7e
,
0xfe
,
0x01
,
0x81
,
0x41
,
0xc1
,
0x21
,
0xa1
,
0x61
,
0xe1
,
0x11
,
0x91
,
0x51
,
0xd1
,
0x31
,
0xb1
,
0x71
,
0xf1
,
0x09
,
0x89
,
0x49
,
0xc9
,
0x29
,
0xa9
,
0x69
,
0xe9
,
0x19
,
0x99
,
0x59
,
0xd9
,
0x39
,
0xb9
,
0x79
,
0xf9
,
0x05
,
0x85
,
0x45
,
0xc5
,
0x25
,
0xa5
,
0x65
,
0xe5
,
0x15
,
0x95
,
0x55
,
0xd5
,
0x35
,
0xb5
,
0x75
,
0xf5
,
0x0d
,
0x8d
,
0x4d
,
0xcd
,
0x2d
,
0xad
,
0x6d
,
0xed
,
0x1d
,
0x9d
,
0x5d
,
0xdd
,
0x3d
,
0xbd
,
0x7d
,
0xfd
,
0x03
,
0x83
,
0x43
,
0xc3
,
0x23
,
0xa3
,
0x63
,
0xe3
,
0x13
,
0x93
,
0x53
,
0xd3
,
0x33
,
0xb3
,
0x73
,
0xf3
,
0x0b
,
0x8b
,
0x4b
,
0xcb
,
0x2b
,
0xab
,
0x6b
,
0xeb
,
0x1b
,
0x9b
,
0x5b
,
0xdb
,
0x3b
,
0xbb
,
0x7b
,
0xfb
,
0x07
,
0x87
,
0x47
,
0xc7
,
0x27
,
0xa7
,
0x67
,
0xe7
,
0x17
,
0x97
,
0x57
,
0xd7
,
0x37
,
0xb7
,
0x77
,
0xf7
,
0x0f
,
0x8f
,
0x4f
,
0xcf
,
0x2f
,
0xaf
,
0x6f
,
0xef
,
0x1f
,
0x9f
,
0x5f
,
0xdf
,
0x3f
,
0xbf
,
0x7f
,
0xff
,
};
void
nr_polar_uxG2
(
uint8_t
*
D2
,
uint8_t
const
*
u
,
size_t
N
)
{
uint8_t
tmp
[
N
/
8
];
for
(
int
i
=
0
;
i
<
N
/
8
;
++
i
)
tmp
[
i
]
=
u
[
N
/
8
-
1
-
i
];
for
(
int
i
=
0
;
i
<
N
/
8
;
++
i
)
D2
[
i
]
=
reverse_tbl
[
tmp
[
i
]];
// Do the encoding/xor for the bottom 3 levels of the tree.
// Thus, data remaining to encode, is in 2^3 type.
polar_encode_bits
(
D2
,
N
);
// Xor the remaining tree levels. Use bytes for it
polar_encode_bytes
(
D2
,
N
);
}
void
nr_polar_uxG
(
uint64_t
*
D
,
const
uint64_t
*
u
,
const
fourDimArray_t
*
G_N_tab
,
uint16_t
N
)
{
const
int
N64
=
N
/
64
;
...
...
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