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
spbro
OpenXG-RAN
Commits
2d3ac580
Commit
2d3ac580
authored
Sep 29, 2024
by
francescomani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
formatting
parent
ccdabb4c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
64 additions
and
63 deletions
+64
-63
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+64
-63
No files found.
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
2d3ac580
...
@@ -1257,7 +1257,7 @@ static void nr_dlsch_extract_rbs(uint32_t rxdataF_sz,
...
@@ -1257,7 +1257,7 @@ static void nr_dlsch_extract_rbs(uint32_t rxdataF_sz,
}
}
static
void
nr_dlsch_detection_mrc
(
uint32_t
rx_size_symbol
,
static
void
nr_dlsch_detection_mrc
(
uint32_t
rx_size_symbol
,
short
n
_tx
,
short
n
l
,
short
n_rx
,
short
n_rx
,
int32_t
rxdataF_comp
[][
n_rx
][
rx_size_symbol
*
NR_SYMBOLS_PER_SLOT
],
int32_t
rxdataF_comp
[][
n_rx
][
rx_size_symbol
*
NR_SYMBOLS_PER_SLOT
],
int
***
rho
,
int
***
rho
,
...
@@ -1268,19 +1268,19 @@ static void nr_dlsch_detection_mrc(uint32_t rx_size_symbol,
...
@@ -1268,19 +1268,19 @@ static void nr_dlsch_detection_mrc(uint32_t rx_size_symbol,
int
length
)
int
length
)
{
{
simde__m128i
*
rxdataF_comp128_0
,
*
rxdataF_comp128_1
,
*
dl_ch_mag128_0
,
*
dl_ch_mag128_1
,
*
dl_ch_mag128_0b
,
*
dl_ch_mag128_1b
,
*
dl_ch_mag128_0r
,
*
dl_ch_mag128_1r
;
simde__m128i
*
rxdataF_comp128_0
,
*
rxdataF_comp128_1
,
*
dl_ch_mag128_0
,
*
dl_ch_mag128_1
,
*
dl_ch_mag128_0b
,
*
dl_ch_mag128_1b
,
*
dl_ch_mag128_0r
,
*
dl_ch_mag128_1r
;
uint32_t
nb_rb_0
=
length
/
12
+
((
length
%
12
)
?
1
:
0
);
uint32_t
nb_rb_0
=
length
/
12
+
((
length
%
12
)
?
1
:
0
);
if
(
n_rx
>
1
)
{
if
(
n_rx
>
1
)
{
for
(
int
aatx
=
0
;
aatx
<
n_tx
;
aatx
++
)
{
for
(
int
l
=
0
;
l
<
nl
;
l
++
)
{
rxdataF_comp128_0
=
(
simde__m128i
*
)(
rxdataF_comp
[
aatx
][
0
]
+
symbol
*
rx_size_symbol
);
rxdataF_comp128_0
=
(
simde__m128i
*
)(
rxdataF_comp
[
l
][
0
]
+
symbol
*
rx_size_symbol
);
dl_ch_mag128_0
=
(
simde__m128i
*
)
dl_ch_mag
[
aatx
][
0
];
dl_ch_mag128_0
=
(
simde__m128i
*
)
dl_ch_mag
[
l
][
0
];
dl_ch_mag128_0b
=
(
simde__m128i
*
)
dl_ch_magb
[
aatx
][
0
];
dl_ch_mag128_0b
=
(
simde__m128i
*
)
dl_ch_magb
[
l
][
0
];
dl_ch_mag128_0r
=
(
simde__m128i
*
)
dl_ch_magr
[
aatx
][
0
];
dl_ch_mag128_0r
=
(
simde__m128i
*
)
dl_ch_magr
[
l
][
0
];
for
(
int
aarx
=
1
;
aarx
<
n_rx
;
aarx
++
)
{
for
(
int
aarx
=
1
;
aarx
<
n_rx
;
aarx
++
)
{
rxdataF_comp128_1
=
(
simde__m128i
*
)(
rxdataF_comp
[
aatx
][
aarx
]
+
symbol
*
rx_size_symbol
);
rxdataF_comp128_1
=
(
simde__m128i
*
)(
rxdataF_comp
[
l
][
aarx
]
+
symbol
*
rx_size_symbol
);
dl_ch_mag128_1
=
(
simde__m128i
*
)
dl_ch_mag
[
aatx
][
aarx
];
dl_ch_mag128_1
=
(
simde__m128i
*
)
dl_ch_mag
[
l
][
aarx
];
dl_ch_mag128_1b
=
(
simde__m128i
*
)
dl_ch_magb
[
aatx
][
aarx
];
dl_ch_mag128_1b
=
(
simde__m128i
*
)
dl_ch_magb
[
l
][
aarx
];
dl_ch_mag128_1r
=
(
simde__m128i
*
)
dl_ch_magr
[
aatx
][
aarx
];
dl_ch_mag128_1r
=
(
simde__m128i
*
)
dl_ch_magr
[
l
][
aarx
];
// MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM/256 llr computation)
// MRC on each re of rb, both on MF output and magnitude (for 16QAM/64QAM/256 llr computation)
for
(
int
i
=
0
;
i
<
nb_rb_0
*
3
;
i
++
)
{
for
(
int
i
=
0
;
i
<
nb_rb_0
*
3
;
i
++
)
{
...
@@ -1293,7 +1293,7 @@ static void nr_dlsch_detection_mrc(uint32_t rx_size_symbol,
...
@@ -1293,7 +1293,7 @@ static void nr_dlsch_detection_mrc(uint32_t rx_size_symbol,
}
}
#ifdef DEBUG_DLSCH_DEMOD
#ifdef DEBUG_DLSCH_DEMOD
for
(
int
i
=
0
;
i
<
nb_rb_0
*
3
;
i
++
)
{
for
(
int
i
=
0
;
i
<
nb_rb_0
*
3
;
i
++
)
{
printf
(
"symbol%d RB %d
\n
"
,
symbol
,
i
/
3
);
printf
(
"symbol%d RB %d
\n
"
,
symbol
,
i
/
3
);
rxdataF_comp128_0
=
(
simde__m128i
*
)(
rxdataF_comp
[
0
][
0
]
+
symbol
*
rx_size_symbol
);
rxdataF_comp128_0
=
(
simde__m128i
*
)(
rxdataF_comp
[
0
][
0
]
+
symbol
*
rx_size_symbol
);
rxdataF_comp128_1
=
(
simde__m128i
*
)(
rxdataF_comp
[
0
][
n_rx
]
+
symbol
*
rx_size_symbol
);
rxdataF_comp128_1
=
(
simde__m128i
*
)(
rxdataF_comp
[
0
][
n_rx
]
+
symbol
*
rx_size_symbol
);
print_shorts
(
"tx 1 mrc_re/mrc_Im:"
,(
int16_t
*
)
&
rxdataF_comp128_0
[
i
]);
print_shorts
(
"tx 1 mrc_re/mrc_Im:"
,(
int16_t
*
)
&
rxdataF_comp128_0
[
i
]);
...
@@ -1677,7 +1677,7 @@ void nr_conjch0_mult_ch1(int *ch0,
...
@@ -1677,7 +1677,7 @@ void nr_conjch0_mult_ch1(int *ch0,
*/
*/
static
void
nr_dlsch_mmse
(
uint32_t
rx_size_symbol
,
static
void
nr_dlsch_mmse
(
uint32_t
rx_size_symbol
,
unsigned
char
n_rx
,
unsigned
char
n_rx
,
unsigned
char
n
_tx
,
// number of layer
unsigned
char
n
l
,
// number of layer
int32_t
rxdataF_comp
[][
n_rx
][
rx_size_symbol
*
NR_SYMBOLS_PER_SLOT
],
int32_t
rxdataF_comp
[][
n_rx
][
rx_size_symbol
*
NR_SYMBOLS_PER_SLOT
],
int32_t
dl_ch_mag
[][
n_rx
][
rx_size_symbol
],
int32_t
dl_ch_mag
[][
n_rx
][
rx_size_symbol
],
int32_t
dl_ch_magb
[][
n_rx
][
rx_size_symbol
],
int32_t
dl_ch_magb
[][
n_rx
][
rx_size_symbol
],
...
@@ -1690,25 +1690,24 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
...
@@ -1690,25 +1690,24 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
int
length
,
int
length
,
uint32_t
noise_var
)
uint32_t
noise_var
)
{
{
int
*
ch0r
,
*
ch0c
;
uint32_t
nb_rb_0
=
length
/
12
+
((
length
%
12
)
?
1
:
0
);
uint32_t
nb_rb_0
=
length
/
12
+
((
length
%
12
)
?
1
:
0
);
c16_t
determ_fin
[
12
*
nb_rb_0
]
__attribute__
((
aligned
(
32
)));
c16_t
determ_fin
[
12
*
nb_rb_0
]
__attribute__
((
aligned
(
32
)));
///Allocate H^*H matrix elements and sub elements
///Allocate H^*H matrix elements and sub elements
c16_t
conjH_H_elements_data
[
n_rx
][
n
_tx
][
n_tx
][
12
*
nb_rb_0
];
c16_t
conjH_H_elements_data
[
n_rx
][
n
l
][
nl
][
12
*
nb_rb_0
];
memset
(
conjH_H_elements_data
,
0
,
sizeof
(
conjH_H_elements_data
));
memset
(
conjH_H_elements_data
,
0
,
sizeof
(
conjH_H_elements_data
));
c16_t
*
conjH_H_elements
[
n_rx
][
n
_tx
][
n_tx
];
c16_t
*
conjH_H_elements
[
n_rx
][
n
l
][
nl
];
for
(
int
aarx
=
0
;
aarx
<
n_rx
;
aarx
++
)
for
(
int
aarx
=
0
;
aarx
<
n_rx
;
aarx
++
)
for
(
int
rtx
=
0
;
rtx
<
n
_tx
;
rtx
++
)
for
(
int
rtx
=
0
;
rtx
<
n
l
;
rtx
++
)
for
(
int
ctx
=
0
;
ctx
<
n
_tx
;
ctx
++
)
for
(
int
ctx
=
0
;
ctx
<
n
l
;
ctx
++
)
conjH_H_elements
[
aarx
][
rtx
][
ctx
]
=
conjH_H_elements_data
[
aarx
][
rtx
][
ctx
];
conjH_H_elements
[
aarx
][
rtx
][
ctx
]
=
conjH_H_elements_data
[
aarx
][
rtx
][
ctx
];
//Compute H^*H matrix elements and sub elements:(1/2^log2_maxh)*conjH_H_elements
//Compute H^*H matrix elements and sub elements:(1/2^log2_maxh)*conjH_H_elements
for
(
int
rtx
=
0
;
rtx
<
n_tx
;
rtx
++
)
{
//row
for
(
int
rtx
=
0
;
rtx
<
nl
;
rtx
++
)
{
//row
for
(
int
ctx
=
0
;
ctx
<
n_tx
;
ctx
++
)
{
//column
for
(
int
ctx
=
0
;
ctx
<
nl
;
ctx
++
)
{
//column
for
(
int
aarx
=
0
;
aarx
<
n_rx
;
aarx
++
)
{
for
(
int
aarx
=
0
;
aarx
<
n_rx
;
aarx
++
)
{
ch0r
=
(
int
*
)
dl_ch_estimates_ext
[
rtx
*
n_rx
+
aarx
];
int
*
ch0r
=
(
int
*
)
dl_ch_estimates_ext
[
rtx
*
n_rx
+
aarx
];
ch0c
=
(
int
*
)
dl_ch_estimates_ext
[
ctx
*
n_rx
+
aarx
];
int
*
ch0c
=
(
int
*
)
dl_ch_estimates_ext
[
ctx
*
n_rx
+
aarx
];
nr_conjch0_mult_ch1
(
ch0r
,
nr_conjch0_mult_ch1
(
ch0r
,
ch0c
,
ch0c
,
(
int32_t
*
)
conjH_H_elements
[
aarx
][
ctx
][
rtx
],
// sic
(
int32_t
*
)
conjH_H_elements
[
aarx
][
ctx
][
rtx
],
// sic
...
@@ -1723,7 +1722,7 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
...
@@ -1723,7 +1722,7 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
// Add noise_var such that: H^h * H + noise_var * I
// Add noise_var such that: H^h * H + noise_var * I
if
(
noise_var
!=
0
)
{
if
(
noise_var
!=
0
)
{
simde__m128i
nvar_128i
=
simde_mm_set1_epi32
(
noise_var
>>
3
);
simde__m128i
nvar_128i
=
simde_mm_set1_epi32
(
noise_var
>>
3
);
for
(
int
p
=
0
;
p
<
n
_tx
;
p
++
)
{
for
(
int
p
=
0
;
p
<
n
l
;
p
++
)
{
simde__m128i
*
conjH_H_128i
=
(
simde__m128i
*
)
conjH_H_elements
[
0
][
p
][
p
];
simde__m128i
*
conjH_H_128i
=
(
simde__m128i
*
)
conjH_H_elements
[
0
][
p
][
p
];
for
(
int
k
=
0
;
k
<
3
*
nb_rb_0
;
k
++
)
{
for
(
int
k
=
0
;
k
<
3
*
nb_rb_0
;
k
++
)
{
conjH_H_128i
[
0
]
=
simde_mm_add_epi32
(
conjH_H_128i
[
0
],
nvar_128i
);
conjH_H_128i
[
0
]
=
simde_mm_add_epi32
(
conjH_H_128i
[
0
],
nvar_128i
);
...
@@ -1734,15 +1733,15 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
...
@@ -1734,15 +1733,15 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
//Compute the inverse and determinant of the H^*H matrix
//Compute the inverse and determinant of the H^*H matrix
//Allocate the inverse matrix
//Allocate the inverse matrix
c16_t
*
inv_H_h_H
[
n
_tx
][
n_tx
];
c16_t
*
inv_H_h_H
[
n
l
][
nl
];
c16_t
inv_H_h_H_data
[
n
_tx
][
n_tx
][
12
*
nb_rb_0
];
c16_t
inv_H_h_H_data
[
n
l
][
nl
][
12
*
nb_rb_0
];
memset
(
inv_H_h_H_data
,
0
,
sizeof
(
inv_H_h_H_data
));
memset
(
inv_H_h_H_data
,
0
,
sizeof
(
inv_H_h_H_data
));
for
(
int
rtx
=
0
;
rtx
<
n
_tx
;
rtx
++
)
for
(
int
rtx
=
0
;
rtx
<
n
l
;
rtx
++
)
for
(
int
ctx
=
0
;
ctx
<
n
_tx
;
ctx
++
)
for
(
int
ctx
=
0
;
ctx
<
n
l
;
ctx
++
)
inv_H_h_H
[
ctx
][
rtx
]
=
inv_H_h_H_data
[
ctx
][
rtx
];
inv_H_h_H
[
ctx
][
rtx
]
=
inv_H_h_H_data
[
ctx
][
rtx
];
int
fp_flag
=
1
;
//0: float point calc 1: Fixed point calc
int
fp_flag
=
1
;
//0: float point calc 1: Fixed point calc
nr_matrix_inverse
(
n
_tx
,
nr_matrix_inverse
(
n
l
,
conjH_H_elements
[
0
],
// Input matrix
conjH_H_elements
[
0
],
// Input matrix
inv_H_h_H
,
// Inverse
inv_H_h_H
,
// Inverse
determ_fin
,
// determin
determ_fin
,
// determin
...
@@ -1753,30 +1752,33 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
...
@@ -1753,30 +1752,33 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
// multiply Matrix inversion pf H_h_H by the rx signal vector
// multiply Matrix inversion pf H_h_H by the rx signal vector
c16_t
outtemp
[
12
*
nb_rb_0
]
__attribute__
((
aligned
(
32
)));
c16_t
outtemp
[
12
*
nb_rb_0
]
__attribute__
((
aligned
(
32
)));
//Allocate rxdataF for zforcing out
//Allocate rxdataF for zforcing out
c16_t
rxdataF_zforcing
[
n
_tx
][
12
*
nb_rb_0
];
c16_t
rxdataF_zforcing
[
n
l
][
12
*
nb_rb_0
];
memset
(
rxdataF_zforcing
,
0
,
sizeof
(
rxdataF_zforcing
));
memset
(
rxdataF_zforcing
,
0
,
sizeof
(
rxdataF_zforcing
));
for
(
int
rtx
=
0
;
rtx
<
n_tx
;
rtx
++
)
{
//Output Layers row
for
(
int
rtx
=
0
;
rtx
<
nl
;
rtx
++
)
{
//Output Layers row
// loop over Layers rtx=0,...,N_Layers-1
// loop over Layers rtx=0,...,N_Layers-1
for
(
int
ctx
=
0
;
ctx
<
n
_tx
;
ctx
++
)
{
// column multi
for
(
int
ctx
=
0
;
ctx
<
n
l
;
ctx
++
)
{
// column multi
// printf("Computing r_%d c_%d\n",rtx,ctx);
// printf("Computing r_%d c_%d\n",rtx,ctx);
// print_shorts(" H_h_H=",(int16_t*)&conjH_H_elements[ctx*n_tx+rtx][0][0]);
// print_shorts(" H_h_H=",(int16_t*)&conjH_H_elements[ctx*nl+rtx][0][0]);
// print_shorts(" Inv_H_h_H=",(int16_t*)&inv_H_h_H[ctx*n_tx+rtx][0]);
// print_shorts(" Inv_H_h_H=",(int16_t*)&inv_H_h_H[ctx*nl+rtx][0]);
nr_a_mult_b
(
inv_H_h_H
[
ctx
][
rtx
],
(
c16_t
*
)(
rxdataF_comp
[
ctx
][
0
]
+
symbol
*
nb_rb
*
12
),
outtemp
,
nb_rb_0
,
shift
-
(
fp_flag
==
1
?
2
:
0
));
nr_a_mult_b
(
inv_H_h_H
[
ctx
][
rtx
],
nr_a_sum_b
(
rxdataF_zforcing
[
rtx
],
outtemp
,
(
c16_t
*
)(
rxdataF_comp
[
ctx
][
0
]
+
symbol
*
nb_rb
*
12
),
nb_rb_0
);
// a =a + b
outtemp
,
nb_rb_0
,
shift
-
(
fp_flag
==
1
?
2
:
0
));
nr_a_sum_b
(
rxdataF_zforcing
[
rtx
],
outtemp
,
nb_rb_0
);
// a = a + b
}
}
#ifdef DEBUG_DLSCH_DEMOD
#ifdef DEBUG_DLSCH_DEMOD
printf
(
"Computing layer_%d
\n
"
,
rtx
);
;
printf
(
"Computing layer_%d
\n
"
,
rtx
)
;
print_shorts
(
" Rx signal:="
,(
int16_t
*
)
&
rxdataF_zforcing
[
rtx
][
0
]);
print_shorts
(
" Rx signal:="
,
(
int16_t
*
)
&
rxdataF_zforcing
[
rtx
][
0
]);
print_shorts
(
" Rx signal:="
,(
int16_t
*
)
&
rxdataF_zforcing
[
rtx
][
4
]);
print_shorts
(
" Rx signal:="
,
(
int16_t
*
)
&
rxdataF_zforcing
[
rtx
][
4
]);
print_shorts
(
" Rx signal:="
,(
int16_t
*
)
&
rxdataF_zforcing
[
rtx
][
8
]);
print_shorts
(
" Rx signal:="
,
(
int16_t
*
)
&
rxdataF_zforcing
[
rtx
][
8
]);
#endif
#endif
}
}
//Copy zero_forcing out to output array
//Copy zero_forcing out to output array
for
(
int
rtx
=
0
;
rtx
<
n_tx
;
rtx
++
)
for
(
int
rtx
=
0
;
rtx
<
nl
;
rtx
++
)
nr_element_sign
(
rxdataF_zforcing
[
rtx
],
(
c16_t
*
)(
rxdataF_comp
[
rtx
][
0
]
+
symbol
*
nb_rb
*
12
),
nb_rb_0
,
+
1
);
nr_element_sign
(
rxdataF_zforcing
[
rtx
],
(
c16_t
*
)(
rxdataF_comp
[
rtx
][
0
]
+
symbol
*
nb_rb
*
12
),
nb_rb_0
,
+
1
);
//Update LLR thresholds with the Matrix determinant
//Update LLR thresholds with the Matrix determinant
simde__m128i
*
dl_ch_mag128_0
=
NULL
,
*
dl_ch_mag128b_0
=
NULL
,
*
dl_ch_mag128r_0
=
NULL
,
*
determ_fin_128
;
simde__m128i
*
dl_ch_mag128_0
=
NULL
,
*
dl_ch_mag128b_0
=
NULL
,
*
dl_ch_mag128r_0
=
NULL
,
*
determ_fin_128
;
...
@@ -1785,7 +1787,7 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
...
@@ -1785,7 +1787,7 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
short
nr_realpart
[
8
]
__attribute__
((
aligned
(
16
)))
=
{
1
,
0
,
1
,
0
,
1
,
0
,
1
,
0
};
short
nr_realpart
[
8
]
__attribute__
((
aligned
(
16
)))
=
{
1
,
0
,
1
,
0
,
1
,
0
,
1
,
0
};
determ_fin_128
=
(
simde__m128i
*
)
&
determ_fin
[
0
];
determ_fin_128
=
(
simde__m128i
*
)
&
determ_fin
[
0
];
if
(
mod_order
>
2
)
{
if
(
mod_order
>
2
)
{
if
(
mod_order
==
4
)
{
if
(
mod_order
==
4
)
{
QAM_amp128
=
simde_mm_set1_epi16
(
QAM16_n1
);
//2/sqrt(10)
QAM_amp128
=
simde_mm_set1_epi16
(
QAM16_n1
);
//2/sqrt(10)
QAM_amp128b
=
simde_mm_setzero_si128
();
QAM_amp128b
=
simde_mm_setzero_si128
();
...
@@ -1803,25 +1805,24 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
...
@@ -1803,25 +1805,24 @@ static void nr_dlsch_mmse(uint32_t rx_size_symbol,
dl_ch_mag128b_0
=
(
simde__m128i
*
)
dl_ch_magb
[
0
][
0
];
dl_ch_mag128b_0
=
(
simde__m128i
*
)
dl_ch_magb
[
0
][
0
];
dl_ch_mag128r_0
=
(
simde__m128i
*
)
dl_ch_magr
[
0
][
0
];
dl_ch_mag128r_0
=
(
simde__m128i
*
)
dl_ch_magr
[
0
][
0
];
for
(
int
rb
=
0
;
rb
<
3
*
nb_rb_0
;
rb
++
)
{
for
(
int
rb
=
0
;
rb
<
3
*
nb_rb_0
;
rb
++
)
{
//for symmetric H_h_H matrix, the determinant is only real values
//for symmetric H_h_H matrix, the determinant is only real values
mmtmpD2
=
simde_mm_sign_epi16
(
determ_fin_128
[
0
],
*
(
simde__m128i
*
)
&
nr_realpart
[
0
]);
//set imag part to 0
mmtmpD2
=
simde_mm_sign_epi16
(
determ_fin_128
[
0
],
*
(
simde__m128i
*
)
&
nr_realpart
[
0
]);
//set imag part to 0
mmtmpD3
=
simde_mm_shufflelo_epi16
(
mmtmpD2
,
SIMDE_MM_SHUFFLE
(
2
,
3
,
0
,
1
));
mmtmpD3
=
simde_mm_shufflelo_epi16
(
mmtmpD2
,
SIMDE_MM_SHUFFLE
(
2
,
3
,
0
,
1
));
mmtmpD3
=
simde_mm_shufflehi_epi16
(
mmtmpD3
,
SIMDE_MM_SHUFFLE
(
2
,
3
,
0
,
1
));
mmtmpD3
=
simde_mm_shufflehi_epi16
(
mmtmpD3
,
SIMDE_MM_SHUFFLE
(
2
,
3
,
0
,
1
));
mmtmpD2
=
simde_mm_add_epi16
(
mmtmpD2
,
mmtmpD3
);
mmtmpD2
=
simde_mm_add_epi16
(
mmtmpD2
,
mmtmpD3
);
dl_ch_mag128_0
[
0
]
=
mmtmpD2
;
dl_ch_mag128_0
[
0
]
=
mmtmpD2
;
dl_ch_mag128b_0
[
0
]
=
mmtmpD2
;
dl_ch_mag128b_0
[
0
]
=
mmtmpD2
;
dl_ch_mag128r_0
[
0
]
=
mmtmpD2
;
dl_ch_mag128r_0
[
0
]
=
mmtmpD2
;
dl_ch_mag128_0
[
0
]
=
simde_mm_mulhi_epi16
(
dl_ch_mag128_0
[
0
],
QAM_amp128
);
dl_ch_mag128_0
[
0
]
=
simde_mm_mulhi_epi16
(
dl_ch_mag128_0
[
0
],
QAM_amp128
);
dl_ch_mag128_0
[
0
]
=
simde_mm_slli_epi16
(
dl_ch_mag128_0
[
0
],
1
);
dl_ch_mag128_0
[
0
]
=
simde_mm_slli_epi16
(
dl_ch_mag128_0
[
0
],
1
);
dl_ch_mag128b_0
[
0
]
=
simde_mm_mulhi_epi16
(
dl_ch_mag128b_0
[
0
],
QAM_amp128b
);
dl_ch_mag128b_0
[
0
]
=
simde_mm_mulhi_epi16
(
dl_ch_mag128b_0
[
0
],
QAM_amp128b
);
dl_ch_mag128b_0
[
0
]
=
simde_mm_slli_epi16
(
dl_ch_mag128b_0
[
0
],
1
);
dl_ch_mag128b_0
[
0
]
=
simde_mm_slli_epi16
(
dl_ch_mag128b_0
[
0
],
1
);
dl_ch_mag128r_0
[
0
]
=
simde_mm_mulhi_epi16
(
dl_ch_mag128r_0
[
0
],
QAM_amp128r
);
dl_ch_mag128r_0
[
0
]
=
simde_mm_mulhi_epi16
(
dl_ch_mag128r_0
[
0
],
QAM_amp128r
);
dl_ch_mag128r_0
[
0
]
=
simde_mm_slli_epi16
(
dl_ch_mag128r_0
[
0
],
1
);
dl_ch_mag128r_0
[
0
]
=
simde_mm_slli_epi16
(
dl_ch_mag128r_0
[
0
],
1
);
determ_fin_128
+=
1
;
determ_fin_128
+=
1
;
dl_ch_mag128_0
+=
1
;
dl_ch_mag128_0
+=
1
;
...
...
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