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
canghaiwuhen
OpenXG-RAN
Commits
fd1c6121
Commit
fd1c6121
authored
Apr 13, 2015
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@7147
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
2f096373
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
40 deletions
+40
-40
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+40
-40
No files found.
openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
View file @
fd1c6121
...
@@ -1087,12 +1087,12 @@ void dlsch_channel_compensation(int **rxdataF_ext,
...
@@ -1087,12 +1087,12 @@ void dlsch_channel_compensation(int **rxdataF_ext,
for
(
aatx
=
0
;
aatx
<
frame_parms
->
nb_antennas_tx_eNB
;
aatx
++
)
{
for
(
aatx
=
0
;
aatx
<
frame_parms
->
nb_antennas_tx_eNB
;
aatx
++
)
{
if
(
mod_order
==
4
)
{
if
(
mod_order
==
4
)
{
QAM_amp128
=
vmov
q
_n_s16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp128
=
vmov_n_s16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp128b
=
vmov
q
_n_s16
(
0
);
QAM_amp128b
=
vmov_n_s16
(
0
);
}
else
if
(
mod_order
==
6
)
{
}
else
if
(
mod_order
==
6
)
{
QAM_amp128
=
vmov
q
_n_s16
(
QAM64_n1
);
//
QAM_amp128
=
vmov_n_s16
(
QAM64_n1
);
//
QAM_amp128b
=
vmov
q
_n_s16
(
QAM64_n2
);
QAM_amp128b
=
vmov_n_s16
(
QAM64_n2
);
}
}
// printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
// printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
...
@@ -1112,22 +1112,22 @@ void dlsch_channel_compensation(int **rxdataF_ext,
...
@@ -1112,22 +1112,22 @@ void dlsch_channel_compensation(int **rxdataF_ext,
// get channel amplitude if not QPSK
// get channel amplitude if not QPSK
mmtmpD0
=
vmull_s16
(
dl_ch128
[
0
],
dl_ch128
[
0
]);
mmtmpD0
=
vmull_s16
(
dl_ch128
[
0
],
dl_ch128
[
0
]);
// mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
// mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
// mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits
// mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits
mmtmpD1
=
vmull_s16
(
dl_ch128
[
1
],
dl_ch128
[
1
]);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
1
],
dl_ch128
[
1
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD2
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD2
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
// mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits
// mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits
mmtmpD0
=
vmull_s16
(
dl_ch128
[
2
],
dl_ch128
[
2
]);
mmtmpD0
=
vmull_s16
(
dl_ch128
[
2
],
dl_ch128
[
2
]);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
3
],
dl_ch128
[
3
]);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
3
],
dl_ch128
[
3
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD3
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD3
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
if
(
pilots
==
0
)
{
if
(
pilots
==
0
)
{
mmtmpD0
=
vmull_s16
(
dl_ch128
[
4
],
dl_ch128
[
4
]);
mmtmpD0
=
vmull_s16
(
dl_ch128
[
4
],
dl_ch128
[
4
]);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
5
],
dl_ch128
[
5
]);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
5
],
dl_ch128
[
5
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD4
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD4
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
...
@@ -1682,12 +1682,12 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
...
@@ -1682,12 +1682,12 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
if
(
mod_order
==
4
)
{
if
(
mod_order
==
4
)
{
QAM_amp128
=
vmov
q
_n_s16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp128
=
vmov_n_s16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp128b
=
vmov
q
_n_s16
(
0
);
QAM_amp128b
=
vmov_n_s16
(
0
);
}
else
if
(
mod_order
==
6
)
{
}
else
if
(
mod_order
==
6
)
{
QAM_amp128
=
vmov
q
_n_s16
(
QAM64_n1
);
//
QAM_amp128
=
vmov_n_s16
(
QAM64_n1
);
//
QAM_amp128b
=
vmov
q
_n_s16
(
QAM64_n2
);
QAM_amp128b
=
vmov_n_s16
(
QAM64_n2
);
}
}
// printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
// printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
...
@@ -1718,23 +1718,23 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
...
@@ -1718,23 +1718,23 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
// get channel amplitude if not QPSK
// get channel amplitude if not QPSK
mmtmpD0
=
vmull_s16
(
dl_ch128
[
0
],
dl_ch128
[
0
]);
mmtmpD0
=
vmull_s16
(
dl_ch128
[
0
],
dl_ch128
[
0
]);
// mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
// mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
// mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits
// mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits
mmtmpD1
=
vmull_s16
(
dl_ch128
[
1
],
dl_ch128
[
1
]);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
1
],
dl_ch128
[
1
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD2
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD2
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
// mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits
// mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits
mmtmpD0
=
vmull_s16
(
dl_ch128
[
2
],
dl_ch128
[
2
]);
mmtmpD0
=
vmull_s16
(
dl_ch128
[
2
],
dl_ch128
[
2
]);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
3
],
dl_ch128
[
3
]);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
3
],
dl_ch128
[
3
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD3
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD3
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
if
(
pilots
==
0
)
{
if
(
pilots
==
0
)
{
mmtmpD0
=
vmull_s16
(
dl_ch128
[
4
],
dl_ch128
[
4
]);
mmtmpD0
=
vmull_s16
(
dl_ch128
[
4
],
dl_ch128
[
4
]);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
5
],
dl_ch128
[
5
]);
mmtmpD1
=
vmull_s16
(
dl_ch128
[
5
],
dl_ch128
[
5
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD4
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD4
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
...
@@ -2205,21 +2205,21 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -2205,21 +2205,21 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
if
(
mod_order0
==
4
)
{
if
(
mod_order0
==
4
)
{
QAM_amp0_128
=
vmov
q
_n_s16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp0_128
=
vmov_n_s16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp0_128b
=
vmov
q
_n_s16
(
0
);
QAM_amp0_128b
=
vmov_n_s16
(
0
);
}
else
if
(
mod_order0
==
6
)
{
}
else
if
(
mod_order0
==
6
)
{
QAM_amp0_128
=
vmov
q
_n_s16
(
QAM64_n1
);
//
QAM_amp0_128
=
vmov_n_s16
(
QAM64_n1
);
//
QAM_amp0_128b
=
vmov
q
_n_s16
(
QAM64_n2
);
QAM_amp0_128b
=
vmov_n_s16
(
QAM64_n2
);
}
}
if
(
mod_order1
==
4
)
{
if
(
mod_order1
==
4
)
{
QAM_amp1_128
=
vmov
q
_n_s16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp1_128
=
vmov_n_s16
(
QAM16_n1
);
// 2/sqrt(10)
QAM_amp1_128b
=
vmov
q
_n_s16
(
0
);
QAM_amp1_128b
=
vmov_n_s16
(
0
);
}
else
if
(
mod_order1
==
6
)
{
}
else
if
(
mod_order1
==
6
)
{
QAM_amp1_128
=
vmov
q
_n_s16
(
QAM64_n1
);
//
QAM_amp1_128
=
vmov_n_s16
(
QAM64_n1
);
//
QAM_amp1_128b
=
vmov
q
_n_s16
(
QAM64_n2
);
QAM_amp1_128b
=
vmov_n_s16
(
QAM64_n2
);
}
}
// printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
// printf("comp: rxdataF_comp %p, symbol %d\n",rxdataF_comp[0],symbol);
...
@@ -2255,23 +2255,23 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -2255,23 +2255,23 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
// get channel amplitude if not QPSK
// get channel amplitude if not QPSK
mmtmpD0
=
vmull_s16
(
dl_ch0_128
[
0
],
dl_ch0_128
[
0
]);
mmtmpD0
=
vmull_s16
(
dl_ch0_128
[
0
],
dl_ch0_128
[
0
]);
// mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
// mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
// mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits
// mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits
mmtmpD1
=
vmull_s16
(
dl_ch0_128
[
1
],
dl_ch0_128
[
1
]);
mmtmpD1
=
vmull_s16
(
dl_ch0_128
[
1
],
dl_ch0_128
[
1
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD2
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD2
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
// mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits
// mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits
mmtmpD0
=
vmull_s16
(
dl_ch0_128
[
2
],
dl_ch0_128
[
2
]);
mmtmpD0
=
vmull_s16
(
dl_ch0_128
[
2
],
dl_ch0_128
[
2
]);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
mmtmpD1
=
vmull_s16
(
dl_ch0_128
[
3
],
dl_ch0_128
[
3
]);
mmtmpD1
=
vmull_s16
(
dl_ch0_128
[
3
],
dl_ch0_128
[
3
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD3
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD3
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
if
(
pilots
==
0
)
{
if
(
pilots
==
0
)
{
mmtmpD0
=
vmull_s16
(
dl_ch0_128
[
4
],
dl_ch0_128
[
4
]);
mmtmpD0
=
vmull_s16
(
dl_ch0_128
[
4
],
dl_ch0_128
[
4
]);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
mmtmpD1
=
vmull_s16
(
dl_ch0_128
[
5
],
dl_ch0_128
[
5
]);
mmtmpD1
=
vmull_s16
(
dl_ch0_128
[
5
],
dl_ch0_128
[
5
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD4
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD4
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
...
@@ -2293,23 +2293,23 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -2293,23 +2293,23 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
// get channel amplitude if not QPSK
// get channel amplitude if not QPSK
mmtmpD0
=
vmull_s16
(
dl_ch1_128
[
0
],
dl_ch1_128
[
0
]);
mmtmpD0
=
vmull_s16
(
dl_ch1_128
[
0
],
dl_ch1_128
[
0
]);
// mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
// mmtmpD0 = [ch0*ch0,ch1*ch1,ch2*ch2,ch3*ch3];
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
// mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits
// mmtmpD0 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3]>>output_shift on 32-bits
mmtmpD1
=
vmull_s16
(
dl_ch1_128
[
1
],
dl_ch1_128
[
1
]);
mmtmpD1
=
vmull_s16
(
dl_ch1_128
[
1
],
dl_ch1_128
[
1
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD2
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD2
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
// mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits
// mmtmpD2 = [ch0*ch0 + ch1*ch1,ch0*ch0 + ch1*ch1,ch2*ch2 + ch3*ch3,ch2*ch2 + ch3*ch3,ch4*ch4 + ch5*ch5,ch4*ch4 + ch5*ch5,ch6*ch6 + ch7*ch7,ch6*ch6 + ch7*ch7]>>output_shift on 16-bits
mmtmpD0
=
vmull_s16
(
dl_ch1_128
[
2
],
dl_ch1_128
[
2
]);
mmtmpD0
=
vmull_s16
(
dl_ch1_128
[
2
],
dl_ch1_128
[
2
]);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
mmtmpD1
=
vmull_s16
(
dl_ch1_128
[
3
],
dl_ch1_128
[
3
]);
mmtmpD1
=
vmull_s16
(
dl_ch1_128
[
3
],
dl_ch1_128
[
3
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD3
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD3
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
if
(
pilots
==
0
)
{
if
(
pilots
==
0
)
{
mmtmpD0
=
vmull_s16
(
dl_ch1_128
[
4
],
dl_ch1_128
[
4
]);
mmtmpD0
=
vmull_s16
(
dl_ch1_128
[
4
],
dl_ch1_128
[
4
]);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
,
-
output_shift
)
);
mmtmpD0
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD0
,
vrev64q_s32
(
mmtmpD0
)
),
-
output_shift
);
mmtmpD1
=
vmull_s16
(
dl_ch1_128
[
5
],
dl_ch1_128
[
5
]);
mmtmpD1
=
vmull_s16
(
dl_ch1_128
[
5
],
dl_ch1_128
[
5
]);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
,
-
output_shift
)
);
mmtmpD1
=
vqshlq_s32
(
vqaddq_s32
(
mmtmpD1
,
vrev64q_s32
(
mmtmpD1
)
),
-
output_shift
);
mmtmpD4
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
mmtmpD4
=
vcombine_s16
(
vqmovn_s32
(
mmtmpD0
),
vwmovn_s32
(
mmtmpD1
));
...
...
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