Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
openairinterface5G
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Merge Requests
23
Merge Requests
23
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
oai
openairinterface5G
Commits
771bab79
Commit
771bab79
authored
Jan 15, 2016
by
Rohit Gupta
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'enhancement-57-UHD-interfacing' into develop
parents
f9d1f855
9f032724
Changes
32
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
757 additions
and
945 deletions
+757
-945
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-0
openair1/PHY/INIT/lte_param_init.c
openair1/PHY/INIT/lte_param_init.c
+106
-0
openair1/PHY/INIT/lte_parms.c
openair1/PHY/INIT/lte_parms.c
+53
-32
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
+10
-6
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
+0
-8
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+1
-1
openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
+6
-6
openair1/PHY/LTE_TRANSPORT/print_stats.c
openair1/PHY/LTE_TRANSPORT/print_stats.c
+3
-2
openair1/PHY/MODULATION/defs.h
openair1/PHY/MODULATION/defs.h
+3
-3
openair1/PHY/MODULATION/ofdm_mod.c
openair1/PHY/MODULATION/ofdm_mod.c
+33
-40
openair1/PHY/MODULATION/slot_fep.c
openair1/PHY/MODULATION/slot_fep.c
+17
-13
openair1/PHY/MODULATION/slot_fep_mbsfn.c
openair1/PHY/MODULATION/slot_fep_mbsfn.c
+10
-6
openair1/PHY/MODULATION/slot_fep_ul.c
openair1/PHY/MODULATION/slot_fep_ul.c
+10
-6
openair1/PHY/TOOLS/lte_dfts.c
openair1/PHY/TOOLS/lte_dfts.c
+24
-11
openair1/PHY/impl_defs_lte.h
openair1/PHY/impl_defs_lte.h
+2
-2
openair1/PHY/impl_defs_top.h
openair1/PHY/impl_defs_top.h
+0
-1
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+1
-1
openair1/SIMULATION/LTE_PHY/dlsim.c
openair1/SIMULATION/LTE_PHY/dlsim.c
+108
-176
openair1/SIMULATION/LTE_PHY/mbmssim.c
openair1/SIMULATION/LTE_PHY/mbmssim.c
+1
-1
openair1/SIMULATION/LTE_PHY/pbchsim.c
openair1/SIMULATION/LTE_PHY/pbchsim.c
+131
-185
openair1/SIMULATION/LTE_PHY/pdcchsim.c
openair1/SIMULATION/LTE_PHY/pdcchsim.c
+3
-94
openair1/SIMULATION/LTE_PHY/prachsim.c
openair1/SIMULATION/LTE_PHY/prachsim.c
+10
-53
openair1/SIMULATION/LTE_PHY/pucchsim.c
openair1/SIMULATION/LTE_PHY/pucchsim.c
+12
-57
openair1/SIMULATION/LTE_PHY/scansim.c
openair1/SIMULATION/LTE_PHY/scansim.c
+67
-140
openair1/SIMULATION/LTE_PHY/syncsim.c
openair1/SIMULATION/LTE_PHY/syncsim.c
+4
-4
openair1/SIMULATION/LTE_PHY/ulsim.c
openair1/SIMULATION/LTE_PHY/ulsim.c
+11
-56
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+88
-15
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf
...S/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf
+2
-2
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
...TS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
+4
-4
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
...PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+3
-3
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+24
-9
targets/RT/USER/lte-ue.c
targets/RT/USER/lte-ue.c
+9
-8
No files found.
cmake_targets/CMakeLists.txt
View file @
771bab79
...
...
@@ -844,6 +844,7 @@ set(PHY_SRC
${
OPENAIR1_DIR
}
/PHY/CODING/viterbi_lte.c
${
OPENAIR1_DIR
}
/PHY/INIT/lte_init.c
${
OPENAIR1_DIR
}
/PHY/INIT/lte_parms.c
${
OPENAIR1_DIR
}
/PHY/INIT/lte_param_init.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/file_output.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lte_dfts.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/log2_approx.c
...
...
openair1/PHY/INIT/lte_param_init.c
0 → 100644
View file @
771bab79
#include <string.h>
#include <math.h>
#include <unistd.h>
#include <execinfo.h>
#include <signal.h>
#include "SIMULATION/TOOLS/defs.h"
#include "PHY/types.h"
#include "PHY/defs.h"
#include "PHY/extern.h"
extern
PHY_VARS_eNB
*
PHY_vars_eNB
;
extern
PHY_VARS_UE
*
PHY_vars_UE
;
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
uint8_t
extended_prefix_flag
,
frame_t
frame_type
,
uint16_t
Nid_cell
,
uint8_t
tdd_config
,
uint8_t
N_RB_DL
,
uint8_t
threequarter_fs
,
uint8_t
osf
,
uint32_t
perfect_ce
)
{
LTE_DL_FRAME_PARMS
*
lte_frame_parms
;
int
i
;
printf
(
"Start lte_param_init
\n
"
);
PHY_vars_eNB
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_UE
=
malloc
(
sizeof
(
PHY_VARS_UE
));
//PHY_config = malloc(sizeof(PHY_CONFIG));
mac_xface
=
malloc
(
sizeof
(
MAC_xface
));
srand
(
0
);
randominit
(
0
);
set_taus_seed
(
0
);
lte_frame_parms
=
&
(
PHY_vars_eNB
->
lte_frame_parms
);
lte_frame_parms
->
N_RB_DL
=
N_RB_DL
;
//50 for 10MHz and 25 for 5 MHz
lte_frame_parms
->
N_RB_UL
=
N_RB_DL
;
lte_frame_parms
->
threequarter_fs
=
threequarter_fs
;
lte_frame_parms
->
Ncp
=
extended_prefix_flag
;
lte_frame_parms
->
Nid_cell
=
Nid_cell
;
lte_frame_parms
->
nushift
=
Nid_cell
%
6
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
lte_frame_parms
->
nb_antennas_tx_eNB
=
N_tx
;
lte_frame_parms
->
phich_config_common
.
phich_resource
=
one
;
lte_frame_parms
->
tdd_config
=
tdd_config
;
lte_frame_parms
->
frame_type
=
frame_type
;
// lte_frame_parms->Csrs = 2;
// lte_frame_parms->Bsrs = 0;
// lte_frame_parms->kTC = 0;44
// lte_frame_parms->n_RRC = 0;
lte_frame_parms
->
mode1_flag
=
(
transmission_mode
==
1
)
?
1
:
0
;
init_frame_parms
(
lte_frame_parms
,
osf
);
//copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
// phy_init_top(lte_frame_parms); //allocation
PHY_vars_UE
->
is_secondary_ue
=
0
;
PHY_vars_UE
->
lte_frame_parms
=
*
lte_frame_parms
;
PHY_vars_eNB
->
lte_frame_parms
=
*
lte_frame_parms
;
phy_init_lte_top
(
lte_frame_parms
);
dump_frame_parms
(
lte_frame_parms
);
PHY_vars_UE
->
PHY_measurements
.
n_adj_cells
=
0
;
PHY_vars_UE
->
PHY_measurements
.
adj_cell_id
[
0
]
=
Nid_cell
+
1
;
PHY_vars_UE
->
PHY_measurements
.
adj_cell_id
[
1
]
=
Nid_cell
+
2
;
for
(
i
=
0
;
i
<
3
;
i
++
)
lte_gold
(
lte_frame_parms
,
PHY_vars_UE
->
lte_gold_table
[
i
],
Nid_cell
+
i
);
phy_init_lte_ue
(
PHY_vars_UE
,
1
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
0
,
0
);
generate_pcfich_reg_mapping
(
&
PHY_vars_UE
->
lte_frame_parms
);
generate_phich_reg_mapping
(
&
PHY_vars_UE
->
lte_frame_parms
);
// DL power control init
if
(
transmission_mode
==
1
)
{
PHY_vars_eNB
->
pdsch_config_dedicated
->
p_a
=
dB0
;
// 4 = 0dB
((
PHY_vars_eNB
->
lte_frame_parms
).
pdsch_config_common
).
p_b
=
0
;
PHY_vars_UE
->
pdsch_config_dedicated
->
p_a
=
dB0
;
// 4 = 0dB
((
PHY_vars_UE
->
lte_frame_parms
).
pdsch_config_common
).
p_b
=
0
;
}
else
{
// rho_a = rhob
PHY_vars_eNB
->
pdsch_config_dedicated
->
p_a
=
dB0
;
// 4 = 0dB
((
PHY_vars_eNB
->
lte_frame_parms
).
pdsch_config_common
).
p_b
=
1
;
PHY_vars_UE
->
pdsch_config_dedicated
->
p_a
=
dB0
;
// 4 = 0dB
((
PHY_vars_UE
->
lte_frame_parms
).
pdsch_config_common
).
p_b
=
1
;
}
PHY_vars_UE
->
perfect_ce
=
perfect_ce
;
printf
(
"Done lte_param_init
\n
"
);
}
openair1/PHY/INIT/lte_parms.c
View file @
771bab79
...
...
@@ -68,33 +68,57 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break
;
default:
msg
(
"Illegal oversampling %d
\n
"
,
osf
);
printf
(
"Illegal oversampling %d
\n
"
,
osf
);
return
(
-
1
);
}
switch
(
frame_parms
->
N_RB_DL
)
{
case
100
:
if
(
osf
>
1
)
{
msg
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
printf
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
return
(
-
1
);
}
frame_parms
->
ofdm_symbol_size
=
2048
;
frame_parms
->
log2_symbol_size
=
11
;
frame_parms
->
samples_per_tti
=
30720
;
frame_parms
->
first_carrier_offset
=
2048
-
600
;
if
(
frame_parms
->
threequarter_fs
)
{
frame_parms
->
ofdm_symbol_size
=
1536
;
frame_parms
->
samples_per_tti
=
23040
;
frame_parms
->
first_carrier_offset
=
1536
-
600
;
frame_parms
->
nb_prefix_samples
=
(
frame_parms
->
nb_prefix_samples
*
3
)
>>
2
;
frame_parms
->
nb_prefix_samples0
=
(
frame_parms
->
nb_prefix_samples0
*
3
)
>>
2
;
}
else
{
frame_parms
->
ofdm_symbol_size
=
2048
;
frame_parms
->
samples_per_tti
=
30720
;
frame_parms
->
first_carrier_offset
=
2048
-
600
;
}
frame_parms
->
N_RBGS
=
4
;
frame_parms
->
N_RBG
=
25
;
break
;
case
75
:
if
(
osf
>
1
)
{
printf
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
return
(
-
1
);
}
frame_parms
->
ofdm_symbol_size
=
1536
;
frame_parms
->
samples_per_tti
=
23040
;
frame_parms
->
first_carrier_offset
=
1536
-
450
;
frame_parms
->
nb_prefix_samples
=
(
frame_parms
->
nb_prefix_samples
*
3
)
>>
2
;
frame_parms
->
nb_prefix_samples0
=
(
frame_parms
->
nb_prefix_samples0
*
3
)
>>
2
;
frame_parms
->
N_RBGS
=
4
;
frame_parms
->
N_RBG
=
25
;
break
;
case
50
:
if
(
osf
>
1
)
{
msg
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
printf
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
return
(
-
1
);
}
frame_parms
->
ofdm_symbol_size
=
1024
*
osf
;
frame_parms
->
log2_symbol_size
=
10
+
log2_osf
;
frame_parms
->
samples_per_tti
=
15360
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
300
;
frame_parms
->
nb_prefix_samples
>>=
(
1
-
log2_osf
);
...
...
@@ -105,13 +129,13 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case
25
:
if
(
osf
>
2
)
{
msg
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
printf
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
return
(
-
1
);
}
frame_parms
->
ofdm_symbol_size
=
512
*
osf
;
frame_parms
->
log2_symbol_size
=
9
+
log2_osf
;
frame_parms
->
samples_per_tti
=
7680
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
150
;
frame_parms
->
nb_prefix_samples
>>=
(
2
-
log2_osf
);
...
...
@@ -124,7 +148,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case
15
:
frame_parms
->
ofdm_symbol_size
=
256
*
osf
;
frame_parms
->
log2_symbol_size
=
8
+
log2_osf
;
frame_parms
->
samples_per_tti
=
3840
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
90
;
frame_parms
->
nb_prefix_samples
>>=
(
3
-
log2_osf
);
...
...
@@ -135,7 +158,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case
6
:
frame_parms
->
ofdm_symbol_size
=
128
*
osf
;
frame_parms
->
log2_symbol_size
=
7
+
log2_osf
;
frame_parms
->
samples_per_tti
=
1920
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
36
;
frame_parms
->
nb_prefix_samples
>>=
(
4
-
log2_osf
);
...
...
@@ -145,7 +167,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break
;
default:
msg
(
"init_frame_parms: Error: Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p
\n
"
,
frame_parms
->
N_RB_DL
,
frame_parms
);
printf
(
"init_frame_parms: Error: Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p
\n
"
,
frame_parms
->
N_RB_DL
,
frame_parms
);
return
(
-
1
);
break
;
}
...
...
@@ -159,23 +181,22 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
void
dump_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
)
{
msg
(
"frame_parms->N_RB_DL=%d
\n
"
,
frame_parms
->
N_RB_DL
);
msg
(
"frame_parms->N_RB_UL=%d
\n
"
,
frame_parms
->
N_RB_UL
);
msg
(
"frame_parms->Nid_cell=%d
\n
"
,
frame_parms
->
Nid_cell
);
msg
(
"frame_parms->Ncp=%d
\n
"
,
frame_parms
->
Ncp
);
msg
(
"frame_parms->Ncp_UL=%d
\n
"
,
frame_parms
->
Ncp_UL
);
msg
(
"frame_parms->nushift=%d
\n
"
,
frame_parms
->
nushift
);
msg
(
"frame_parms->frame_type=%d
\n
"
,
frame_parms
->
frame_type
);
msg
(
"frame_parms->tdd_config=%d
\n
"
,
frame_parms
->
tdd_config
);
msg
(
"frame_parms->tdd_config_S=%d
\n
"
,
frame_parms
->
tdd_config_S
);
msg
(
"frame_parms->mode1_flag=%d
\n
"
,
frame_parms
->
mode1_flag
);
msg
(
"frame_parms->nb_antennas_tx=%d
\n
"
,
frame_parms
->
nb_antennas_tx
);
msg
(
"frame_parms->nb_antennas_rx=%d
\n
"
,
frame_parms
->
nb_antennas_rx
);
msg
(
"frame_parms->ofdm_symbol_size=%d
\n
"
,
frame_parms
->
ofdm_symbol_size
);
msg
(
"frame_parms->log2_symbol_size=%d
\n
"
,
frame_parms
->
log2_symbol_size
);
msg
(
"frame_parms->nb_prefix_samples=%d
\n
"
,
frame_parms
->
nb_prefix_samples
);
msg
(
"frame_parms->nb_prefix_samples0=%d
\n
"
,
frame_parms
->
nb_prefix_samples0
);
msg
(
"frame_parms->first_carrier_offset=%d
\n
"
,
frame_parms
->
first_carrier_offset
);
msg
(
"frame_parms->samples_per_tti=%d
\n
"
,
frame_parms
->
samples_per_tti
);
msg
(
"frame_parms->symbols_per_tti=%d
\n
"
,
frame_parms
->
symbols_per_tti
);
printf
(
"frame_parms->N_RB_DL=%d
\n
"
,
frame_parms
->
N_RB_DL
);
printf
(
"frame_parms->N_RB_UL=%d
\n
"
,
frame_parms
->
N_RB_UL
);
printf
(
"frame_parms->Nid_cell=%d
\n
"
,
frame_parms
->
Nid_cell
);
printf
(
"frame_parms->Ncp=%d
\n
"
,
frame_parms
->
Ncp
);
printf
(
"frame_parms->Ncp_UL=%d
\n
"
,
frame_parms
->
Ncp_UL
);
printf
(
"frame_parms->nushift=%d
\n
"
,
frame_parms
->
nushift
);
printf
(
"frame_parms->frame_type=%d
\n
"
,
frame_parms
->
frame_type
);
printf
(
"frame_parms->tdd_config=%d
\n
"
,
frame_parms
->
tdd_config
);
printf
(
"frame_parms->tdd_config_S=%d
\n
"
,
frame_parms
->
tdd_config_S
);
printf
(
"frame_parms->mode1_flag=%d
\n
"
,
frame_parms
->
mode1_flag
);
printf
(
"frame_parms->nb_antennas_tx=%d
\n
"
,
frame_parms
->
nb_antennas_tx
);
printf
(
"frame_parms->nb_antennas_rx=%d
\n
"
,
frame_parms
->
nb_antennas_rx
);
printf
(
"frame_parms->ofdm_symbol_size=%d
\n
"
,
frame_parms
->
ofdm_symbol_size
);
printf
(
"frame_parms->nb_prefix_samples=%d
\n
"
,
frame_parms
->
nb_prefix_samples
);
printf
(
"frame_parms->nb_prefix_samples0=%d
\n
"
,
frame_parms
->
nb_prefix_samples0
);
printf
(
"frame_parms->first_carrier_offset=%d
\n
"
,
frame_parms
->
first_carrier_offset
);
printf
(
"frame_parms->samples_per_tti=%d
\n
"
,
frame_parms
->
samples_per_tti
);
printf
(
"frame_parms->symbols_per_tti=%d
\n
"
,
frame_parms
->
symbols_per_tti
);
}
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
View file @
771bab79
...
...
@@ -703,24 +703,28 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
phy_vars_ue
->
lte_frame_parms
.
log2
_symbol_size
)
{
case
7
:
switch
(
phy_vars_ue
->
lte_frame_parms
.
ofdm
_symbol_size
)
{
case
128
:
idft
=
idft128
;
break
;
case
8
:
case
256
:
idft
=
idft256
;
break
;
case
9
:
case
512
:
idft
=
idft512
;
break
;
case
10
:
case
10
24
:
idft
=
idft1024
;
break
;
case
11
:
case
1536
:
idft
=
idft1536
;
break
;
case
2048
:
idft
=
idft2048
;
break
;
...
...
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
View file @
771bab79
...
...
@@ -61,7 +61,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
{
int
i
,
k
;
//unsigned short ds = frame_parms->log2_symbol_size - 7;
sync_corr_ue0
=
(
int
*
)
malloc16
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
sizeof
(
int
)
*
frame_parms
->
samples_per_tti
);
sync_corr_ue1
=
(
int
*
)
malloc16
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
sizeof
(
int
)
*
frame_parms
->
samples_per_tti
);
...
...
@@ -184,13 +183,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
LOG_E
(
PHY
,
"Unsupported N_RB_DL %d
\n
"
,
frame_parms
->
N_RB_DL
);
break
;
}
/*
frame_parms->twiddle_ifft, /// complex twiddle factors
frame_parms->rev, /// bit reversed permutation vector
frame_parms->log2_symbol_size,/// log2(FFT_SIZE)
(frame_parms->log2_symbol_size/2),
0); /// 0 - input is in complex Q1.15 format, 1 - input is in complex redundant Q1.15 format)
*/
for
(
i
=
0
;
i
<
frame_parms
->
ofdm_symbol_size
;
i
++
)
((
int32_t
*
)
primary_synch0_time
)[
i
]
=
sync_tmp
[
i
];
...
...
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
View file @
771bab79
...
...
@@ -432,7 +432,7 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
in_fft_ptr_0
=
&
temp_in_fft_0
[
0
];
in_fft_ptr_1
=
&
temp_in_fft_1
[
0
];
for
(
j
=
0
;
j
<
(
1
<<
(
frame_parms
->
log2_symbol_size
)
)
/
12
;
j
++
)
{
for
(
j
=
0
;
j
<
(
frame_parms
->
ofdm_symbol_size
)
/
12
;
j
++
)
{
if
(
j
>
19
)
{
((
int16_t
*
)
in_fft_ptr_0
)[
-
40
+
(
2
*
j
)]
=
((
int16_t
*
)
temp_out_ifft_0
)[
-
80
+
(
2
*
j
)]
*
rx_power_correction
;
((
int16_t
*
)
in_fft_ptr_0
)[
-
40
+
(
2
*
j
)
+
1
]
=
((
int16_t
*
)
temp_out_ifft_0
)[
-
80
+
(
2
*
j
+
1
)]
*
rx_power_correction
;
...
...
openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
View file @
771bab79
...
...
@@ -72,7 +72,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
else
if
((
p
==
1
)
&&
(
l
>
0
))
nu
=
0
;
else
{
msg
(
"lte_dl_cell_spec: p %d, l %d -> ERROR
\n
"
,
p
,
l
);
printf
(
"lte_dl_cell_spec: p %d, l %d -> ERROR
\n
"
,
p
,
l
);
return
(
-
1
);
}
...
...
@@ -94,9 +94,9 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
output
[
k
]
=
qpsk
[(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
msg
(
"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d
\n
"
,
printf
(
"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d
\n
"
,
Ns
,
l
,
m
,
mprime_dword
,
mprime_qpsk_symb
);
msg
(
"index = %d (k %d)
\n
"
,(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
,
k
);
printf
(
"index = %d (k %d)
\n
"
,(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
,
k
);
#endif
mprime
++
;
...
...
@@ -151,7 +151,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
else
if
((
p
==
1
)
&&
(
l
>
0
))
nu
=
0
;
else
{
msg
(
"lte_dl_cell_spec: p %d, l %d -> ERROR
\n
"
,
p
,
l
);
printf
(
"lte_dl_cell_spec: p %d, l %d -> ERROR
\n
"
,
p
,
l
);
return
(
-
1
);
}
...
...
@@ -177,9 +177,9 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
output
[
k
]
=
qpsk
[(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
msg
(
"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d
\n
"
,
printf
(
"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d
\n
"
,
Ns
,
l
,
m
,
mprime_dword
,
mprime_qpsk_symb
);
msg
(
"index = %d (k %d)
\n
"
,(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
,
k
);
printf
(
"index = %d (k %d)
\n
"
,(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
,
k
);
#endif
mprime
++
;
...
...
openair1/PHY/LTE_TRANSPORT/print_stats.c
View file @
771bab79
...
...
@@ -67,11 +67,12 @@ int dump_ue_stats(PHY_VARS_UE *phy_vars_ue, char* buffer, int length, runmode_t
if
((
mode
==
normal_txrx
)
||
(
mode
==
no_L2_connect
))
{
len
+=
sprintf
(
&
buffer
[
len
],
"[UE_PROC] UE %d, RNTI %x
\n
"
,
phy_vars_ue
->
Mod_id
,
phy_vars_ue
->
lte_ue_pdcch_vars
[
0
]
->
crnti
);
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE
\n
"
,
len
+=
sprintf
(
&
buffer
[
len
],
"[UE PROC] RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE
(NF %.1f dB)
\n
"
,
10
*
log10
(
phy_vars_ue
->
PHY_measurements
.
rsrp
[
0
])
-
phy_vars_ue
->
rx_total_gain_dB
,
10
*
log10
(
phy_vars_ue
->
PHY_measurements
.
rssi
)
-
phy_vars_ue
->
rx_total_gain_dB
,
10
*
log10
(
phy_vars_ue
->
PHY_measurements
.
rsrq
[
0
]),
phy_vars_ue
->
PHY_measurements
.
n0_power_tot_dBm
);
phy_vars_ue
->
PHY_measurements
.
n0_power_tot_dBm
,
(
double
)
phy_vars_ue
->
PHY_measurements
.
n0_power_tot_dBm
+
132
.
24
);
/*
len += sprintf(&buffer[len],
...
...
openair1/PHY/MODULATION/defs.h
View file @
771bab79
...
...
@@ -34,12 +34,12 @@
*/
/**
\fn void PHY_ofdm_mod(int *input,int *output,
unsigned char log2
fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype)
\fn void PHY_ofdm_mod(int *input,int *output,
int
fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype)
This function performs OFDM modulation with cyclic extension or zero-padding.
@param input The sequence input samples in the frequency-domain. This is a concatenation of the input symbols in SIMD redundant format
@param output The time-domain output signal
@param
log2fftsize Base-2 logarithm of the
OFDM symbol size (\f$N_d\f$)
@param
fftsize size of
OFDM symbol size (\f$N_d\f$)
@param nb_symbols The number of OFDM symbols in the block
@param nb_prefix_samples The number of prefix/suffix/zero samples
@param etype Type of extension (CYCLIC_PREFIX,CYCLIC_SUFFIX,ZEROS)
...
...
@@ -47,7 +47,7 @@ This function performs OFDM modulation with cyclic extension or zero-padding.
*/
void
PHY_ofdm_mod
(
int
*
input
,
int
*
output
,
unsigned
char
log2
fftsize
,
int
fftsize
,
unsigned
char
nb_symbols
,
unsigned
short
nb_prefix_samples
,
Extension_t
etype
...
...
openair1/PHY/MODULATION/ofdm_mod.c
View file @
771bab79
...
...
@@ -61,9 +61,9 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
txdata
+
(
i
*
(
frame_parms
->
samples_per_tti
>>
1
)));
#endif
PHY_ofdm_mod
(
txdataF
+
(
i
*
NUMBER_OF_OFDM_CARRIERS
*
frame_parms
->
symbols_per_tti
>>
1
),
// input
PHY_ofdm_mod
(
txdataF
+
(
i
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
>>
1
),
// input
txdata
+
(
i
*
frame_parms
->
samples_per_tti
>>
1
),
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
1
,
// number of symbols
frame_parms
->
nb_prefix_samples0
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -71,9 +71,9 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
printf
(
"slot i %d (txdata offset %d)
\n
"
,
i
,
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0
+
(
i
*
frame_parms
->
samples_per_tti
>>
1
));
#endif
PHY_ofdm_mod
(
txdataF
+
NUMBER_OF_OFDM_CARRIERS
+
(
i
*
NUMBER_OF_OFDM_CARRIERS
*
(
frame_parms
->
symbols_per_tti
>>
1
)),
// input
PHY_ofdm_mod
(
txdataF
+
frame_parms
->
ofdm_symbol_size
+
(
i
*
frame_parms
->
ofdm_symbol_size
*
(
frame_parms
->
symbols_per_tti
>>
1
)),
// input
txdata
+
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0
+
(
i
*
(
frame_parms
->
samples_per_tti
>>
1
)),
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
(
short_offset
==
1
)
?
1
:
(
frame_parms
->
symbols_per_tti
>>
1
)
-
1
,
//6, // number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -84,7 +84,7 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
void
PHY_ofdm_mod
(
int
*
input
,
/// pointer to complex input
int
*
output
,
/// pointer to complex output
unsigned
char
log2fftsize
,
/// log2(FFT_SIZE)
int
fftsize
,
/// FFT_SIZE
unsigned
char
nb_symbols
,
/// number of OFDM symbols
unsigned
short
nb_prefix_samples
,
/// cyclic prefix length
Extension_t
etype
/// type of extension
...
...
@@ -100,24 +100,28 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
int
*
temp_ptr
=
(
int
*
)
0
;
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
log2
fftsize
)
{
case
7
:
switch
(
fftsize
)
{
case
128
:
idft
=
idft128
;
break
;
case
8
:
case
256
:
idft
=
idft256
;
break
;
case
9
:
case
512
:
idft
=
idft512
;
break
;
case
10
:
case
10
24
:
idft
=
idft1024
;
break
;
case
11
:
case
1536
:
idft
=
idft1536
;
break
;
case
2048
:
idft
=
idft2048
;
break
;
...
...
@@ -127,8 +131,8 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
}
#ifdef DEBUG_OFDM_MOD
msg
(
"[PHY] OFDM mod (size %d,prefix %d) Symbols %d, input %p, output %p
\n
"
,
1
<<
log2
fftsize
,
nb_prefix_samples
,
nb_symbols
,
input
,
output
);
printf
(
"[PHY] OFDM mod (size %d,prefix %d) Symbols %d, input %p, output %p
\n
"
,
fftsize
,
nb_prefix_samples
,
nb_symbols
,
input
,
output
);
#endif
...
...
@@ -136,35 +140,31 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
for
(
i
=
0
;
i
<
nb_symbols
;
i
++
)
{
#ifdef DEBUG_OFDM_MOD
msg
(
"[PHY] symbol %d/%d (%p,%p -> %p)
\n
"
,
i
,
nb_symbols
,
input
,
&
input
[
i
<<
log2fftsize
],
&
output
[(
i
<<
log2
fftsize
)
+
((
i
)
*
nb_prefix_samples
)]);
printf
(
"[PHY] symbol %d/%d offset %d (%p,%p -> %p)
\n
"
,
i
,
nb_symbols
,
i
*
fftsize
+
(
i
*
nb_prefix_samples
),
input
,
&
input
[
i
*
fftsize
],
&
output
[(
i
*
fftsize
)
+
((
i
)
*
nb_prefix_samples
)]);
#endif
idft
((
int16_t
*
)
&
input
[
i
<<
log2
fftsize
],
(
log2fftsize
==
7
)
?
(
int16_t
*
)
temp
:
(
int16_t
*
)
&
output
[(
i
<<
log2
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)],
idft
((
int16_t
*
)
&
input
[
i
*
fftsize
],
(
fftsize
==
128
)
?
(
int16_t
*
)
temp
:
(
int16_t
*
)
&
output
[(
i
*
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)],
1
);
// write_output("fft_out.m","fftout",temp,(1<<log2fftsize)*2,1,1);
//memset(temp,0,1<<log2fftsize);
// Copy to frame buffer with Cyclic Extension
// Note: will have to adjust for synchronization offset!
switch
(
etype
)
{
case
CYCLIC_PREFIX
:
output_ptr
=
&
output
[(
i
<<
log2
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)];
output_ptr
=
&
output
[(
i
*
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)];
temp_ptr
=
(
int
*
)
temp
;
// msg("Doing cyclic prefix method\n");
if
(
log2fftsize
==
7
)
{
for
(
j
=
0
;
j
<
((
1
<<
log2fftsize
))
;
j
++
)
{
if
(
fftsize
==
128
)
{
for
(
j
=
0
;
j
<
fftsize
;
j
++
)
{
output_ptr
[
j
]
=
temp_ptr
[
j
];
}
}
j
=
(
1
<<
log2fftsize
)
;
j
=
fftsize
;
for
(
k
=-
1
;
k
>=-
nb_prefix_samples
;
k
--
)
{
output_ptr
[
k
]
=
output_ptr
[
--
j
];
...
...
@@ -175,19 +175,19 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
case
CYCLIC_SUFFIX
:
output_ptr
=
&
output
[(
i
<<
log2
fftsize
)
+
(
i
*
nb_prefix_samples
)];
output_ptr
=
&
output
[(
i
*
fftsize
)
+
(
i
*
nb_prefix_samples
)];
temp_ptr
=
(
int
*
)
temp
;
// msg("Doing cyclic suffix method\n");
for
(
j
=
0
;
j
<
(
1
<<
log2fftsize
)
;
j
++
)
{
for
(
j
=
0
;
j
<
fftsize
;
j
++
)
{
output_ptr
[
j
]
=
temp_ptr
[
2
*
j
];
}
for
(
j
=
0
;
j
<
nb_prefix_samples
;
j
++
)
output_ptr
[
(
1
<<
log2fftsize
)
+
j
]
=
output_ptr
[
j
];
output_ptr
[
fftsize
+
j
]
=
output_ptr
[
j
];
break
;
...
...
@@ -198,11 +198,11 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
case
NONE
:
// msg("NO EXTENSION!\n");
output_ptr
=
&
output
[
(
i
<<
log2fftsize
)
];
output_ptr
=
&
output
[
fftsize
];
temp_ptr
=
(
int
*
)
temp
;
for
(
j
=
0
;
j
<
(
1
<<
log2fftsize
)
;
j
++
)
{
for
(
j
=
0
;
j
<
fftsize
;
j
++
)
{
output_ptr
[
j
]
=
temp_ptr
[
2
*
j
];
...
...
@@ -219,14 +219,7 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
}
/*
printf("input %p, output %p, log2fftsize %d, nsymb %d\n",input,output,log2fftsize,nb_symbols);
for (i=0;i<16;i++)
printf("%d %d\n",((short *)input)[i<<1],((short *)input)[1+(i<<1)]);
printf("------\n");
for (i=0;i<16;i++)
printf("%d %d\n",((short *)output)[i<<1],((short *)output)[1+(i<<1)]);
*/
}
...
...
@@ -244,7 +237,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
LOG_D
(
PHY
,
"Frame %d, subframe %d: Doing MBSFN modulation (slot_offset %d)
\n
"
,
frame
,
next_slot
>>
1
,
slot_offset
);
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
12
,
// number of symbols
frame_parms
->
ofdm_symbol_size
>>
2
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -252,7 +245,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
if
(
frame_parms
->
Ncp
==
EXTENDED
)
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
2
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -268,7 +261,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
if
(
frame_parms
->
Ncp
==
EXTENDED
)
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
6
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
openair1/PHY/MODULATION/slot_fep.c
View file @
771bab79
...
...
@@ -58,24 +58,28 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
int
tmp_dft_in
[
256
];
// This is for misalignment issues for 6 and 15 PRBs
switch
(
frame_parms
->
log2
_symbol_size
)
{
case
7
:
switch
(
frame_parms
->
ofdm
_symbol_size
)
{