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
ZhouShuya
OpenXG-RAN
Commits
89849444
Commit
89849444
authored
Feb 19, 2016
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixing a bug in cmult_vv, removing unused code.
parent
78913e26
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
33 additions
and
750 deletions
+33
-750
openair1/PHY/TOOLS/cmult_mm.c
openair1/PHY/TOOLS/cmult_mm.c
+0
-200
openair1/PHY/TOOLS/cmult_vv.c
openair1/PHY/TOOLS/cmult_vv.c
+3
-2
openair1/PHY/TOOLS/cmult_vvh.c
openair1/PHY/TOOLS/cmult_vvh.c
+0
-366
openair1/PHY/TOOLS/defs.h
openair1/PHY/TOOLS/defs.h
+26
-182
openair1/PHY/TOOLS/time_meas.h
openair1/PHY/TOOLS/time_meas.h
+4
-0
No files found.
openair1/PHY/TOOLS/cmult_mm.c
deleted
100644 → 0
View file @
78913e26
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
#include "defs.h"
int
mult_cpx_matrix_h
(
short
*
x1
[
2
][
2
],
short
*
x2
[
2
][
2
],
short
*
y
[
2
][
2
],
unsigned
int
N
,
unsigned
short
output_shift
,
short
hermitian
)
{
if
(
hermitian
)
{
// this computes x1^H*x2 and stores it in y
mult_cpx_vector_h
(
x2
[
0
][
0
],
x1
[
0
][
0
],
y
[
0
][
0
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x2
[
0
][
1
],
x1
[
0
][
1
],
y
[
0
][
0
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x2
[
0
][
0
],
x1
[
1
][
0
],
y
[
1
][
0
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x2
[
0
][
1
],
x1
[
1
][
1
],
y
[
1
][
0
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x2
[
1
][
0
],
x1
[
0
][
0
],
y
[
0
][
1
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x2
[
1
][
1
],
x1
[
0
][
1
],
y
[
0
][
1
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x2
[
1
][
0
],
x1
[
1
][
0
],
y
[
1
][
1
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x2
[
1
][
1
],
x1
[
1
][
1
],
y
[
1
][
1
],
N
,
output_shift
,
1
);
}
else
{
// this computes x1*x2^H and stores it in y
mult_cpx_vector_h
(
x1
[
0
][
0
],
x2
[
0
][
0
],
y
[
0
][
0
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x1
[
0
][
1
],
x2
[
0
][
1
],
y
[
0
][
0
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x1
[
0
][
0
],
x2
[
1
][
0
],
y
[
0
][
1
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x1
[
0
][
1
],
x2
[
1
][
1
],
y
[
0
][
1
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x1
[
1
][
0
],
x2
[
0
][
0
],
y
[
1
][
0
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x1
[
1
][
1
],
x2
[
0
][
1
],
y
[
1
][
0
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x1
[
1
][
0
],
x2
[
1
][
0
],
y
[
1
][
1
],
N
,
output_shift
,
1
);
mult_cpx_vector_h
(
x1
[
1
][
1
],
x2
[
1
][
1
],
y
[
1
][
1
],
N
,
output_shift
,
1
);
}
}
int
mult_cpx_matrix_vector
(
int
*
x1
[
2
][
2
],
int
*
x2
[
2
],
int
*
y
[
2
],
unsigned
int
N
,
unsigned
short
output_shift
)
{
Zero_Buffer
(
y
[
0
],
N
*
8
);
Zero_Buffer
(
y
[
1
],
N
*
8
);
// this computes x1*x2 and stores it in y (32 bit)
mult_cpx_vector_add32
((
short
*
)
x2
[
0
],(
short
*
)
x1
[
0
][
0
],(
short
*
)
y
[
0
],
N
);
mult_cpx_vector_add32
((
short
*
)
x2
[
1
],(
short
*
)
x1
[
0
][
1
],(
short
*
)
y
[
0
],
N
);
mult_cpx_vector_add32
((
short
*
)
x2
[
0
],(
short
*
)
x1
[
1
][
0
],(
short
*
)
y
[
1
],
N
);
mult_cpx_vector_add32
((
short
*
)
x2
[
1
],(
short
*
)
x1
[
1
][
1
],(
short
*
)
y
[
1
],
N
);
// shift and pack
shift_and_pack
((
short
*
)
y
[
0
],
N
,
output_shift
);
shift_and_pack
((
short
*
)
y
[
1
],
N
,
output_shift
);
}
#ifdef MAIN_MM
#include <stdio.h>
#include <stdlib.h>
main
()
{
short
x1_00
[
256
]
__attribute__
((
aligned
(
16
)));
short
x1_10
[
256
]
__attribute__
((
aligned
(
16
)));
short
x1_01
[
256
]
__attribute__
((
aligned
(
16
)));
short
x1_11
[
256
]
__attribute__
((
aligned
(
16
)));
short
x2_0
[
256
]
__attribute__
((
aligned
(
16
)));
short
x2_1
[
256
]
__attribute__
((
aligned
(
16
)));
short
y_0
[
256
]
__attribute__
((
aligned
(
16
)));
short
y_1
[
256
]
__attribute__
((
aligned
(
16
)));
int
*
x1
[
2
][
2
];
int
*
x2
[
2
];
int
*
y
[
2
];
int
i
,
m
,
n
;
x1
[
0
][
0
]
=
(
int
*
)
x1_00
;
x1
[
0
][
1
]
=
(
int
*
)
x1_01
;
x1
[
1
][
0
]
=
(
int
*
)
x1_10
;
x1
[
1
][
1
]
=
(
int
*
)
x1_11
;
x2
[
0
]
=
(
int
*
)
x2_0
;
x2
[
1
]
=
(
int
*
)
x2_1
;
y
[
0
]
=
(
int
*
)
y_0
;
y
[
1
]
=
(
int
*
)
y_1
;
for
(
m
=
0
;
m
<
2
;
m
++
)
{
for
(
n
=
0
;
n
<
2
;
n
++
)
{
for
(
i
=
0
;
i
<
256
;
i
+=
4
)
{
((
short
*
)
x1
[
m
][
n
])[
i
]
=
((
short
)
rand
())
/
4
;
((
short
*
)
x1
[
m
][
n
])[
i
+
1
]
=
((
short
)
rand
())
/
4
;
((
short
*
)
x1
[
m
][
n
])[
i
+
2
]
=
-
((
short
*
)
x1
[
m
][
n
])[
i
+
1
];
((
short
*
)
x1
[
m
][
n
])[
i
+
3
]
=
((
short
*
)
x1
[
m
][
n
])[
i
];
}
}
for
(
i
=
0
;
i
<
256
;
i
+=
4
)
{
((
short
*
)
x2
[
m
])[
i
]
=
((
short
)
rand
())
/
4
;
((
short
*
)
x2
[
m
])[
i
+
1
]
=
((
short
)
rand
())
/
4
;
((
short
*
)
x2
[
m
])[
i
+
2
]
=
((
short
*
)
x2
[
m
])[
i
];
((
short
*
)
x2
[
m
])[
i
+
3
]
=
((
short
*
)
x2
[
m
])[
i
+
1
];
}
Zero_Buffer
(
y
[
m
],
512
);
}
/*
input[0] = 100;
input[1] = 200;
input[2] = -200;
input[3] = 100;
input[4] = 1000;
input[5] = 2000;
input[6] = -2000;
input[7] = 1000;
input[8] = 100;
input[9] = 200;
input[10] = -200;
input[11] = 100;
input[12] = 1000;
input[13] = 2000;
input[14] = -2000;
input[15] = 1000;
input2[0] = 2;
input2[1] = 1;
input2[2] = 2;
input2[3] = 1;
input2[4] = 20;
input2[5] = 10;
input2[6] = 20;
input2[7] = 10;
input2[8] = 2;
input2[9] = 1;
input2[10] = 2;
input2[11] = 1;
input2[12] = 2000;
input2[13] = 1000;
input2[14] = 2000;
input2[15] = 1000;
x1[0][0] = (int*)input;
x1[0][1] = (int*)input;
x1[1][0] = (int*)input;
x1[1][1] = (int*)input;
x2[0] = (int*)input2;
x2[1] = (int*)input2;
y[0] = (int*)output;
y[1] = (int*)output2;
*/
mult_cpx_matrix_vector
(
x1
,
x2
,
y
,
64
,
15
);
//mult_cpx_vector_add32(x2[0],x1[0][0],y[0],64);
for
(
i
=
0
;
i
<
128
;
i
+=
2
)
printf
(
"i=%d, x1 = [%d+1i*%d %d+1i*%d; %d+1i*%d %d+1i*%d]; x2 = [%d+1i*%d; %d+1i*%d]; y = [%d+1i*%d; %d+1i*%d]; y_m= round(x1*x2./pow2(15)); y-y_m
\n
"
,
i
,
((
short
*
)
x1
[
0
][
0
])[
2
*
i
],
((
short
*
)
x1
[
0
][
0
])[
2
*
i
+
2
],
((
short
*
)
x1
[
0
][
1
])[
2
*
i
],
((
short
*
)
x1
[
0
][
1
])[
2
*
i
+
2
],
((
short
*
)
x1
[
1
][
0
])[
2
*
i
],
((
short
*
)
x1
[
1
][
0
])[
2
*
i
+
2
],
((
short
*
)
x1
[
1
][
1
])[
2
*
i
],
((
short
*
)
x1
[
1
][
1
])[
2
*
i
+
2
],
((
short
*
)
x2
[
0
])[
2
*
i
],
((
short
*
)
x2
[
0
])[
2
*
i
+
1
],
((
short
*
)
x2
[
1
])[
2
*
i
],
((
short
*
)
x2
[
1
])[
2
*
i
+
1
],
((
short
*
)
y
[
0
])[
2
*
i
],
((
short
*
)
y
[
0
])[
2
*
i
+
1
],
((
short
*
)
y
[
1
])[
2
*
i
],
((
short
*
)
y
[
1
])[
2
*
i
+
1
]);
//((int*)y[0])[i], ((int*)y[0])[i+1],
//((int*)y[1])[i], ((int*)y[1])[i+1]);
}
#endif
openair1/PHY/TOOLS/cmult_vv.c
View file @
89849444
...
@@ -50,7 +50,7 @@ int mult_cpx_conj_vector(int16_t *x1,
...
@@ -50,7 +50,7 @@ int mult_cpx_conj_vector(int16_t *x1,
uint32_t
N
,
uint32_t
N
,
int
output_shift
)
int
output_shift
)
{
{
// Multiply elementwise t
wo complex vectors of N elements with repeated formatted output
// Multiply elementwise t
he complex conjugate of x1 with x2.
// x1 - input 1 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
// x1 - input 1 in the format |Re0 Im0 Re1 Im1|,......,|Re(N-2) Im(N-2) Re(N-1) Im(N-1)|
// We assume x1 with a dinamic of 15 bit maximum
// We assume x1 with a dinamic of 15 bit maximum
//
//
...
@@ -90,7 +90,7 @@ int mult_cpx_conj_vector(int16_t *x1,
...
@@ -90,7 +90,7 @@ int mult_cpx_conj_vector(int16_t *x1,
tmp_im
=
_mm_shufflelo_epi16
(
*
x1_128
,
_MM_SHUFFLE
(
2
,
3
,
0
,
1
));
tmp_im
=
_mm_shufflelo_epi16
(
*
x1_128
,
_MM_SHUFFLE
(
2
,
3
,
0
,
1
));
tmp_im
=
_mm_shufflehi_epi16
(
tmp_im
,
_MM_SHUFFLE
(
2
,
3
,
0
,
1
));
tmp_im
=
_mm_shufflehi_epi16
(
tmp_im
,
_MM_SHUFFLE
(
2
,
3
,
0
,
1
));
tmp_im
=
_mm_sign_epi16
(
tmp_im
,
*
(
__m128i
*
)
&
conjug
[
0
]);
tmp_im
=
_mm_sign_epi16
(
tmp_im
,
*
(
__m128i
*
)
&
conjug
[
0
]);
tmp_im
=
_mm_madd_epi16
(
tmp_im
,
*
x
1
_128
);
tmp_im
=
_mm_madd_epi16
(
tmp_im
,
*
x
2
_128
);
tmp_re
=
_mm_srai_epi32
(
tmp_re
,
output_shift
);
tmp_re
=
_mm_srai_epi32
(
tmp_re
,
output_shift
);
tmp_im
=
_mm_srai_epi32
(
tmp_im
,
output_shift
);
tmp_im
=
_mm_srai_epi32
(
tmp_im
,
output_shift
);
tmpy0
=
_mm_unpacklo_epi32
(
tmp_re
,
tmp_im
);
tmpy0
=
_mm_unpacklo_epi32
(
tmp_re
,
tmp_im
);
...
@@ -130,3 +130,4 @@ int mult_cpx_conj_vector(int16_t *x1,
...
@@ -130,3 +130,4 @@ int mult_cpx_conj_vector(int16_t *x1,
return
(
0
);
return
(
0
);
}
}
openair1/PHY/TOOLS/cmult_vvh.c
deleted
100644 → 0
View file @
78913e26
This diff is collapsed.
Click to expand it.
openair1/PHY/TOOLS/defs.h
View file @
89849444
This diff is collapsed.
Click to expand it.
openair1/PHY/TOOLS/time_meas.h
View file @
89849444
...
@@ -26,6 +26,9 @@
...
@@ -26,6 +26,9 @@
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
*******************************************************************************/
*******************************************************************************/
#ifndef __TIME_MEAS_DEFS__H__
#define __TIME_MEAS_DEFS__H__
#include <unistd.h>
#include <unistd.h>
#include <math.h>
#include <math.h>
#include <stdint.h>
#include <stdint.h>
...
@@ -148,3 +151,4 @@ static inline void copy_meas(time_stats_t *dst_ts,time_stats_t *src_ts)
...
@@ -148,3 +151,4 @@ static inline void copy_meas(time_stats_t *dst_ts,time_stats_t *src_ts)
dst_ts
->
max
=
src_ts
->
max
;
dst_ts
->
max
=
src_ts
->
max
;
}
}
}
}
#endif
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