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
zzha zzha
OpenXG-RAN
Commits
5dbe3bef
Commit
5dbe3bef
authored
Dec 13, 2015
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
debugging and testing of AVX2-optimized DFTS (radix 2/4 only).
parent
47a6fa6e
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
382 additions
and
329 deletions
+382
-329
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-1
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
+30
-23
openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
+12
-12
openair1/PHY/MODULATION/ofdm_mod.c
openair1/PHY/MODULATION/ofdm_mod.c
+18
-4
openair1/PHY/MODULATION/slot_fep.c
openair1/PHY/MODULATION/slot_fep.c
+15
-15
openair1/PHY/TOOLS/Makefile
openair1/PHY/TOOLS/Makefile
+11
-5
openair1/PHY/TOOLS/lte_dfts.c
openair1/PHY/TOOLS/lte_dfts.c
+274
-260
openair1/PHY/TOOLS/twiddles8192.h
openair1/PHY/TOOLS/twiddles8192.h
+12
-0
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+9
-9
No files found.
cmake_targets/CMakeLists.txt
View file @
5dbe3bef
...
...
@@ -134,7 +134,7 @@ else (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l")
set
(
C_FLAGS_PROCESSOR
"
${
C_FLAGS_PROCESSOR
}
-mavx2"
)
endif
()
if
(
CPUINFO MATCHES
"sse4_2"
)
set
(
C_FLAGS_PROCESSOR
"
${
C_FLAGS_PROCESSOR
}
-msse4.2"
)
set
(
C_FLAGS_PROCESSOR
"
${
C_FLAGS_PROCESSOR
}
-m
avx2 -m
sse4.2"
)
endif
()
if
(
CPUINFO MATCHES
"sse4_1"
)
set
(
C_FLAGS_PROCESSOR
"
${
C_FLAGS_PROCESSOR
}
-msse4.1"
)
...
...
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
View file @
5dbe3bef
...
...
@@ -203,8 +203,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
multadd_complex_vector_real_scalar
(
dl_ch
-
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
<<
1
),
phy_vars_ue
->
ch_est_alpha
,
dl_ch
-
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
<<
1
),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
#ifdef DEBUG_CH
printf
(
"k %d, first_carrier %d
\n
"
,
k
,
phy_vars_ue
->
lte_frame_parms
.
first_carrier_offset
);
#endif
if
((
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
==
6
)
||
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
==
50
)
||
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
==
100
))
{
...
...
@@ -213,7 +214,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
// Treat first 2 pilots specially (left edge)
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
// printf("pilot 0 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
#ifdef DEBUG_CH
printf
(
"pilot 0 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fl
,
ch
,
dl_ch
,
...
...
@@ -224,7 +227,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
// printf("pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
#ifdef DEBUG_CH
printf
(
"pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
f2l2
,
ch
,
dl_ch
,
...
...
@@ -235,15 +240,13 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
for
(
pilot_cnt
=
2
;
pilot_cnt
<
((
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
-
1
);
pilot_cnt
+=
2
)
{
// printf("%d\n",dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
// printf("pilot[%d][%d] (%d,%d)\n",p,pilot_cnt,pil[0],pil[1]);
// printf("rx[%d] -> (%d,%d)\n", k, rxF[0], rxF[1]);
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
//Re
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
//Im
// printf("**rb %d %d\n",rb,dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
#ifdef DEBUG_CH
printf
(
"pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
f
,
ch
,
dl_ch
,
...
...
@@ -254,13 +257,11 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
rxF
+=
12
;
dl_ch
+=
8
;
// printf("pilot[%d][%d] (%d,%d)\n",p,rb,pil[0],pil[1]);
// printf("rx[%d] -> (%d,%d)\n", k+6, rxF[0], rxF[1]);
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
// printf("**rb %d %d\n",rb,dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
#ifdef DEBUG_CH
printf
(
"pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
f2
,
ch
,
dl_ch
,
...
...
@@ -281,15 +282,17 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
1
+
k
))];
#ifdef DEBUG_CH
printf
(
"second half k %d
\n
"
,
k
);
#endif
for
(
pilot_cnt
=
0
;
pilot_cnt
<
((
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
)
-
3
);
pilot_cnt
+=
2
)
{
// printf("pilot[%d][%d] (%d,%d)\n",p,pilot_cnt,pil[0],pil[1]);
// printf("rx[%d] -> (%d,%d)\n", k+6, rxF[0], rxF[1]);
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
// printf("**rb %d %d\n",rb,dl_ch-(int16_t *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
#ifdef DEBUG_CH
printf
(
"pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
f
,
ch
,
dl_ch
,
...
...
@@ -300,8 +303,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
// printf("**rb %d %d\n",rb,dl_ch-(int16_T *)&dl_ch_estimates[(p<<1)+aarx][ch_offset]);
#ifdef DEBUG_CH
printf
(
"pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
f2
,
ch
,
dl_ch
,
...
...
@@ -314,8 +318,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
// printf("pilot 49: rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
#ifdef DEBUG_CH
printf
(
"pilot %d: rxF -> (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fr
,
ch
,
dl_ch
,
...
...
@@ -326,7 +331,9 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
// printf("pilot 50: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
#ifdef DEBUG_CH
printf
(
"pilot %d: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
f2r2
,
ch
,
dl_ch
,
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c
View file @
5dbe3bef
...
...
@@ -116,7 +116,7 @@ LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t max_turbo_ite
dlsch
->
max_turbo_iterations
=
max_turbo_iterations
;
for
(
i
=
0
;
i
<
Mdlharq
;
i
++
)
{
//
msg
("new_ue_dlsch: Harq process %d\n",i);
//
printf
("new_ue_dlsch: Harq process %d\n",i);
dlsch
->
harq_processes
[
i
]
=
(
LTE_DL_UE_HARQ_t
*
)
malloc16
(
sizeof
(
LTE_DL_UE_HARQ_t
));
if
(
dlsch
->
harq_processes
[
i
])
{
...
...
@@ -155,7 +155,7 @@ LTE_UE_DLSCH_t *new_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t max_turbo_ite
return
(
dlsch
);
}
msg
(
"new_ue_dlsch with size %zu: exit_flag = %u
\n
"
,
sizeof
(
LTE_DL_UE_HARQ_t
),
exit_flag
);
printf
(
"new_ue_dlsch with size %zu: exit_flag = %u
\n
"
,
sizeof
(
LTE_DL_UE_HARQ_t
),
exit_flag
);
free_ue_dlsch
(
dlsch
);
return
(
NULL
);
...
...
@@ -204,22 +204,22 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
time_stats_t
*
);
if
(
!
dlsch_llr
)
{
msg
(
"dlsch_decoding.c: NULL dlsch_llr pointer
\n
"
);
printf
(
"dlsch_decoding.c: NULL dlsch_llr pointer
\n
"
);
return
(
dlsch
->
max_turbo_iterations
);
}
if
(
!
harq_process
)
{
msg
(
"dlsch_decoding.c: NULL harq_process pointer
\n
"
);
printf
(
"dlsch_decoding.c: NULL harq_process pointer
\n
"
);
return
(
dlsch
->
max_turbo_iterations
);
}
if
(
!
frame_parms
)
{
msg
(
"dlsch_decoding.c: NULL frame_parms pointer
\n
"
);
printf
(
"dlsch_decoding.c: NULL frame_parms pointer
\n
"
);
return
(
dlsch
->
max_turbo_iterations
);
}
if
(
subframe
>
9
)
{
msg
(
"dlsch_decoding.c: Illegal subframe index %d
\n
"
,
subframe
);
printf
(
"dlsch_decoding.c: Illegal subframe index %d
\n
"
,
subframe
);
return
(
dlsch
->
max_turbo_iterations
);
}
...
...
@@ -232,13 +232,13 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
/*
if (nb_rb > frame_parms->N_RB_DL) {
msg
("dlsch_decoding.c: Illegal nb_rb %d\n",nb_rb);
printf
("dlsch_decoding.c: Illegal nb_rb %d\n",nb_rb);
return(max_turbo_iterations);
}*/
/*harq_pid = dlsch->current_harq_pid;
if (harq_pid >= 8) {
msg
("dlsch_decoding.c: Illegal harq_pid %d\n",harq_pid);
printf
("dlsch_decoding.c: Illegal harq_pid %d\n",harq_pid);
return(max_turbo_iterations);
}
*/
...
...
@@ -250,7 +250,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
G
=
harq_process
->
G
;
//get_G(frame_parms,nb_rb,dlsch->rb_alloc,mod_order,num_pdcch_symbols,phy_vars_ue->frame,subframe);
//
msg
("DLSCH Decoding, harq_pid %d Ndi %d\n",harq_pid,harq_process->Ndi);
//
printf
("DLSCH Decoding, harq_pid %d Ndi %d\n",harq_pid,harq_process->Ndi);
if
(
harq_process
->
round
==
0
)
{
// This is a new packet, so compute quantities regarding segmentation
...
...
@@ -269,7 +269,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
/*
else {
msg
("dlsch_decoding.c: Ndi>0 not checked yet!!\n");
printf
("dlsch_decoding.c: Ndi>0 not checked yet!!\n");
return(max_turbo_iterations);
}
*/
...
...
@@ -296,7 +296,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
break
;
}
if
(
harq_process
->
C
>
=
MAX_NUM_DLSCH_SEGMENTS
/
bw_scaling
)
{
if
(
harq_process
->
C
>
MAX_NUM_DLSCH_SEGMENTS
/
bw_scaling
)
{
LOG_E
(
PHY
,
"Illegal harq_process->C %d > %d
\n
"
,
harq_process
->
C
,
MAX_NUM_DLSCH_SEGMENTS
/
bw_scaling
);
return
((
1
+
dlsch
->
max_turbo_iterations
));
}
...
...
@@ -320,7 +320,7 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue,
else
if
(
Kr_bytes
<=
768
)
iind
=
123
+
((
Kr_bytes
-
256
)
>>
3
);
else
{
msg
(
"dlsch_decoding: Illegal codeword size %d!!!
\n
"
,
Kr_bytes
);
printf
(
"dlsch_decoding: Illegal codeword size %d!!!
\n
"
,
Kr_bytes
);
return
(
dlsch
->
max_turbo_iterations
);
}
...
...
openair1/PHY/MODULATION/ofdm_mod.c
View file @
5dbe3bef
...
...
@@ -91,7 +91,7 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
)
{
static
short
temp
[
2048
*
4
]
__attribute__
((
aligned
(
16
)));
static
short
temp
[
2048
*
4
]
__attribute__
((
aligned
(
32
)));
unsigned
short
i
,
j
;
short
k
;
...
...
@@ -139,12 +139,18 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
msg
(
"[PHY] symbol %d/%d (%p,%p -> %p)
\n
"
,
i
,
nb_symbols
,
input
,
&
input
[
i
<<
log2fftsize
],
&
output
[(
i
<<
log2fftsize
)
+
((
i
)
*
nb_prefix_samples
)]);
#endif
#ifndef __AVX2__
// handle 128-bit alignment for 128-bit SIMD (SSE4,NEON,AltiVEC)
idft
((
int16_t
*
)
&
input
[
i
<<
log2fftsize
],
(
log2fftsize
==
7
)
?
(
int16_t
*
)
temp
:
(
int16_t
*
)
&
output
[(
i
<<
log2fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)],
1
);
// write_output("fft_out.m","fftout",temp,(1<<log2fftsize)*2,1,1);
#else
// on AVX2 need 256-bit alignment
idft
((
int16_t
*
)
&
input
[
i
<<
log2fftsize
],
(
log2fftsize
<=
9
)
?
(
int16_t
*
)
temp
:
(
int16_t
*
)
&
output
[(
i
<<
log2fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)],
1
);
//memset(temp,0,1<<log2fftsize);
#endif
// Copy to frame buffer with Cyclic Extension
...
...
@@ -158,12 +164,20 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
// msg("Doing cyclic prefix method\n");
if
(
log2fftsize
==
7
)
{
#ifndef __AVX2__
if
(
log2fftsize
==
7
)
#else
if
(
log2fftsize
<=
9
)
#endif
{
for
(
j
=
0
;
j
<
((
1
<<
log2fftsize
))
;
j
++
)
{
output_ptr
[
j
]
=
temp_ptr
[
j
];
}
}
j
=
(
1
<<
log2fftsize
);
for
(
k
=-
1
;
k
>=-
nb_prefix_samples
;
k
--
)
{
...
...
openair1/PHY/MODULATION/slot_fep.c
View file @
5dbe3bef
...
...
@@ -56,7 +56,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
unsigned
int
rx_offset
;
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
int
tmp_dft_in
[
2
56
];
// This is for misalignment issues for 6 and 15 PRBs
int
tmp_dft_in
[
2
048
];
// This is for misalignment issues for 6 and 15 PRBs
switch
(
frame_parms
->
log2_symbol_size
)
{
case
7
:
...
...
@@ -96,12 +96,12 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
if
(
l
<
0
||
l
>=
7
-
frame_parms
->
Ncp
)
{
msg
(
"slot_fep: l must be between 0 and %d
\n
"
,
7
-
frame_parms
->
Ncp
);
printf
(
"slot_fep: l must be between 0 and %d
\n
"
,
7
-
frame_parms
->
Ncp
);
return
(
-
1
);
}
if
(
Ns
<
0
||
Ns
>=
20
)
{
msg
(
"slot_fep: Ns must be between 0 and 19
\n
"
);
printf
(
"slot_fep: Ns must be between 0 and 19
\n
"
);
return
(
-
1
);
}
...
...
@@ -111,12 +111,12 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
memset
(
&
ue_common_vars
->
rxdataF
[
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
0
,
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
rx_offset
=
sample_offset
+
slot_offset
+
nb_prefix_samples0
+
subframe_offset
-
SOFFSET
;
// Align with
128
bit
rx_offset
=
rx_offset
-
rx_offset
%
4
;
// Align with
256
bit
// rx_offset = rx_offset&0xfffffff8
;
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
msg
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
printf
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
,
rx_offset
);
#endif
...
...
@@ -127,9 +127,9 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
(
short
*
)
&
ue_common_vars
->
rxdata
[
aa
][
0
],
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
if
((
rx_offset
&
3
)
!=
0
)
{
// if input to dft is not 128-bit aligned, issue for size 6 and 1
5 PRBs
if
((
rx_offset
&
7
)
!=
0
)
{
// if input to dft is not 256-bit aligned, issue for size 6,15 and 2
5 PRBs
memcpy
((
void
*
)
tmp_dft_in
,
(
void
*
)
&
ue_common_vars
->
rxdata
[
aa
][
(
rx_offset
-
nb_prefix_samples0
)
%
frame_length_samples
],
(
void
*
)
&
ue_common_vars
->
rxdata
[
aa
][
rx_offset
%
frame_length_samples
],
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
dft
((
int16_t
*
)
tmp_dft_in
,
(
int16_t
*
)
&
ue_common_vars
->
rxdataF
[
aa
][
frame_parms
->
ofdm_symbol_size
*
symbol
],
1
);
...
...
@@ -142,12 +142,12 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
}
}
else
{
rx_offset
+=
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
+
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
*
(
l
-
1
);
rx_offset
+=
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
*
l
;
//
+
//
(frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1);
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
msg
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
printf
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
,
rx_offset
);
#endif
...
...
@@ -158,7 +158,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
start_meas
(
&
phy_vars_ue
->
rx_dft_stats
);
if
((
rx_offset
&
3
)
!=
0
)
{
// if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs
if
((
rx_offset
&
7
)
!=
0
)
{
// if input to dft is not 128-bit aligned, issue for size 6 and 15 PRBs
memcpy
((
void
*
)
tmp_dft_in
,
(
void
*
)
&
ue_common_vars
->
rxdata
[
aa
][(
rx_offset
)
%
frame_length_samples
],
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int
));
...
...
@@ -182,7 +182,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx_eNB
;
aa
++
)
{
#ifdef DEBUG_FEP
msg
(
"Channel estimation eNB %d, aatx %d, slot %d, symbol %d
\n
"
,
eNB_id
,
aa
,
Ns
,
l
);
printf
(
"Channel estimation eNB %d, aatx %d, slot %d, symbol %d
\n
"
,
eNB_id
,
aa
,
Ns
,
l
);
#endif
start_meas
(
&
phy_vars_ue
->
dlsch_channel_estimation_stats
);
lte_dl_channel_estimation
(
phy_vars_ue
,
eNB_id
,
0
,
...
...
@@ -205,7 +205,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
// do frequency offset estimation here!
// use channel estimates from current symbol (=ch_t) and last symbol (ch_{t-1})
#ifdef DEBUG_FEP
msg
(
"Frequency offset estimation
\n
"
);
printf
(
"Frequency offset estimation
\n
"
);
#endif
if
(
l
==
(
4
-
frame_parms
->
Ncp
))
{
...
...
@@ -222,7 +222,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
}
#ifdef DEBUG_FEP
msg
(
"slot_fep: done
\n
"
);
printf
(
"slot_fep: done
\n
"
);
#endif
return
(
0
);
}
openair1/PHY/TOOLS/Makefile
View file @
5dbe3bef
lte_dfts
:
lte_dfts.c
gcc
-O2
-m
avx2
-g
-ggdb
-o
lte_dfts
lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c
-I
$$
OPENAIR1_DIR
-I
$$
OPENAIR_TARGETS
-I
$$
OPENAIR2_DIR/COMMON
-DUSER_MODE
-DMR_MAIN
-DNB_ANTENNAS_RX
=
1
# -DD256STATS #-DD64STATS
lte_dfts
_sse4
:
lte_dfts.c
gcc
-O2
-m
sse4
.1
-g
-ggdb
-o
lte_dfts_sse4
lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c
-I
$$
OPENAIR1_DIR
-I
$$
OPENAIR_TARGETS
-I
$$
OPENAIR2_DIR/COMMON
-DUSER_MODE
-DMR_MAIN
-DNB_ANTENNAS_RX
=
1
# -DD256STATS #-DD64STATS
lte_dfts.s
:
lte_dfts.c
lte_dfts_avx2
:
lte_dfts.c
gcc
-O2
-mavx2
-g
-ggdb
-o
lte_dfts_avx2 lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c
-I
$$
OPENAIR1_DIR
-I
$$
OPENAIR_TARGETS
-I
$$
OPENAIR2_DIR/COMMON
-DUSER_MODE
-DMR_MAIN
-DNB_ANTENNAS_RX
=
1
# -DD256STATS #-DD64STATS
lte_dfts_avx2.s
:
lte_dfts.c
gcc
-O2
-mavx2
-S
lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c
-I
$$
OPENAIR1_DIR
-I
$$
OPENAIR_TARGETS
-I
$$
OPENAIR2_DIR/COMMON
-DUSER_MODE
-DMR_MAIN
-DNB_ANTENNAS_RX
=
1
# -DD256STATS #-DD64STATS
dft_cycles
:
lte_dfts
./lte_dfts | egrep cycles
lte_dfts_sse4.s
:
lte_dfts.c
gcc
-O2
-msse4
.1
-S
lte_dfts.c time_meas.c file_output.c ../../SIMULATION/TOOLS/taus.c
-I
$$
OPENAIR1_DIR
-I
$$
OPENAIR_TARGETS
-I
$$
OPENAIR2_DIR/COMMON
-DUSER_MODE
-DMR_MAIN
-DNB_ANTENNAS_RX
=
1
# -DD256STATS #-DD64STATS
dft_cycles_avx2
:
lte_dfts_avx2
./lte_dfts_avx2 | egrep cycles
openair1/PHY/TOOLS/lte_dfts.c
View file @
5dbe3bef
This diff is collapsed.
Click to expand it.
openair1/PHY/TOOLS/twiddles8192.h
0 → 100644
View file @
5dbe3bef
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
5dbe3bef
...
...
@@ -3336,7 +3336,7 @@ PMI_FEEDBACK:
PHY_vars_UE
->
dlsch_ue
[
0
][
cw
]
->
harq_processes
[
PHY_vars_UE
->
dlsch_ue
[
0
][
cw
]
->
current_harq_pid
]
->
G
=
coded_bits_per_codeword
;
/*
// calculate uncoded BLER
uncoded_ber
=
0
;
for
(
i
=
0
;
i
<
coded_bits_per_codeword
;
i
++
)
...
...
@@ -3352,7 +3352,7 @@ PMI_FEEDBACK:
if
(
n_frames
==
1
)
write_output
(
"uncoded_ber_bit.m"
,
"uncoded_ber_bit"
,
uncoded_ber_bit
,
coded_bits_per_codeword
,
1
,
0
);
*/
start_meas
(
&
PHY_vars_UE
->
dlsch_unscrambling_stats
);
dlsch_unscrambling
(
&
PHY_vars_UE
->
lte_frame_parms
,
...
...
@@ -3463,12 +3463,12 @@ PMI_FEEDBACK:
}
sprintf
(
fname
,
"rxsig0_r%d.m"
,
round
);
sprintf
(
vname
,
"rxs0_r%d
.m
"
,
round
);
sprintf
(
vname
,
"rxs0_r%d"
,
round
);
write_output
(
fname
,
vname
,
&
PHY_vars_UE
->
lte_ue_common_vars
.
rxdata
[
0
][
0
],
10
*
PHY_vars_UE
->
lte_frame_parms
.
samples_per_tti
,
1
,
1
);
sprintf
(
fname
,
"rxsigF0_r%d.m"
,
round
);
sprintf
(
vname
,
"rxs0F_r%d
.m
"
,
round
);
sprintf
(
vname
,
"rxs0F_r%d"
,
round
);
write_output
(
fname
,
vname
,
&
PHY_vars_UE
->
lte_ue_common_vars
.
rxdataF
[
0
][
0
],
2
*
PHY_vars_UE
->
lte_frame_parms
.
ofdm_symbol_size
*
nsymb
,
2
,
1
);
if
(
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
>
1
)
{
sprintf
(
fname
,
"rxsig1_r%d.m"
,
round
);
sprintf
(
vname
,
"rxs1_r%d.m"
,
round
);
...
...
@@ -3479,14 +3479,14 @@ PMI_FEEDBACK:
}
sprintf
(
fname
,
"dlsch00_r%d.m"
,
round
);
sprintf
(
vname
,
"dl00_r%d
.m
"
,
round
);
sprintf
(
vname
,
"dl00_r%d"
,
round
);
write_output
(
fname
,
vname
,
&
(
PHY_vars_UE
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_id
][
0
][
0
]),
PHY_vars_UE
->
lte_frame_parms
.
ofdm_symbol_size
*
nsymb
,
1
,
1
);
if
(
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
>
1
)
{
sprintf
(
fname
,
"dlsch01_r%d.m"
,
round
);
sprintf
(
vname
,
"dl01_r%d
.m
"
,
round
);
sprintf
(
vname
,
"dl01_r%d"
,
round
);
write_output
(
fname
,
vname
,
&
(
PHY_vars_UE
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_id
][
1
][
0
]),
PHY_vars_UE
->
lte_frame_parms
.
ofdm_symbol_size
*
nsymb
/
2
,
1
,
1
);
...
...
@@ -3494,7 +3494,7 @@ PMI_FEEDBACK:
if
(
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_tx
>
1
)
{
sprintf
(
fname
,
"dlsch10_r%d.m"
,
round
);
sprintf
(
vname
,
"dl10_r%d
.m
"
,
round
);
sprintf
(
vname
,
"dl10_r%d"
,
round
);
write_output
(
fname
,
vname
,
&
(
PHY_vars_UE
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_id
][
2
][
0
]),
PHY_vars_UE
->
lte_frame_parms
.
ofdm_symbol_size
*
nsymb
/
2
,
1
,
1
);
...
...
@@ -3502,7 +3502,7 @@ PMI_FEEDBACK:
if
((
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
>
1
)
&&
(
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_tx
>
1
))
{
sprintf
(
fname
,
"dlsch11_r%d.m"
,
round
);
sprintf
(
vname
,
"dl11_r%d
.m
"
,
round
);
sprintf
(
vname
,
"dl11_r%d"
,
round
);
write_output
(
fname
,
vname
,
&
(
PHY_vars_UE
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_id
][
3
][
0
]),
PHY_vars_UE
->
lte_frame_parms
.
ofdm_symbol_size
*
nsymb
/
2
,
1
,
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