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
08ff33a0
Commit
08ff33a0
authored
4 years ago
by
sfn
Committed by
Thomas Schlichter
4 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix llr calculation to support multiple layers
parent
77a450d0
Changes
3
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
197 additions
and
398 deletions
+197
-398
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+155
-310
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
+30
-73
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+12
-15
No files found.
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
08ff33a0
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_llr_computation.c
View file @
08ff33a0
...
...
@@ -629,7 +629,7 @@ __m128i tmp_result4 __attribute__ ((aligned(16)));
//----------------------------------------------------------------------------------------------
int
nr_dlsch_qpsk_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t *
*
rxdataF_comp,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
uint8_t
symbol
,
uint32_t
len
,
...
...
@@ -638,7 +638,7 @@ int nr_dlsch_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
uint8_t
beamforming_mode
)
{
uint32_t *rxF = (uint32_t
*)&rxdataF_comp[0]
[((int32_t)symbol*nb_rb*12)];
uint32_t
*
rxF
=
(
uint32_t
*
)
&
rxdataF_comp
[((
int32_t
)
symbol
*
nb_rb
*
12
)];
uint32_t
*
llr32
;
int
i
;
...
...
@@ -670,24 +670,23 @@ int nr_dlsch_qpsk_llr(NR_DL_FRAME_PARMS *frame_parms,
//----------------------------------------------------------------------------------------------
void
nr_dlsch_16qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t *
*
rxdataF_comp,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t *
*
dl_ch_mag,
int32_t
*
dl_ch_mag
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
,
int16_t **llr32p,
uint8_t
beamforming_mode
)
{
#if defined(__x86_64__) || defined(__i386__)
__m128i *rxF = (__m128i*)&rxdataF_comp[
0][
(symbol*nb_rb*12)];
__m128i
*
rxF
=
(
__m128i
*
)
&
rxdataF_comp
[(
symbol
*
nb_rb
*
12
)];
__m128i
*
ch_mag
;
__m128i
llr128
[
2
];
uint32_t
*
llr32
;
#elif defined(__arm__)
int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[
0][
(symbol*nb_rb*12)];
int16x8_t
*
rxF
=
(
int16x8_t
*
)
&
rxdataF_comp
[(
symbol
*
nb_rb
*
12
)];
int16x8_t
*
ch_mag
;
int16x8_t
xmm0
;
int16_t
*
llr16
;
...
...
@@ -699,30 +698,17 @@ void nr_dlsch_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
#if defined(__x86_64__) || defined(__i386__)
if (first_symbol_flag==1) {
llr32
=
(
uint32_t
*
)
dlsch_llr
;
} else {
llr32 = (uint32_t*)*llr32p;
}
#elif defined(__arm__)
if (first_symbol_flag==1) {
llr16
=
(
int16_t
*
)
dlsch_llr
;
} else {
llr16 = (int16_t*)*llr32p;
}
#endif
#if defined(__x86_64__) || defined(__i386__)
ch_mag = (__m128i*)&dl_ch_mag[
0][
(symbol*nb_rb*12)];
ch_mag
=
(
__m128i
*
)
&
dl_ch_mag
[(
symbol
*
nb_rb
*
12
)];
#elif defined(__arm__)
ch_mag = (int16x8_t*)&dl_ch_mag[
0][
(symbol*nb_rb*12)];
ch_mag
=
(
int16x8_t
*
)
&
dl_ch_mag
[(
symbol
*
nb_rb
*
12
)];
#endif
// update output pointer according to number of REs in this symbol (<<2 because 4 bits per RE)
if (first_symbol_flag == 1)
*llr32p = dlsch_llr + (len<<2);
else
*llr32p += (len<<2);
// printf("len=%d\n", len);
len_mod4
=
len
&
3
;
...
...
@@ -786,47 +772,35 @@ void nr_dlsch_16qam_llr(NR_DL_FRAME_PARMS *frame_parms,
//----------------------------------------------------------------------------------------------
void
nr_dlsch_64qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t *
*
rxdataF_comp,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t *
*
dl_ch_mag,
int32_t *
*
dl_ch_magb,
int32_t
*
dl_ch_mag
,
int32_t
*
dl_ch_magb
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
,
uint32_t llr_offset,
uint8_t
beamforming_mode
)
{
#if defined(__x86_64__) || defined(__i386__)
__m128i *rxF = (__m128i*)&rxdataF_comp[
0][
(symbol*nb_rb*12)];
__m128i
*
rxF
=
(
__m128i
*
)
&
rxdataF_comp
[(
symbol
*
nb_rb
*
12
)];
__m128i
*
ch_mag
,
*
ch_magb
;
#elif defined(__arm__)
int16x8_t *rxF = (int16x8_t*)&rxdataF_comp[
0][
(symbol*nb_rb*12)];
int16x8_t
*
rxF
=
(
int16x8_t
*
)
&
rxdataF_comp
[(
symbol
*
nb_rb
*
12
)];
int16x8_t
*
ch_mag
,
*
ch_magb
,
xmm1
,
xmm2
;
#endif
int
i
,
len2
;
unsigned
char
len_mod4
;
short *llr;
int16_t
*
llr2
;
int8_t *pllr_symbol;
/*
if (first_symbol_flag==1)
llr = dlsch_llr;
else
llr = *llr_save;
*/
llr = dlsch_llr;
pllr_symbol = (int8_t*)dlsch_llr;
pllr_symbol += llr_offset;
llr2
=
dlsch_llr
;
#if defined(__x86_64__) || defined(__i386__)
ch_mag = (__m128i*)&dl_ch_mag[
0][
(symbol*nb_rb*12)];
ch_magb = (__m128i*)&dl_ch_magb[
0][
(symbol*nb_rb*12)];
ch_mag
=
(
__m128i
*
)
&
dl_ch_mag
[(
symbol
*
nb_rb
*
12
)];
ch_magb
=
(
__m128i
*
)
&
dl_ch_magb
[(
symbol
*
nb_rb
*
12
)];
#elif defined(__arm__)
ch_mag = (int16x8_t*)&dl_ch_mag[
0][
(symbol*nb_rb*12)];
ch_magb = (int16x8_t*)&dl_ch_magb[
0][
(symbol*nb_rb*12)];
ch_mag
=
(
int16x8_t
*
)
&
dl_ch_mag
[(
symbol
*
nb_rb
*
12
)];
ch_magb
=
(
int16x8_t
*
)
&
dl_ch_magb
[(
symbol
*
nb_rb
*
12
)];
#endif
// printf("nr_dlsch_64qam_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust);
...
...
@@ -838,9 +812,6 @@ void nr_dlsch_64qam_llr(NR_DL_FRAME_PARMS *frame_parms,
dlsch_llr,
pllr_symbol);*/
llr2 = llr;
llr += (len*6);
len_mod4
=
len
&
3
;
len2
=
len
>>
2
;
// length in quad words (4 REs)
len2
+=
((
len_mod4
==
0
)
?
0
:
1
);
...
...
@@ -1095,43 +1066,29 @@ void nr_dlsch_64qam_llr_SIC(NR_DL_FRAME_PARMS *frame_parms,
//----------------------------------------------------------------------------------------------
void
nr_dlsch_256qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t *
*
rxdataF_comp,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t *
*
dl_ch_mag,
int32_t *
*
dl_ch_magb,
int32_t *
*
dl_ch_magr,
int32_t
*
dl_ch_mag
,
int32_t
*
dl_ch_magb
,
int32_t
*
dl_ch_magr
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
,
uint32_t llr_offset,
uint8_t
beamforming_mode
)
{
__m128i *rxF = (__m128i*)&rxdataF_comp[
0][
(symbol*nb_rb*12)];
__m128i
*
rxF
=
(
__m128i
*
)
&
rxdataF_comp
[(
symbol
*
nb_rb
*
12
)];
__m128i
*
ch_mag
,
*
ch_magb
,
*
ch_magr
;
int
i
,
len2
;
unsigned
char
len_mod4
;
short *llr;
int16_t
*
llr2
;
int8_t *pllr_symbol;
/*
if (first_symbol_flag==1)
llr = dlsch_llr;
else
llr = *llr_save;
*/
llr = dlsch_llr;
pllr_symbol = (int8_t*)dlsch_llr;
pllr_symbol += llr_offset;
llr2
=
dlsch_llr
;
ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*nb_rb*12)];
ch_magb = (__m128i*)&dl_ch_magb[0][(symbol*nb_rb*12)];
ch_magr = (__m128i*)&dl_ch_magr[0][(symbol*nb_rb*12)];
llr2 = llr;
llr += (len*8);
ch_mag
=
(
__m128i
*
)
&
dl_ch_mag
[(
symbol
*
nb_rb
*
12
)];
ch_magb
=
(
__m128i
*
)
&
dl_ch_magb
[(
symbol
*
nb_rb
*
12
)];
ch_magr
=
(
__m128i
*
)
&
dl_ch_magr
[(
symbol
*
nb_rb
*
12
)];
len_mod4
=
len
&
3
;
len2
=
len
>>
2
;
// length in quad words (4 REs)
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
08ff33a0
...
...
@@ -471,7 +471,7 @@ int nr_dlsch_64qam_64qam_llr(NR_DL_FRAME_PARMS *frame_parms,
@param beamforming_mode beamforming mode
*/
int32_t
nr_dlsch_qpsk_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
*
rxdataF_comp
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
uint8_t
symbol
,
uint32_t
len
,
...
...
@@ -505,14 +505,13 @@ int32_t nr_dlsch_qpsk_llr_SIC(NR_DL_FRAME_PARMS *frame_parms,
uint32_t
rb_alloc
);
void
nr_dlsch_16qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
*
rxdataF_comp
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t
*
*
dl_ch_mag
,
int32_t
*
dl_ch_mag
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
,
int16_t
**
llr32p
,
uint8_t
beamforming_mode
);
/**
\brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms
...
...
@@ -553,28 +552,26 @@ void dlsch_64qam_llr_SIC(NR_DL_FRAME_PARMS *frame_parms,
uint32_t
rb_alloc
);
void
nr_dlsch_64qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
*
rxdataF_comp
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t
*
*
dl_ch_mag
,
int32_t
*
*
dl_ch_magb
,
int32_t
*
dl_ch_mag
,
int32_t
*
dl_ch_magb
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
,
uint32_t
llr_offset
,
uint8_t
beamforming_mode
);
void
nr_dlsch_256qam_llr
(
NR_DL_FRAME_PARMS
*
frame_parms
,
int32_t
*
*
rxdataF_comp
,
int32_t
*
rxdataF_comp
,
int16_t
*
dlsch_llr
,
int32_t
*
*
dl_ch_mag
,
int32_t
*
*
dl_ch_magb
,
int32_t
*
*
dl_ch_magr
,
int32_t
*
dl_ch_mag
,
int32_t
*
dl_ch_magb
,
int32_t
*
dl_ch_magr
,
uint8_t
symbol
,
uint32_t
len
,
uint8_t
first_symbol_flag
,
uint16_t
nb_rb
,
uint32_t
llr_offset
,
uint8_t
beamforming_mode
);
/** \fn dlsch_siso(NR_DL_FRAME_PARMS *frame_parms,
...
...
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