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
wangwenhui
OpenXG-RAN
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
)
{
case
128
:
dft
=
dft128
;
break
;
case
8
:
case
256
:
dft
=
dft256
;
break
;
case
9
:
case
512
:
dft
=
dft512
;
break
;
case
10
:
case
10
24
:
dft
=
dft1024
;
break
;
case
11
:
case
1536
:
dft
=
dft1536
;
break
;
case
2048
:
dft
=
dft2048
;
break
;
...
...
@@ -96,12 +100,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
);
}
...
...
@@ -116,7 +120,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#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
...
...
@@ -147,7 +151,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#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
...
...
@@ -182,7 +186,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 +209,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 +226,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/MODULATION/slot_fep_mbsfn.c
View file @
771bab79
...
...
@@ -54,25 +54,29 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
unsigned
int
frame_length_samples
=
frame_parms
->
samples_per_tti
*
10
;
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
frame_parms
->
log2
_symbol_size
)
{
switch
(
frame_parms
->
ofdm
_symbol_size
)
{
case
7
:
case
128
:
dft
=
dft128
;
break
;
case
8
:
case
256
:
dft
=
dft256
;
break
;
case
9
:
case
512
:
dft
=
dft512
;
break
;
case
10
:
case
10
24
:
dft
=
dft1024
;
break
;
case
11
:
case
1536
:
dft
=
dft1536
;
break
;
case
2048
:
dft
=
dft2048
;
break
;
...
...
openair1/PHY/MODULATION/slot_fep_ul.c
View file @
771bab79
...
...
@@ -50,24 +50,28 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
frame_parms
->
log2
_symbol_size
)
{
case
7
:
switch
(
frame_parms
->
ofdm
_symbol_size
)
{
case
128
:
dft
=
dft128
;
break
;
case
8
:
case
256
:
dft
=
dft256
;
break
;
case
9
:
case
512
:
dft
=
dft512
;
break
;
case
10
:
case
10
24
:
dft
=
dft1024
;
break
;
case
11
:
case
1536
:
dft
=
dft1536
;
break
;
case
2048
:
dft
=
dft2048
;
break
;
...
...
openair1/PHY/TOOLS/lte_dfts.c
View file @
771bab79
...
...
@@ -45,8 +45,10 @@
#define debug_msg
#define ONE_OVER_SQRT2_Q15 23170
#endif
#define ONE_OVER_SQRT3_Q15 18919
#include "PHY/sse_intrin.h"
...
...
@@ -3180,6 +3182,8 @@ void idft1536(int16_t *input, int16_t *output)
int i,i2,j;
uint32_t tmp[3][512 ]__attribute__((aligned(16)));
uint32_t tmpo[3][512] __attribute__((aligned(16)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<512; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
...
...
@@ -3190,17 +3194,6 @@ void idft1536(int16_t *input, int16_t *output)
idft512((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1);
idft512((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft512((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
/*
for (i=1; i<512; i++) {
tmpo[0][i] = tmpo[0][i<<1];
tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1];
}*/
// write_output("in.m","in",input,6144,1,1);
// write_output("out0.m","o0",tmpo[0],2048,1,1);
// write_output("out1.m","o1",tmpo[1],2048,1,1);
// write_output("out2.m","o2",tmpo[2],2048,1,1);
for (i=0,i2=0; i<1024; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
...
...
@@ -3209,6 +3202,26 @@ void idft1536(int16_t *input, int16_t *output)
}
for (i=0; i<24; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
_mm_empty();
_m_empty();
openair1/PHY/impl_defs_lte.h
View file @
771bab79
...
...
@@ -516,10 +516,10 @@ typedef struct {
uint8_t
dual_tx
;
/// flag to indicate SISO transmission
uint8_t
mode1_flag
;
/// Indicator that 20 MHz channel uses 3/4 sampling frequency
uint8_t
threequarter_fs
;
/// Size of FFT
uint16_t
ofdm_symbol_size
;
/// log2(Size of FFT)
uint8_t
log2_symbol_size
;
/// Number of prefix samples in all but first symbol of slot
uint16_t
nb_prefix_samples
;
/// Number of prefix samples in first symbol of slot
...
...
openair1/PHY/impl_defs_top.h
View file @
771bab79
...
...
@@ -117,7 +117,6 @@
*/
#define NUMBER_OF_OFDM_CARRIERS (frame_parms->ofdm_symbol_size)
#define NUMBER_OF_SYMBOLS_PER_FRAME (frame_parms->symbols_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)
#define LOG2_NUMBER_OF_OFDM_CARRIERS (frame_parms->log2_symbol_size)
#define NUMBER_OF_USEFUL_CARRIERS (12*frame_parms->N_RB_DL)
#define NUMBER_OF_ZERO_CARRIERS (NUMBER_OF_OFDM_CARRIERS-NUMBER_OF_USEFUL_CARRIERS)
#define NUMBER_OF_USEFUL_CARRIERS_BYTES (NUMBER_OF_USEFUL_CARRIERS>>2)
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
771bab79
...
...
@@ -1262,7 +1262,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
#else
&
phy_vars_ue
->
lte_ue_common_vars
.
txdata
[
aa
][
ulsch_start
],
#endif
frame_parms
->
log2
_symbol_size
,
frame_parms
->
ofdm
_symbol_size
,
nsymb
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
771bab79
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/LTE_PHY/mbmssim.c
View file @
771bab79
...
...
@@ -456,7 +456,7 @@ int main(int argc, char **argv)
PHY_ofdm_mod
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
// input,
txdata
[
0
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/pbchsim.c
View file @
771bab79
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/LTE_PHY/pdcchsim.c
View file @
771bab79
...
...
@@ -58,98 +58,6 @@ PHY_VARS_UE *PHY_vars_UE;
#define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2)
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
unsigned
char
extended_prefix_flag
,
uint16_t
Nid_cell
,
uint8_t
tdd_config
,
uint8_t
N_RB_DL
,
lte_frame_type_t
frame_type
,
uint8_t
osf
,
uint32_t
perfect_ce
)
{
unsigned
int
i
;
LTE_DL_FRAME_PARMS
*
lte_frame_parms
;
printf
(
"Start lte_param_init (Nid_cell %d, extended_prefix %d, transmission_mode %d, N_tx %d, N_rx %d)
\n
"
,
Nid_cell
,
extended_prefix_flag
,
transmission_mode
,
N_tx
,
N_rx
);
PHY_vars_eNB
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_eNB1
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_eNB2
=
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
));
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
->
Ncp
=
extended_prefix_flag
;
lte_frame_parms
->
Nid_cell
=
Nid_cell
;
lte_frame_parms
->
nushift
=
Nid_cell
%
6
;
lte_frame_parms
->
nb_antennas_tx_eNB
=
N_tx
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
lte_frame_parms
->
phich_config_common
.
phich_resource
=
one
;
//half
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;
// 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));
memcpy
(
&
PHY_vars_UE
->
lte_frame_parms
,
lte_frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
phy_init_lte_top
(
lte_frame_parms
);
phy_init_lte_ue
(
PHY_vars_UE
,
1
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
0
,
0
);
memcpy
((
void
*
)
&
PHY_vars_eNB1
->
lte_frame_parms
,(
void
*
)
&
PHY_vars_eNB
->
lte_frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
PHY_vars_eNB1
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
1
)
%
6
;
PHY_vars_eNB1
->
lte_frame_parms
.
Nid_cell
=
Nid_cell
+
1
;
memcpy
((
void
*
)
&
PHY_vars_eNB2
->
lte_frame_parms
,(
void
*
)
&
PHY_vars_eNB
->
lte_frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
PHY_vars_eNB2
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
2
)
%
6
;
PHY_vars_eNB2
->
lte_frame_parms
.
Nid_cell
=
Nid_cell
+
2
;
phy_init_lte_eNB
(
PHY_vars_eNB1
,
0
,
0
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB2
,
0
,
0
,
0
);
phy_init_lte_top
(
lte_frame_parms
);
PHY_vars_UE
->
PHY_measurements
.
n_adj_cells
=
2
;
PHY_vars_UE
->
PHY_measurements
.
adj_cell_id
[
0
]
=
Nid_cell
+
1
;
PHY_vars_UE
->
PHY_measurements
.
adj_cell_id
[
1
]
=
Nid_cell
+
2
;
PHY_vars_UE
->
perfect_ce
=
perfect_ce
;
for
(
i
=
0
;
i
<
3
;
i
++
)
lte_gold
(
lte_frame_parms
,
PHY_vars_UE
->
lte_gold_table
[
i
],
Nid_cell
+
i
);
generate_pcfich_reg_mapping
(
&
PHY_vars_UE
->
lte_frame_parms
);
generate_phich_reg_mapping
(
&
PHY_vars_UE
->
lte_frame_parms
);
printf
(
"Done lte_param_init
\n
"
);
CCCH_alloc_pdu
.
type
=
1
;
CCCH_alloc_pdu
.
vrb_type
=
0
;
CCCH_alloc_pdu
.
rballoc
=
CCCH_RB_ALLOC
;
CCCH_alloc_pdu
.
ndi
=
1
;
CCCH_alloc_pdu
.
mcs
=
1
;
CCCH_alloc_pdu
.
harq_pid
=
0
;
}
DCI_PDU
DCI_pdu
;
DCI_PDU
*
get_dci
(
LTE_DL_FRAME_PARMS
*
lte_frame_parms
,
uint8_t
log2L
,
uint8_t
log2Lcommon
,
uint8_t
format_selector
,
uint32_t
rnti
)
...
...
@@ -798,9 +706,10 @@ int main(int argc, char **argv)
n_rx
,
transmission_mode
,
extended_prefix_flag
,
frame_type
,
Nid_cell
,
tdd_config
,
N_RB_DL
,
frame_type
,
N_RB_DL
,
osf
,
perfect_ce
);
...
...
@@ -1084,7 +993,7 @@ int main(int argc, char **argv)
if
(
PHY_vars_eNB
->
lte_frame_parms
.
Ncp
==
1
)
PHY_ofdm_mod
(
&
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
][
subframe
*
nsymb
*
PHY_vars_eNB
->
lte_frame_parms
.
ofdm_symbol_size
],
// input,
&
txdata
[
aa
][
subframe
*
PHY_vars_eNB
->
lte_frame_parms
.
samples_per_tti
],
// output
PHY_vars_eNB
->
lte_frame_parms
.
log2_symbol_size
,
// log2_fft_size
PHY_vars_eNB
->
lte_frame_parms
.
ofdm_symbol_size
,
2
*
nsymb
,
// number of symbols
PHY_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/prachsim.c
View file @
771bab79
...
...
@@ -56,58 +56,6 @@ PHY_VARS_UE *PHY_vars_UE;
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
unsigned
char
extended_prefix_flag
,
uint16_t
Nid_cell
,
uint8_t
N_RB_DL
,
uint8_t
osf
)
{
LTE_DL_FRAME_PARMS
*
lte_frame_parms
;
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
));
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
->
Ncp
=
extended_prefix_flag
;
lte_frame_parms
->
Nid_cell
=
Nid_cell
;
lte_frame_parms
->
nushift
=
0
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
// lte_frame_parms->Csrs = 2;
// lte_frame_parms->Bsrs = 0;
// lte_frame_parms->kTC = 0;
// lte_frame_parms->n_RRC = 0;
lte_frame_parms
->
mode1_flag
=
(
transmission_mode
==
1
)
?
1
:
0
;
lte_frame_parms
->
tdd_config
=
1
;
lte_frame_parms
->
frame_type
=
1
;
init_frame_parms
(
lte_frame_parms
,
osf
);
//copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
PHY_vars_UE
->
lte_frame_parms
=
*
lte_frame_parms
;
phy_init_lte_top
(
lte_frame_parms
);
phy_init_lte_ue
(
PHY_vars_UE
,
1
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
0
,
0
);
printf
(
"Done lte_param_init
\n
"
);
}
extern
uint16_t
prach_root_sequence_map0_3
[
838
];
int
main
(
int
argc
,
char
**
argv
)
...
...
@@ -370,7 +318,16 @@ int main(int argc, char **argv)
if
(
transmission_mode
==
2
)
n_tx
=
2
;
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
Nid_cell
,
N_RB_DL
,
osf
);
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
FDD
,
Nid_cell
,
3
,
N_RB_DL
,
osf
,
0
);
if
(
snr1set
==
0
)
{
...
...
openair1/SIMULATION/LTE_PHY/pucchsim.c
View file @
771bab79
...
...
@@ -58,60 +58,6 @@ PHY_VARS_UE *PHY_vars_UE;
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
unsigned
char
extended_prefix_flag
,
uint16_t
Nid_cell
,
uint8_t
N_RB_DL
,
uint8_t
osf
)
{
LTE_DL_FRAME_PARMS
*
lte_frame_parms
;
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
));
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
->
Ncp
=
extended_prefix_flag
;
lte_frame_parms
->
Nid_cell
=
Nid_cell
;
lte_frame_parms
->
nushift
=
0
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
// lte_frame_parms->Csrs = 2;
// lte_frame_parms->Bsrs = 0;
// lte_frame_parms->kTC = 0;
// lte_frame_parms->n_RRC = 0;
lte_frame_parms
->
mode1_flag
=
(
transmission_mode
==
1
)
?
1
:
0
;
lte_frame_parms
->
tdd_config
=
3
;
lte_frame_parms
->
frame_type
=
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
->
lte_frame_parms
=
*
lte_frame_parms
;
phy_init_lte_ue
(
PHY_vars_UE
,
1
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
0
,
0
);
phy_init_lte_top
(
lte_frame_parms
);
printf
(
"Done lte_param_init
\n
"
);
}
int
main
(
int
argc
,
char
**
argv
)
{
...
...
@@ -368,7 +314,16 @@ int main(int argc, char **argv)
if
(
transmission_mode
==
2
)
n_tx
=
2
;
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
Nid_cell
,
N_RB_DL
,
osf
);
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
Nid_cell
,
FDD
,
3
,
N_RB_DL
,
osf
,
0
);
if
(
snr1set
==
0
)
{
...
...
@@ -473,7 +428,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
txdataF2
[
aa
],
// input
txdata
[
aa
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
2
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -496,7 +451,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
&
PHY_vars_UE
->
lte_ue_common_vars
.
txdataF
[
aa
][
2
*
subframe
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX
],
// input,
&
txdata
[
aa
][
PHY_vars_eNB
->
lte_frame_parms
.
samples_per_tti
*
subframe
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/scansim.c
View file @
771bab79
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/LTE_PHY/syncsim.c
View file @
771bab79
...
...
@@ -1189,7 +1189,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
txdataF2
[
aa
],
// input
txdata
[
aa
],
// output
PHY_vars_eNB
->
lte_frame_parms
.
log2
_symbol_size
,
// log2_fft_size
PHY_vars_eNB
->
lte_frame_parms
.
ofdm
_symbol_size
,
// log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
PHY_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
PHY_vars_eNB
->
lte_frame_parms
.
twiddle_ifft
,
// IFFT twiddle factors
...
...
@@ -1218,7 +1218,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
txdata
[
aa
],
// output
frame_parms
->
log2
_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm
_symbol_size
,
// log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
...
...
@@ -1240,7 +1240,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eNB1
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
PHY_vars_eNB1
->
lte_eNB_common_vars
.
txdata
[
eNb_id
][
aa
],
// output
frame_parms
->
log2
_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm
_symbol_size
,
// log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
...
...
@@ -1260,7 +1260,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eNB2
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
PHY_vars_eNB2
->
lte_eNB_common_vars
.
txdata
[
eNb_id
][
aa
],
// output
frame_parms
->
log2
_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm
_symbol_size
,
// log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
...
...
openair1/SIMULATION/LTE_PHY/ulsim.c
View file @
771bab79
...
...
@@ -89,60 +89,6 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for tx */
int
n_tx_dropped
=
0
;
/*!< \brief initial max process time for tx */
int
n_rx_dropped
=
0
;
/*!< \brief initial max process time for rx */
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
uint8_t
extended_prefix_flag
,
uint8_t
N_RB_DL
,
uint8_t
frame_type
,
uint8_t
tdd_config
,
uint8_t
osf
)
{
LTE_DL_FRAME_PARMS
*
lte_frame_parms
;
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
));
randominit
(
0
);
set_taus_seed
(
0
);
lte_frame_parms
=
&
(
PHY_vars_eNB
->
lte_frame_parms
);
lte_frame_parms
->
frame_type
=
frame_type
;
lte_frame_parms
->
tdd_config
=
tdd_config
;
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
->
Ncp
=
extended_prefix_flag
;
lte_frame_parms
->
Ncp_UL
=
extended_prefix_flag
;
lte_frame_parms
->
Nid_cell
=
10
;
lte_frame_parms
->
nushift
=
0
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
// lte_frame_parms->Csrs = 2;
// lte_frame_parms->Bsrs = 0;
// lte_frame_parms->kTC = 0;
// lte_frame_parms->n_RRC = 0;
lte_frame_parms
->
mode1_flag
=
(
transmission_mode
==
1
)
?
1
:
0
;
lte_frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
=
0
;
//n_DMRS1 set to 0
init_frame_parms
(
lte_frame_parms
,
osf
);
//copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
PHY_vars_UE
->
lte_frame_parms
=
*
lte_frame_parms
;
phy_init_lte_top
(
lte_frame_parms
);
phy_init_lte_ue
(
PHY_vars_UE
,
1
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
0
,
0
);
printf
(
"Done lte_param_init
\n
"
);
}
int
main
(
int
argc
,
char
**
argv
)
{
...
...
@@ -520,7 +466,16 @@ int main(int argc, char **argv)
}
}
lte_param_init
(
1
,
n_rx
,
1
,
extended_prefix_flag
,
N_RB_DL
,
frame_type
,
tdd_config
,
osf
);
lte_param_init
(
1
,
n_rx
,
1
,
extended_prefix_flag
,
frame_type
,
0
,
tdd_config
,
N_RB_DL
,
osf
,
0
);
if
(
nb_rb_set
==
0
)
nb_rb
=
PHY_vars_eNB
->
lte_frame_parms
.
N_RB_UL
;
...
...
@@ -1109,7 +1064,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
&
PHY_vars_UE
->
lte_ue_common_vars
.
txdataF
[
aa
][
subframe
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX
],
// input
&
txdata
[
aa
][
PHY_vars_eNB
->
lte_frame_parms
.
samples_per_tti
*
subframe
],
// output
PHY_vars_UE
->
lte_frame_parms
.
log2_symbol_size
,
// log2_fft_size
PHY_vars_UE
->
lte_frame_parms
.
ofdm_symbol_size
,
nsymb
,
// number of symbols
PHY_vars_UE
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
771bab79
...
...
@@ -38,6 +38,7 @@
#include <stdio.h>
#include <uhd/utils/thread_priority.hpp>
#include <uhd/usrp/multi_usrp.hpp>
#include <uhd/version.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
#include <iostream>
...
...
@@ -304,27 +305,59 @@ int trx_usrp_stop(int card) {
rx_gain_calib_table_t
calib_table_b210
[]
=
{
{
3500000000.0
,
46.0
},
{
2660000000.0
,
53.0
},
{
2300000000.0
,
54.0
},
{
1880000000.0
,
55.0
},
{
816000000.0
,
62.0
},
{
3500000000.0
,
44.0
},
{
2660000000.0
,
49.0
},
{
2300000000.0
,
50.0
},
{
1880000000.0
,
53.0
},
{
816000000.0
,
58.0
},
{
-
1
,
0
}};
rx_gain_calib_table_t
calib_table_b210_38
[]
=
{
{
3500000000.0
,
44.0
},
{
2660000000.0
,
49.8
},
{
2300000000.0
,
51.0
},
{
1880000000.0
,
53.0
},
{
816000000.0
,
57.0
},
{
-
1
,
0
}};
rx_gain_calib_table_t
calib_table_x310
[]
=
{
{
3500000000.0
,
77.0
},
{
2660000000.0
,
8
0
.0
},
{
2660000000.0
,
8
1
.0
},
{
2300000000.0
,
81.0
},
{
1880000000.0
,
82.0
},
{
816000000.0
,
85.0
},
{
-
1
,
0
}};
void
set_rx_gain_offset
(
openair0_config_t
*
openair0_cfg
,
int
chain_index
)
{
void
set_rx_gain_offset
(
openair0_config_t
*
openair0_cfg
,
int
chain_index
,
int
bw_gain_adjust
)
{
int
i
=
0
;
// loop through calibration table to find best adjustment factor for RX frequency
double
min_diff
=
6e9
,
diff
;
double
min_diff
=
6e9
,
diff
,
gain_adj
=
0.0
;
if
(
bw_gain_adjust
==
1
)
{
switch
((
int
)
openair0_cfg
[
0
].
sample_rate
)
{
case
30720000
:
break
;
case
23040000
:
gain_adj
=
1.25
;
break
;
case
15360000
:
gain_adj
=
3.0
;
break
;
case
7680000
:
gain_adj
=
6.0
;
break
;
case
3840000
:
gain_adj
=
9.0
;
break
;
case
1920000
:
gain_adj
=
12.0
;
break
;
default:
printf
(
"unknown sampling rate %d
\n
"
,(
int
)
openair0_cfg
[
0
].
sample_rate
);
exit
(
-
1
);
break
;
}
}
while
(
openair0_cfg
->
rx_gain_calib_table
[
i
].
freq
>
0
)
{
diff
=
fabs
(
openair0_cfg
->
rx_freq
[
chain_index
]
-
openair0_cfg
->
rx_gain_calib_table
[
i
].
freq
);
printf
(
"cal %d: freq %f, offset %f, diff %f
\n
"
,
...
...
@@ -333,7 +366,7 @@ void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) {
openair0_cfg
->
rx_gain_calib_table
[
i
].
offset
,
diff
);
if
(
min_diff
>
diff
)
{
min_diff
=
diff
;
openair0_cfg
->
rx_gain_offset
[
chain_index
]
=
openair0_cfg
->
rx_gain_calib_table
[
i
].
offset
;
openair0_cfg
->
rx_gain_offset
[
chain_index
]
=
openair0_cfg
->
rx_gain_calib_table
[
i
].
offset
+
gain_adj
;
}
i
++
;
}
...
...
@@ -366,8 +399,13 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
uhd
::
device_addrs_t
device_adds
=
uhd
::
device
::
find
(
args
);
size_t
i
;
int
vers
=
0
,
subvers
=
0
,
subsubvers
=
0
;
int
bw_gain_adjust
=
0
;
sscanf
(
uhd
::
get_version_string
().
c_str
(),
"%d.%d.%d"
,
&
vers
,
&
subvers
,
&
subsubvers
);
printf
(
"Checking for USRPs
\n
"
);
printf
(
"Checking for USRPs
: UHD %s (%d.%d.%d)
\n
"
,
uhd
::
get_version_string
().
c_str
(),
vers
,
subvers
,
subsubvers
);
if
(
device_adds
.
size
()
==
0
)
{
...
...
@@ -388,6 +426,7 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
}
printf
(
"Found USRP X300
\n
"
);
s
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
);
// s->usrp->set_rx_subdev_spec(rx_subdev);
...
...
@@ -410,21 +449,29 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
// from usrp_time_offset
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
tx_sample_advance
=
15
;
openair0_cfg
[
0
].
tx_bw
=
20e6
;
openair0_cfg
[
0
].
rx_bw
=
20e6
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
8
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
case
15360000
:
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
tx_sample_advance
=
45
;
openair0_cfg
[
0
].
tx_bw
=
10e6
;
openair0_cfg
[
0
].
rx_bw
=
10e6
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
5
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
case
7680000
:
openair0_cfg
[
0
].
samples_per_packet
=
1024
;
openair0_cfg
[
0
].
tx_sample_advance
=
50
;
openair0_cfg
[
0
].
tx_bw
=
5e6
;
openair0_cfg
[
0
].
rx_bw
=
5e6
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
5
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
case
1920000
:
openair0_cfg
[
0
].
samples_per_packet
=
256
;
openair0_cfg
[
0
].
tx_sample_advance
=
50
;
openair0_cfg
[
0
].
tx_bw
=
1.25e6
;
openair0_cfg
[
0
].
rx_bw
=
1.25e6
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
8
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
default:
...
...
@@ -446,30 +493,56 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
// set master clock rate and sample rate for tx & rx for streaming
device
->
type
=
USRP_B200_IF
;
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
openair0_cfg
[
0
].
rx_gain_calib_table
=
calib_table_b210
;
if
((
vers
==
3
)
&&
(
subvers
==
9
)
&&
(
subsubvers
>=
2
))
{
openair0_cfg
[
0
].
rx_gain_calib_table
=
calib_table_b210
;
bw_gain_adjust
=
0
;
}
else
{
openair0_cfg
[
0
].
rx_gain_calib_table
=
calib_table_b210_38
;
bw_gain_adjust
=
1
;
}
switch
((
int
)
openair0_cfg
[
0
].
sample_rate
)
{
case
30720000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
// from usrp_time_offset
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
samples_per_packet
=
4096
;
openair0_cfg
[
0
].
tx_sample_advance
=
115
;
openair0_cfg
[
0
].
tx_bw
=
20e6
;
openair0_cfg
[
0
].
rx_bw
=
20e6
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
11
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
case
23040000
:
s
->
usrp
->
set_master_clock_rate
(
46.08e6
);
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
tx_sample_advance
=
113
;
openair0_cfg
[
0
].
tx_bw
=
20e6
;
openair0_cfg
[
0
].
rx_bw
=
20e6
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
8
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
case
15360000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
tx_sample_advance
=
113
;
openair0_cfg
[
0
].
tx_bw
=
10e6
;
openair0_cfg
[
0
].
rx_bw
=
10e6
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
5
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
case
7680000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
openair0_cfg
[
0
].
samples_per_packet
=
1024
;
openair0_cfg
[
0
].
tx_sample_advance
=
70
;
//103;
openair0_cfg
[
0
].
tx_bw
=
5e6
;
openair0_cfg
[
0
].
rx_bw
=
5e6
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
5
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
case
1920000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
openair0_cfg
[
0
].
samples_per_packet
=
256
;
openair0_cfg
[
0
].
tx_sample_advance
=
40
;
openair0_cfg
[
0
].
tx_bw
=
1.25e6
;
openair0_cfg
[
0
].
rx_bw
=
1.25e6
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
8
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
default:
...
...
@@ -485,7 +558,7 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
s
->
usrp
->
set_rx_bandwidth
(
openair0_cfg
[
0
].
rx_bw
,
i
);
printf
(
"Setting rx freq/gain on channel %lu/%lu : BW %f (readback %f)
\n
"
,
i
,
s
->
usrp
->
get_rx_num_channels
(),
openair0_cfg
[
0
].
rx_bw
/
1e6
,
s
->
usrp
->
get_rx_bandwidth
(
i
)
/
1e6
);
s
->
usrp
->
set_rx_freq
(
openair0_cfg
[
0
].
rx_freq
[
i
],
i
);
set_rx_gain_offset
(
&
openair0_cfg
[
0
],
i
);
set_rx_gain_offset
(
&
openair0_cfg
[
0
],
i
,
bw_gain_adjust
);
::
uhd
::
gain_range_t
gain_range
=
s
->
usrp
->
get_rx_gain_range
(
i
);
// limit to maximum gain
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf
View file @
771bab79
...
...
@@ -28,7 +28,7 @@ eNBs =
tdd_config_s
=
0
;
prefix_type
=
"NORMAL"
;
eutra_band
=
7
;
downlink_frequency
=
26
6
0000000
L
;
downlink_frequency
=
26
8
0000000
L
;
uplink_frequency_offset
= -
120000000
;
Nid_cell
=
0
;
N_RB_DL
=
100
;
...
...
@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
rx_gain
=
12
0
;
rx_gain
=
12
7
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
View file @
771bab79
...
...
@@ -28,7 +28,7 @@ eNBs =
tdd_config_s
=
0
;
prefix_type
=
"NORMAL"
;
eutra_band
=
7
;
downlink_frequency
=
26
6
0000000
L
;
downlink_frequency
=
26
8
0000000
L
;
uplink_frequency_offset
= -
120000000
;
Nid_cell
=
0
;
N_RB_DL
=
50
;
...
...
@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
rx_gain
=
1
18
;
rx_gain
=
1
25
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
...
...
@@ -140,10 +140,10 @@ eNBs =
NETWORK_INTERFACES
:
{
ENB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.12.21
3
/24"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.12.21
2
/24"
;
ENB_INTERFACE_NAME_FOR_S1U
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.12.21
3
/24"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.12.21
2
/24"
;
ENB_PORT_FOR_S1U
=
2152
;
# Spec 2152
};
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
View file @
771bab79
...
...
@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
rx_gain
=
1
32
;
rx_gain
=
1
25
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
...
...
@@ -143,10 +143,10 @@ eNBs =
NETWORK_INTERFACES
:
{
ENB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.12.21
3
/24"
;
ENB_IPV4_ADDRESS_FOR_S1_MME
=
"192.168.12.21
2
/24"
;
ENB_INTERFACE_NAME_FOR_S1U
=
"eth0"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.12.21
3
/24"
;
ENB_IPV4_ADDRESS_FOR_S1U
=
"192.168.12.21
2
/24"
;
ENB_PORT_FOR_S1U
=
2152
;
# Spec 2152
};
...
...
targets/RT/USER/lte-softmodem.c
View file @
771bab79
...
...
@@ -235,6 +235,7 @@ static int time_offset[4] = {0,0,0,0};
static
char
UE_flag
=
0
;
//static uint8_t eNB_id=0,UE_id=0;
static
char
threequarter_fs
=
0
;
uint32_t
downlink_frequency
[
MAX_NUM_CCs
][
4
];
int32_t
uplink_frequency_offset
[
MAX_NUM_CCs
][
4
];
...
...
@@ -909,13 +910,13 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
if
(
phy_vars_eNB
->
lte_frame_parms
.
Ncp
==
EXTENDED
)
{
PHY_ofdm_mod
(
&
phy_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
][
slot_offset_F
],
dummy_tx_b
,
phy_vars_eNB
->
lte_frame_parms
.
log2
_symbol_size
,
phy_vars_eNB
->
lte_frame_parms
.
ofdm
_symbol_size
,
6
,
phy_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
CYCLIC_PREFIX
);
PHY_ofdm_mod
(
&
phy_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
][
slot_offset_F
+
slot_sizeF
],
dummy_tx_b
+
(
phy_vars_eNB
->
lte_frame_parms
.
samples_per_tti
>>
1
),
phy_vars_eNB
->
lte_frame_parms
.
log2
_symbol_size
,
phy_vars_eNB
->
lte_frame_parms
.
ofdm
_symbol_size
,
6
,
phy_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
CYCLIC_PREFIX
);
...
...
@@ -2060,7 +2061,7 @@ static void get_options (int argc, char **argv)
{
NULL
,
0
,
NULL
,
0
}
};
while
((
c
=
getopt_long
(
argc
,
argv
,
"A:a:C:dK:g:F:G:hqO:m:SUVRM:r:P:Ws:t:Tx:"
,
long_options
,
NULL
))
!=
-
1
)
{
while
((
c
=
getopt_long
(
argc
,
argv
,
"A:a:C:d
E
K:g:F:G:hqO:m:SUVRM:r:P:Ws:t:Tx:"
,
long_options
,
NULL
))
!=
-
1
)
{
switch
(
c
)
{
case
LONG_OPTION_MAXPOWER
:
tx_max_power
[
0
]
=
atoi
(
optarg
);
...
...
@@ -2162,6 +2163,10 @@ static void get_options (int argc, char **argv)
printf
(
"Running with XFORMS!
\n
"
);
#endif
break
;
case
'E'
:
threequarter_fs
=
1
;
break
;
case
'K'
:
#if defined(ENABLE_ITTI)
...
...
@@ -2671,6 +2676,7 @@ int main( int argc, char **argv )
frame_parms
[
CC_id
]
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
groupHoppingEnabled
=
0
;
frame_parms
[
CC_id
]
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
sequenceHoppingEnabled
=
0
;
frame_parms
[
CC_id
]
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
groupAssignmentPUSCH
=
0
;
frame_parms
[
CC_id
]
->
threequarter_fs
=
threequarter_fs
;
init_ul_hopping
(
frame_parms
[
CC_id
]);
init_frame_parms
(
frame_parms
[
CC_id
],
1
);
// phy_init_top(frame_parms[CC_id]);
...
...
@@ -2876,10 +2882,18 @@ int main( int argc, char **argv )
for
(
card
=
0
;
card
<
MAX_CARDS
;
card
++
)
{
if
(
frame_parms
[
0
]
->
N_RB_DL
==
100
)
{
openair0_cfg
[
card
].
sample_rate
=
30.72e6
;
openair0_cfg
[
card
].
samples_per_frame
=
307200
;
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
if
(
frame_parms
[
0
]
->
threequarter_fs
)
{
openair0_cfg
[
card
].
sample_rate
=
23.04e6
;
openair0_cfg
[
card
].
samples_per_frame
=
230400
;
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
}
else
{
openair0_cfg
[
card
].
sample_rate
=
30.72e6
;
openair0_cfg
[
card
].
samples_per_frame
=
307200
;
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
}
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
50
)
{
openair0_cfg
[
card
].
sample_rate
=
15.36e6
;
openair0_cfg
[
card
].
samples_per_frame
=
153600
;
...
...
@@ -2961,7 +2975,8 @@ int main( int argc, char **argv )
else
{
openair0_cfg
[
card
].
rx_gain
[
i
]
=
PHY_vars_UE_g
[
0
][
0
]
->
rx_total_gain_dB
;
// - USRP_GAIN_OFFSET; // calibrated for USRP B210 @ 2.6 GHz, 30.72 MS/s
}
#if 0 // UHD 3.8
switch(frame_parms[0]->N_RB_DL) {
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
...
...
@@ -2982,7 +2997,7 @@ int main( int argc, char **argv )
default:
break;
}
#endif
}
...
...
targets/RT/USER/lte-ue.c
View file @
771bab79
...
...
@@ -279,7 +279,7 @@ static void *UE_thread_synch(void *arg)
#ifdef OAI_USRP
openair0_cfg
[
card
].
rx_gain
[
i
]
=
UE
->
rx_total_gain_dB
;
//-USRP_GAIN_OFFSET;
#if 0 // UHD 3.8
switch(UE->lte_frame_parms.N_RB_DL) {
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
...
...
@@ -301,7 +301,7 @@ static void *UE_thread_synch(void *arg)
printf( "Unknown number of RBs %d\n", UE->lte_frame_parms.N_RB_DL );
break;
}
#endif
printf
(
"UE synch: setting RX gain (%d,%d) to %f
\n
"
,
card
,
i
,
openair0_cfg
[
card
].
rx_gain
[
i
]
);
#endif
}
...
...
@@ -357,7 +357,8 @@ static void *UE_thread_synch(void *arg)
openair0_cfg
[
card
].
tx_freq
[
i
]
=
downlink_frequency
[
card
][
i
]
+
uplink_frequency_offset
[
card
][
i
];
#ifdef OAI_USRP
openair0_cfg
[
card
].
rx_gain
[
i
]
=
UE
->
rx_total_gain_dB
;
//-USRP_GAIN_OFFSET; // 65 calibrated for USRP B210 @ 2.6 GHz
#if 0 // UHD 3.8
switch(UE->lte_frame_parms.N_RB_DL) {
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
...
...
@@ -379,7 +380,7 @@ static void *UE_thread_synch(void *arg)
printf("Unknown number of RBs %d\n",UE->lte_frame_parms.N_RB_DL);
break;
}
#endif
printf
(
"UE synch: setting RX gain (%d,%d) to %f
\n
"
,
card
,
i
,
openair0_cfg
[
card
].
rx_gain
[
i
]);
#endif
...
...
@@ -423,25 +424,25 @@ static void *UE_thread_synch(void *arg)
openair0_cfg
[
0
].
sample_rate
=
1.92e6
;
openair0_cfg
[
0
].
rx_bw
=
.96e6
;
openair0_cfg
[
0
].
tx_bw
=
.96e6
;
openair0_cfg
[
0
].
rx_gain
[
0
]
-=
12
;
//
openair0_cfg[0].rx_gain[0] -= 12;
break
;
case
25
:
openair0_cfg
[
0
].
sample_rate
=
7.68e6
;
openair0_cfg
[
0
].
rx_bw
=
2.5e6
;
openair0_cfg
[
0
].
tx_bw
=
2.5e6
;
openair0_cfg
[
0
].
rx_gain
[
0
]
-=
6
;
//
openair0_cfg[0].rx_gain[0] -= 6;
break
;
case
50
:
openair0_cfg
[
0
].
sample_rate
=
15.36e6
;
openair0_cfg
[
0
].
rx_bw
=
5.0e6
;
openair0_cfg
[
0
].
tx_bw
=
5.0e6
;
openair0_cfg
[
0
].
rx_gain
[
0
]
-=
3
;
//
openair0_cfg[0].rx_gain[0] -= 3;
break
;
case
100
:
openair0_cfg
[
0
].
sample_rate
=
30.72e6
;
openair0_cfg
[
0
].
rx_bw
=
10.0e6
;
openair0_cfg
[
0
].
tx_bw
=
10.0e6
;
openair0_cfg
[
0
].
rx_gain
[
0
]
-=
0
;
//
openair0_cfg[0].rx_gain[0] -= 0;
break
;
}
#ifndef EXMIMO
...
...
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