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
alex037yang
OpenXG-RAN
Commits
2cd4d9f6
Commit
2cd4d9f6
authored
5 years ago
by
sebastian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated packed LDPC output format to be compliant with 38.321
parent
2daf95a0
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
6 deletions
+19
-6
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_bnProc.h
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_bnProc.h
+19
-6
No files found.
openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_bnProc.h
View file @
2cd4d9f6
...
@@ -47,7 +47,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
...
@@ -47,7 +47,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc
int8_t
*
bnProcBufRes
=
p_procBuf
->
bnProcBufRes
;
int8_t
*
bnProcBufRes
=
p_procBuf
->
bnProcBufRes
;
int8_t
*
llrRes
=
p_procBuf
->
llrRes
;
int8_t
*
llrRes
=
p_procBuf
->
llrRes
;
int8_t
*
llrProcBuf
=
p_procBuf
->
llrProcBuf
;
int8_t
*
llrProcBuf
=
p_procBuf
->
llrProcBuf
;
__m128i
*
p_bnProcBuf
;
__m128i
*
p_bnProcBuf
;
__m256i
*
p_bnProcBufRes
;
__m256i
*
p_bnProcBufRes
;
__m128i
*
p_llrProcBuf
;
__m128i
*
p_llrProcBuf
;
...
@@ -1693,7 +1693,7 @@ static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBu
...
@@ -1693,7 +1693,7 @@ static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBu
int8_t
*
bnProcBuf
=
p_procBuf
->
bnProcBuf
;
int8_t
*
bnProcBuf
=
p_procBuf
->
bnProcBuf
;
int8_t
*
bnProcBufRes
=
p_procBuf
->
bnProcBufRes
;
int8_t
*
bnProcBufRes
=
p_procBuf
->
bnProcBufRes
;
int8_t
*
llrRes
=
p_procBuf
->
llrRes
;
int8_t
*
llrRes
=
p_procBuf
->
llrRes
;
__m256i
*
p_bnProcBuf
;
__m256i
*
p_bnProcBuf
;
__m256i
*
p_bnProcBufRes
;
__m256i
*
p_bnProcBufRes
;
__m256i
*
p_llrRes
;
__m256i
*
p_llrRes
;
...
@@ -2775,24 +2775,37 @@ static inline void nrLDPC_llr2bit(int8_t* out, int8_t* llrOut, uint16_t numLLR)
...
@@ -2775,24 +2775,37 @@ static inline void nrLDPC_llr2bit(int8_t* out, int8_t* llrOut, uint16_t numLLR)
}
}
/**
/**
\brief Performs hard-decision on output LLRs and packs the output in 32 bit values.
\brief Performs hard-decision on output LLRs and packs the output in byte aligned output according to TS 38.321 Section 6.1.1.
i = 0,1,2,...
IN[i] : a0, a1, a2, ..., a_{A-1}
OUT[i]: a7,a6,a5,a4,a3,a2,a1,a0|a15,14,...,a8|a23,a22,...,a16|a31,a30,...,a24|...
\param out Pointer hard-decision output, every int8_t contains 8 bits
\param out Pointer hard-decision output, every int8_t contains 8 bits
\param llrOut Pointer to output LLRs
\param llrOut Pointer to output LLRs
\param numLLR Number of LLRs
\param numLLR Number of LLRs
*/
*/
static
inline
void
nrLDPC_llr2bitPacked
(
int8_t
*
out
,
int8_t
*
llrOut
,
uint16_t
numLLR
)
static
inline
void
nrLDPC_llr2bitPacked
(
int8_t
*
out
,
int8_t
*
llrOut
,
uint16_t
numLLR
)
{
{
/** Vector for moving LSB 1 to MSB 1 */
const
uint8_t
const127_256_epu8
[
32
]
__attribute__
((
aligned
(
32
)))
=
{
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
};
/** Vector of indices for shuffling input */
const
uint8_t
constShuffle_256_epi8
[
32
]
__attribute__
((
aligned
(
32
)))
=
{
7
,
6
,
5
,
4
,
3
,
2
,
1
,
0
,
15
,
14
,
13
,
12
,
11
,
10
,
9
,
8
,
7
,
6
,
5
,
4
,
3
,
2
,
1
,
0
,
15
,
14
,
13
,
12
,
11
,
10
,
9
,
8
};
__m256i
*
p_llrOut
=
(
__m256i
*
)
llrOut
;
__m256i
*
p_llrOut
=
(
__m256i
*
)
llrOut
;
uint32_t
*
p_bits
=
(
uint32_t
*
)
out
;
uint32_t
*
p_bits
=
(
uint32_t
*
)
out
;
__m256i
inPerm
;
int8_t
*
p_llrOut8
;
int8_t
*
p_llrOut8
;
uint32_t
bitsTmp
=
0
;
uint32_t
bitsTmp
=
0
;
uint32_t
i
;
uint32_t
i
;
uint32_t
M
=
numLLR
>>
5
;
uint32_t
M
=
numLLR
>>
5
;
uint32_t
Mr
=
numLLR
&
31
;
uint32_t
Mr
=
numLLR
&
31
;
const
__m256i
*
p_127
=
(
__m256i
*
)
const127_256_epu8
;
const
__m256i
*
p_shuffle
=
(
__m256i
*
)
constShuffle_256_epi8
;
for
(
i
=
0
;
i
<
M
;
i
++
)
for
(
i
=
0
;
i
<
M
;
i
++
)
{
{
*
p_bits
++
=
_mm256_movemask_epi8
(
*
p_llrOut
);
inPerm
=
_mm256_shuffle_epi8
(
*
p_llrOut
,
*
p_shuffle
);
*
p_bits
++
=
_mm256_movemask_epi8
(
_mm256_adds_epu8
(
inPerm
,
*
p_127
));
p_llrOut
++
;
p_llrOut
++
;
}
}
...
@@ -2805,11 +2818,11 @@ static inline void nrLDPC_llr2bitPacked(int8_t* out, int8_t* llrOut, uint16_t nu
...
@@ -2805,11 +2818,11 @@ static inline void nrLDPC_llr2bitPacked(int8_t* out, int8_t* llrOut, uint16_t nu
{
{
if
(
p_llrOut8
[
i
]
<
0
)
if
(
p_llrOut8
[
i
]
<
0
)
{
{
bitsTmp
|=
(
1
<<
i
);
bitsTmp
|=
(
1
<<
((
7
-
i
)
+
(
16
*
(
i
/
8
)))
);
}
}
else
else
{
{
bitsTmp
&=
(
0
<<
i
);
bitsTmp
|=
(
0
<<
((
7
-
i
)
+
(
16
*
(
i
/
8
)))
);
}
}
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
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