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
91c5bccc
Commit
91c5bccc
authored
Sep 28, 2023
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/bugfix-uci-bit-extraction' into integration_2023_w39
parents
1bc08b65
debd35a8
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
53 additions
and
12 deletions
+53
-12
common/utils/nr/nr_common.c
common/utils/nr/nr_common.c
+40
-0
common/utils/nr/nr_common.h
common/utils/nr/nr_common.h
+2
-0
openair1/PHY/CODING/coding_defs.h
openair1/PHY/CODING/coding_defs.h
+0
-1
openair1/PHY/NR_TRANSPORT/nr_pbch.c
openair1/PHY/NR_TRANSPORT/nr_pbch.c
+1
-3
openair1/PHY/NR_TRANSPORT/pucch_rx.c
openair1/PHY/NR_TRANSPORT/pucch_rx.c
+6
-2
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
+1
-5
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
+3
-1
No files found.
common/utils/nr/nr_common.c
View file @
91c5bccc
...
...
@@ -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
...
...
common/utils/nr/nr_common.h
View file @
91c5bccc
...
...
@@ -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
);
...
...
openair1/PHY/CODING/coding_defs.h
View file @
91c5bccc
...
...
@@ -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
,
...
...
openair1/PHY/NR_TRANSPORT/nr_pbch.c
View file @
91c5bccc
...
...
@@ -236,7 +236,6 @@ int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
uint16_t
M
;
uint8_t
nushift
;
uint32_t
unscrambling_mask
;
uint64_t
a_reversed
=
0
;
LOG_D
(
PHY
,
"PBCH generation started
\n
"
);
///Payload generation
NR_gNB_PBCH
m_pbch
;
...
...
@@ -298,8 +297,7 @@ int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
#endif
// Encoder reversal
for
(
int
i
=
0
;
i
<
NR_POLAR_PBCH_PAYLOAD_BITS
;
i
++
)
a_reversed
|=
(((
uint64_t
)
pbch
->
pbch_a_prime
>>
i
)
&
1
)
<<
(
31
-
i
);
uint64_t
a_reversed
=
reverse_bits
((
uint64_t
)
pbch
->
pbch_a_prime
,
NR_POLAR_PBCH_PAYLOAD_BITS
);
/// CRC, coding and rate matching
polar_encoder_fast
(
&
a_reversed
,
(
void
*
)
pbch
->
pbch_e
,
0
,
0
,
...
...
openair1/PHY/NR_TRANSPORT/pucch_rx.c
View file @
91c5bccc
...
...
@@ -1693,12 +1693,16 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
// run polar decoder on llrs
decoderState
=
polar_decoder_int16
((
int16_t
*
)
llrs
,
decodedPayload
,
0
,
NR_POLAR_UCI_PUCCH_MESSAGE_TYPE
,
nb_bit
,
pucch_pdu
->
prb_size
);
LOG_D
(
PHY
,
"UCI decoderState %d, payload[0] %llu
\n
"
,
decoderState
,(
unsigned
long
long
)
decodedPayload
[
0
]);
// Decoder reversal
decodedPayload
[
0
]
=
reverse_bits
(
decodedPayload
[
0
],
nb_bit
);
if
(
decoderState
>
0
)
decoderState
=
1
;
corr_dB
=
dB_fixed64
(
corr
);
LOG_D
(
PHY
,
"metric %d dB
\n
"
,
corr_dB
);
}
LOG_D
(
PHY
,
"UCI decoderState %d, payload[0] %llu
\n
"
,
decoderState
,
(
unsigned
long
long
)
decodedPayload
[
0
]);
// estimate CQI for MAC (from antenna port 0 only)
// TODO this computation is wrong -> to be ignored at MAC for now
int
SNRtimes10
=
dB_fixed_times10
(
signal_energy_nodc
((
int32_t
*
)
&
rxdataF
[
0
][
soffset
+
(
l2
*
frame_parms
->
ofdm_symbol_size
)
+
re_offset
[
0
]],
...
...
@@ -1761,7 +1765,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB,
}
bit_left
=
pucch_pdu
->
bit_len_csi_part1
-
((
csi_part1_bytes
-
1
)
<<
3
);
uci_pdu
->
csi_part1
.
csi_part1_payload
[
i
]
=
decodedPayload
[
0
]
&
((
1
<<
bit_left
)
-
1
);
decodedPayload
[
0
]
=
pucch_pdu
->
bit_len_csi_part1
<
64
?
decodedPayload
[
0
]
>>
pucch_pdu
->
bit_len_csi_part1
:
0
;
decodedPayload
[
0
]
=
pucch_pdu
->
bit_len_csi_part1
<
64
?
decodedPayload
[
0
]
>>
bit_left
:
0
;
}
if
(
pucch_pdu
->
bit_len_csi_part2
>
0
)
{
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
View file @
91c5bccc
...
...
@@ -493,12 +493,8 @@ int nr_rx_pbch(PHY_VARS_NR_UE *ue,
}
// printf("polar decoder output 0x%08x\n",pbch_a_prime);
// Decoder reversal
uint32_t
a_reversed
=
0
;
pbch_a_prime
=
(
uint32_t
)
reverse_bits
(
pbch_a_prime
,
NR_POLAR_PBCH_PAYLOAD_BITS
)
;
for
(
int
i
=
0
;
i
<
NR_POLAR_PBCH_PAYLOAD_BITS
;
i
++
)
a_reversed
|=
(((
uint64_t
)
pbch_a_prime
>>
i
)
&
1
)
<<
(
31
-
i
);
pbch_a_prime
=
a_reversed
;
//payload un-scrambling
M
=
(
Lmax
==
64
)
?
(
NR_POLAR_PBCH_PAYLOAD_BITS
-
6
)
:
(
NR_POLAR_PBCH_PAYLOAD_BITS
-
3
);
nushift
=
((
pbch_a_prime
>>
24
)
&
1
)
^
(((
pbch_a_prime
>>
6
)
&
1
)
<<
1
);
...
...
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
View file @
91c5bccc
...
...
@@ -644,7 +644,9 @@ static void nr_uci_encoding(uint64_t payload,
b
[
7
]
=
b
[
0
];
AssertFatal
(
nrofPRB
<=
16
,
"Number of PRB >16
\n
"
);
}
else
if
(
A
>=
12
)
{
AssertFatal
(
A
<
65
,
"Polar encoding not supported yet for UCI with more than 64 bits
\n
"
);
// Encoder reversal
payload
=
reverse_bits
(
payload
,
A
);
polar_encoder_fast
(
&
payload
,
b
,
0
,
0
,
NR_POLAR_UCI_PUCCH_MESSAGE_TYPE
,
A
,
...
...
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