Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
openairinterface5G
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
oai
openairinterface5G
Commits
58f6cb2a
Commit
58f6cb2a
authored
1 year ago
by
Luis Pereira
Browse files
Options
Downloads
Patches
Plain Diff
Implement function for reversing bits with better performance
parent
9127258a
No related branches found
Branches containing commit
No related tags found
Tags containing commit
2 merge requests
!2363
integration_2023_w39
,
!2343
Reverse bits in UCI message when using polar encoding/decoding
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
common/utils/nr/nr_common.c
+40
-0
40 additions, 0 deletions
common/utils/nr/nr_common.c
common/utils/nr/nr_common.h
+2
-0
2 additions, 0 deletions
common/utils/nr/nr_common.h
openair1/PHY/CODING/coding_defs.h
+0
-1
0 additions, 1 deletion
openair1/PHY/CODING/coding_defs.h
with
42 additions
and
1 deletion
common/utils/nr/nr_common.c
+
40
−
0
View file @
58f6cb2a
...
...
@@ -37,6 +37,46 @@
const
char
*
duplex_mode
[]
=
{
"FDD"
,
"TDD"
};
static
const
uint8_t
bit_reverse_table_256
[]
=
{
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
};
// Reverse bits implementation based on http://graphics.stanford.edu/~seander/bithacks.html
uint64_t
reverse_bits
(
uint64_t
in
,
int
n_bits
)
{
// Reverse n_bits in uint64_t variable, example:
// n_bits: 10
// in: 10 0000 1111
// return: 11 1100 0001
AssertFatal
(
n_bits
<=
64
,
"Maximum bits to reverse is 64, impossible to reverse %d bits!
\n
"
,
n_bits
);
uint64_t
rev_bits
=
0
;
uint8_t
*
p
=
(
uint8_t
*
)
&
in
;
uint8_t
*
q
=
(
uint8_t
*
)
&
rev_bits
;
int
n_bytes
=
n_bits
>>
3
;
for
(
int
n
=
0
;
n
<
n_bytes
;
n
++
)
{
q
[
n_bytes
-
1
-
n
]
=
bit_reverse_table_256
[
p
[
n
]];
}
// Reverse remaining bits (not aligned with 8-bit)
rev_bits
=
rev_bits
<<
(
n_bits
%
8
);
for
(
int
i
=
n_bytes
*
8
;
i
<
n_bits
;
i
++
)
{
rev_bits
|=
((
in
>>
i
)
&
0x1
)
<<
(
n_bits
-
i
-
1
);
}
return
rev_bits
;
}
static
const
int
tables_5_3_2
[
5
][
12
]
=
{
{
25
,
52
,
79
,
106
,
133
,
160
,
216
,
270
,
-
1
,
-
1
,
-
1
,
-
1
},
// 15 FR1
{
11
,
24
,
38
,
51
,
65
,
78
,
106
,
133
,
162
,
217
,
245
,
273
},
// 30 FR1
...
...
This diff is collapsed.
Click to expand it.
common/utils/nr/nr_common.h
+
2
−
0
View file @
58f6cb2a
...
...
@@ -90,6 +90,8 @@ static inline int get_num_dmrs(uint16_t dmrs_mask ) {
return
(
num_dmrs
);
}
uint64_t
reverse_bits
(
uint64_t
in
,
int
n_bits
);
int
get_first_ul_slot
(
int
nrofDownlinkSlots
,
int
nrofDownlinkSymbols
,
int
nrofUplinkSymbols
);
int
cce_to_reg_interleaving
(
const
int
R
,
int
k
,
int
n_shift
,
const
int
C
,
int
L
,
const
int
N_regs
);
int
get_SLIV
(
uint8_t
S
,
uint8_t
L
);
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/CODING/coding_defs.h
+
0
−
1
View file @
58f6cb2a
...
...
@@ -456,7 +456,6 @@ int32_t rate_matching_lte(uint32_t N_coded,
unsigned
int
crcbit
(
unsigned
char
*
inputptr
,
int
octetlen
,
unsigned
int
poly
);
int16_t
reverseBits
(
int32_t
,
int32_t
);
void
phy_viterbi_dot11
(
int8_t
*
,
uint8_t
*
,
uint16_t
);
int32_t
nr_segmentation
(
unsigned
char
*
input_buffer
,
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment