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
promise
OpenXG-RAN
Commits
e8ef1cdb
Commit
e8ef1cdb
authored
Jan 25, 2018
by
lfarizav
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Optimizing channel functions
parent
d4a81046
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
137 additions
and
64 deletions
+137
-64
openair1/SIMULATION/RF/adc.c
openair1/SIMULATION/RF/adc.c
+36
-0
openair1/SIMULATION/RF/rf.c
openair1/SIMULATION/RF/rf.c
+2
-2
openair1/SIMULATION/TOOLS/abstraction.c
openair1/SIMULATION/TOOLS/abstraction.c
+93
-53
openair1/SIMULATION/TOOLS/random_channel.c
openair1/SIMULATION/TOOLS/random_channel.c
+2
-2
openair1/SIMULATION/TOOLS/rangen_double.c
openair1/SIMULATION/TOOLS/rangen_double.c
+1
-3
targets/SIMU/USER/channel_sim.c
targets/SIMU/USER/channel_sim.c
+3
-4
No files found.
openair1/SIMULATION/RF/adc.c
View file @
e8ef1cdb
...
...
@@ -118,6 +118,42 @@ void adc_SSE_float(float *r_re[2],
//printf("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
}
}
void
adc_SSE_float_test
(
float
*
r_re
[
2
],
float
*
r_im
[
2
],
unsigned
int
input_offset
,
unsigned
int
output_offset
,
unsigned
int
**
output
,
unsigned
int
nb_rx_antennas
,
unsigned
int
length
,
unsigned
char
B
)
{
int
i
;
int
aa
;
__m128
r_re128
,
r_im128
,
gain128
;
__m128i
r_re128i
,
r_im128i
,
output128
;
float
gain
=
(
float
)(
1
<<
(
B
-
1
));
gain128
=
_mm_set1_ps
(
gain
);
for
(
i
=
0
;
i
<
(
length
>>
2
);
i
++
)
{
for
(
aa
=
0
;
aa
<
nb_rx_antennas
;
aa
++
)
{
r_re128
=
_mm_loadu_ps
(
&
r_re
[
aa
][
4
*
i
+
input_offset
]);
r_im128
=
_mm_loadu_ps
(
&
r_im
[
aa
][
4
*
i
+
input_offset
]);
r_re128
=
_mm_mul_ps
(
r_re128
,
gain128
);
r_im128
=
_mm_mul_ps
(
r_im128
,
gain128
);
r_re128i
=
_mm_cvtps_epi32
(
r_re128
);
r_im128i
=
_mm_cvtps_epi32
(
r_im128
);
output128
=
_mm_packs_epi32
(
r_im128i
,
r_re128i
);
_mm_store_si128
(
&
output
[
aa
][
4
*
i
+
input_offset
],
output128
);
}
}
for
(
i
=
0
;
i
<
(
length
>>
2
);
i
++
)
{
for
(
aa
=
0
;
aa
<
nb_rx_antennas
;
aa
++
)
{
}
}
/*for (i=0; i<length; i++) {
printf("output[%d] %d\n",i,((short *)output[0])[((4*i+output_offset)<<1)]);
}*/
}
void
adc_freq
(
double
*
r_re
[
2
],
double
*
r_im
[
2
],
unsigned
int
input_offset
,
...
...
openair1/SIMULATION/RF/rf.c
View file @
e8ef1cdb
...
...
@@ -419,8 +419,8 @@ clock_t start=clock();*/
rx128_re
=
_mm_loadu_ps
(
&
r_re
[
a
][
4
*
i
]);
//r_re[a][i],r_re[a][i+1]
rx128_im
=
_mm_loadu_ps
(
&
r_im
[
a
][
4
*
i
]);
//r_im[a][i],r_im[a][i+1]
rx128_gain_lin
=
_mm_set1_ps
(
rx_gain_lin
);
gauss_0_128_sqrt_NOW
=
_mm_set
_ps
(
ziggurat
(
0
.
0
,
1
.
0
),
ziggurat
(
0
.
0
,
1
.
0
),
ziggurat
(
0
.
0
,
1
.
0
),
ziggurat
(
0
.
0
,
1
.
0
));
gauss_1_128_sqrt_NOW
=
_mm_set
_ps
(
ziggurat
(
0
.
0
,
1
.
0
),
ziggurat
(
0
.
0
,
1
.
0
),
ziggurat
(
0
.
0
,
1
.
0
),
ziggurat
(
0
.
0
,
1
.
0
));
gauss_0_128_sqrt_NOW
=
_mm_set
1_ps
(
ziggurat
(
0
.
0
,
1
.
0
));
gauss_1_128_sqrt_NOW
=
_mm_set
1_ps
(
ziggurat
(
0
.
0
,
1
.
0
));
gauss_0_128_sqrt_NOW
=
_mm_mul_ps
(
gauss_0_128_sqrt_NOW
,
_mm_set1_ps
(
sqrt_NOW
));
gauss_1_128_sqrt_NOW
=
_mm_mul_ps
(
gauss_1_128_sqrt_NOW
,
_mm_set1_ps
(
sqrt_NOW
));
// Amplify by receiver gain and apply 3rd order non-linearity
...
...
openair1/SIMULATION/TOOLS/abstraction.c
View file @
e8ef1cdb
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/TOOLS/random_channel.c
View file @
e8ef1cdb
...
...
@@ -1266,8 +1266,8 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag) {
for
(
aarx
=
0
;
aarx
<
desc
->
nb_rx
;
aarx
++
)
{
for
(
aatx
=
0
;
aatx
<
desc
->
nb_tx
;
aatx
++
)
{
anew
[
aarx
+
(
aatx
*
desc
->
nb_rx
)].
x
=
sqrt
(
desc
->
ricean_factor
*
desc
->
amps
[
i
]
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
);
anew
[
aarx
+
(
aatx
*
desc
->
nb_rx
)].
y
=
sqrt
(
desc
->
ricean_factor
*
desc
->
amps
[
i
]
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
);
anew
[
aarx
+
(
aatx
*
desc
->
nb_rx
)].
x
=
sqrt
(
desc
->
ricean_factor
*
desc
->
amps
[
i
]
/
2
)
*
ziggurat
(
0
.
0
,
1
.
0
);
anew
[
aarx
+
(
aatx
*
desc
->
nb_rx
)].
y
=
sqrt
(
desc
->
ricean_factor
*
desc
->
amps
[
i
]
/
2
)
*
ziggurat
(
0
.
0
,
1
.
0
);
if
((
i
==
0
)
&&
(
desc
->
ricean_factor
!=
1
.
0
))
{
if
(
desc
->
random_aoa
==
1
)
{
...
...
openair1/SIMULATION/TOOLS/rangen_double.c
View file @
e8ef1cdb
...
...
@@ -225,8 +225,6 @@ void table_nor(unsigned long seed)
}
double
ziggurat
(
double
mean
,
double
variance
)
{
//double nor=NOR;
//printf("NOR %e\n",nor);
return
NOR
;
}
/*
...
...
@@ -237,7 +235,7 @@ double ziggurat(double mean, double variance)
/*!\brief Gaussian random number generator based on modified Box-Muller transformation.Returns a double-precision floating-point number. */
//#define random_SSE
#ifdef random_SSE
double
gaussdouble
(
double
mean
,
double
variance
)
//It is necessary to improve the function.
double
gaussdouble
(
double
mean
,
double
variance
)
{
static
int
iset
=
0
;
static
double
gset
;
...
...
targets/SIMU/USER/channel_sim.c
View file @
e8ef1cdb
...
...
@@ -544,14 +544,13 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
,
hold_channel
,
eNB_id
,
UE_id
,
CC_id
,
subframe
&
0x1
);
#endif
stop_meas
(
&
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
]
->
DL_multipath_channel_freq
);
//print_meas (&eNB2UE[eNB_id][UE_id][CC_id]->DL_multipath_channel_freq,"[DL][multipath_channel_freq]", &eNB2UE[eNB_id][UE_id][CC_id]->DL_multipath_channel_freq, &eNB2UE[eNB_id][UE_id][CC_id]->DL_multipath_channel_freq);
/*clock_t stop=clock();
printf("multipath_channel DL time is %f s, AVERAGE time is %f s, count %d, sum %e\n",(float) (stop-start)/CLOCKS_PER_SEC,(float) (sum+stop-start)/(count*CLOCKS_PER_SEC),count,sum+stop-start);
sum=(sum+stop-start);*/
/
/
for (int x=0;x<frame_parms->N_RB_DL*12;x++){
//
fprintf(file1,"%d\t%e\t%e\n",x,eNB2UE[eNB_id][UE_id][CC_id]->chF[0][x].x,eNB2UE[eNB_id][UE_id][CC_id]->chF[0][x].y);
//}
/
*
for (int x=0;x<frame_parms->N_RB_DL*12;x++){
fprintf(file1,"%d\t%e\t%e\n",x,eNB2UE[eNB_id][UE_id][CC_id]->chF[0][x].x,eNB2UE[eNB_id][UE_id][CC_id]->chF[0][x].y);
}*/
#ifdef DEBUG_SIM
rx_pwr
=
signal_energy_fp2
(
eNB2UE
[
eNB_id
][
UE_id
][
CC_id
]
->
chF
[
0
],
...
...
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