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
常顺宇
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
Show 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
...
@@ -844,6 +844,7 @@ set(PHY_SRC
${
OPENAIR1_DIR
}
/PHY/CODING/viterbi_lte.c
${
OPENAIR1_DIR
}
/PHY/CODING/viterbi_lte.c
${
OPENAIR1_DIR
}
/PHY/INIT/lte_init.c
${
OPENAIR1_DIR
}
/PHY/INIT/lte_init.c
${
OPENAIR1_DIR
}
/PHY/INIT/lte_parms.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/file_output.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lte_dfts.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lte_dfts.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/log2_approx.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)
...
@@ -68,33 +68,57 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break
;
break
;
default:
default:
msg
(
"Illegal oversampling %d
\n
"
,
osf
);
printf
(
"Illegal oversampling %d
\n
"
,
osf
);
return
(
-
1
);
return
(
-
1
);
}
}
switch
(
frame_parms
->
N_RB_DL
)
{
switch
(
frame_parms
->
N_RB_DL
)
{
case
100
:
case
100
:
if
(
osf
>
1
)
{
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
);
return
(
-
1
);
}
}
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
->
ofdm_symbol_size
=
2048
;
frame_parms
->
log2_symbol_size
=
11
;
frame_parms
->
samples_per_tti
=
30720
;
frame_parms
->
samples_per_tti
=
30720
;
frame_parms
->
first_carrier_offset
=
2048
-
600
;
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_RBGS
=
4
;
frame_parms
->
N_RBG
=
25
;
frame_parms
->
N_RBG
=
25
;
break
;
break
;
case
50
:
case
50
:
if
(
osf
>
1
)
{
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
);
return
(
-
1
);
}
}
frame_parms
->
ofdm_symbol_size
=
1024
*
osf
;
frame_parms
->
ofdm_symbol_size
=
1024
*
osf
;
frame_parms
->
log2_symbol_size
=
10
+
log2_osf
;
frame_parms
->
samples_per_tti
=
15360
*
osf
;
frame_parms
->
samples_per_tti
=
15360
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
300
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
300
;
frame_parms
->
nb_prefix_samples
>>=
(
1
-
log2_osf
);
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)
...
@@ -105,13 +129,13 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case
25
:
case
25
:
if
(
osf
>
2
)
{
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
);
return
(
-
1
);
}
}
frame_parms
->
ofdm_symbol_size
=
512
*
osf
;
frame_parms
->
ofdm_symbol_size
=
512
*
osf
;
frame_parms
->
log2_symbol_size
=
9
+
log2_osf
;
frame_parms
->
samples_per_tti
=
7680
*
osf
;
frame_parms
->
samples_per_tti
=
7680
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
150
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
150
;
frame_parms
->
nb_prefix_samples
>>=
(
2
-
log2_osf
);
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)
...
@@ -124,7 +148,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case
15
:
case
15
:
frame_parms
->
ofdm_symbol_size
=
256
*
osf
;
frame_parms
->
ofdm_symbol_size
=
256
*
osf
;
frame_parms
->
log2_symbol_size
=
8
+
log2_osf
;
frame_parms
->
samples_per_tti
=
3840
*
osf
;
frame_parms
->
samples_per_tti
=
3840
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
90
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
90
;
frame_parms
->
nb_prefix_samples
>>=
(
3
-
log2_osf
);
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)
...
@@ -135,7 +158,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case
6
:
case
6
:
frame_parms
->
ofdm_symbol_size
=
128
*
osf
;
frame_parms
->
ofdm_symbol_size
=
128
*
osf
;
frame_parms
->
log2_symbol_size
=
7
+
log2_osf
;
frame_parms
->
samples_per_tti
=
1920
*
osf
;
frame_parms
->
samples_per_tti
=
1920
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
36
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
36
;
frame_parms
->
nb_prefix_samples
>>=
(
4
-
log2_osf
);
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)
...
@@ -145,7 +167,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break
;
break
;
default:
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
);
return
(
-
1
);
break
;
break
;
}
}
...
@@ -159,23 +181,22 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
...
@@ -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
)
void
dump_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
)
{
{
msg
(
"frame_parms->N_RB_DL=%d
\n
"
,
frame_parms
->
N_RB_DL
);
printf
(
"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
);
printf
(
"frame_parms->N_RB_UL=%d
\n
"
,
frame_parms
->
N_RB_UL
);
msg
(
"frame_parms->Nid_cell=%d
\n
"
,
frame_parms
->
Nid_cell
);
printf
(
"frame_parms->Nid_cell=%d
\n
"
,
frame_parms
->
Nid_cell
);
msg
(
"frame_parms->Ncp=%d
\n
"
,
frame_parms
->
Ncp
);
printf
(
"frame_parms->Ncp=%d
\n
"
,
frame_parms
->
Ncp
);
msg
(
"frame_parms->Ncp_UL=%d
\n
"
,
frame_parms
->
Ncp_UL
);
printf
(
"frame_parms->Ncp_UL=%d
\n
"
,
frame_parms
->
Ncp_UL
);
msg
(
"frame_parms->nushift=%d
\n
"
,
frame_parms
->
nushift
);
printf
(
"frame_parms->nushift=%d
\n
"
,
frame_parms
->
nushift
);
msg
(
"frame_parms->frame_type=%d
\n
"
,
frame_parms
->
frame_type
);
printf
(
"frame_parms->frame_type=%d
\n
"
,
frame_parms
->
frame_type
);
msg
(
"frame_parms->tdd_config=%d
\n
"
,
frame_parms
->
tdd_config
);
printf
(
"frame_parms->tdd_config=%d
\n
"
,
frame_parms
->
tdd_config
);
msg
(
"frame_parms->tdd_config_S=%d
\n
"
,
frame_parms
->
tdd_config_S
);
printf
(
"frame_parms->tdd_config_S=%d
\n
"
,
frame_parms
->
tdd_config_S
);
msg
(
"frame_parms->mode1_flag=%d
\n
"
,
frame_parms
->
mode1_flag
);
printf
(
"frame_parms->mode1_flag=%d
\n
"
,
frame_parms
->
mode1_flag
);
msg
(
"frame_parms->nb_antennas_tx=%d
\n
"
,
frame_parms
->
nb_antennas_tx
);
printf
(
"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
);
printf
(
"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
);
printf
(
"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
);
printf
(
"frame_parms->nb_prefix_samples=%d
\n
"
,
frame_parms
->
nb_prefix_samples
);
msg
(
"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
);
msg
(
"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
);
msg
(
"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
);
msg
(
"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
);
msg
(
"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,
...
@@ -703,24 +703,28 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
phy_vars_ue
->
lte_frame_parms
.
log2
_symbol_size
)
{
switch
(
phy_vars_ue
->
lte_frame_parms
.
ofdm
_symbol_size
)
{
case
7
:
case
128
:
idft
=
idft128
;
idft
=
idft128
;
break
;
break
;
case
8
:
case
256
:
idft
=
idft256
;
idft
=
idft256
;
break
;
break
;
case
9
:
case
512
:
idft
=
idft512
;
idft
=
idft512
;
break
;
break
;
case
10
:
case
10
24
:
idft
=
idft1024
;
idft
=
idft1024
;
break
;
break
;
case
11
:
case
1536
:
idft
=
idft1536
;
break
;
case
2048
:
idft
=
idft2048
;
idft
=
idft2048
;
break
;
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
...
@@ -61,7 +61,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
{
{
int
i
,
k
;
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_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
);
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
...
@@ -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
);
LOG_E
(
PHY
,
"Unsupported N_RB_DL %d
\n
"
,
frame_parms
->
N_RB_DL
);
break
;
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
++
)
for
(
i
=
0
;
i
<
frame_parms
->
ofdm_symbol_size
;
i
++
)
((
int32_t
*
)
primary_synch0_time
)[
i
]
=
sync_tmp
[
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,
...
@@ -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_0
=
&
temp_in_fft_0
[
0
];
in_fft_ptr_1
=
&
temp_in_fft_1
[
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
)
{
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
)]
=
((
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
;
((
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,
...
@@ -72,7 +72,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
else
if
((
p
==
1
)
&&
(
l
>
0
))
else
if
((
p
==
1
)
&&
(
l
>
0
))
nu
=
0
;
nu
=
0
;
else
{
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
);
return
(
-
1
);
}
}
...
@@ -94,9 +94,9 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
...
@@ -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
]
=
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;
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
#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
);
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
#endif
mprime
++
;
mprime
++
;
...
@@ -151,7 +151,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
...
@@ -151,7 +151,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
else
if
((
p
==
1
)
&&
(
l
>
0
))
else
if
((
p
==
1
)
&&
(
l
>
0
))
nu
=
0
;
nu
=
0
;
else
{
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
);
return
(
-
1
);
}
}
...
@@ -177,9 +177,9 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
...
@@ -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
]
=
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;
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
#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
);
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
#endif
mprime
++
;
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
...
@@ -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
))
{
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] 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
.
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
.
rssi
)
-
phy_vars_ue
->
rx_total_gain_dB
,
10
*
log10
(
phy_vars_ue
->
PHY_measurements
.
rsrq
[
0
]),
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],
len += sprintf(&buffer[len],
...
...
openair1/PHY/MODULATION/defs.h
View file @
771bab79
...
@@ -34,12 +34,12 @@
...
@@ -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.
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 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 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_symbols The number of OFDM symbols in the block
@param nb_prefix_samples The number of prefix/suffix/zero samples
@param nb_prefix_samples The number of prefix/suffix/zero samples
@param etype Type of extension (CYCLIC_PREFIX,CYCLIC_SUFFIX,ZEROS)
@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.
...
@@ -47,7 +47,7 @@ This function performs OFDM modulation with cyclic extension or zero-padding.
*/
*/
void
PHY_ofdm_mod
(
int
*
input
,
void
PHY_ofdm_mod
(
int
*
input
,
int
*
output
,
int
*
output
,
unsigned
char
log2
fftsize
,
int
fftsize
,
unsigned
char
nb_symbols
,
unsigned
char
nb_symbols
,
unsigned
short
nb_prefix_samples
,
unsigned
short
nb_prefix_samples
,
Extension_t
etype
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
...
@@ -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
)));
txdata
+
(
i
*
(
frame_parms
->
samples_per_tti
>>
1
)));
#endif
#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
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
1
,
// number of symbols
frame_parms
->
nb_prefix_samples0
,
// number of prefix samples
frame_parms
->
nb_prefix_samples0
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
@@ -71,9 +71,9 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
...
@@ -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
));
printf
(
"slot i %d (txdata offset %d)
\n
"
,
i
,
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0
+
(
i
*
frame_parms
->
samples_per_tti
>>
1
));
#endif
#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
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
(
short_offset
==
1
)
?
1
:
(
frame_parms
->
symbols_per_tti
>>
1
)
-
1
,
//6, // number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
@@ -84,7 +84,7 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
...
@@ -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
void
PHY_ofdm_mod
(
int
*
input
,
/// pointer to complex input
int
*
output
,
/// pointer to complex output
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
char
nb_symbols
,
/// number of OFDM symbols
unsigned
short
nb_prefix_samples
,
/// cyclic prefix length
unsigned
short
nb_prefix_samples
,
/// cyclic prefix length
Extension_t
etype
/// type of extension
Extension_t
etype
/// type of extension
...
@@ -100,24 +100,28 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
...
@@ -100,24 +100,28 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
int
*
temp_ptr
=
(
int
*
)
0
;
int
*
temp_ptr
=
(
int
*
)
0
;
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
log2
fftsize
)
{
switch
(
fftsize
)
{
case
7
:
case
128
:
idft
=
idft128
;
idft
=
idft128
;
break
;
break
;
case
8
:
case
256
:
idft
=
idft256
;
idft
=
idft256
;
break
;
break
;
case
9
:
case
512
:
idft
=
idft512
;
idft
=
idft512
;
break
;
break
;
case
10
:
case
10
24
:
idft
=
idft1024
;
idft
=
idft1024
;
break
;
break
;
case
11
:
case
1536
:
idft
=
idft1536
;
break
;
case
2048
:
idft
=
idft2048
;
idft
=
idft2048
;
break
;
break
;
...
@@ -127,8 +131,8 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
...
@@ -127,8 +131,8 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
}
}
#ifdef DEBUG_OFDM_MOD
#ifdef DEBUG_OFDM_MOD
msg
(
"[PHY] OFDM mod (size %d,prefix %d) Symbols %d, input %p, output %p
\n
"
,
printf
(
"[PHY] OFDM mod (size %d,prefix %d) Symbols %d, input %p, output %p
\n
"
,
1
<<
log2
fftsize
,
nb_prefix_samples
,
nb_symbols
,
input
,
output
);
fftsize
,
nb_prefix_samples
,
nb_symbols
,
input
,
output
);
#endif
#endif
...
@@ -136,35 +140,31 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
...
@@ -136,35 +140,31 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
for
(
i
=
0
;
i
<
nb_symbols
;
i
++
)
{
for
(
i
=
0
;
i
<
nb_symbols
;
i
++
)
{
#ifdef DEBUG_OFDM_MOD
#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
#endif
idft
((
int16_t
*
)
&
input
[
i
<<
log2
fftsize
],
idft
((
int16_t
*
)
&
input
[
i
*
fftsize
],
(
log2fftsize
==
7
)
?
(
int16_t
*
)
temp
:
(
int16_t
*
)
&
output
[(
i
<<
log2
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)],
(
fftsize
==
128
)
?
(
int16_t
*
)
temp
:
(
int16_t
*
)
&
output
[(
i
*
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)],
1
);
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
// Copy to frame buffer with Cyclic Extension
// Note: will have to adjust for synchronization offset!
// Note: will have to adjust for synchronization offset!
switch
(
etype
)
{
switch
(
etype
)
{
case
CYCLIC_PREFIX
:
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
;
temp_ptr
=
(
int
*
)
temp
;
// msg("Doing cyclic prefix method\n");
// msg("Doing cyclic prefix method\n");
if
(
log2fftsize
==
7
)
{
if
(
fftsize
==
128
)
{
for
(
j
=
0
;
j
<
((
1
<<
log2fftsize
))
;
j
++
)
{
for
(
j
=
0
;
j
<
fftsize
;
j
++
)
{
output_ptr
[
j
]
=
temp_ptr
[
j
];
output_ptr
[
j
]
=
temp_ptr
[
j
];
}
}
}
}
j
=
(
1
<<
log2fftsize
)
;
j
=
fftsize
;
for
(
k
=-
1
;
k
>=-
nb_prefix_samples
;
k
--
)
{
for
(
k
=-
1
;
k
>=-
nb_prefix_samples
;
k
--
)
{
output_ptr
[
k
]
=
output_ptr
[
--
j
];
output_ptr
[
k
]
=
output_ptr
[
--
j
];
...
@@ -175,19 +175,19 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
...
@@ -175,19 +175,19 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
case
CYCLIC_SUFFIX
:
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
;
temp_ptr
=
(
int
*
)
temp
;
// msg("Doing cyclic suffix method\n");
// 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
];
output_ptr
[
j
]
=
temp_ptr
[
2
*
j
];
}
}
for
(
j
=
0
;
j
<
nb_prefix_samples
;
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
;
break
;
...
@@ -198,11 +198,11 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
...
@@ -198,11 +198,11 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
case
NONE
:
case
NONE
:
// msg("NO EXTENSION!\n");
// msg("NO EXTENSION!\n");
output_ptr
=
&
output
[
(
i
<<
log2fftsize
)
];
output_ptr
=
&
output
[
fftsize
];
temp_ptr
=
(
int
*
)
temp
;
temp_ptr
=
(
int
*
)
temp
;
for
(
j
=
0
;
j
<
(
1
<<
log2fftsize
)
;
j
++
)
{
for
(
j
=
0
;
j
<
fftsize
;
j
++
)
{
output_ptr
[
j
]
=
temp_ptr
[
2
*
j
];
output_ptr
[
j
]
=
temp_ptr
[
2
*
j
];
...
@@ -219,14 +219,7 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
...
@@ -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
...
@@ -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
);
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
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
12
,
// number of symbols
12
,
// number of symbols
frame_parms
->
ofdm_symbol_size
>>
2
,
// number of prefix samples
frame_parms
->
ofdm_symbol_size
>>
2
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
@@ -252,7 +245,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
...
@@ -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
)
if
(
frame_parms
->
Ncp
==
EXTENDED
)
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
2
,
// number of symbols
2
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
@@ -268,7 +261,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
...
@@ -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
)
if
(
frame_parms
->
Ncp
==
EXTENDED
)
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
6
,
// number of symbols
6
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
...
openair1/PHY/MODULATION/slot_fep.c
View file @
771bab79
...
@@ -58,24 +58,28 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
...
@@ -58,24 +58,28 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
int
tmp_dft_in
[
256
];
// This is for misalignment issues for 6 and 15 PRBs
int
tmp_dft_in
[
256
];
// This is for misalignment issues for 6 and 15 PRBs
switch
(
frame_parms
->
log2
_symbol_size
)
{
switch
(
frame_parms
->
ofdm
_symbol_size
)
{
case
7
:
case
128
:
dft
=
dft128
;
dft
=
dft128
;
break
;
break
;
case
8
:
case
256
:
dft
=
dft256
;
dft
=
dft256
;
break
;
break
;
case
9
:
case
512
:
dft
=
dft512
;
dft
=
dft512
;
break
;
break
;
case
10
:
case
10
24
:
dft
=
dft1024
;
dft
=
dft1024
;
break
;
break
;
case
11
:
case
1536
:
dft
=
dft1536
;
break
;
case
2048
:
dft
=
dft2048
;
dft
=
dft2048
;
break
;
break
;
...
@@ -96,12 +100,12 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
...
@@ -96,12 +100,12 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
if
(
l
<
0
||
l
>=
7
-
frame_parms
->
Ncp
)
{
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
);
return
(
-
1
);
}
}
if
(
Ns
<
0
||
Ns
>=
20
)
{
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
);
return
(
-
1
);
}
}
...
@@ -116,7 +120,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
...
@@ -116,7 +120,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#ifdef DEBUG_FEP
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
// 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
);
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
,
rx_offset
);
#endif
#endif
...
@@ -147,7 +151,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
...
@@ -147,7 +151,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#ifdef DEBUG_FEP
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
// 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
);
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
,
rx_offset
);
#endif
#endif
...
@@ -182,7 +186,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
...
@@ -182,7 +186,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx_eNB
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx_eNB
;
aa
++
)
{
#ifdef DEBUG_FEP
#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
#endif
start_meas
(
&
phy_vars_ue
->
dlsch_channel_estimation_stats
);
start_meas
(
&
phy_vars_ue
->
dlsch_channel_estimation_stats
);
lte_dl_channel_estimation
(
phy_vars_ue
,
eNB_id
,
0
,
lte_dl_channel_estimation
(
phy_vars_ue
,
eNB_id
,
0
,
...
@@ -205,7 +209,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
...
@@ -205,7 +209,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
// do frequency offset estimation here!
// do frequency offset estimation here!
// use channel estimates from current symbol (=ch_t) and last symbol (ch_{t-1})
// use channel estimates from current symbol (=ch_t) and last symbol (ch_{t-1})
#ifdef DEBUG_FEP
#ifdef DEBUG_FEP
msg
(
"Frequency offset estimation
\n
"
);
printf
(
"Frequency offset estimation
\n
"
);
#endif
#endif
if
(
l
==
(
4
-
frame_parms
->
Ncp
))
{
if
(
l
==
(
4
-
frame_parms
->
Ncp
))
{
...
@@ -222,7 +226,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
...
@@ -222,7 +226,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
}
}
#ifdef DEBUG_FEP
#ifdef DEBUG_FEP
msg
(
"slot_fep: done
\n
"
);
printf
(
"slot_fep: done
\n
"
);
#endif
#endif
return
(
0
);
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,
...
@@ -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
;
unsigned
int
frame_length_samples
=
frame_parms
->
samples_per_tti
*
10
;
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
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
;
dft
=
dft128
;
break
;
break
;
case
8
:
case
256
:
dft
=
dft256
;
dft
=
dft256
;
break
;
break
;
case
9
:
case
512
:
dft
=
dft512
;
dft
=
dft512
;
break
;
break
;
case
10
:
case
10
24
:
dft
=
dft1024
;
dft
=
dft1024
;
break
;
break
;
case
11
:
case
1536
:
dft
=
dft1536
;
break
;
case
2048
:
dft
=
dft2048
;
dft
=
dft2048
;
break
;
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,
...
@@ -50,24 +50,28 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
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
;
dft
=
dft128
;
break
;
break
;
case
8
:
case
256
:
dft
=
dft256
;
dft
=
dft256
;
break
;
break
;
case
9
:
case
512
:
dft
=
dft512
;
dft
=
dft512
;
break
;
break
;
case
10
:
case
10
24
:
dft
=
dft1024
;
dft
=
dft1024
;
break
;
break
;
case
11
:
case
1536
:
dft
=
dft1536
;
break
;
case
2048
:
dft
=
dft2048
;
dft
=
dft2048
;
break
;
break
;
...
...
openair1/PHY/TOOLS/lte_dfts.c
View file @
771bab79
...
@@ -45,8 +45,10 @@
...
@@ -45,8 +45,10 @@
#define debug_msg
#define debug_msg
#define ONE_OVER_SQRT2_Q15 23170
#define ONE_OVER_SQRT2_Q15 23170
#endif
#endif
#define ONE_OVER_SQRT3_Q15 18919
#include "PHY/sse_intrin.h"
#include "PHY/sse_intrin.h"
...
@@ -3180,6 +3182,8 @@ void idft1536(int16_t *input, int16_t *output)
...
@@ -3180,6 +3182,8 @@ void idft1536(int16_t *input, int16_t *output)
int i,i2,j;
int i,i2,j;
uint32_t tmp[3][512 ]__attribute__((aligned(16)));
uint32_t tmp[3][512 ]__attribute__((aligned(16)));
uint32_t tmpo[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++) {
for (i=0,j=0; i<512; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
tmp[0][i] = ((uint32_t *)input)[j++];
...
@@ -3190,17 +3194,6 @@ void idft1536(int16_t *input, int16_t *output)
...
@@ -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[0]),(int16_t*)(tmpo[0]),1);
idft512((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft512((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft512((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),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) {
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]),
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)
...
@@ -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();
_mm_empty();
_m_empty();
_m_empty();
openair1/PHY/impl_defs_lte.h
View file @
771bab79
...
@@ -516,10 +516,10 @@ typedef struct {
...
@@ -516,10 +516,10 @@ typedef struct {
uint8_t
dual_tx
;
uint8_t
dual_tx
;
/// flag to indicate SISO transmission
/// flag to indicate SISO transmission
uint8_t
mode1_flag
;
uint8_t
mode1_flag
;
/// Indicator that 20 MHz channel uses 3/4 sampling frequency
uint8_t
threequarter_fs
;
/// Size of FFT
/// Size of FFT
uint16_t
ofdm_symbol_size
;
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
/// Number of prefix samples in all but first symbol of slot
uint16_t
nb_prefix_samples
;
uint16_t
nb_prefix_samples
;
/// Number of prefix samples in first symbol of slot
/// Number of prefix samples in first symbol of slot
...
...
openair1/PHY/impl_defs_top.h
View file @
771bab79
...
@@ -117,7 +117,6 @@
...
@@ -117,7 +117,6 @@
*/
*/
#define NUMBER_OF_OFDM_CARRIERS (frame_parms->ofdm_symbol_size)
#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 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_USEFUL_CARRIERS (12*frame_parms->N_RB_DL)
#define NUMBER_OF_ZERO_CARRIERS (NUMBER_OF_OFDM_CARRIERS-NUMBER_OF_USEFUL_CARRIERS)
#define NUMBER_OF_ZERO_CARRIERS (NUMBER_OF_OFDM_CARRIERS-NUMBER_OF_USEFUL_CARRIERS)
#define NUMBER_OF_USEFUL_CARRIERS_BYTES (NUMBER_OF_USEFUL_CARRIERS>>2)
#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
...
@@ -1262,7 +1262,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
#else
#else
&
phy_vars_ue
->
lte_ue_common_vars
.
txdata
[
aa
][
ulsch_start
],
&
phy_vars_ue
->
lte_ue_common_vars
.
txdata
[
aa
][
ulsch_start
],
#endif
#endif
frame_parms
->
log2
_symbol_size
,
frame_parms
->
ofdm
_symbol_size
,
nsymb
,
nsymb
,
frame_parms
->
nb_prefix_samples
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
771bab79
...
@@ -107,88 +107,6 @@ void handler(int sig)
...
@@ -107,88 +107,6 @@ void handler(int sig)
exit
(
1
);
exit
(
1
);
}
}
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
uint8_t
extended_prefix_flag
,
uint8_t
fdd_flag
,
uint16_t
Nid_cell
,
uint8_t
tdd_config
,
uint8_t
N_RB_DL
,
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
->
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
=
(
fdd_flag
==
1
)
?
0
:
1
;
// 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
"
);
}
//DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2_2A[2];
//DCI2_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu2_2A[2];
...
@@ -214,7 +132,7 @@ void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LT
...
@@ -214,7 +132,7 @@ void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LT
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
6
,
// number of symbols
6
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
@@ -318,7 +236,7 @@ int main(int argc, char **argv)
...
@@ -318,7 +236,7 @@ int main(int argc, char **argv)
double
blerr
[
4
],
uncoded_ber
,
avg_ber
;
double
blerr
[
4
],
uncoded_ber
,
avg_ber
;
short
*
uncoded_ber_bit
=
NULL
;
short
*
uncoded_ber_bit
=
NULL
;
uint8_t
N_RB_DL
=
25
,
osf
=
1
;
uint8_t
N_RB_DL
=
25
,
osf
=
1
;
uint8_t
fdd_flag
=
0
;
frame_t
frame_type
=
FDD
;
#ifdef XFORMS
#ifdef XFORMS
FD_lte_phy_scope_ue
*
form_ue
;
FD_lte_phy_scope_ue
*
form_ue
;
char
title
[
255
];
char
title
[
255
];
...
@@ -350,6 +268,8 @@ int main(int argc, char **argv)
...
@@ -350,6 +268,8 @@ int main(int argc, char **argv)
FILE
*
proc_fd
=
NULL
;
FILE
*
proc_fd
=
NULL
;
char
buf
[
64
];
char
buf
[
64
];
int
threequarter_fs
=
0
;
opp_enabled
=
1
;
// to enable the time meas
opp_enabled
=
1
;
// to enable the time meas
#if defined(__arm__)
#if defined(__arm__)
...
@@ -378,13 +298,17 @@ int main(int argc, char **argv)
...
@@ -378,13 +298,17 @@ int main(int argc, char **argv)
num_layers
=
1
;
num_layers
=
1
;
perfect_ce
=
0
;
perfect_ce
=
0
;
while
((
c
=
getopt
(
argc
,
argv
,
"ahdpZDe:m:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y"
))
!=
-
1
)
{
while
((
c
=
getopt
(
argc
,
argv
,
"ahdpZDe:
E
m:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y"
))
!=
-
1
)
{
switch
(
c
)
{
switch
(
c
)
{
case
'a'
:
case
'a'
:
awgn_flag
=
1
;
awgn_flag
=
1
;
channel_model
=
AWGN
;
channel_model
=
AWGN
;
break
;
break
;
case
'A'
:
abstx
=
1
;
break
;
case
'b'
:
case
'b'
:
tdd_config
=
atoi
(
optarg
);
tdd_config
=
atoi
(
optarg
);
break
;
break
;
...
@@ -393,10 +317,59 @@ int main(int argc, char **argv)
...
@@ -393,10 +317,59 @@ int main(int argc, char **argv)
N_RB_DL
=
atoi
(
optarg
);
N_RB_DL
=
atoi
(
optarg
);
break
;
break
;
case
'c'
:
num_pdcch_symbols
=
atoi
(
optarg
);
break
;
case
'C'
:
Nid_cell
=
atoi
(
optarg
);
break
;
case
'd'
:
case
'd'
:
dci_flag
=
1
;
dci_flag
=
1
;
break
;
break
;
case
'D'
:
frame_type
=
TDD
;
break
;
case
'e'
:
num_rounds
=
1
;
common_flag
=
1
;
TPC
=
atoi
(
optarg
);
break
;
case
'E'
:
threequarter_fs
=
1
;
break
;
case
'f'
:
input_snr_step
=
atof
(
optarg
);
break
;
case
'F'
:
forgetting_factor
=
atof
(
optarg
);
break
;
case
'i'
:
input_fd
=
fopen
(
optarg
,
"r"
);
input_file
=
1
;
dci_flag
=
1
;
break
;
case
'I'
:
input_trch_fd
=
fopen
(
optarg
,
"r"
);
input_trch_file
=
1
;
break
;
case
'L'
:
llr8_flag
=
1
;
break
;
case
'l'
:
offset_mumimo_llr_drange_fix
=
atoi
(
optarg
);
break
;
case
'm'
:
case
'm'
:
mcs1
=
atoi
(
optarg
);
mcs1
=
atoi
(
optarg
);
break
;
break
;
...
@@ -405,6 +378,11 @@ int main(int argc, char **argv)
...
@@ -405,6 +378,11 @@ int main(int argc, char **argv)
mcs2
=
atoi
(
optarg
);
mcs2
=
atoi
(
optarg
);
break
;
break
;
case
'O'
:
test_perf
=
atoi
(
optarg
);
//print_perf =1;
break
;
case
't'
:
case
't'
:
mcs_i
=
atoi
(
optarg
);
mcs_i
=
atoi
(
optarg
);
i_mod
=
get_Qm
(
mcs_i
);
i_mod
=
get_Qm
(
mcs_i
);
...
@@ -414,27 +392,16 @@ int main(int argc, char **argv)
...
@@ -414,27 +392,16 @@ int main(int argc, char **argv)
n_frames
=
atoi
(
optarg
);
n_frames
=
atoi
(
optarg
);
break
;
break
;
case
'C'
:
Nid_cell
=
atoi
(
optarg
);
break
;
case
'o'
:
case
'o'
:
rx_sample_offset
=
atoi
(
optarg
);
rx_sample_offset
=
atoi
(
optarg
);
break
;
break
;
case
'D'
:
fdd_flag
=
1
;
break
;
case
'r'
:
case
'r'
:
DLSCH_RB_ALLOC
=
atoi
(
optarg
);
DLSCH_RB_ALLOC
=
atoi
(
optarg
);
rballocset
=
1
;
rballocset
=
1
;
break
;
break
;
case
'F'
:
forgetting_factor
=
atof
(
optarg
);
break
;
case
's'
:
case
's'
:
snr0
=
atof
(
optarg
);
snr0
=
atof
(
optarg
);
break
;
break
;
...
@@ -443,13 +410,6 @@ int main(int argc, char **argv)
...
@@ -443,13 +410,6 @@ int main(int argc, char **argv)
snr_int
=
atof
(
optarg
);
snr_int
=
atof
(
optarg
);
break
;
break
;
case
'f'
:
input_snr_step
=
atof
(
optarg
);
break
;
case
'A'
:
abstx
=
1
;
break
;
case
'N'
:
case
'N'
:
n_ch_rlz
=
atof
(
optarg
);
n_ch_rlz
=
atof
(
optarg
);
...
@@ -459,10 +419,6 @@ int main(int argc, char **argv)
...
@@ -459,10 +419,6 @@ int main(int argc, char **argv)
extended_prefix_flag
=
1
;
extended_prefix_flag
=
1
;
break
;
break
;
case
'c'
:
num_pdcch_symbols
=
atoi
(
optarg
);
break
;
case
'g'
:
case
'g'
:
memcpy
(
channel_model_input
,
optarg
,
10
);
memcpy
(
channel_model_input
,
optarg
,
10
);
...
@@ -530,62 +486,6 @@ int main(int argc, char **argv)
...
@@ -530,62 +486,6 @@ int main(int argc, char **argv)
break
;
break
;
case
'x'
:
transmission_mode
=
atoi
(
optarg
);
if
((
transmission_mode
!=
1
)
&&
(
transmission_mode
!=
2
)
&&
(
transmission_mode
!=
3
)
&&
(
transmission_mode
!=
4
)
&&
(
transmission_mode
!=
5
)
&&
(
transmission_mode
!=
6
))
{
msg
(
"Unsupported transmission mode %d
\n
"
,
transmission_mode
);
exit
(
-
1
);
}
if
(
transmission_mode
>
1
)
{
n_tx
=
2
;
}
break
;
case
'y'
:
n_tx
=
atoi
(
optarg
);
if
((
n_tx
==
0
)
||
(
n_tx
>
2
))
{
msg
(
"Unsupported number of tx antennas %d
\n
"
,
n_tx
);
exit
(
-
1
);
}
break
;
case
'z'
:
n_rx
=
atoi
(
optarg
);
if
((
n_rx
==
0
)
||
(
n_rx
>
2
))
{
msg
(
"Unsupported number of rx antennas %d
\n
"
,
n_rx
);
exit
(
-
1
);
}
break
;
case
'I'
:
input_trch_fd
=
fopen
(
optarg
,
"r"
);
input_trch_file
=
1
;
break
;
case
'i'
:
input_fd
=
fopen
(
optarg
,
"r"
);
input_file
=
1
;
dci_flag
=
1
;
break
;
case
'e'
:
num_rounds
=
1
;
common_flag
=
1
;
TPC
=
atoi
(
optarg
);
break
;
case
'R'
:
case
'R'
:
num_rounds
=
atoi
(
optarg
);
num_rounds
=
atoi
(
optarg
);
break
;
break
;
...
@@ -623,26 +523,54 @@ int main(int argc, char **argv)
...
@@ -623,26 +523,54 @@ int main(int argc, char **argv)
print_perf
=
1
;
print_perf
=
1
;
break
;
break
;
case
'L'
:
case
'x'
:
llr8_flag
=
1
;
transmission_mode
=
atoi
(
optarg
);
if
((
transmission_mode
!=
1
)
&&
(
transmission_mode
!=
2
)
&&
(
transmission_mode
!=
3
)
&&
(
transmission_mode
!=
4
)
&&
(
transmission_mode
!=
5
)
&&
(
transmission_mode
!=
6
))
{
msg
(
"Unsupported transmission mode %d
\n
"
,
transmission_mode
);
exit
(
-
1
);
}
if
(
transmission_mode
>
1
)
{
n_tx
=
2
;
}
break
;
break
;
case
'l'
:
case
'y'
:
offset_mumimo_llr_drange_fix
=
atoi
(
optarg
);
n_tx
=
atoi
(
optarg
);
if
((
n_tx
==
0
)
||
(
n_tx
>
2
))
{
msg
(
"Unsupported number of tx antennas %d
\n
"
,
n_tx
);
exit
(
-
1
);
}
break
;
break
;
case
'O'
:
case
'Y'
:
test_perf
=
atoi
(
optarg
);
perfect_ce
=
1
;
//print_perf =1;
break
;
case
'z'
:
n_rx
=
atoi
(
optarg
);
if
((
n_rx
==
0
)
||
(
n_rx
>
2
))
{
msg
(
"Unsupported number of rx antennas %d
\n
"
,
n_rx
);
exit
(
-
1
);
}
break
;
break
;
case
'Z'
:
case
'Z'
:
dump_table
=
1
;
dump_table
=
1
;
break
;
break
;
case
'Y'
:
perfect_ce
=
1
;
break
;
case
'h'
:
case
'h'
:
default:
default:
...
@@ -723,7 +651,9 @@ int main(int argc, char **argv)
...
@@ -723,7 +651,9 @@ int main(int argc, char **argv)
printf
(
"dual_stream_UE=%d
\n
"
,
dual_stream_UE
);
printf
(
"dual_stream_UE=%d
\n
"
,
dual_stream_UE
);
}
}
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
fdd_flag
,
Nid_cell
,
tdd_config
,
N_RB_DL
,
osf
,
perfect_ce
);
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
frame_type
,
Nid_cell
,
tdd_config
,
N_RB_DL
,
threequarter_fs
,
osf
,
perfect_ce
);
eNB_id_i
=
PHY_vars_UE
->
n_connected_eNB
;
eNB_id_i
=
PHY_vars_UE
->
n_connected_eNB
;
...
@@ -2667,6 +2597,7 @@ PMI_FEEDBACK:
...
@@ -2667,6 +2597,7 @@ PMI_FEEDBACK:
}
}
start_meas
(
&
PHY_vars_eNB
->
dlsch_modulation_stats
);
start_meas
(
&
PHY_vars_eNB
->
dlsch_modulation_stats
);
re_allocated
=
dlsch_modulation
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNB_id
],
re_allocated
=
dlsch_modulation
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNB_id
],
AMP
,
AMP
,
subframe
,
subframe
,
...
@@ -2674,6 +2605,7 @@ PMI_FEEDBACK:
...
@@ -2674,6 +2605,7 @@ PMI_FEEDBACK:
num_pdcch_symbols
,
num_pdcch_symbols
,
PHY_vars_eNB
->
dlsch_eNB
[
k
][
0
],
PHY_vars_eNB
->
dlsch_eNB
[
k
][
0
],
PHY_vars_eNB
->
dlsch_eNB
[
k
][
1
]);
PHY_vars_eNB
->
dlsch_eNB
[
k
][
1
]);
stop_meas
(
&
PHY_vars_eNB
->
dlsch_modulation_stats
);
stop_meas
(
&
PHY_vars_eNB
->
dlsch_modulation_stats
);
/*
/*
if (trials==0 && round==0)
if (trials==0 && round==0)
...
...
openair1/SIMULATION/LTE_PHY/mbmssim.c
View file @
771bab79
...
@@ -456,7 +456,7 @@ int main(int argc, char **argv)
...
@@ -456,7 +456,7 @@ int main(int argc, char **argv)
PHY_ofdm_mod
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
// input,
PHY_ofdm_mod
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
// input,
txdata
[
0
],
// output
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
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/pbchsim.c
View file @
771bab79
...
@@ -53,87 +53,11 @@
...
@@ -53,87 +53,11 @@
#include "OCG_vars.h"
#include "OCG_vars.h"
PHY_VARS_eNB
*
PHY_vars_eN
b
,
*
PHY_vars_eNb1
,
*
PHY_vars_eNb
2
;
PHY_VARS_eNB
*
PHY_vars_eN
B
,
*
PHY_vars_eNB1
,
*
PHY_vars_eNB
2
;
PHY_VARS_UE
*
PHY_vars_UE
;
PHY_VARS_UE
*
PHY_vars_UE
;
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
#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
,
unsigned
char
frame_type
,
uint16_t
Nid_cell
,
uint8_t
N_RB_DL
,
uint8_t
osf
)
{
// unsigned int ind;
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_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
=
N_tx
;
lte_frame_parms
->
nb_antennas_tx_eNB
=
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
=
frame_type
;
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_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
;
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
);
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
.
Nid_cell
=
Nid_cell
+
1
;
PHY_vars_eNb1
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
1
)
%
6
;
PHY_vars_eNb1
->
Mod_id
=
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
.
Nid_cell
=
Nid_cell
+
2
;
PHY_vars_eNb2
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
2
)
%
6
;
PHY_vars_eNb2
->
Mod_id
=
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
);
printf
(
"Done lte_param_init
\n
"
);
}
mod_sym_t
*
dummybuf
[
4
];
mod_sym_t
*
dummybuf
[
4
];
mod_sym_t
dummy0
[
2048
*
14
];
mod_sym_t
dummy0
[
2048
*
14
];
mod_sym_t
dummy1
[
2048
*
14
];
mod_sym_t
dummy1
[
2048
*
14
];
...
@@ -420,6 +344,28 @@ int main(int argc, char **argv)
...
@@ -420,6 +344,28 @@ int main(int argc, char **argv)
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
frame_type
,
Nid_cell
,
N_RB_DL
,
osf
);
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
frame_type
,
Nid_cell
,
N_RB_DL
,
osf
);
PHY_vars_eNB1
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_eNB2
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
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
;
for
(
i
=
0
;
i
<
3
;
i
++
)
lte_gold
(
&
PHY_vars_eNB
->
lte_frame_parms
,
PHY_vars_UE
->
lte_gold_table
[
i
],
Nid_cell
+
i
);
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
.
Nid_cell
=
Nid_cell
+
1
;
PHY_vars_eNB1
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
1
)
%
6
;
PHY_vars_eNB1
->
Mod_id
=
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
.
Nid_cell
=
Nid_cell
+
2
;
PHY_vars_eNB2
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
2
)
%
6
;
PHY_vars_eNB2
->
Mod_id
=
2
;
phy_init_lte_eNB
(
PHY_vars_eNB1
,
0
,
0
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB2
,
0
,
0
,
0
);
#ifdef XFORMS
#ifdef XFORMS
fl_initialize
(
&
argc
,
argv
,
NULL
,
0
,
0
);
fl_initialize
(
&
argc
,
argv
,
NULL
,
0
,
0
);
form_ue
=
create_lte_phy_scope_ue
();
form_ue
=
create_lte_phy_scope_ue
();
...
@@ -436,13 +382,13 @@ int main(int argc, char **argv)
...
@@ -436,13 +382,13 @@ int main(int argc, char **argv)
printf
(
"SNR0 %f, SNR1 %f
\n
"
,
snr0
,
snr1
);
printf
(
"SNR0 %f, SNR1 %f
\n
"
,
snr0
,
snr1
);
frame_parms
=
&
PHY_vars_eN
b
->
lte_frame_parms
;
frame_parms
=
&
PHY_vars_eN
B
->
lte_frame_parms
;
txdata
=
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata
=
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata1
=
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata1
=
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata2
=
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata2
=
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdata
[
0
];
s_re
=
malloc
(
2
*
sizeof
(
double
*
));
s_re
=
malloc
(
2
*
sizeof
(
double
*
));
...
@@ -463,8 +409,8 @@ int main(int argc, char **argv)
...
@@ -463,8 +409,8 @@ int main(int argc, char **argv)
printf
(
"FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d, interf (%d,%d)
\n
"
,
NUMBER_OF_OFDM_CARRIERS
,
printf
(
"FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d, interf (%d,%d)
\n
"
,
NUMBER_OF_OFDM_CARRIERS
,
frame_parms
->
Ncp
,
frame_parms
->
samples_per_tti
,
nsymb
,
interf1
,
interf2
);
frame_parms
->
Ncp
,
frame_parms
->
samples_per_tti
,
nsymb
,
interf1
,
interf2
);
printf
(
"PHY_vars_eN
b
1->lte_eNB_common_vars.txdataF[0][0] = %p
\n
"
,
printf
(
"PHY_vars_eN
B
1->lte_eNB_common_vars.txdataF[0][0] = %p
\n
"
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
]);
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
]);
DLSCH_alloc_pdu2
.
rah
=
0
;
DLSCH_alloc_pdu2
.
rah
=
0
;
...
@@ -479,31 +425,31 @@ int main(int argc, char **argv)
...
@@ -479,31 +425,31 @@ int main(int argc, char **argv)
// Forget second codeword
// Forget second codeword
DLSCH_alloc_pdu2
.
tpmi
=
(
transmission_mode
==
6
?
5
:
0
)
;
// precoding
DLSCH_alloc_pdu2
.
tpmi
=
(
transmission_mode
==
6
?
5
:
0
)
;
// precoding
eNB2UE
=
new_channel_desc_scm
(
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
,
eNB2UE
=
new_channel_desc_scm
(
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
channel_model
,
channel_model
,
N_RB2sampling_rate
(
PHY_vars_eN
b
->
lte_frame_parms
.
N_RB_DL
),
N_RB2sampling_rate
(
PHY_vars_eN
B
->
lte_frame_parms
.
N_RB_DL
),
N_RB2channel_bandwidth
(
PHY_vars_eN
b
->
lte_frame_parms
.
N_RB_DL
),
N_RB2channel_bandwidth
(
PHY_vars_eN
B
->
lte_frame_parms
.
N_RB_DL
),
0
,
0
,
0
,
0
,
0
);
0
);
if
(
interf1
>-
20
)
if
(
interf1
>-
20
)
eNB2UE1
=
new_channel_desc_scm
(
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
,
eNB2UE1
=
new_channel_desc_scm
(
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
channel_model
,
channel_model
,
N_RB2sampling_rate
(
PHY_vars_eN
b
->
lte_frame_parms
.
N_RB_DL
),
N_RB2sampling_rate
(
PHY_vars_eN
B
->
lte_frame_parms
.
N_RB_DL
),
N_RB2channel_bandwidth
(
PHY_vars_eN
b
->
lte_frame_parms
.
N_RB_DL
),
N_RB2channel_bandwidth
(
PHY_vars_eN
B
->
lte_frame_parms
.
N_RB_DL
),
0
,
0
,
4
,
4
,
0
);
0
);
if
(
interf2
>-
20
)
if
(
interf2
>-
20
)
eNB2UE2
=
new_channel_desc_scm
(
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
,
eNB2UE2
=
new_channel_desc_scm
(
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
channel_model
,
channel_model
,
N_RB2sampling_rate
(
PHY_vars_eN
b
->
lte_frame_parms
.
N_RB_DL
),
N_RB2sampling_rate
(
PHY_vars_eN
B
->
lte_frame_parms
.
N_RB_DL
),
N_RB2channel_bandwidth
(
PHY_vars_eN
b
->
lte_frame_parms
.
N_RB_DL
),
N_RB2channel_bandwidth
(
PHY_vars_eN
B
->
lte_frame_parms
.
N_RB_DL
),
0
,
0
,
8
,
8
,
0
);
0
);
...
@@ -567,47 +513,47 @@ int main(int argc, char **argv)
...
@@ -567,47 +513,47 @@ int main(int argc, char **argv)
pbch_pdu
[
1
]
=
1
;
pbch_pdu
[
1
]
=
1
;
pbch_pdu
[
2
]
=
0
;
pbch_pdu
[
2
]
=
0
;
if
(
PHY_vars_eN
b
->
lte_frame_parms
.
frame_type
==
0
)
{
if
(
PHY_vars_eN
B
->
lte_frame_parms
.
frame_type
==
0
)
{
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
0
);
0
);
generate_sss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_sss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
5
:
4
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
5
:
4
,
0
);
0
);
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
10
);
10
);
generate_sss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_sss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
5
:
4
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
5
:
4
,
10
);
10
);
}
else
{
}
else
{
generate_sss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_sss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
1
);
1
);
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
2
,
2
,
2
);
2
);
generate_sss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_sss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
11
);
11
);
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
2
,
2
,
12
);
12
);
...
@@ -626,11 +572,11 @@ int main(int argc, char **argv)
...
@@ -626,11 +572,11 @@ int main(int argc, char **argv)
dci_alloc[1].rnti = 0x1234;
dci_alloc[1].rnti = 0x1234;
*/
*/
printf
(
"Generating PBCH for mode1_flag = %d
\n
"
,
PHY_vars_eN
b
->
lte_frame_parms
.
mode1_flag
);
printf
(
"Generating PBCH for mode1_flag = %d
\n
"
,
PHY_vars_eN
B
->
lte_frame_parms
.
mode1_flag
);
generate_pilots
(
PHY_vars_eN
b
,
generate_pilots
(
PHY_vars_eN
B
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
);
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
);
...
@@ -641,8 +587,8 @@ int main(int argc, char **argv)
...
@@ -641,8 +587,8 @@ int main(int argc, char **argv)
dci_alloc,
dci_alloc,
0,
0,
1024,
1024,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
0);
0);
*/
*/
...
@@ -657,47 +603,47 @@ int main(int argc, char **argv)
...
@@ -657,47 +603,47 @@ int main(int argc, char **argv)
dummybuf
[
1
]
=
dummy1
;
dummybuf
[
1
]
=
dummy1
;
dummybuf
[
2
]
=
dummy2
;
dummybuf
[
2
]
=
dummy2
;
dummybuf
[
3
]
=
dummy3
;
dummybuf
[
3
]
=
dummy3
;
generate_pbch
(
&
PHY_vars_eN
b
->
lte_eNB_pbch
,
generate_pbch
(
&
PHY_vars_eN
B
->
lte_eNB_pbch
,
(
mod_sym_t
**
)
dummybuf
,
(
mod_sym_t
**
)
dummybuf
,
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
pbch_pdu
,
pbch_pdu
,
0
);
0
);
}
}
generate_pbch
(
&
PHY_vars_eN
b
->
lte_eNB_pbch
,
generate_pbch
(
&
PHY_vars_eN
B
->
lte_eNB_pbch
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
pbch_pdu
,
pbch_pdu
,
pbch_phase
);
pbch_phase
);
/*
/*
generate_pbch(&PHY_vars_eN
b
->lte_eNB_pbch,
generate_pbch(&PHY_vars_eN
B
->lte_eNB_pbch,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
AMP,
AMP,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
pbch_pdu,
pbch_pdu,
1);
1);
*/
*/
if
(
interf1
>-
20
)
{
if
(
interf1
>-
20
)
{
/*
/*
generate_pss(PHY_vars_eN
b
1->lte_eNB_common_vars.txdataF[0],
generate_pss(PHY_vars_eN
B
1->lte_eNB_common_vars.txdataF[0],
AMP,
AMP,
&PHY_vars_eN
b
1->lte_frame_parms,
&PHY_vars_eN
B
1->lte_frame_parms,
(PHY_vars_eN
b
1->lte_frame_parms.Ncp==0)?6:5,
(PHY_vars_eN
B
1->lte_frame_parms.Ncp==0)?6:5,
0);
0);
*/
*/
generate_pilots
(
PHY_vars_eN
b
1
,
generate_pilots
(
PHY_vars_eN
B
1
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
],
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
);
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
);
generate_pbch
(
&
PHY_vars_eN
b
1
->
lte_eNB_pbch
,
generate_pbch
(
&
PHY_vars_eN
B
1
->
lte_eNB_pbch
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
],
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
1
->
lte_frame_parms
,
&
PHY_vars_eN
B
1
->
lte_frame_parms
,
pbch_pdu
,
pbch_pdu
,
0
);
0
);
...
@@ -705,26 +651,26 @@ int main(int argc, char **argv)
...
@@ -705,26 +651,26 @@ int main(int argc, char **argv)
if
(
interf2
>-
20
)
{
if
(
interf2
>-
20
)
{
/*
/*
generate_pss(PHY_vars_eN
b
2->lte_eNB_common_vars.txdataF[0],
generate_pss(PHY_vars_eN
B
2->lte_eNB_common_vars.txdataF[0],
AMP,
AMP,
&PHY_vars_eN
b
2->lte_frame_parms,
&PHY_vars_eN
B
2->lte_frame_parms,
(PHY_vars_eN
b
2->lte_frame_parms.Ncp==0)?6:5,
(PHY_vars_eN
B
2->lte_frame_parms.Ncp==0)?6:5,
0);
0);
*/
*/
generate_pilots
(
PHY_vars_eN
b
2
,
generate_pilots
(
PHY_vars_eN
B
2
,
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdataF
[
0
],
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
);
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
);
generate_pbch
(
&
PHY_vars_eN
b
2
->
lte_eNB_pbch
,
generate_pbch
(
&
PHY_vars_eN
B
2
->
lte_eNB_pbch
,
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdataF
[
0
],
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
2
->
lte_frame_parms
,
&
PHY_vars_eN
B
2
->
lte_frame_parms
,
pbch_pdu
,
pbch_pdu
,
0
);
0
);
...
@@ -733,10 +679,10 @@ int main(int argc, char **argv)
...
@@ -733,10 +679,10 @@ int main(int argc, char **argv)
// write_output("pilotsF.m","rsF",txdataF[0],lte_frame_parms->ofdm_symbol_size,1,1);
// write_output("pilotsF.m","rsF",txdataF[0],lte_frame_parms->ofdm_symbol_size,1,1);
write_output
(
"txsigF0.m"
,
"txsF0"
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
write_output
(
"txsigF0.m"
,
"txsF0"
,
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
if
(
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
>
1
)
if
(
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
>
1
)
write_output
(
"txsigF1.m"
,
"txsF1"
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
write_output
(
"txsigF1.m"
,
"txsF1"
,
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
tx_lev
=
0
;
tx_lev
=
0
;
tx_lev1
=
0
;
tx_lev1
=
0
;
...
@@ -745,16 +691,16 @@ int main(int argc, char **argv)
...
@@ -745,16 +691,16 @@ int main(int argc, char **argv)
for
(
aa
=
0
;
aa
<
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
// input,
PHY_ofdm_mod
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
// input,
txdata
[
aa
],
// output
txdata
[
aa
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
else
{
else
{
normal_prefix_mod
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
normal_prefix_mod
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
txdata
[
aa
],
txdata
[
aa
],
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
frame_parms
);
frame_parms
);
...
@@ -765,17 +711,17 @@ int main(int argc, char **argv)
...
@@ -765,17 +711,17 @@ int main(int argc, char **argv)
}
}
if
(
interf1
>-
20
)
{
if
(
interf1
>-
20
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
b
1
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
B
1
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
// input,
PHY_ofdm_mod
(
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
// input,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
],
// output
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
2
*
nsymb
,
// number of symbols
2
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
else
{
else
{
normal_prefix_mod
(
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
normal_prefix_mod
(
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
],
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
],
2
*
nsymb
,
2
*
nsymb
,
frame_parms
);
frame_parms
);
}
}
...
@@ -784,24 +730,24 @@ int main(int argc, char **argv)
...
@@ -784,24 +730,24 @@ int main(int argc, char **argv)
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
);
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
);
}
}
write_output
(
"txsigF0_1.m"
,
"txsF0_1"
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
write_output
(
"txsigF0_1.m"
,
"txsF0_1"
,
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
if
(
PHY_vars_eN
b
1
->
lte_frame_parms
.
nb_antennas_tx
>
1
)
if
(
PHY_vars_eN
B
1
->
lte_frame_parms
.
nb_antennas_tx
>
1
)
write_output
(
"txsigF1_1.m"
,
"txsF1_1"
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
write_output
(
"txsigF1_1.m"
,
"txsF1_1"
,
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
}
}
if
(
interf2
>-
20
)
{
if
(
interf2
>-
20
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
b
2
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
B
2
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
// input,
PHY_ofdm_mod
(
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
// input,
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
],
// output
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
2
*
nsymb
,
// number of symbols
2
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
else
{
else
{
normal_prefix_mod
(
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
normal_prefix_mod
(
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
],
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
],
2
*
nsymb
,
2
*
nsymb
,
frame_parms
);
frame_parms
);
}
}
...
@@ -810,10 +756,10 @@ int main(int argc, char **argv)
...
@@ -810,10 +756,10 @@ int main(int argc, char **argv)
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
);
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
);
}
}
write_output
(
"txsigF0_2.m"
,
"txsF0_2"
,
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
write_output
(
"txsigF0_2.m"
,
"txsF0_2"
,
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
if
(
PHY_vars_eN
b
2
->
lte_frame_parms
.
nb_antennas_tx
>
1
)
if
(
PHY_vars_eN
B
2
->
lte_frame_parms
.
nb_antennas_tx
>
1
)
write_output
(
"txsigF1_2.m"
,
"txsF1_2"
,
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
write_output
(
"txsigF1_2.m"
,
"txsF1_2"
,
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
}
}
// tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
// tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
...
@@ -823,15 +769,15 @@ int main(int argc, char **argv)
...
@@ -823,15 +769,15 @@ int main(int argc, char **argv)
if
(
frame_parms
->
nb_antennas_tx
>
1
)
if
(
frame_parms
->
nb_antennas_tx
>
1
)
write_output
(
"txsig1.m"
,
"txs1"
,
txdata
[
1
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
write_output
(
"txsig1.m"
,
"txs1"
,
txdata
[
1
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
write_output
(
"txsig0_1.m"
,
"txs0_1"
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdata
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
write_output
(
"txsig0_1.m"
,
"txs0_1"
,
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdata
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
if
(
frame_parms
->
nb_antennas_tx
>
1
)
if
(
frame_parms
->
nb_antennas_tx
>
1
)
write_output
(
"txsig1_1.m"
,
"txs1_1"
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdata
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
write_output
(
"txsig1_1.m"
,
"txs1_1"
,
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdata
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
write_output
(
"txsig0_2.m"
,
"txs0_2"
,
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdata
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
write_output
(
"txsig0_2.m"
,
"txs0_2"
,
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdata
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
if
(
frame_parms
->
nb_antennas_tx
>
1
)
if
(
frame_parms
->
nb_antennas_tx
>
1
)
write_output
(
"txsig1_2.m"
,
"txs1_2"
,
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdata
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
write_output
(
"txsig1_2.m"
,
"txs1_2"
,
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdata
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
}
else
{
//read in from file
}
else
{
//read in from file
i
=
0
;
i
=
0
;
...
@@ -864,7 +810,7 @@ int main(int argc, char **argv)
...
@@ -864,7 +810,7 @@ int main(int argc, char **argv)
// multipath channel
// multipath channel
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
s_re
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)]);
s_re
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)]);
s_im
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)
+
1
]);
s_im
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)
+
1
]);
...
@@ -925,7 +871,7 @@ int main(int argc, char **argv)
...
@@ -925,7 +871,7 @@ int main(int argc, char **argv)
}
}
}
}
sigma2_dB
=
10
*
log10
((
double
)
tx_lev
)
+
10
*
log10
((
double
)
PHY_vars_eN
b
->
lte_frame_parms
.
ofdm_symbol_size
/
(
double
)(
12
*
NB_RB
))
-
SNR
;
sigma2_dB
=
10
*
log10
((
double
)
tx_lev
)
+
10
*
log10
((
double
)
PHY_vars_eN
B
->
lte_frame_parms
.
ofdm_symbol_size
/
(
double
)(
12
*
NB_RB
))
-
SNR
;
if
(
n_frames
==
1
)
if
(
n_frames
==
1
)
printf
(
"sigma2_dB %f (SNR %f dB) tx_lev_dB %f,%f,%f
\n
"
,
sigma2_dB
,
SNR
,
printf
(
"sigma2_dB %f (SNR %f dB) tx_lev_dB %f,%f,%f
\n
"
,
sigma2_dB
,
SNR
,
...
@@ -947,7 +893,7 @@ int main(int argc, char **argv)
...
@@ -947,7 +893,7 @@ int main(int argc, char **argv)
for
(
n_trials
=
0
;
n_trials
<
ntrials
;
n_trials
++
)
{
for
(
n_trials
=
0
;
n_trials
<
ntrials
;
n_trials
++
)
{
//printf("n_trial %d\n",n_trials);
//printf("n_trial %d\n",n_trials);
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_rx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_rx
;
aa
++
)
{
if
(
n_trials
==
0
)
{
if
(
n_trials
==
0
)
{
r_re
[
aa
][
i
]
+=
(
pow
(
10
.
0
,.
05
*
interf1
)
*
r_re1
[
aa
][
i
]
+
pow
(
10
.
0
,.
05
*
interf2
)
*
r_re2
[
aa
][
i
]);
r_re
[
aa
][
i
]
+=
(
pow
(
10
.
0
,.
05
*
interf1
)
*
r_re1
[
aa
][
i
]
+
pow
(
10
.
0
,.
05
*
interf2
)
*
r_re2
[
aa
][
i
]);
r_im
[
aa
][
i
]
+=
(
pow
(
10
.
0
,.
05
*
interf1
)
*
r_im1
[
aa
][
i
]
+
pow
(
10
.
0
,.
05
*
interf2
)
*
r_im2
[
aa
][
i
]);
r_im
[
aa
][
i
]
+=
(
pow
(
10
.
0
,.
05
*
interf1
)
*
r_im1
[
aa
][
i
]
+
pow
(
10
.
0
,.
05
*
interf2
)
*
r_im2
[
aa
][
i
]);
...
@@ -983,14 +929,14 @@ int main(int argc, char **argv)
...
@@ -983,14 +929,14 @@ int main(int argc, char **argv)
*/
*/
for
(
l
=
0
;
l
<
PHY_vars_eN
b
->
lte_frame_parms
.
symbols_per_tti
;
l
++
)
{
for
(
l
=
0
;
l
<
PHY_vars_eN
B
->
lte_frame_parms
.
symbols_per_tti
;
l
++
)
{
// subframe_offset = (l/PHY_vars_eN
b->lte_frame_parms.symbols_per_tti)*PHY_vars_eNb
->lte_frame_parms.samples_per_tti;
// subframe_offset = (l/PHY_vars_eN
B->lte_frame_parms.symbols_per_tti)*PHY_vars_eNB
->lte_frame_parms.samples_per_tti;
// printf("subframe_offset = %d\n",subframe_offset);
// printf("subframe_offset = %d\n",subframe_offset);
slot_fep
(
PHY_vars_UE
,
slot_fep
(
PHY_vars_UE
,
l
%
(
PHY_vars_eN
b
->
lte_frame_parms
.
symbols_per_tti
/
2
),
l
%
(
PHY_vars_eN
B
->
lte_frame_parms
.
symbols_per_tti
/
2
),
l
/
(
PHY_vars_eN
b
->
lte_frame_parms
.
symbols_per_tti
/
2
),
l
/
(
PHY_vars_eN
B
->
lte_frame_parms
.
symbols_per_tti
/
2
),
0
,
0
,
0
,
0
,
0
);
0
);
...
@@ -1026,7 +972,7 @@ int main(int argc, char **argv)
...
@@ -1026,7 +972,7 @@ int main(int argc, char **argv)
*/
*/
}
}
if
(
l
==
((
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
4
:
3
))
{
if
(
l
==
((
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
4
:
3
))
{
//sprintf(fname,"dl_ch00_%d.m",l);
//sprintf(fname,"dl_ch00_%d.m",l);
//sprintf(vname,"dl_ch00_%d",l);
//sprintf(vname,"dl_ch00_%d",l);
//write_output(fname,vname,&(lte_ue_common_vars->dl_ch_estimates[0][lte_frame_parms->ofdm_symbol_size*(l%6)]),lte_frame_parms->ofdm_symbol_size,1,1);
//write_output(fname,vname,&(lte_ue_common_vars->dl_ch_estimates[0][lte_frame_parms->ofdm_symbol_size*(l%6)]),lte_frame_parms->ofdm_symbol_size,1,1);
...
@@ -1038,7 +984,7 @@ int main(int argc, char **argv)
...
@@ -1038,7 +984,7 @@ int main(int argc, char **argv)
1
);
1
);
}
}
if
(
l
==
((
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
10
:
9
))
{
if
(
l
==
((
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
10
:
9
))
{
for
(
frame_mod4
=
0
;
frame_mod4
<
4
;
frame_mod4
++
)
{
for
(
frame_mod4
=
0
;
frame_mod4
<
4
;
frame_mod4
++
)
{
pbch_tx_ant
=
rx_pbch
(
&
PHY_vars_UE
->
lte_ue_common_vars
,
pbch_tx_ant
=
rx_pbch
(
&
PHY_vars_UE
->
lte_ue_common_vars
,
...
@@ -1059,7 +1005,7 @@ int main(int argc, char **argv)
...
@@ -1059,7 +1005,7 @@ int main(int argc, char **argv)
pbch_tx_ant
=
rx_pbch
(
&
PHY_vars_UE
->
lte_ue_common_vars
,
pbch_tx_ant
=
rx_pbch
(
&
PHY_vars_UE
->
lte_ue_common_vars
,
PHY_vars_UE
->
lte_ue_pbch_vars
[
0
],
PHY_vars_UE
->
lte_ue_pbch_vars
[
0
],
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
0
,
0
,
ALAMOUTI
,
ALAMOUTI
,
PHY_vars_UE
->
high_speed_flag
,
PHY_vars_UE
->
high_speed_flag
,
...
@@ -1119,10 +1065,10 @@ int main(int argc, char **argv)
...
@@ -1119,10 +1065,10 @@ int main(int argc, char **argv)
if
(
n_frames
==
1
)
{
if
(
n_frames
==
1
)
{
write_output
(
"H00.m"
,
"h00"
,
&
(
PHY_vars_UE
->
lte_ue_common_vars
.
dl_ch_estimates
[
0
][
0
][
0
]),((
frame_parms
->
Ncp
==
0
)
?
7
:
6
)
*
(
PHY_vars_eN
b
->
lte_frame_parms
.
ofdm_symbol_size
),
1
,
1
);
write_output
(
"H00.m"
,
"h00"
,
&
(
PHY_vars_UE
->
lte_ue_common_vars
.
dl_ch_estimates
[
0
][
0
][
0
]),((
frame_parms
->
Ncp
==
0
)
?
7
:
6
)
*
(
PHY_vars_eN
B
->
lte_frame_parms
.
ofdm_symbol_size
),
1
,
1
);
if
(
n_tx
==
2
)
if
(
n_tx
==
2
)
write_output
(
"H10.m"
,
"h10"
,
&
(
PHY_vars_UE
->
lte_ue_common_vars
.
dl_ch_estimates
[
0
][
2
][
0
]),((
frame_parms
->
Ncp
==
0
)
?
7
:
6
)
*
(
PHY_vars_eN
b
->
lte_frame_parms
.
ofdm_symbol_size
),
1
,
1
);
write_output
(
"H10.m"
,
"h10"
,
&
(
PHY_vars_UE
->
lte_ue_common_vars
.
dl_ch_estimates
[
0
][
2
][
0
]),((
frame_parms
->
Ncp
==
0
)
?
7
:
6
)
*
(
PHY_vars_eN
B
->
lte_frame_parms
.
ofdm_symbol_size
),
1
,
1
);
write_output
(
"rxsig0.m"
,
"rxs0"
,
PHY_vars_UE
->
lte_ue_common_vars
.
rxdata
[
0
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
write_output
(
"rxsig0.m"
,
"rxs0"
,
PHY_vars_UE
->
lte_ue_common_vars
.
rxdata
[
0
],
FRAME_LENGTH_COMPLEX_SAMPLES
,
1
,
1
);
write_output
(
"rxsigF0.m"
,
"rxsF0"
,
PHY_vars_UE
->
lte_ue_common_vars
.
rxdataF
[
0
],
NUMBER_OF_OFDM_CARRIERS
*
2
*
((
frame_parms
->
Ncp
==
0
)
?
14
:
12
),
2
,
1
);
write_output
(
"rxsigF0.m"
,
"rxsF0"
,
PHY_vars_UE
->
lte_ue_common_vars
.
rxdataF
[
0
],
NUMBER_OF_OFDM_CARRIERS
*
2
*
((
frame_parms
->
Ncp
==
0
)
?
14
:
12
),
2
,
1
);
...
...
openair1/SIMULATION/LTE_PHY/pdcchsim.c
View file @
771bab79
...
@@ -58,98 +58,6 @@ PHY_VARS_UE *PHY_vars_UE;
...
@@ -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 CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2)
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
#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
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
)
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)
...
@@ -798,9 +706,10 @@ int main(int argc, char **argv)
n_rx
,
n_rx
,
transmission_mode
,
transmission_mode
,
extended_prefix_flag
,
extended_prefix_flag
,
frame_type
,
Nid_cell
,
Nid_cell
,
tdd_config
,
tdd_config
,
N_RB_DL
,
frame_type
,
N_RB_DL
,
osf
,
osf
,
perfect_ce
);
perfect_ce
);
...
@@ -1084,7 +993,7 @@ int main(int argc, char **argv)
...
@@ -1084,7 +993,7 @@ int main(int argc, char **argv)
if
(
PHY_vars_eNB
->
lte_frame_parms
.
Ncp
==
1
)
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,
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
&
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
2
*
nsymb
,
// number of symbols
PHY_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
PHY_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/prachsim.c
View file @
771bab79
...
@@ -56,58 +56,6 @@ PHY_VARS_UE *PHY_vars_UE;
...
@@ -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
];
extern
uint16_t
prach_root_sequence_map0_3
[
838
];
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
argc
,
char
**
argv
)
...
@@ -370,7 +318,16 @@ int main(int argc, char **argv)
...
@@ -370,7 +318,16 @@ int main(int argc, char **argv)
if
(
transmission_mode
==
2
)
if
(
transmission_mode
==
2
)
n_tx
=
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
)
{
if
(
snr1set
==
0
)
{
...
...
openair1/SIMULATION/LTE_PHY/pucchsim.c
View file @
771bab79
...
@@ -58,60 +58,6 @@ PHY_VARS_UE *PHY_vars_UE;
...
@@ -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
)
int
main
(
int
argc
,
char
**
argv
)
{
{
...
@@ -368,7 +314,16 @@ int main(int argc, char **argv)
...
@@ -368,7 +314,16 @@ int main(int argc, char **argv)
if
(
transmission_mode
==
2
)
if
(
transmission_mode
==
2
)
n_tx
=
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
)
{
if
(
snr1set
==
0
)
{
...
@@ -473,7 +428,7 @@ int main(int argc, char **argv)
...
@@ -473,7 +428,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
txdataF2
[
aa
],
// input
PHY_ofdm_mod
(
txdataF2
[
aa
],
// input
txdata
[
aa
],
// output
txdata
[
aa
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
2
*
nsymb
,
// number of symbols
2
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
@@ -496,7 +451,7 @@ int main(int argc, char **argv)
...
@@ -496,7 +451,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
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,
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
&
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
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/scansim.c
View file @
771bab79
...
@@ -56,94 +56,11 @@
...
@@ -56,94 +56,11 @@
#define BW 20.0
#define BW 20.0
PHY_VARS_eNB
*
PHY_vars_eN
b
,
*
PHY_vars_eNb1
,
*
PHY_vars_eNb
2
;
PHY_VARS_eNB
*
PHY_vars_eN
B
,
*
PHY_vars_eNB1
,
*
PHY_vars_eNB
2
;
PHY_VARS_UE
*
PHY_vars_UE
;
PHY_VARS_UE
*
PHY_vars_UE
;
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
#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
,
unsigned
char
frame_type
,
uint16_t
Nid_cell
,
uint8_t
N_RB_DL
,
uint8_t
osf
)
{
// unsigned int ind;
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_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
=
N_tx
;
lte_frame_parms
->
nb_antennas_tx_eNB
=
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
=
frame_type
;
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_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
;
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
);
for
(
i
=
0
;
i
<
10
;
i
++
)
{
PHY_vars_UE
->
scan_info
[
0
].
amp
[
0
][
i
]
=
0
;
PHY_vars_UE
->
scan_info
[
0
].
amp
[
1
][
i
]
=
0
;
PHY_vars_UE
->
scan_info
[
0
].
amp
[
2
][
i
]
=
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
.
Nid_cell
=
Nid_cell
+
1
;
PHY_vars_eNb1
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
1
)
%
6
;
PHY_vars_eNb1
->
Mod_id
=
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
.
Nid_cell
=
Nid_cell
+
2
;
PHY_vars_eNb2
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
2
)
%
6
;
PHY_vars_eNb2
->
Mod_id
=
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
);
printf
(
"Done lte_param_init
\n
"
);
}
mod_sym_t
*
dummybuf
[
4
];
mod_sym_t
*
dummybuf
[
4
];
mod_sym_t
dummy0
[
2048
*
14
];
mod_sym_t
dummy0
[
2048
*
14
];
mod_sym_t
dummy1
[
2048
*
14
];
mod_sym_t
dummy1
[
2048
*
14
];
...
@@ -404,7 +321,16 @@ int main(int argc, char **argv)
...
@@ -404,7 +321,16 @@ int main(int argc, char **argv)
if
(
transmission_mode
>=
2
)
if
(
transmission_mode
>=
2
)
n_tx
=
2
;
n_tx
=
2
;
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
frame_type
,
Nid_cell
,
N_RB_DL
,
osf
);
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
frame_type
,
Nid_cell
,
3
,
N_RB_DL
,
osf
,
0
);
#ifdef XFORMS
#ifdef XFORMS
fl_initialize
(
&
argc
,
argv
,
NULL
,
0
,
0
);
fl_initialize
(
&
argc
,
argv
,
NULL
,
0
,
0
);
...
@@ -422,13 +348,13 @@ int main(int argc, char **argv)
...
@@ -422,13 +348,13 @@ int main(int argc, char **argv)
printf
(
"SNR0 %f, SNR1 %f
\n
"
,
snr0
,
snr1
);
printf
(
"SNR0 %f, SNR1 %f
\n
"
,
snr0
,
snr1
);
frame_parms
=
&
PHY_vars_eN
b
->
lte_frame_parms
;
frame_parms
=
&
PHY_vars_eN
B
->
lte_frame_parms
;
txdata
=
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata
=
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata1
=
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata1
=
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata2
=
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata2
=
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdata
[
0
];
s_re
=
malloc
(
2
*
sizeof
(
double
*
));
s_re
=
malloc
(
2
*
sizeof
(
double
*
));
...
@@ -449,8 +375,8 @@ int main(int argc, char **argv)
...
@@ -449,8 +375,8 @@ int main(int argc, char **argv)
printf
(
"FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d
\n
"
,
NUMBER_OF_OFDM_CARRIERS
,
printf
(
"FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d
\n
"
,
NUMBER_OF_OFDM_CARRIERS
,
frame_parms
->
Ncp
,
frame_parms
->
samples_per_tti
,
nsymb
);
frame_parms
->
Ncp
,
frame_parms
->
samples_per_tti
,
nsymb
);
printf
(
"PHY_vars_eN
b
1->lte_eNB_common_vars.txdataF[0][0] = %p
\n
"
,
printf
(
"PHY_vars_eN
B
1->lte_eNB_common_vars.txdataF[0][0] = %p
\n
"
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
]);
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
]);
DLSCH_alloc_pdu2
.
rah
=
0
;
DLSCH_alloc_pdu2
.
rah
=
0
;
...
@@ -465,10 +391,11 @@ int main(int argc, char **argv)
...
@@ -465,10 +391,11 @@ int main(int argc, char **argv)
// Forget second codeword
// Forget second codeword
DLSCH_alloc_pdu2
.
tpmi
=
(
transmission_mode
==
6
?
5
:
0
)
;
// precoding
DLSCH_alloc_pdu2
.
tpmi
=
(
transmission_mode
==
6
?
5
:
0
)
;
// precoding
eNB2UE
=
new_channel_desc_scm
(
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
,
eNB2UE
=
new_channel_desc_scm
(
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
channel_model
,
channel_model
,
BW
,
N_RB2sampling_rate
(
PHY_vars_eNB
->
lte_frame_parms
.
N_RB_DL
),
N_RB2channel_bandwidth
(
PHY_vars_eNB
->
lte_frame_parms
.
N_RB_DL
),
0
,
0
,
0
,
0
,
0
);
0
);
...
@@ -512,51 +439,51 @@ int main(int argc, char **argv)
...
@@ -512,51 +439,51 @@ int main(int argc, char **argv)
pbch_pdu
[
1
]
=
1
;
pbch_pdu
[
1
]
=
1
;
pbch_pdu
[
2
]
=
0
;
pbch_pdu
[
2
]
=
0
;
if
(
PHY_vars_eN
b
->
lte_frame_parms
.
frame_type
==
FDD
)
{
if
(
PHY_vars_eN
B
->
lte_frame_parms
.
frame_type
==
FDD
)
{
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
NORMAL
)
?
6
:
5
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
NORMAL
)
?
6
:
5
,
0
);
0
);
/*
/*
generate_sss(PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
generate_sss(PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
AMP,
AMP,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
(PHY_vars_eN
b
->lte_frame_parms.Ncp==0) ? 5 : 4,
(PHY_vars_eN
B
->lte_frame_parms.Ncp==0) ? 5 : 4,
0);*/
0);*/
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
10
);
10
);
/*
/*
generate_sss(PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
generate_sss(PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
AMP,
AMP,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
(PHY_vars_eN
b
->lte_frame_parms.Ncp==0) ? 5 : 4,
(PHY_vars_eN
B
->lte_frame_parms.Ncp==0) ? 5 : 4,
10);
10);
*/
*/
}
else
{
}
else
{
generate_sss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_sss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
1
);
1
);
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
2
,
2
,
2
);
2
);
generate_sss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_sss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
(
PHY_vars_eN
b
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
11
);
11
);
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
2
,
2
,
12
);
12
);
...
@@ -565,8 +492,8 @@ int main(int argc, char **argv)
...
@@ -565,8 +492,8 @@ int main(int argc, char **argv)
/*
/*
generate_pilots(PHY_vars_eN
b
,
generate_pilots(PHY_vars_eN
B
,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
AMP,
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
...
@@ -577,8 +504,8 @@ int main(int argc, char **argv)
...
@@ -577,8 +504,8 @@ int main(int argc, char **argv)
dci_alloc,
dci_alloc,
0,
0,
1024,
1024,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
0);
0);
*/
*/
...
@@ -593,25 +520,25 @@ int main(int argc, char **argv)
...
@@ -593,25 +520,25 @@ int main(int argc, char **argv)
dummybuf[1] = dummy1;
dummybuf[1] = dummy1;
dummybuf[2] = dummy2;
dummybuf[2] = dummy2;
dummybuf[3] = dummy3;
dummybuf[3] = dummy3;
generate_pbch(&PHY_vars_eN
b
->lte_eNB_pbch,
generate_pbch(&PHY_vars_eN
B
->lte_eNB_pbch,
(mod_sym_t**)dummybuf,
(mod_sym_t**)dummybuf,
AMP,
AMP,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
pbch_pdu,
pbch_pdu,
0);
0);
}
}
generate_pbch(&PHY_vars_eN
b
->lte_eNB_pbch,
generate_pbch(&PHY_vars_eN
B
->lte_eNB_pbch,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
AMP,
AMP,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
pbch_pdu,
pbch_pdu,
pbch_phase);
pbch_phase);
*/
*/
write_output
(
"txsigF0.m"
,
"txsF0"
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
write_output
(
"txsigF0.m"
,
"txsF0"
,
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
if
(
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
>
1
)
if
(
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
>
1
)
write_output
(
"txsigF1.m"
,
"txsF1"
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
write_output
(
"txsigF1.m"
,
"txsF1"
,
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
1
);
tx_lev
=
0
;
tx_lev
=
0
;
tx_lev1
=
0
;
tx_lev1
=
0
;
...
@@ -620,16 +547,16 @@ int main(int argc, char **argv)
...
@@ -620,16 +547,16 @@ int main(int argc, char **argv)
for
(
aa
=
0
;
aa
<
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
// input,
PHY_ofdm_mod
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
// input,
txdata
[
aa
],
// output
txdata
[
aa
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
else
{
else
{
normal_prefix_mod
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
normal_prefix_mod
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
],
txdata
[
aa
],
txdata
[
aa
],
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
frame_parms
);
frame_parms
);
...
@@ -648,7 +575,7 @@ int main(int argc, char **argv)
...
@@ -648,7 +575,7 @@ int main(int argc, char **argv)
// multipath channel
// multipath channel
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_tx
;
aa
++
)
{
s_re
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)]);
s_re
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)]);
s_im
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)
+
1
]);
s_im
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)
+
1
]);
}
}
...
@@ -667,7 +594,7 @@ int main(int argc, char **argv)
...
@@ -667,7 +594,7 @@ int main(int argc, char **argv)
multipath_channel
(
eNB2UE
,
s_re
,
s_im
,
r_re
,
r_im
,
multipath_channel
(
eNB2UE
,
s_re
,
s_im
,
r_re
,
r_im
,
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
,
0
);
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
,
0
);
sigma2_dB
=
10
*
log10
((
double
)
tx_lev
)
+
10
*
log10
((
double
)
PHY_vars_eN
b
->
lte_frame_parms
.
ofdm_symbol_size
/
(
double
)(
12
*
NB_RB
))
-
SNR
;
sigma2_dB
=
10
*
log10
((
double
)
tx_lev
)
+
10
*
log10
((
double
)
PHY_vars_eN
B
->
lte_frame_parms
.
ofdm_symbol_size
/
(
double
)(
12
*
NB_RB
))
-
SNR
;
if
(
n_frames
==
1
)
if
(
n_frames
==
1
)
printf
(
"sigma2_dB %f (SNR %f dB) tx_lev_dB %f,%f,%f
\n
"
,
sigma2_dB
,
SNR
,
printf
(
"sigma2_dB %f (SNR %f dB) tx_lev_dB %f,%f,%f
\n
"
,
sigma2_dB
,
SNR
,
...
@@ -689,7 +616,7 @@ int main(int argc, char **argv)
...
@@ -689,7 +616,7 @@ int main(int argc, char **argv)
for
(
n_trials
=
0
;
n_trials
<
ntrials
;
n_trials
++
)
{
for
(
n_trials
=
0
;
n_trials
<
ntrials
;
n_trials
++
)
{
//printf("n_trial %d\n",n_trials);
//printf("n_trial %d\n",n_trials);
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
i
=
0
;
i
<
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
;
i
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
b
->
lte_frame_parms
.
nb_antennas_rx
;
aa
++
)
{
for
(
aa
=
0
;
aa
<
PHY_vars_eN
B
->
lte_frame_parms
.
nb_antennas_rx
;
aa
++
)
{
((
short
*
)
PHY_vars_UE
->
lte_ue_common_vars
.
rxdata
[
aa
])[
2
*
i
]
=
(
short
)
((
r_re
[
aa
][
i
]
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
((
short
*
)
PHY_vars_UE
->
lte_ue_common_vars
.
rxdata
[
aa
])[
2
*
i
]
=
(
short
)
((
r_re
[
aa
][
i
]
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
((
short
*
)
PHY_vars_UE
->
lte_ue_common_vars
.
rxdata
[
aa
])[
2
*
i
+
1
]
=
(
short
)
((
r_im
[
aa
][
i
]
+
(
iqim
*
r_re
[
aa
][
i
])
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
((
short
*
)
PHY_vars_UE
->
lte_ue_common_vars
.
rxdata
[
aa
])[
2
*
i
+
1
]
=
(
short
)
((
r_im
[
aa
][
i
]
+
(
iqim
*
r_re
[
aa
][
i
])
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
}
}
...
...
openair1/SIMULATION/LTE_PHY/syncsim.c
View file @
771bab79
...
@@ -1189,7 +1189,7 @@ int main(int argc, char **argv)
...
@@ -1189,7 +1189,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
txdataF2
[
aa
],
// input
PHY_ofdm_mod
(
txdataF2
[
aa
],
// input
txdata
[
aa
],
// output
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
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
.
nb_prefix_samples
,
// number of prefix samples
PHY_vars_eNB
->
lte_frame_parms
.
twiddle_ifft
,
// IFFT twiddle factors
PHY_vars_eNB
->
lte_frame_parms
.
twiddle_ifft
,
// IFFT twiddle factors
...
@@ -1218,7 +1218,7 @@ int main(int argc, char **argv)
...
@@ -1218,7 +1218,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
PHY_ofdm_mod
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
txdata
[
aa
],
// output
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
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
...
@@ -1240,7 +1240,7 @@ int main(int argc, char **argv)
...
@@ -1240,7 +1240,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eNB1
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
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
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
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
...
@@ -1260,7 +1260,7 @@ int main(int argc, char **argv)
...
@@ -1260,7 +1260,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eNB2
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
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
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
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
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 */
...
@@ -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_tx_dropped
=
0
;
/*!< \brief initial max process time for tx */
int
n_rx_dropped
=
0
;
/*!< \brief initial max process time for rx */
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
)
int
main
(
int
argc
,
char
**
argv
)
{
{
...
@@ -520,7 +466,16 @@ 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
)
if
(
nb_rb_set
==
0
)
nb_rb
=
PHY_vars_eNB
->
lte_frame_parms
.
N_RB_UL
;
nb_rb
=
PHY_vars_eNB
->
lte_frame_parms
.
N_RB_UL
;
...
@@ -1109,7 +1064,7 @@ int main(int argc, char **argv)
...
@@ -1109,7 +1064,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
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
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
&
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
nsymb
,
// number of symbols
PHY_vars_UE
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
PHY_vars_UE
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
...
targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
View file @
771bab79
...
@@ -38,6 +38,7 @@
...
@@ -38,6 +38,7 @@
#include <stdio.h>
#include <stdio.h>
#include <uhd/utils/thread_priority.hpp>
#include <uhd/utils/thread_priority.hpp>
#include <uhd/usrp/multi_usrp.hpp>
#include <uhd/usrp/multi_usrp.hpp>
#include <uhd/version.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <iostream>
...
@@ -304,27 +305,59 @@ int trx_usrp_stop(int card) {
...
@@ -304,27 +305,59 @@ int trx_usrp_stop(int card) {
rx_gain_calib_table_t
calib_table_b210
[]
=
{
rx_gain_calib_table_t
calib_table_b210
[]
=
{
{
3500000000.0
,
46.0
},
{
3500000000.0
,
44.0
},
{
2660000000.0
,
53.0
},
{
2660000000.0
,
49.0
},
{
2300000000.0
,
54.0
},
{
2300000000.0
,
50.0
},
{
1880000000.0
,
55.0
},
{
1880000000.0
,
53.0
},
{
816000000.0
,
62.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
}};
{
-
1
,
0
}};
rx_gain_calib_table_t
calib_table_x310
[]
=
{
rx_gain_calib_table_t
calib_table_x310
[]
=
{
{
3500000000.0
,
77.0
},
{
3500000000.0
,
77.0
},
{
2660000000.0
,
8
0
.0
},
{
2660000000.0
,
8
1
.0
},
{
2300000000.0
,
81.0
},
{
2300000000.0
,
81.0
},
{
1880000000.0
,
82.0
},
{
1880000000.0
,
82.0
},
{
816000000.0
,
85.0
},
{
816000000.0
,
85.0
},
{
-
1
,
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
;
int
i
=
0
;
// loop through calibration table to find best adjustment factor for RX frequency
// 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
)
{
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
);
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
"
,
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) {
...
@@ -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
);
openair0_cfg
->
rx_gain_calib_table
[
i
].
offset
,
diff
);
if
(
min_diff
>
diff
)
{
if
(
min_diff
>
diff
)
{
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
++
;
i
++
;
}
}
...
@@ -367,7 +400,12 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
...
@@ -367,7 +400,12 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
uhd
::
device_addrs_t
device_adds
=
uhd
::
device
::
find
(
args
);
uhd
::
device_addrs_t
device_adds
=
uhd
::
device
::
find
(
args
);
size_t
i
;
size_t
i
;
printf
(
"Checking for USRPs
\n
"
);
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 : UHD %s (%d.%d.%d)
\n
"
,
uhd
::
get_version_string
().
c_str
(),
vers
,
subvers
,
subsubvers
);
if
(
device_adds
.
size
()
==
0
)
if
(
device_adds
.
size
()
==
0
)
{
{
...
@@ -388,6 +426,7 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
...
@@ -388,6 +426,7 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
}
}
printf
(
"Found USRP X300
\n
"
);
printf
(
"Found USRP X300
\n
"
);
s
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
);
s
->
usrp
=
uhd
::
usrp
::
multi_usrp
::
make
(
args
);
// s->usrp->set_rx_subdev_spec(rx_subdev);
// s->usrp->set_rx_subdev_spec(rx_subdev);
...
@@ -410,21 +449,29 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
...
@@ -410,21 +449,29 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
// from usrp_time_offset
// from usrp_time_offset
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
tx_sample_advance
=
15
;
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
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
8
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
break
;
case
15360000
:
case
15360000
:
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
tx_sample_advance
=
45
;
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
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
5
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
break
;
case
7680000
:
case
7680000
:
openair0_cfg
[
0
].
samples_per_packet
=
1024
;
openair0_cfg
[
0
].
samples_per_packet
=
1024
;
openair0_cfg
[
0
].
tx_sample_advance
=
50
;
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
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
5
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
break
;
case
1920000
:
case
1920000
:
openair0_cfg
[
0
].
samples_per_packet
=
256
;
openair0_cfg
[
0
].
samples_per_packet
=
256
;
openair0_cfg
[
0
].
tx_sample_advance
=
50
;
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
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
8
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
break
;
default:
default:
...
@@ -446,30 +493,56 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
...
@@ -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
// set master clock rate and sample rate for tx & rx for streaming
device
->
type
=
USRP_B200_IF
;
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
)
{
switch
((
int
)
openair0_cfg
[
0
].
sample_rate
)
{
case
30720000
:
case
30720000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
// from usrp_time_offset
// 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_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
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
11
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
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
:
case
15360000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
samples_per_packet
=
2048
;
openair0_cfg
[
0
].
tx_sample_advance
=
113
;
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
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
5
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
break
;
case
7680000
:
case
7680000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
openair0_cfg
[
0
].
samples_per_packet
=
1024
;
openair0_cfg
[
0
].
samples_per_packet
=
1024
;
openair0_cfg
[
0
].
tx_sample_advance
=
70
;
//103;
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
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
5
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
break
;
case
1920000
:
case
1920000
:
s
->
usrp
->
set_master_clock_rate
(
30.72e6
);
openair0_cfg
[
0
].
samples_per_packet
=
256
;
openair0_cfg
[
0
].
samples_per_packet
=
256
;
openair0_cfg
[
0
].
tx_sample_advance
=
40
;
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
;
openair0_cfg
[
0
].
tx_scheduling_advance
=
8
*
openair0_cfg
[
0
].
samples_per_packet
;
break
;
break
;
default:
default:
...
@@ -485,7 +558,7 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_
...
@@ -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
);
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
);
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
);
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
);
::
uhd
::
gain_range_t
gain_range
=
s
->
usrp
->
get_rx_gain_range
(
i
);
// limit to maximum gain
// limit to maximum gain
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpb210.conf
View file @
771bab79
...
@@ -28,7 +28,7 @@ eNBs =
...
@@ -28,7 +28,7 @@ eNBs =
tdd_config_s
=
0
;
tdd_config_s
=
0
;
prefix_type
=
"NORMAL"
;
prefix_type
=
"NORMAL"
;
eutra_band
=
7
;
eutra_band
=
7
;
downlink_frequency
=
26
6
0000000
L
;
downlink_frequency
=
26
8
0000000
L
;
uplink_frequency_offset
= -
120000000
;
uplink_frequency_offset
= -
120000000
;
Nid_cell
=
0
;
Nid_cell
=
0
;
N_RB_DL
=
100
;
N_RB_DL
=
100
;
...
@@ -36,7 +36,7 @@ eNBs =
...
@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx
=
1
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
tx_gain
=
90
;
rx_gain
=
12
0
;
rx_gain
=
12
7
;
prach_root
=
0
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
prach_high_speed
=
"DISABLE"
;
...
...
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
View file @
771bab79
...
@@ -28,7 +28,7 @@ eNBs =
...
@@ -28,7 +28,7 @@ eNBs =
tdd_config_s
=
0
;
tdd_config_s
=
0
;
prefix_type
=
"NORMAL"
;
prefix_type
=
"NORMAL"
;
eutra_band
=
7
;
eutra_band
=
7
;
downlink_frequency
=
26
6
0000000
L
;
downlink_frequency
=
26
8
0000000
L
;
uplink_frequency_offset
= -
120000000
;
uplink_frequency_offset
= -
120000000
;
Nid_cell
=
0
;
Nid_cell
=
0
;
N_RB_DL
=
50
;
N_RB_DL
=
50
;
...
@@ -36,7 +36,7 @@ eNBs =
...
@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx
=
1
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
tx_gain
=
90
;
rx_gain
=
1
18
;
rx_gain
=
1
25
;
prach_root
=
0
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
prach_high_speed
=
"DISABLE"
;
...
@@ -140,10 +140,10 @@ eNBs =
...
@@ -140,10 +140,10 @@ eNBs =
NETWORK_INTERFACES
:
NETWORK_INTERFACES
:
{
{
ENB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
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_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
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 =
...
@@ -36,7 +36,7 @@ eNBs =
nb_antennas_tx
=
1
;
nb_antennas_tx
=
1
;
nb_antennas_rx
=
1
;
nb_antennas_rx
=
1
;
tx_gain
=
90
;
tx_gain
=
90
;
rx_gain
=
1
32
;
rx_gain
=
1
25
;
prach_root
=
0
;
prach_root
=
0
;
prach_config_index
=
0
;
prach_config_index
=
0
;
prach_high_speed
=
"DISABLE"
;
prach_high_speed
=
"DISABLE"
;
...
@@ -143,10 +143,10 @@ eNBs =
...
@@ -143,10 +143,10 @@ eNBs =
NETWORK_INTERFACES
:
NETWORK_INTERFACES
:
{
{
ENB_INTERFACE_NAME_FOR_S1_MME
=
"eth0"
;
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_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
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};
...
@@ -235,6 +235,7 @@ static int time_offset[4] = {0,0,0,0};
static
char
UE_flag
=
0
;
static
char
UE_flag
=
0
;
//static uint8_t eNB_id=0,UE_id=0;
//static uint8_t eNB_id=0,UE_id=0;
static
char
threequarter_fs
=
0
;
uint32_t
downlink_frequency
[
MAX_NUM_CCs
][
4
];
uint32_t
downlink_frequency
[
MAX_NUM_CCs
][
4
];
int32_t
uplink_frequency_offset
[
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)
...
@@ -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
)
{
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
],
PHY_ofdm_mod
(
&
phy_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
][
slot_offset_F
],
dummy_tx_b
,
dummy_tx_b
,
phy_vars_eNB
->
lte_frame_parms
.
log2
_symbol_size
,
phy_vars_eNB
->
lte_frame_parms
.
ofdm
_symbol_size
,
6
,
6
,
phy_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
phy_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
PHY_ofdm_mod
(
&
phy_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
0
][
aa
][
slot_offset_F
+
slot_sizeF
],
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
),
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
,
6
,
phy_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
phy_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
CYCLIC_PREFIX
);
CYCLIC_PREFIX
);
...
@@ -2060,7 +2061,7 @@ static void get_options (int argc, char **argv)
...
@@ -2060,7 +2061,7 @@ static void get_options (int argc, char **argv)
{
NULL
,
0
,
NULL
,
0
}
{
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
)
{
switch
(
c
)
{
case
LONG_OPTION_MAXPOWER
:
case
LONG_OPTION_MAXPOWER
:
tx_max_power
[
0
]
=
atoi
(
optarg
);
tx_max_power
[
0
]
=
atoi
(
optarg
);
...
@@ -2163,6 +2164,10 @@ static void get_options (int argc, char **argv)
...
@@ -2163,6 +2164,10 @@ static void get_options (int argc, char **argv)
#endif
#endif
break
;
break
;
case
'E'
:
threequarter_fs
=
1
;
break
;
case
'K'
:
case
'K'
:
#if defined(ENABLE_ITTI)
#if defined(ENABLE_ITTI)
itti_dump_file
=
strdup
(
optarg
);
itti_dump_file
=
strdup
(
optarg
);
...
@@ -2671,6 +2676,7 @@ int main( int argc, char **argv )
...
@@ -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
.
groupHoppingEnabled
=
0
;
frame_parms
[
CC_id
]
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
sequenceHoppingEnabled
=
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
]
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
groupAssignmentPUSCH
=
0
;
frame_parms
[
CC_id
]
->
threequarter_fs
=
threequarter_fs
;
init_ul_hopping
(
frame_parms
[
CC_id
]);
init_ul_hopping
(
frame_parms
[
CC_id
]);
init_frame_parms
(
frame_parms
[
CC_id
],
1
);
init_frame_parms
(
frame_parms
[
CC_id
],
1
);
// phy_init_top(frame_parms[CC_id]);
// phy_init_top(frame_parms[CC_id]);
...
@@ -2876,10 +2882,18 @@ int main( int argc, char **argv )
...
@@ -2876,10 +2882,18 @@ int main( int argc, char **argv )
for
(
card
=
0
;
card
<
MAX_CARDS
;
card
++
)
{
for
(
card
=
0
;
card
<
MAX_CARDS
;
card
++
)
{
if
(
frame_parms
[
0
]
->
N_RB_DL
==
100
)
{
if
(
frame_parms
[
0
]
->
N_RB_DL
==
100
)
{
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
].
sample_rate
=
30.72e6
;
openair0_cfg
[
card
].
samples_per_frame
=
307200
;
openair0_cfg
[
card
].
samples_per_frame
=
307200
;
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
}
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
50
)
{
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
50
)
{
openair0_cfg
[
card
].
sample_rate
=
15.36e6
;
openair0_cfg
[
card
].
sample_rate
=
15.36e6
;
openair0_cfg
[
card
].
samples_per_frame
=
153600
;
openair0_cfg
[
card
].
samples_per_frame
=
153600
;
...
@@ -2962,6 +2976,7 @@ int main( int argc, char **argv )
...
@@ -2962,6 +2976,7 @@ int main( int argc, char **argv )
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
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) {
switch(frame_parms[0]->N_RB_DL) {
case 6:
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
openair0_cfg[card].rx_gain[i] -= 12;
...
@@ -2982,7 +2997,7 @@ int main( int argc, char **argv )
...
@@ -2982,7 +2997,7 @@ int main( int argc, char **argv )
default:
default:
break;
break;
}
}
#endif
}
}
...
...
targets/RT/USER/lte-ue.c
View file @
771bab79
...
@@ -279,7 +279,7 @@ static void *UE_thread_synch(void *arg)
...
@@ -279,7 +279,7 @@ static void *UE_thread_synch(void *arg)
#ifdef OAI_USRP
#ifdef OAI_USRP
openair0_cfg
[
card
].
rx_gain
[
i
]
=
UE
->
rx_total_gain_dB
;
//-USRP_GAIN_OFFSET;
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) {
switch(UE->lte_frame_parms.N_RB_DL) {
case 6:
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
openair0_cfg[card].rx_gain[i] -= 12;
...
@@ -301,7 +301,7 @@ static void *UE_thread_synch(void *arg)
...
@@ -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 );
printf( "Unknown number of RBs %d\n", UE->lte_frame_parms.N_RB_DL );
break;
break;
}
}
#endif
printf
(
"UE synch: setting RX gain (%d,%d) to %f
\n
"
,
card
,
i
,
openair0_cfg
[
card
].
rx_gain
[
i
]
);
printf
(
"UE synch: setting RX gain (%d,%d) to %f
\n
"
,
card
,
i
,
openair0_cfg
[
card
].
rx_gain
[
i
]
);
#endif
#endif
}
}
...
@@ -358,6 +358,7 @@ static void *UE_thread_synch(void *arg)
...
@@ -358,6 +358,7 @@ static void *UE_thread_synch(void *arg)
#ifdef OAI_USRP
#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
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) {
switch(UE->lte_frame_parms.N_RB_DL) {
case 6:
case 6:
openair0_cfg[card].rx_gain[i] -= 12;
openair0_cfg[card].rx_gain[i] -= 12;
...
@@ -379,7 +380,7 @@ static void *UE_thread_synch(void *arg)
...
@@ -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);
printf("Unknown number of RBs %d\n",UE->lte_frame_parms.N_RB_DL);
break;
break;
}
}
#endif
printf
(
"UE synch: setting RX gain (%d,%d) to %f
\n
"
,
card
,
i
,
openair0_cfg
[
card
].
rx_gain
[
i
]);
printf
(
"UE synch: setting RX gain (%d,%d) to %f
\n
"
,
card
,
i
,
openair0_cfg
[
card
].
rx_gain
[
i
]);
#endif
#endif
...
@@ -423,25 +424,25 @@ static void *UE_thread_synch(void *arg)
...
@@ -423,25 +424,25 @@ static void *UE_thread_synch(void *arg)
openair0_cfg
[
0
].
sample_rate
=
1.92e6
;
openair0_cfg
[
0
].
sample_rate
=
1.92e6
;
openair0_cfg
[
0
].
rx_bw
=
.96e6
;
openair0_cfg
[
0
].
rx_bw
=
.96e6
;
openair0_cfg
[
0
].
tx_bw
=
.96e6
;
openair0_cfg
[
0
].
tx_bw
=
.96e6
;
openair0_cfg
[
0
].
rx_gain
[
0
]
-=
12
;
//
openair0_cfg[0].rx_gain[0] -= 12;
break
;
break
;
case
25
:
case
25
:
openair0_cfg
[
0
].
sample_rate
=
7.68e6
;
openair0_cfg
[
0
].
sample_rate
=
7.68e6
;
openair0_cfg
[
0
].
rx_bw
=
2.5e6
;
openair0_cfg
[
0
].
rx_bw
=
2.5e6
;
openair0_cfg
[
0
].
tx_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
;
break
;
case
50
:
case
50
:
openair0_cfg
[
0
].
sample_rate
=
15.36e6
;
openair0_cfg
[
0
].
sample_rate
=
15.36e6
;
openair0_cfg
[
0
].
rx_bw
=
5.0e6
;
openair0_cfg
[
0
].
rx_bw
=
5.0e6
;
openair0_cfg
[
0
].
tx_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
;
break
;
case
100
:
case
100
:
openair0_cfg
[
0
].
sample_rate
=
30.72e6
;
openair0_cfg
[
0
].
sample_rate
=
30.72e6
;
openair0_cfg
[
0
].
rx_bw
=
10.0e6
;
openair0_cfg
[
0
].
rx_bw
=
10.0e6
;
openair0_cfg
[
0
].
tx_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
;
break
;
}
}
#ifndef EXMIMO
#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