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
Michael Black
OpenXG-RAN
Commits
053ccd6b
Commit
053ccd6b
authored
6 years ago
by
Elena Lukashova
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Extending MRC_TM34 for bigger number of receive and transmit antennas.
parent
9276a4ae
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
96 additions
and
36 deletions
+96
-36
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
+96
-36
No files found.
openair1/PHY/LTE_UE_TRANSPORT/dlsch_demodulation.c
View file @
053ccd6b
...
...
@@ -3443,7 +3443,11 @@ void dlsch_detection_mrc_TM34(LTE_DL_FRAME_PARMS *frame_parms,
unsigned
char
dual_stream_UE
)
{
int
i
;
__m128i *rxdataF_comp128_0,*rxdataF_comp128_1,*rxdataF_comp128_i0,*rxdataF_comp128_i1,*dl_ch_mag128_0,*dl_ch_mag128_1,*dl_ch_mag128_0b,*dl_ch_mag128_1b,*rho128_0,*rho128_1,*rho128_i0,*rho128_i1,*dl_ch_mag128_i0,*dl_ch_mag128_i1,*dl_ch_mag128_i0b,*dl_ch_mag128_i1b;
__m128i
*
rxdataF_comp128_0
,
*
rxdataF_comp128_1
;
__m128i
*
dl_ch_mag128_0
,
*
dl_ch_mag128_1
;
__m128i
*
dl_ch_mag128_0b
,
*
dl_ch_mag128_1b
;
__m128i
*
rho128_0
,
*
rho128_1
;
int
**
rxdataF_comp0
=
pdsch_vars
->
rxdataF_comp0
;
int
**
rxdataF_comp1
=
pdsch_vars
->
rxdataF_comp1
[
harq_pid
][
round
];
...
...
@@ -3454,60 +3458,116 @@ void dlsch_detection_mrc_TM34(LTE_DL_FRAME_PARMS *frame_parms,
int
**
dl_ch_magb0
=
pdsch_vars
->
dl_ch_magb0
;
int
**
dl_ch_magb1
=
pdsch_vars
->
dl_ch_magb1
[
harq_pid
][
round
];
if (frame_parms->nb_antennas_rx>1) {
rxdataF_comp128_0 = (__m128i *)&rxdataF_comp
0[0][symbol*frame_parms->N_RB_DL*12];
rxdataF_comp128_1 = (__m128i *)&rxdataF_comp
0[1][symbol*frame_parms->N_RB_DL*12];
dl_ch_mag128_0 = (__m128i *)&dl_ch_mag
0[0][symbol*frame_parms->N_RB_DL*12];
dl_ch_mag128_1 = (__m128i *)&dl_ch_mag
0[1][symbol*frame_parms->N_RB_DL*12];
dl_ch_mag128_0b = (__m128i *)&dl_ch_magb0
[0][symbol*frame_parms->N_RB_DL*12];
dl_ch_mag128_1b = (__m128i *)&dl_ch_magb0
[1][symbol*frame_parms->N_RB_DL*12];
rxdataF_comp128_0
=
(
__m128i
*
)
&
rxdataF_comp0
[
0
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rxdataF_comp128_1
=
(
__m128i
*
)
&
rxdataF_comp0
[
1
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_0
=
(
__m128i
*
)
&
dl_ch_mag
0
[
0
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_1
=
(
__m128i
*
)
&
dl_ch_mag
0
[
1
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_0b
=
(
__m128i
*
)
&
dl_ch_magb
0
[
0
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_1b
=
(
__m128i
*
)
&
dl_ch_magb
0
[
1
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rho128_0
=
(
__m128i
*
)
&
dl_ch_rho2_ext
[
0
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rho128_1
=
(
__m128i
*
)
&
dl_ch_rho2_ext
[
1
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
// MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM llr computation)
for (i=0;i<nb_rb*3;i++) {
rxdataF_comp128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rxdataF_comp128_0[i],1),_mm_srai_epi16(rxdataF_comp128_1[i],1));
dl_ch_mag128_0[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0[i],1),_mm_srai_epi16(dl_ch_mag128_1[i],1));
dl_ch_mag128_0b[i] = _mm_adds_epi16(_mm_srai_epi16(dl_ch_mag128_0b[i],1),_mm_srai_epi16(dl_ch_mag128_1b[i],1));
// print_shorts("mrc compens0:",&rxdataF_comp128_0[i]);
// print_shorts("mrc mag128_0:",&dl_ch_mag128_0[i]);
// print_shorts("mrc mag128_0b:",&dl_ch_mag128_0b[i]);
} }
for
(
i
=
0
;
i
<
nb_rb
*
3
;
i
++
)
{
rxdataF_comp128_0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rxdataF_comp128_0
[
i
],
1
),
_mm_srai_epi16
(
rxdataF_comp128_1
[
i
],
1
));
dl_ch_mag128_0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_0
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_1
[
i
],
1
));
dl_ch_mag128_0b
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_0b
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_1b
[
i
],
1
));
rho128_0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rho128_0
[
i
],
1
),
_mm_srai_epi16
(
rho128_1
[
i
],
1
));
if
(
frame_parms
->
nb_antennas_rx
>
2
)
{
__m128i
*
rxdataF_comp128_2
=
NULL
;
__m128i
*
rxdataF_comp128_3
=
NULL
;
__m128i
*
dl_ch_mag128_2
=
NULL
;
__m128i
*
dl_ch_mag128_3
=
NULL
;
__m128i
*
dl_ch_mag128_2b
=
NULL
;
__m128i
*
dl_ch_mag128_3b
=
NULL
;
__m128i
*
rho128_2
=
NULL
;
__m128i
*
rho128_3
=
NULL
;
rxdataF_comp128_2
=
(
__m128i
*
)
&
rxdataF_comp0
[
2
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rxdataF_comp128_3
=
(
__m128i
*
)
&
rxdataF_comp0
[
3
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_2
=
(
__m128i
*
)
&
dl_ch_mag0
[
2
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_3
=
(
__m128i
*
)
&
dl_ch_mag0
[
3
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_2b
=
(
__m128i
*
)
&
dl_ch_magb0
[
2
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_3b
=
(
__m128i
*
)
&
dl_ch_magb0
[
3
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rho128_2
=
(
__m128i
*
)
&
dl_ch_rho2_ext
[
2
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rho128_3
=
(
__m128i
*
)
&
dl_ch_rho2_ext
[
3
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
/*rxdataF_comp*/
rxdataF_comp128_2
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rxdataF_comp128_2
[
i
],
1
),
_mm_srai_epi16
(
rxdataF_comp128_3
[
i
],
1
));
rxdataF_comp128_0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rxdataF_comp128_0
[
i
],
1
),
_mm_srai_epi16
(
rxdataF_comp128_2
[
i
],
1
));
/*dl_ch_mag*/
dl_ch_mag128_2
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_2
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_3
[
i
],
1
));
dl_ch_mag128_0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_0
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_2
[
i
],
1
));
/*dl_ch_mag*/
dl_ch_mag128_2b
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_2b
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_3b
[
i
],
1
));
dl_ch_mag128_0b
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_0b
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_2b
[
i
],
1
));
/*rho*/
rho128_2
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rho128_2
[
i
],
1
),
_mm_srai_epi16
(
rho128_3
[
i
],
1
));
rho128_0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rho128_0
[
i
],
1
),
_mm_srai_epi16
(
rho128_2
[
i
],
1
));
}
}
// if (rho) {
rho128_0 = (__m128i *) &dl_ch_rho2_ext[0][symbol*frame_parms->N_RB_DL*12];
rho128_1 = (__m128i *) &dl_ch_rho2_ext[1][symbol*frame_parms->N_RB_DL*12];
for (i=0;i<nb_rb*3;i++) {
// print_shorts("mrc rho0:",&rho128_0[i]);
// print_shorts("mrc rho1:",&rho128_1[i]);
rho128_0[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_0[i],1),_mm_srai_epi16(rho128_1[i],1));
}
//}
if
(
dual_stream_UE
==
1
)
{
__m128i
*
dl_ch_mag128_i0
,
*
dl_ch_mag128_i1
;
__m128i
*
dl_ch_mag128_i0b
,
*
dl_ch_mag128_i1b
;
__m128i
*
rho128_i0
,
*
rho128_i1
;
__m128i
*
rxdataF_comp128_i0
,
*
rxdataF_comp128_i1
;
if (dual_stream_UE == 1) {
rho128_i0 = (__m128i *) &dl_ch_rho_ext[0][symbol*frame_parms->N_RB_DL*12];
rho128_i1 = (__m128i *) &dl_ch_rho_ext[1][symbol*frame_parms->N_RB_DL*12];
rxdataF_comp128_i0
=
(
__m128i
*
)
&
rxdataF_comp1
[
0
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rxdataF_comp128_i1
=
(
__m128i
*
)
&
rxdataF_comp1
[
1
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_i0
=
(
__m128i
*
)
&
dl_ch_mag1
[
0
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_i1
=
(
__m128i
*
)
&
dl_ch_mag1
[
1
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_i0b
=
(
__m128i
*
)
&
dl_ch_magb1
[
0
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_i1b
=
(
__m128i
*
)
&
dl_ch_magb1
[
1
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rho128_i0
=
(
__m128i
*
)
&
dl_ch_rho_ext
[
0
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rho128_i1
=
(
__m128i
*
)
&
dl_ch_rho_ext
[
1
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
for
(
i
=
0
;
i
<
nb_rb
*
3
;
i
++
)
{
rxdataF_comp128_i0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rxdataF_comp128_i0
[
i
],
1
),
_mm_srai_epi16
(
rxdataF_comp128_i1
[
i
],
1
));
rho128_i0[i] = _mm_adds_epi16(_mm_srai_epi16(rho128_i0[i],1),_mm_srai_epi16(rho128_i1[i],1));
dl_ch_mag128_i0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_i0
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_i1
[
i
],
1
));
dl_ch_mag128_i0b
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_i0b
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_i1b
[
i
],
1
));
rho128_i0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rho128_i0
[
i
],
1
),
_mm_srai_epi16
(
rho128_i1
[
i
],
1
));
//print_shorts("mrc compens1:",&rxdataF_comp128_i0[i]);
//print_shorts("mrc mag128_i0:",&dl_ch_mag128_i0[i]);
//print_shorts("mrc mag128_i0b:",&dl_ch_mag128_i0b[i]);
if
(
frame_parms
->
nb_antennas_rx
>
2
)
{
__m128i
*
rxdataF_comp128_i2
=
NULL
;
__m128i
*
rxdataF_comp128_i3
=
NULL
;
__m128i
*
dl_ch_mag128_i2
=
NULL
;
__m128i
*
dl_ch_mag128_i3
=
NULL
;
__m128i
*
dl_ch_mag128_i2b
=
NULL
;
__m128i
*
dl_ch_mag128_i3b
=
NULL
;
__m128i
*
rho128_i2
=
NULL
;
__m128i
*
rho128_i3
=
NULL
;
rxdataF_comp128_i2
=
(
__m128i
*
)
&
rxdataF_comp1
[
2
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rxdataF_comp128_i3
=
(
__m128i
*
)
&
rxdataF_comp1
[
3
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_i2
=
(
__m128i
*
)
&
dl_ch_mag1
[
2
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_i3
=
(
__m128i
*
)
&
dl_ch_mag1
[
3
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_i2b
=
(
__m128i
*
)
&
dl_ch_magb1
[
2
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
dl_ch_mag128_i3b
=
(
__m128i
*
)
&
dl_ch_magb1
[
3
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rho128_i2
=
(
__m128i
*
)
&
dl_ch_rho_ext
[
2
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
rho128_i3
=
(
__m128i
*
)
&
dl_ch_rho_ext
[
3
][
symbol
*
frame_parms
->
N_RB_DL
*
12
];
/*rxdataF_comp*/
rxdataF_comp128_i2
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rxdataF_comp128_i2
[
i
],
1
),
_mm_srai_epi16
(
rxdataF_comp128_i3
[
i
],
1
));
rxdataF_comp128_i0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rxdataF_comp128_i0
[
i
],
1
),
_mm_srai_epi16
(
rxdataF_comp128_i2
[
i
],
1
));
/*dl_ch_mag*/
dl_ch_mag128_i2
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_i2
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_i3
[
i
],
1
));
dl_ch_mag128_i0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_i0
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_i2
[
i
],
1
));
/*dl_ch_mag*/
dl_ch_mag128_i2b
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_i2b
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_i3b
[
i
],
1
));
dl_ch_mag128_i0b
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
dl_ch_mag128_i0b
[
i
],
1
),
_mm_srai_epi16
(
dl_ch_mag128_i2b
[
i
],
1
));
/*rho*/
rho128_i2
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rho128_i2
[
i
],
1
),
_mm_srai_epi16
(
rho128_i3
[
i
],
1
));
rho128_i0
[
i
]
=
_mm_adds_epi16
(
_mm_srai_epi16
(
rho128_i0
[
i
],
1
),
_mm_srai_epi16
(
rho128_i2
[
i
],
1
));
}
}
}
_mm_empty
();
_m_empty
();
}
...
...
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