Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zzha zzha
OpenXG-RAN
Commits
93bf1630
Commit
93bf1630
authored
Dec 29, 2015
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commit prior to merge with develop
parent
addaeffb
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
518 additions
and
902 deletions
+518
-902
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-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/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
No files found.
cmake_targets/CMakeLists.txt
View file @
93bf1630
...
...
@@ -843,6 +843,7 @@ set(PHY_SRC
${
OPENAIR1_DIR
}
/PHY/CODING/viterbi_lte.c
${
OPENAIR1_DIR
}
/PHY/INIT/lte_init.c
${
OPENAIR1_DIR
}
/PHY/INIT/lte_parms.c
${
OPENAIR1_DIR
}
/PHY/INIT/lte_param_init.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/file_output.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lte_dfts.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/log2_approx.c
...
...
openair1/PHY/INIT/lte_parms.c
View file @
93bf1630
...
...
@@ -68,33 +68,57 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break
;
default:
msg
(
"Illegal oversampling %d
\n
"
,
osf
);
printf
(
"Illegal oversampling %d
\n
"
,
osf
);
return
(
-
1
);
}
switch
(
frame_parms
->
N_RB_DL
)
{
case
100
:
if
(
osf
>
1
)
{
msg
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
printf
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
return
(
-
1
);
}
frame_parms
->
ofdm_symbol_size
=
2048
;
frame_parms
->
log2_symbol_size
=
11
;
frame_parms
->
samples_per_tti
=
30720
;
frame_parms
->
first_carrier_offset
=
2048
-
600
;
if
(
frame_parms
->
threequarter_fs
)
{
frame_parms
->
ofdm_symbol_size
=
1536
;
frame_parms
->
samples_per_tti
=
23040
;
frame_parms
->
first_carrier_offset
=
1536
-
600
;
frame_parms
->
nb_prefix_samples
=
(
frame_parms
->
nb_prefix_samples
*
3
)
>>
2
;
frame_parms
->
nb_prefix_samples0
=
(
frame_parms
->
nb_prefix_samples0
*
3
)
>>
2
;
}
else
{
frame_parms
->
ofdm_symbol_size
=
2048
;
frame_parms
->
samples_per_tti
=
30720
;
frame_parms
->
first_carrier_offset
=
2048
-
600
;
}
frame_parms
->
N_RBGS
=
4
;
frame_parms
->
N_RBG
=
25
;
break
;
case
75
:
if
(
osf
>
1
)
{
printf
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
return
(
-
1
);
}
frame_parms
->
ofdm_symbol_size
=
1536
;
frame_parms
->
samples_per_tti
=
23040
;
frame_parms
->
first_carrier_offset
=
1536
-
450
;
frame_parms
->
nb_prefix_samples
=
(
frame_parms
->
nb_prefix_samples
*
3
)
>>
2
;
frame_parms
->
nb_prefix_samples0
=
(
frame_parms
->
nb_prefix_samples0
*
3
)
>>
2
;
frame_parms
->
N_RBGS
=
4
;
frame_parms
->
N_RBG
=
25
;
break
;
case
50
:
if
(
osf
>
1
)
{
msg
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
printf
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
return
(
-
1
);
}
frame_parms
->
ofdm_symbol_size
=
1024
*
osf
;
frame_parms
->
log2_symbol_size
=
10
+
log2_osf
;
frame_parms
->
samples_per_tti
=
15360
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
300
;
frame_parms
->
nb_prefix_samples
>>=
(
1
-
log2_osf
);
...
...
@@ -105,13 +129,13 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case
25
:
if
(
osf
>
2
)
{
msg
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
printf
(
"Illegal oversampling %d for N_RB_DL %d
\n
"
,
osf
,
frame_parms
->
N_RB_DL
);
return
(
-
1
);
}
frame_parms
->
ofdm_symbol_size
=
512
*
osf
;
frame_parms
->
log2_symbol_size
=
9
+
log2_osf
;
frame_parms
->
samples_per_tti
=
7680
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
150
;
frame_parms
->
nb_prefix_samples
>>=
(
2
-
log2_osf
);
...
...
@@ -124,7 +148,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case
15
:
frame_parms
->
ofdm_symbol_size
=
256
*
osf
;
frame_parms
->
log2_symbol_size
=
8
+
log2_osf
;
frame_parms
->
samples_per_tti
=
3840
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
90
;
frame_parms
->
nb_prefix_samples
>>=
(
3
-
log2_osf
);
...
...
@@ -135,7 +158,6 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
case
6
:
frame_parms
->
ofdm_symbol_size
=
128
*
osf
;
frame_parms
->
log2_symbol_size
=
7
+
log2_osf
;
frame_parms
->
samples_per_tti
=
1920
*
osf
;
frame_parms
->
first_carrier_offset
=
frame_parms
->
ofdm_symbol_size
-
36
;
frame_parms
->
nb_prefix_samples
>>=
(
4
-
log2_osf
);
...
...
@@ -145,7 +167,7 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
break
;
default:
msg
(
"init_frame_parms: Error: Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p
\n
"
,
frame_parms
->
N_RB_DL
,
frame_parms
);
printf
(
"init_frame_parms: Error: Number of resource blocks (N_RB_DL %d) undefined, frame_parms = %p
\n
"
,
frame_parms
->
N_RB_DL
,
frame_parms
);
return
(
-
1
);
break
;
}
...
...
@@ -159,23 +181,22 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf)
void
dump_frame_parms
(
LTE_DL_FRAME_PARMS
*
frame_parms
)
{
msg
(
"frame_parms->N_RB_DL=%d
\n
"
,
frame_parms
->
N_RB_DL
);
msg
(
"frame_parms->N_RB_UL=%d
\n
"
,
frame_parms
->
N_RB_UL
);
msg
(
"frame_parms->Nid_cell=%d
\n
"
,
frame_parms
->
Nid_cell
);
msg
(
"frame_parms->Ncp=%d
\n
"
,
frame_parms
->
Ncp
);
msg
(
"frame_parms->Ncp_UL=%d
\n
"
,
frame_parms
->
Ncp_UL
);
msg
(
"frame_parms->nushift=%d
\n
"
,
frame_parms
->
nushift
);
msg
(
"frame_parms->frame_type=%d
\n
"
,
frame_parms
->
frame_type
);
msg
(
"frame_parms->tdd_config=%d
\n
"
,
frame_parms
->
tdd_config
);
msg
(
"frame_parms->tdd_config_S=%d
\n
"
,
frame_parms
->
tdd_config_S
);
msg
(
"frame_parms->mode1_flag=%d
\n
"
,
frame_parms
->
mode1_flag
);
msg
(
"frame_parms->nb_antennas_tx=%d
\n
"
,
frame_parms
->
nb_antennas_tx
);
msg
(
"frame_parms->nb_antennas_rx=%d
\n
"
,
frame_parms
->
nb_antennas_rx
);
msg
(
"frame_parms->ofdm_symbol_size=%d
\n
"
,
frame_parms
->
ofdm_symbol_size
);
msg
(
"frame_parms->log2_symbol_size=%d
\n
"
,
frame_parms
->
log2_symbol_size
);
msg
(
"frame_parms->nb_prefix_samples=%d
\n
"
,
frame_parms
->
nb_prefix_samples
);
msg
(
"frame_parms->nb_prefix_samples0=%d
\n
"
,
frame_parms
->
nb_prefix_samples0
);
msg
(
"frame_parms->first_carrier_offset=%d
\n
"
,
frame_parms
->
first_carrier_offset
);
msg
(
"frame_parms->samples_per_tti=%d
\n
"
,
frame_parms
->
samples_per_tti
);
msg
(
"frame_parms->symbols_per_tti=%d
\n
"
,
frame_parms
->
symbols_per_tti
);
printf
(
"frame_parms->N_RB_DL=%d
\n
"
,
frame_parms
->
N_RB_DL
);
printf
(
"frame_parms->N_RB_UL=%d
\n
"
,
frame_parms
->
N_RB_UL
);
printf
(
"frame_parms->Nid_cell=%d
\n
"
,
frame_parms
->
Nid_cell
);
printf
(
"frame_parms->Ncp=%d
\n
"
,
frame_parms
->
Ncp
);
printf
(
"frame_parms->Ncp_UL=%d
\n
"
,
frame_parms
->
Ncp_UL
);
printf
(
"frame_parms->nushift=%d
\n
"
,
frame_parms
->
nushift
);
printf
(
"frame_parms->frame_type=%d
\n
"
,
frame_parms
->
frame_type
);
printf
(
"frame_parms->tdd_config=%d
\n
"
,
frame_parms
->
tdd_config
);
printf
(
"frame_parms->tdd_config_S=%d
\n
"
,
frame_parms
->
tdd_config_S
);
printf
(
"frame_parms->mode1_flag=%d
\n
"
,
frame_parms
->
mode1_flag
);
printf
(
"frame_parms->nb_antennas_tx=%d
\n
"
,
frame_parms
->
nb_antennas_tx
);
printf
(
"frame_parms->nb_antennas_rx=%d
\n
"
,
frame_parms
->
nb_antennas_rx
);
printf
(
"frame_parms->ofdm_symbol_size=%d
\n
"
,
frame_parms
->
ofdm_symbol_size
);
printf
(
"frame_parms->nb_prefix_samples=%d
\n
"
,
frame_parms
->
nb_prefix_samples
);
printf
(
"frame_parms->nb_prefix_samples0=%d
\n
"
,
frame_parms
->
nb_prefix_samples0
);
printf
(
"frame_parms->first_carrier_offset=%d
\n
"
,
frame_parms
->
first_carrier_offset
);
printf
(
"frame_parms->samples_per_tti=%d
\n
"
,
frame_parms
->
samples_per_tti
);
printf
(
"frame_parms->symbols_per_tti=%d
\n
"
,
frame_parms
->
symbols_per_tti
);
}
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
View file @
93bf1630
...
...
@@ -703,24 +703,28 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
phy_vars_ue
->
lte_frame_parms
.
log2
_symbol_size
)
{
case
7
:
switch
(
phy_vars_ue
->
lte_frame_parms
.
ofdm
_symbol_size
)
{
case
128
:
idft
=
idft128
;
break
;
case
8
:
case
256
:
idft
=
idft256
;
break
;
case
9
:
case
512
:
idft
=
idft512
;
break
;
case
10
:
case
10
24
:
idft
=
idft1024
;
break
;
case
11
:
case
1536
:
idft
=
idft1536
;
break
;
case
2048
:
idft
=
idft2048
;
break
;
...
...
openair1/PHY/LTE_ESTIMATION/lte_sync_time.c
View file @
93bf1630
...
...
@@ -61,7 +61,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
{
int
i
,
k
;
//unsigned short ds = frame_parms->log2_symbol_size - 7;
sync_corr_ue0
=
(
int
*
)
malloc16
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
sizeof
(
int
)
*
frame_parms
->
samples_per_tti
);
sync_corr_ue1
=
(
int
*
)
malloc16
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
sizeof
(
int
)
*
frame_parms
->
samples_per_tti
);
...
...
@@ -184,13 +183,6 @@ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) // LTE_UE_COMMON *com
LOG_E
(
PHY
,
"Unsupported N_RB_DL %d
\n
"
,
frame_parms
->
N_RB_DL
);
break
;
}
/*
frame_parms->twiddle_ifft, /// complex twiddle factors
frame_parms->rev, /// bit reversed permutation vector
frame_parms->log2_symbol_size,/// log2(FFT_SIZE)
(frame_parms->log2_symbol_size/2),
0); /// 0 - input is in complex Q1.15 format, 1 - input is in complex redundant Q1.15 format)
*/
for
(
i
=
0
;
i
<
frame_parms
->
ofdm_symbol_size
;
i
++
)
((
int32_t
*
)
primary_synch0_time
)[
i
]
=
sync_tmp
[
i
];
...
...
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
View file @
93bf1630
...
...
@@ -432,7 +432,7 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB,
in_fft_ptr_0
=
&
temp_in_fft_0
[
0
];
in_fft_ptr_1
=
&
temp_in_fft_1
[
0
];
for
(
j
=
0
;
j
<
(
1
<<
(
frame_parms
->
log2_symbol_size
)
)
/
12
;
j
++
)
{
for
(
j
=
0
;
j
<
(
frame_parms
->
ofdm_symbol_size
)
/
12
;
j
++
)
{
if
(
j
>
19
)
{
((
int16_t
*
)
in_fft_ptr_0
)[
-
40
+
(
2
*
j
)]
=
((
int16_t
*
)
temp_out_ifft_0
)[
-
80
+
(
2
*
j
)]
*
rx_power_correction
;
((
int16_t
*
)
in_fft_ptr_0
)[
-
40
+
(
2
*
j
)
+
1
]
=
((
int16_t
*
)
temp_out_ifft_0
)[
-
80
+
(
2
*
j
+
1
)]
*
rx_power_correction
;
...
...
openair1/PHY/LTE_REFSIG/lte_dl_cell_spec.c
View file @
93bf1630
...
...
@@ -72,7 +72,7 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
else
if
((
p
==
1
)
&&
(
l
>
0
))
nu
=
0
;
else
{
msg
(
"lte_dl_cell_spec: p %d, l %d -> ERROR
\n
"
,
p
,
l
);
printf
(
"lte_dl_cell_spec: p %d, l %d -> ERROR
\n
"
,
p
,
l
);
return
(
-
1
);
}
...
...
@@ -94,9 +94,9 @@ int lte_dl_cell_spec_SS(PHY_VARS_eNB *phy_vars_eNB,
output
[
k
]
=
qpsk
[(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
msg
(
"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d
\n
"
,
printf
(
"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d
\n
"
,
Ns
,
l
,
m
,
mprime_dword
,
mprime_qpsk_symb
);
msg
(
"index = %d (k %d)
\n
"
,(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
,
k
);
printf
(
"index = %d (k %d)
\n
"
,(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
,
k
);
#endif
mprime
++
;
...
...
@@ -151,7 +151,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
else
if
((
p
==
1
)
&&
(
l
>
0
))
nu
=
0
;
else
{
msg
(
"lte_dl_cell_spec: p %d, l %d -> ERROR
\n
"
,
p
,
l
);
printf
(
"lte_dl_cell_spec: p %d, l %d -> ERROR
\n
"
,
p
,
l
);
return
(
-
1
);
}
...
...
@@ -177,9 +177,9 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB,
output
[
k
]
=
qpsk
[(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
];
//output[k] = (lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3;
#ifdef DEBUG_DL_CELL_SPEC
msg
(
"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d
\n
"
,
printf
(
"Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d
\n
"
,
Ns
,
l
,
m
,
mprime_dword
,
mprime_qpsk_symb
);
msg
(
"index = %d (k %d)
\n
"
,(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
,
k
);
printf
(
"index = %d (k %d)
\n
"
,(
phy_vars_eNB
->
lte_gold_table
[
Ns
][
l
][
mprime_dword
]
>>
(
2
*
mprime_qpsk_symb
))
&
3
,
k
);
#endif
mprime
++
;
...
...
openair1/PHY/MODULATION/defs.h
View file @
93bf1630
...
...
@@ -34,12 +34,12 @@
*/
/**
\fn void PHY_ofdm_mod(int *input,int *output,
unsigned char log2
fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype)
\fn void PHY_ofdm_mod(int *input,int *output,
int
fftsize,unsigned char nb_symbols,unsigned short nb_prefix_samples,Extension_t etype)
This function performs OFDM modulation with cyclic extension or zero-padding.
@param input The sequence input samples in the frequency-domain. This is a concatenation of the input symbols in SIMD redundant format
@param output The time-domain output signal
@param
log2fftsize Base-2 logarithm of the
OFDM symbol size (\f$N_d\f$)
@param
fftsize size of
OFDM symbol size (\f$N_d\f$)
@param nb_symbols The number of OFDM symbols in the block
@param nb_prefix_samples The number of prefix/suffix/zero samples
@param etype Type of extension (CYCLIC_PREFIX,CYCLIC_SUFFIX,ZEROS)
...
...
@@ -47,7 +47,7 @@ This function performs OFDM modulation with cyclic extension or zero-padding.
*/
void
PHY_ofdm_mod
(
int
*
input
,
int
*
output
,
unsigned
char
log2
fftsize
,
int
fftsize
,
unsigned
char
nb_symbols
,
unsigned
short
nb_prefix_samples
,
Extension_t
etype
...
...
openair1/PHY/MODULATION/ofdm_mod.c
View file @
93bf1630
...
...
@@ -61,9 +61,9 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
txdata
+
(
i
*
(
frame_parms
->
samples_per_tti
>>
1
)));
#endif
PHY_ofdm_mod
(
txdataF
+
(
i
*
NUMBER_OF_OFDM_CARRIERS
*
frame_parms
->
symbols_per_tti
>>
1
),
// input
PHY_ofdm_mod
(
txdataF
+
(
i
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
>>
1
),
// input
txdata
+
(
i
*
frame_parms
->
samples_per_tti
>>
1
),
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
1
,
// number of symbols
frame_parms
->
nb_prefix_samples0
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -71,9 +71,9 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
printf
(
"slot i %d (txdata offset %d)
\n
"
,
i
,
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0
+
(
i
*
frame_parms
->
samples_per_tti
>>
1
));
#endif
PHY_ofdm_mod
(
txdataF
+
NUMBER_OF_OFDM_CARRIERS
+
(
i
*
NUMBER_OF_OFDM_CARRIERS
*
(
frame_parms
->
symbols_per_tti
>>
1
)),
// input
PHY_ofdm_mod
(
txdataF
+
frame_parms
->
ofdm_symbol_size
+
(
i
*
frame_parms
->
ofdm_symbol_size
*
(
frame_parms
->
symbols_per_tti
>>
1
)),
// input
txdata
+
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0
+
(
i
*
(
frame_parms
->
samples_per_tti
>>
1
)),
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
(
short_offset
==
1
)
?
1
:
(
frame_parms
->
symbols_per_tti
>>
1
)
-
1
,
//6, // number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -84,7 +84,7 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
void
PHY_ofdm_mod
(
int
*
input
,
/// pointer to complex input
int
*
output
,
/// pointer to complex output
unsigned
char
log2fftsize
,
/// log2(FFT_SIZE)
int
fftsize
,
/// FFT_SIZE
unsigned
char
nb_symbols
,
/// number of OFDM symbols
unsigned
short
nb_prefix_samples
,
/// cyclic prefix length
Extension_t
etype
/// type of extension
...
...
@@ -100,24 +100,28 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
int
*
temp_ptr
=
(
int
*
)
0
;
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
log2
fftsize
)
{
case
7
:
switch
(
fftsize
)
{
case
128
:
idft
=
idft128
;
break
;
case
8
:
case
256
:
idft
=
idft256
;
break
;
case
9
:
case
512
:
idft
=
idft512
;
break
;
case
10
:
case
10
24
:
idft
=
idft1024
;
break
;
case
11
:
case
1536
:
idft
=
idft1536
;
break
;
case
2048
:
idft
=
idft2048
;
break
;
...
...
@@ -127,8 +131,8 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
}
#ifdef DEBUG_OFDM_MOD
msg
(
"[PHY] OFDM mod (size %d,prefix %d) Symbols %d, input %p, output %p
\n
"
,
1
<<
log2
fftsize
,
nb_prefix_samples
,
nb_symbols
,
input
,
output
);
printf
(
"[PHY] OFDM mod (size %d,prefix %d) Symbols %d, input %p, output %p
\n
"
,
fftsize
,
nb_prefix_samples
,
nb_symbols
,
input
,
output
);
#endif
...
...
@@ -136,35 +140,31 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
for
(
i
=
0
;
i
<
nb_symbols
;
i
++
)
{
#ifdef DEBUG_OFDM_MOD
msg
(
"[PHY] symbol %d/%d (%p,%p -> %p)
\n
"
,
i
,
nb_symbols
,
input
,
&
input
[
i
<<
log2fftsize
],
&
output
[(
i
<<
log2
fftsize
)
+
((
i
)
*
nb_prefix_samples
)]);
printf
(
"[PHY] symbol %d/%d offset %d (%p,%p -> %p)
\n
"
,
i
,
nb_symbols
,
i
*
fftsize
+
(
i
*
nb_prefix_samples
),
input
,
&
input
[
i
*
fftsize
],
&
output
[(
i
*
fftsize
)
+
((
i
)
*
nb_prefix_samples
)]);
#endif
idft
((
int16_t
*
)
&
input
[
i
<<
log2
fftsize
],
(
log2fftsize
==
7
)
?
(
int16_t
*
)
temp
:
(
int16_t
*
)
&
output
[(
i
<<
log2
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)],
idft
((
int16_t
*
)
&
input
[
i
*
fftsize
],
(
fftsize
==
128
)
?
(
int16_t
*
)
temp
:
(
int16_t
*
)
&
output
[(
i
*
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)],
1
);
// write_output("fft_out.m","fftout",temp,(1<<log2fftsize)*2,1,1);
//memset(temp,0,1<<log2fftsize);
// Copy to frame buffer with Cyclic Extension
// Note: will have to adjust for synchronization offset!
switch
(
etype
)
{
case
CYCLIC_PREFIX
:
output_ptr
=
&
output
[(
i
<<
log2
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)];
output_ptr
=
&
output
[(
i
*
fftsize
)
+
((
1
+
i
)
*
nb_prefix_samples
)];
temp_ptr
=
(
int
*
)
temp
;
// msg("Doing cyclic prefix method\n");
if
(
log2fftsize
==
7
)
{
for
(
j
=
0
;
j
<
((
1
<<
log2fftsize
))
;
j
++
)
{
if
(
fftsize
==
128
)
{
for
(
j
=
0
;
j
<
fftsize
;
j
++
)
{
output_ptr
[
j
]
=
temp_ptr
[
j
];
}
}
j
=
(
1
<<
log2fftsize
)
;
j
=
fftsize
;
for
(
k
=-
1
;
k
>=-
nb_prefix_samples
;
k
--
)
{
output_ptr
[
k
]
=
output_ptr
[
--
j
];
...
...
@@ -175,19 +175,19 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
case
CYCLIC_SUFFIX
:
output_ptr
=
&
output
[(
i
<<
log2
fftsize
)
+
(
i
*
nb_prefix_samples
)];
output_ptr
=
&
output
[(
i
*
fftsize
)
+
(
i
*
nb_prefix_samples
)];
temp_ptr
=
(
int
*
)
temp
;
// msg("Doing cyclic suffix method\n");
for
(
j
=
0
;
j
<
(
1
<<
log2fftsize
)
;
j
++
)
{
for
(
j
=
0
;
j
<
fftsize
;
j
++
)
{
output_ptr
[
j
]
=
temp_ptr
[
2
*
j
];
}
for
(
j
=
0
;
j
<
nb_prefix_samples
;
j
++
)
output_ptr
[
(
1
<<
log2fftsize
)
+
j
]
=
output_ptr
[
j
];
output_ptr
[
fftsize
+
j
]
=
output_ptr
[
j
];
break
;
...
...
@@ -198,11 +198,11 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
case
NONE
:
// msg("NO EXTENSION!\n");
output_ptr
=
&
output
[
(
i
<<
log2fftsize
)
];
output_ptr
=
&
output
[
fftsize
];
temp_ptr
=
(
int
*
)
temp
;
for
(
j
=
0
;
j
<
(
1
<<
log2fftsize
)
;
j
++
)
{
for
(
j
=
0
;
j
<
fftsize
;
j
++
)
{
output_ptr
[
j
]
=
temp_ptr
[
2
*
j
];
...
...
@@ -219,14 +219,7 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
}
/*
printf("input %p, output %p, log2fftsize %d, nsymb %d\n",input,output,log2fftsize,nb_symbols);
for (i=0;i<16;i++)
printf("%d %d\n",((short *)input)[i<<1],((short *)input)[1+(i<<1)]);
printf("------\n");
for (i=0;i<16;i++)
printf("%d %d\n",((short *)output)[i<<1],((short *)output)[1+(i<<1)]);
*/
}
...
...
@@ -244,7 +237,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
LOG_D
(
PHY
,
"Frame %d, subframe %d: Doing MBSFN modulation (slot_offset %d)
\n
"
,
frame
,
next_slot
>>
1
,
slot_offset
);
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
12
,
// number of symbols
frame_parms
->
ofdm_symbol_size
>>
2
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -252,7 +245,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
if
(
frame_parms
->
Ncp
==
EXTENDED
)
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
2
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -268,7 +261,7 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t
if
(
frame_parms
->
Ncp
==
EXTENDED
)
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
6
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
openair1/PHY/MODULATION/slot_fep.c
View file @
93bf1630
...
...
@@ -58,24 +58,28 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
int
tmp_dft_in
[
256
];
// This is for misalignment issues for 6 and 15 PRBs
switch
(
frame_parms
->
log2
_symbol_size
)
{
case
7
:
switch
(
frame_parms
->
ofdm
_symbol_size
)
{
case
128
:
dft
=
dft128
;
break
;
case
8
:
case
256
:
dft
=
dft256
;
break
;
case
9
:
case
512
:
dft
=
dft512
;
break
;
case
10
:
case
10
24
:
dft
=
dft1024
;
break
;
case
11
:
case
1536
:
dft
=
dft1536
;
break
;
case
2048
:
dft
=
dft2048
;
break
;
...
...
@@ -96,12 +100,12 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
if
(
l
<
0
||
l
>=
7
-
frame_parms
->
Ncp
)
{
msg
(
"slot_fep: l must be between 0 and %d
\n
"
,
7
-
frame_parms
->
Ncp
);
printf
(
"slot_fep: l must be between 0 and %d
\n
"
,
7
-
frame_parms
->
Ncp
);
return
(
-
1
);
}
if
(
Ns
<
0
||
Ns
>=
20
)
{
msg
(
"slot_fep: Ns must be between 0 and 19
\n
"
);
printf
(
"slot_fep: Ns must be between 0 and 19
\n
"
);
return
(
-
1
);
}
...
...
@@ -116,7 +120,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
msg
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
printf
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
,
rx_offset
);
#endif
...
...
@@ -147,7 +151,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
#ifdef DEBUG_FEP
// if (phy_vars_ue->frame <100)
msg
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
printf
(
"slot_fep: frame %d: slot %d, symbol %d, nb_prefix_samples %d, nb_prefix_samples0 %d, slot_offset %d, subframe_offset %d, sample_offset %d,rx_offset %d
\n
"
,
phy_vars_ue
->
frame_rx
,
Ns
,
symbol
,
nb_prefix_samples
,
nb_prefix_samples0
,
slot_offset
,
subframe_offset
,
sample_offset
,
rx_offset
);
#endif
...
...
@@ -182,7 +186,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx_eNB
;
aa
++
)
{
#ifdef DEBUG_FEP
msg
(
"Channel estimation eNB %d, aatx %d, slot %d, symbol %d
\n
"
,
eNB_id
,
aa
,
Ns
,
l
);
printf
(
"Channel estimation eNB %d, aatx %d, slot %d, symbol %d
\n
"
,
eNB_id
,
aa
,
Ns
,
l
);
#endif
start_meas
(
&
phy_vars_ue
->
dlsch_channel_estimation_stats
);
lte_dl_channel_estimation
(
phy_vars_ue
,
eNB_id
,
0
,
...
...
@@ -205,7 +209,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
// do frequency offset estimation here!
// use channel estimates from current symbol (=ch_t) and last symbol (ch_{t-1})
#ifdef DEBUG_FEP
msg
(
"Frequency offset estimation
\n
"
);
printf
(
"Frequency offset estimation
\n
"
);
#endif
if
(
l
==
(
4
-
frame_parms
->
Ncp
))
{
...
...
@@ -222,7 +226,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue,
}
#ifdef DEBUG_FEP
msg
(
"slot_fep: done
\n
"
);
printf
(
"slot_fep: done
\n
"
);
#endif
return
(
0
);
}
openair1/PHY/MODULATION/slot_fep_mbsfn.c
View file @
93bf1630
...
...
@@ -54,25 +54,29 @@ int slot_fep_mbsfn(PHY_VARS_UE *phy_vars_ue,
unsigned
int
frame_length_samples
=
frame_parms
->
samples_per_tti
*
10
;
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
frame_parms
->
log2
_symbol_size
)
{
switch
(
frame_parms
->
ofdm
_symbol_size
)
{
case
7
:
case
128
:
dft
=
dft128
;
break
;
case
8
:
case
256
:
dft
=
dft256
;
break
;
case
9
:
case
512
:
dft
=
dft512
;
break
;
case
10
:
case
10
24
:
dft
=
dft1024
;
break
;
case
11
:
case
1536
:
dft
=
dft1536
;
break
;
case
2048
:
dft
=
dft2048
;
break
;
...
...
openair1/PHY/MODULATION/slot_fep_ul.c
View file @
93bf1630
...
...
@@ -50,24 +50,28 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms,
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
frame_parms
->
log2
_symbol_size
)
{
case
7
:
switch
(
frame_parms
->
ofdm
_symbol_size
)
{
case
128
:
dft
=
dft128
;
break
;
case
8
:
case
256
:
dft
=
dft256
;
break
;
case
9
:
case
512
:
dft
=
dft512
;
break
;
case
10
:
case
10
24
:
dft
=
dft1024
;
break
;
case
11
:
case
1536
:
dft
=
dft1536
;
break
;
case
2048
:
dft
=
dft2048
;
break
;
...
...
openair1/PHY/TOOLS/lte_dfts.c
View file @
93bf1630
...
...
@@ -45,8 +45,10 @@
#define debug_msg
#define ONE_OVER_SQRT2_Q15 23170
#endif
#define ONE_OVER_SQRT3_Q15 18919
#include "PHY/sse_intrin.h"
...
...
@@ -3180,6 +3182,8 @@ void idft1536(int16_t *input, int16_t *output)
int i,i2,j;
uint32_t tmp[3][512 ]__attribute__((aligned(16)));
uint32_t tmpo[3][512] __attribute__((aligned(16)));
simd_q15_t *y128p=(simd_q15_t*)output;
simd_q15_t ONE_OVER_SQRT3_Q15_128 = set1_int16(ONE_OVER_SQRT3_Q15);
for (i=0,j=0; i<512; i++) {
tmp[0][i] = ((uint32_t *)input)[j++];
...
...
@@ -3190,17 +3194,6 @@ void idft1536(int16_t *input, int16_t *output)
idft512((int16_t*)(tmp[0]),(int16_t*)(tmpo[0]),1);
idft512((int16_t*)(tmp[1]),(int16_t*)(tmpo[1]),1);
idft512((int16_t*)(tmp[2]),(int16_t*)(tmpo[2]),1);
/*
for (i=1; i<512; i++) {
tmpo[0][i] = tmpo[0][i<<1];
tmpo[1][i] = tmpo[1][i<<1];
tmpo[2][i] = tmpo[2][i<<1];
}*/
// write_output("in.m","in",input,6144,1,1);
// write_output("out0.m","o0",tmpo[0],2048,1,1);
// write_output("out1.m","o1",tmpo[1],2048,1,1);
// write_output("out2.m","o2",tmpo[2],2048,1,1);
for (i=0,i2=0; i<1024; i+=8,i2+=4) {
ibfly3((simd_q15_t*)(&tmpo[0][i2]),(simd_q15_t*)(&tmpo[1][i2]),((simd_q15_t*)&tmpo[2][i2]),
...
...
@@ -3209,6 +3202,26 @@ void idft1536(int16_t *input, int16_t *output)
}
for (i=0; i<24; i++) {
y128p[0] = mulhi_int16(y128p[0],ONE_OVER_SQRT3_Q15_128);
y128p[1] = mulhi_int16(y128p[1],ONE_OVER_SQRT3_Q15_128);
y128p[2] = mulhi_int16(y128p[2],ONE_OVER_SQRT3_Q15_128);
y128p[3] = mulhi_int16(y128p[3],ONE_OVER_SQRT3_Q15_128);
y128p[4] = mulhi_int16(y128p[4],ONE_OVER_SQRT3_Q15_128);
y128p[5] = mulhi_int16(y128p[5],ONE_OVER_SQRT3_Q15_128);
y128p[6] = mulhi_int16(y128p[6],ONE_OVER_SQRT3_Q15_128);
y128p[7] = mulhi_int16(y128p[7],ONE_OVER_SQRT3_Q15_128);
y128p[8] = mulhi_int16(y128p[8],ONE_OVER_SQRT3_Q15_128);
y128p[9] = mulhi_int16(y128p[9],ONE_OVER_SQRT3_Q15_128);
y128p[10] = mulhi_int16(y128p[10],ONE_OVER_SQRT3_Q15_128);
y128p[11] = mulhi_int16(y128p[11],ONE_OVER_SQRT3_Q15_128);
y128p[12] = mulhi_int16(y128p[12],ONE_OVER_SQRT3_Q15_128);
y128p[13] = mulhi_int16(y128p[13],ONE_OVER_SQRT3_Q15_128);
y128p[14] = mulhi_int16(y128p[14],ONE_OVER_SQRT3_Q15_128);
y128p[15] = mulhi_int16(y128p[15],ONE_OVER_SQRT3_Q15_128);
y128p+=16;
}
_mm_empty();
_m_empty();
openair1/PHY/impl_defs_lte.h
View file @
93bf1630
...
...
@@ -516,10 +516,10 @@ typedef struct {
uint8_t
dual_tx
;
/// flag to indicate SISO transmission
uint8_t
mode1_flag
;
/// Indicator that 20 MHz channel uses 3/4 sampling frequency
uint8_t
threequarter_fs
;
/// Size of FFT
uint16_t
ofdm_symbol_size
;
/// log2(Size of FFT)
uint8_t
log2_symbol_size
;
/// Number of prefix samples in all but first symbol of slot
uint16_t
nb_prefix_samples
;
/// Number of prefix samples in first symbol of slot
...
...
openair1/PHY/impl_defs_top.h
View file @
93bf1630
...
...
@@ -117,7 +117,6 @@
*/
#define NUMBER_OF_OFDM_CARRIERS (frame_parms->ofdm_symbol_size)
#define NUMBER_OF_SYMBOLS_PER_FRAME (frame_parms->symbols_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME)
#define LOG2_NUMBER_OF_OFDM_CARRIERS (frame_parms->log2_symbol_size)
#define NUMBER_OF_USEFUL_CARRIERS (12*frame_parms->N_RB_DL)
#define NUMBER_OF_ZERO_CARRIERS (NUMBER_OF_OFDM_CARRIERS-NUMBER_OF_USEFUL_CARRIERS)
#define NUMBER_OF_USEFUL_CARRIERS_BYTES (NUMBER_OF_USEFUL_CARRIERS>>2)
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
93bf1630
...
...
@@ -1262,7 +1262,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra
#else
&
phy_vars_ue
->
lte_ue_common_vars
.
txdata
[
aa
][
ulsch_start
],
#endif
frame_parms
->
log2
_symbol_size
,
frame_parms
->
ofdm
_symbol_size
,
nsymb
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/dlsim.c
View file @
93bf1630
...
...
@@ -107,88 +107,6 @@ void handler(int sig)
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];
...
...
@@ -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
)
PHY_ofdm_mod
(
&
txdataF
[
aa
][
slot_offset_F
],
// input
&
txdata
[
aa
][
slot_offset
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
6
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -318,7 +236,7 @@ int main(int argc, char **argv)
double
blerr
[
4
],
uncoded_ber
,
avg_ber
;
short
*
uncoded_ber_bit
=
NULL
;
uint8_t
N_RB_DL
=
25
,
osf
=
1
;
uint8_t
fdd_flag
=
0
;
frame_t
frame_type
=
FDD
;
#ifdef XFORMS
FD_lte_phy_scope_ue
*
form_ue
;
char
title
[
255
];
...
...
@@ -350,6 +268,8 @@ int main(int argc, char **argv)
FILE
*
proc_fd
=
NULL
;
char
buf
[
64
];
int
threequarter_fs
=
0
;
opp_enabled
=
1
;
// to enable the time meas
#if defined(__arm__)
...
...
@@ -378,13 +298,17 @@ int main(int argc, char **argv)
num_layers
=
1
;
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
)
{
case
'a'
:
awgn_flag
=
1
;
channel_model
=
AWGN
;
break
;
case
'A'
:
abstx
=
1
;
break
;
case
'b'
:
tdd_config
=
atoi
(
optarg
);
break
;
...
...
@@ -393,10 +317,59 @@ int main(int argc, char **argv)
N_RB_DL
=
atoi
(
optarg
);
break
;
case
'c'
:
num_pdcch_symbols
=
atoi
(
optarg
);
break
;
case
'C'
:
Nid_cell
=
atoi
(
optarg
);
break
;
case
'd'
:
dci_flag
=
1
;
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'
:
mcs1
=
atoi
(
optarg
);
break
;
...
...
@@ -405,6 +378,11 @@ int main(int argc, char **argv)
mcs2
=
atoi
(
optarg
);
break
;
case
'O'
:
test_perf
=
atoi
(
optarg
);
//print_perf =1;
break
;
case
't'
:
mcs_i
=
atoi
(
optarg
);
i_mod
=
get_Qm
(
mcs_i
);
...
...
@@ -414,27 +392,16 @@ int main(int argc, char **argv)
n_frames
=
atoi
(
optarg
);
break
;
case
'C'
:
Nid_cell
=
atoi
(
optarg
);
break
;
case
'o'
:
rx_sample_offset
=
atoi
(
optarg
);
break
;
case
'D'
:
fdd_flag
=
1
;
break
;
case
'r'
:
DLSCH_RB_ALLOC
=
atoi
(
optarg
);
rballocset
=
1
;
break
;
case
'F'
:
forgetting_factor
=
atof
(
optarg
);
break
;
case
's'
:
snr0
=
atof
(
optarg
);
break
;
...
...
@@ -443,13 +410,6 @@ int main(int argc, char **argv)
snr_int
=
atof
(
optarg
);
break
;
case
'f'
:
input_snr_step
=
atof
(
optarg
);
break
;
case
'A'
:
abstx
=
1
;
break
;
case
'N'
:
n_ch_rlz
=
atof
(
optarg
);
...
...
@@ -459,10 +419,6 @@ int main(int argc, char **argv)
extended_prefix_flag
=
1
;
break
;
case
'c'
:
num_pdcch_symbols
=
atoi
(
optarg
);
break
;
case
'g'
:
memcpy
(
channel_model_input
,
optarg
,
10
);
...
...
@@ -530,62 +486,6 @@ int main(int argc, char **argv)
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'
:
num_rounds
=
atoi
(
optarg
);
break
;
...
...
@@ -623,26 +523,54 @@ int main(int argc, char **argv)
print_perf
=
1
;
break
;
case
'L'
:
llr8_flag
=
1
;
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
'l'
:
offset_mumimo_llr_drange_fix
=
atoi
(
optarg
);
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
'O'
:
test_perf
=
atoi
(
optarg
);
//print_perf =1;
case
'Y'
:
perfect_ce
=
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
'Z'
:
dump_table
=
1
;
break
;
case
'Y'
:
perfect_ce
=
1
;
break
;
case
'h'
:
default:
...
...
@@ -723,8 +651,10 @@ int main(int argc, char **argv)
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
;
printf
(
"Setting mcs1 = %d
\n
"
,
mcs1
);
...
...
@@ -2553,7 +2483,7 @@ PMI_FEEDBACK:
}
}
}
/*
num_pdcch_symbols_2 = generate_dci_top(num_ue_spec_dci,
num_common_dci,
dci_alloc,
...
...
@@ -2562,7 +2492,7 @@ PMI_FEEDBACK:
&PHY_vars_eNB->lte_frame_parms,
PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id],
subframe);
*/
if
(
num_pdcch_symbols_2
>
num_pdcch_symbols
)
{
msg
(
"Error: given num_pdcch_symbols not big enough (%d > %d)
\n
"
,
num_pdcch_symbols_2
,
num_pdcch_symbols
);
exit
(
-
1
);
...
...
@@ -2667,6 +2597,7 @@ PMI_FEEDBACK:
}
start_meas
(
&
PHY_vars_eNB
->
dlsch_modulation_stats
);
re_allocated
=
dlsch_modulation
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNB_id
],
AMP
,
subframe
,
...
...
@@ -2674,6 +2605,7 @@ PMI_FEEDBACK:
num_pdcch_symbols
,
PHY_vars_eNB
->
dlsch_eNB
[
k
][
0
],
PHY_vars_eNB
->
dlsch_eNB
[
k
][
1
]);
stop_meas
(
&
PHY_vars_eNB
->
dlsch_modulation_stats
);
/*
if (trials==0 && round==0)
...
...
openair1/SIMULATION/LTE_PHY/mbmssim.c
View file @
93bf1630
...
...
@@ -457,7 +457,7 @@ int main(int argc, char **argv)
PHY_ofdm_mod
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
],
// input,
txdata
[
0
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/pbchsim.c
View file @
93bf1630
...
...
@@ -53,87 +53,11 @@
#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
;
#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
dummy0
[
2048
*
14
];
mod_sym_t
dummy1
[
2048
*
14
];
...
...
@@ -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
);
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
fl_initialize
(
&
argc
,
argv
,
NULL
,
0
,
0
);
form_ue
=
create_lte_phy_scope_ue
();
...
...
@@ -436,13 +382,13 @@ int main(int argc, char **argv)
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
];
txdata1
=
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata2
=
PHY_vars_eN
b
2
->
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
];
txdata2
=
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdata
[
0
];
s_re
=
malloc
(
2
*
sizeof
(
double
*
));
...
...
@@ -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
,
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
"
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
][
0
]);
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
]);
DLSCH_alloc_pdu2
.
rah
=
0
;
...
...
@@ -479,31 +425,31 @@ int main(int argc, char **argv)
// Forget second codeword
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
,
channel_model
,
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_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
),
0
,
0
,
0
);
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
,
channel_model
,
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_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
),
0
,
4
,
0
);
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
,
channel_model
,
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_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
),
0
,
8
,
0
);
...
...
@@ -567,47 +513,47 @@ int main(int argc, char **argv)
pbch_pdu
[
1
]
=
1
;
pbch_pdu
[
2
]
=
0
;
if
(
PHY_vars_eN
b
->
lte_frame_parms
.
frame_type
==
0
)
{
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
if
(
PHY_vars_eN
B
->
lte_frame_parms
.
frame_type
==
0
)
{
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
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
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
5
:
4
,
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
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
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
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
5
:
4
,
10
);
}
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
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
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
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
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
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
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
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
2
,
12
);
...
...
@@ -626,11 +572,11 @@ int main(int argc, char **argv)
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
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pilots
(
PHY_vars_eN
B
,
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
);
...
...
@@ -641,8 +587,8 @@ int main(int argc, char **argv)
dci_alloc,
0,
1024,
&PHY_vars_eN
b
->lte_frame_parms,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
&PHY_vars_eN
B
->lte_frame_parms,
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
0);
*/
...
...
@@ -657,47 +603,47 @@ int main(int argc, char **argv)
dummybuf
[
1
]
=
dummy1
;
dummybuf
[
2
]
=
dummy2
;
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
,
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
pbch_pdu
,
0
);
}
generate_pbch
(
&
PHY_vars_eN
b
->
lte_eNB_pbch
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pbch
(
&
PHY_vars_eN
B
->
lte_eNB_pbch
,
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
pbch_pdu
,
pbch_phase
);
/*
generate_pbch(&PHY_vars_eN
b
->lte_eNB_pbch,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
generate_pbch(&PHY_vars_eN
B
->lte_eNB_pbch,
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
AMP,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
pbch_pdu,
1);
*/
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,
&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,
(PHY_vars_eN
B
1->lte_frame_parms.Ncp==0)?6:5,
0);
*/
generate_pilots
(
PHY_vars_eN
b
1
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pilots
(
PHY_vars_eN
B
1
,
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
);
generate_pbch
(
&
PHY_vars_eN
b
1
->
lte_eNB_pbch
,
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pbch
(
&
PHY_vars_eN
B
1
->
lte_eNB_pbch
,
PHY_vars_eN
B
1
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
&
PHY_vars_eN
b
1
->
lte_frame_parms
,
&
PHY_vars_eN
B
1
->
lte_frame_parms
,
pbch_pdu
,
0
);
...
...
@@ -705,26 +651,26 @@ int main(int argc, char **argv)
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,
&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,
(PHY_vars_eN
B
2->lte_frame_parms.Ncp==0)?6:5,
0);
*/
generate_pilots
(
PHY_vars_eN
b
2
,
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pilots
(
PHY_vars_eN
B
2
,
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
);
generate_pbch
(
&
PHY_vars_eN
b
2
->
lte_eNB_pbch
,
PHY_vars_eN
b
2
->
lte_eNB_common_vars
.
txdataF
[
0
],
generate_pbch
(
&
PHY_vars_eN
B
2
->
lte_eNB_pbch
,
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
&
PHY_vars_eN
b
2
->
lte_frame_parms
,
&
PHY_vars_eN
B
2
->
lte_frame_parms
,
pbch_pdu
,
0
);
...
...
@@ -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
(
"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
)
write_output
(
"txsigF1.m"
,
"txsF1"
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
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
);
tx_lev
=
0
;
tx_lev1
=
0
;
...
...
@@ -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
)
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
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
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
],
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
frame_parms
);
...
...
@@ -765,17 +711,17 @@ int main(int argc, char **argv)
}
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
)
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
frame_parms
->
log2_symbol_size
,
// log2_fft_size
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
frame_parms
->
ofdm_symbol_size
,
2
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
else
{
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
],
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
],
2
*
nsymb
,
frame_parms
);
}
...
...
@@ -784,24 +730,24 @@ int main(int argc, char **argv)
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
)
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
(
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
);
}
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
)
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
frame_parms
->
log2_symbol_size
,
// log2_fft_size
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
frame_parms
->
ofdm_symbol_size
,
2
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
else
{
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
],
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
],
2
*
nsymb
,
frame_parms
);
}
...
...
@@ -810,10 +756,10 @@ int main(int argc, char **argv)
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
)
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
);
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
);
}
// tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
...
...
@@ -823,15 +769,15 @@ int main(int argc, char **argv)
if
(
frame_parms
->
nb_antennas_tx
>
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
)
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
)
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
i
=
0
;
...
...
@@ -864,7 +810,7 @@ int main(int argc, char **argv)
// multipath channel
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_im
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)
+
1
]);
...
...
@@ -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
)
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)
for
(
n_trials
=
0
;
n_trials
<
ntrials
;
n_trials
++
)
{
//printf("n_trial %d\n",n_trials);
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
)
{
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
]);
...
...
@@ -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);
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
);
...
...
@@ -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(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);
...
...
@@ -1038,7 +984,7 @@ int main(int argc, char **argv)
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
++
)
{
pbch_tx_ant
=
rx_pbch
(
&
PHY_vars_UE
->
lte_ue_common_vars
,
...
...
@@ -1059,7 +1005,7 @@ int main(int argc, char **argv)
pbch_tx_ant
=
rx_pbch
(
&
PHY_vars_UE
->
lte_ue_common_vars
,
PHY_vars_UE
->
lte_ue_pbch_vars
[
0
],
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
0
,
ALAMOUTI
,
PHY_vars_UE
->
high_speed_flag
,
...
...
@@ -1119,10 +1065,10 @@ int main(int argc, char **argv)
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
)
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
(
"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 @
93bf1630
...
...
@@ -58,98 +58,6 @@ PHY_VARS_UE *PHY_vars_UE;
#define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2)
#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
unsigned
char
extended_prefix_flag
,
uint16_t
Nid_cell
,
uint8_t
tdd_config
,
uint8_t
N_RB_DL
,
lte_frame_type_t
frame_type
,
uint8_t
osf
,
uint32_t
perfect_ce
)
{
unsigned
int
i
;
LTE_DL_FRAME_PARMS
*
lte_frame_parms
;
printf
(
"Start lte_param_init (Nid_cell %d, extended_prefix %d, transmission_mode %d, N_tx %d, N_rx %d)
\n
"
,
Nid_cell
,
extended_prefix_flag
,
transmission_mode
,
N_tx
,
N_rx
);
PHY_vars_eNB
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_eNB1
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_eNB2
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_UE
=
malloc
(
sizeof
(
PHY_VARS_UE
));
//PHY_config = malloc(sizeof(PHY_CONFIG));
mac_xface
=
malloc
(
sizeof
(
MAC_xface
));
randominit
(
0
);
set_taus_seed
(
0
);
lte_frame_parms
=
&
(
PHY_vars_eNB
->
lte_frame_parms
);
lte_frame_parms
->
N_RB_DL
=
N_RB_DL
;
//50 for 10MHz and 25 for 5 MHz
lte_frame_parms
->
N_RB_UL
=
N_RB_DL
;
lte_frame_parms
->
Ncp
=
extended_prefix_flag
;
lte_frame_parms
->
Nid_cell
=
Nid_cell
;
lte_frame_parms
->
nushift
=
Nid_cell
%
6
;
lte_frame_parms
->
nb_antennas_tx_eNB
=
N_tx
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
lte_frame_parms
->
phich_config_common
.
phich_resource
=
one
;
//half
lte_frame_parms
->
tdd_config
=
tdd_config
;
lte_frame_parms
->
frame_type
=
frame_type
;
// lte_frame_parms->Csrs = 2;
// lte_frame_parms->Bsrs = 0;
// lte_frame_parms->kTC = 0;
// lte_frame_parms->n_RRC = 0;
lte_frame_parms
->
mode1_flag
=
(
transmission_mode
==
1
)
?
1
:
0
;
init_frame_parms
(
lte_frame_parms
,
osf
);
//copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
memcpy
(
&
PHY_vars_UE
->
lte_frame_parms
,
lte_frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
phy_init_lte_top
(
lte_frame_parms
);
phy_init_lte_ue
(
PHY_vars_UE
,
1
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
0
,
0
);
memcpy
((
void
*
)
&
PHY_vars_eNB1
->
lte_frame_parms
,(
void
*
)
&
PHY_vars_eNB
->
lte_frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
PHY_vars_eNB1
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
1
)
%
6
;
PHY_vars_eNB1
->
lte_frame_parms
.
Nid_cell
=
Nid_cell
+
1
;
memcpy
((
void
*
)
&
PHY_vars_eNB2
->
lte_frame_parms
,(
void
*
)
&
PHY_vars_eNB
->
lte_frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
PHY_vars_eNB2
->
lte_frame_parms
.
nushift
=
(
Nid_cell
+
2
)
%
6
;
PHY_vars_eNB2
->
lte_frame_parms
.
Nid_cell
=
Nid_cell
+
2
;
phy_init_lte_eNB
(
PHY_vars_eNB1
,
0
,
0
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB2
,
0
,
0
,
0
);
phy_init_lte_top
(
lte_frame_parms
);
PHY_vars_UE
->
PHY_measurements
.
n_adj_cells
=
2
;
PHY_vars_UE
->
PHY_measurements
.
adj_cell_id
[
0
]
=
Nid_cell
+
1
;
PHY_vars_UE
->
PHY_measurements
.
adj_cell_id
[
1
]
=
Nid_cell
+
2
;
PHY_vars_UE
->
perfect_ce
=
perfect_ce
;
for
(
i
=
0
;
i
<
3
;
i
++
)
lte_gold
(
lte_frame_parms
,
PHY_vars_UE
->
lte_gold_table
[
i
],
Nid_cell
+
i
);
generate_pcfich_reg_mapping
(
&
PHY_vars_UE
->
lte_frame_parms
);
generate_phich_reg_mapping
(
&
PHY_vars_UE
->
lte_frame_parms
);
printf
(
"Done lte_param_init
\n
"
);
CCCH_alloc_pdu
.
type
=
1
;
CCCH_alloc_pdu
.
vrb_type
=
0
;
CCCH_alloc_pdu
.
rballoc
=
CCCH_RB_ALLOC
;
CCCH_alloc_pdu
.
ndi
=
1
;
CCCH_alloc_pdu
.
mcs
=
1
;
CCCH_alloc_pdu
.
harq_pid
=
0
;
}
DCI_PDU
DCI_pdu
;
DCI_PDU
*
get_dci
(
LTE_DL_FRAME_PARMS
*
lte_frame_parms
,
uint8_t
log2L
,
uint8_t
log2Lcommon
,
uint8_t
format_selector
,
uint32_t
rnti
)
...
...
@@ -798,9 +706,10 @@ int main(int argc, char **argv)
n_rx
,
transmission_mode
,
extended_prefix_flag
,
frame_type
,
Nid_cell
,
tdd_config
,
N_RB_DL
,
frame_type
,
N_RB_DL
,
osf
,
perfect_ce
);
...
...
@@ -1084,7 +993,7 @@ int main(int argc, char **argv)
if
(
PHY_vars_eNB
->
lte_frame_parms
.
Ncp
==
1
)
PHY_ofdm_mod
(
&
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
][
subframe
*
nsymb
*
PHY_vars_eNB
->
lte_frame_parms
.
ofdm_symbol_size
],
// input,
&
txdata
[
aa
][
subframe
*
PHY_vars_eNB
->
lte_frame_parms
.
samples_per_tti
],
// output
PHY_vars_eNB
->
lte_frame_parms
.
log2_symbol_size
,
// log2_fft_size
PHY_vars_eNB
->
lte_frame_parms
.
ofdm_symbol_size
,
2
*
nsymb
,
// number of symbols
PHY_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/prachsim.c
View file @
93bf1630
...
...
@@ -56,58 +56,6 @@ PHY_VARS_UE *PHY_vars_UE;
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
unsigned
char
extended_prefix_flag
,
uint16_t
Nid_cell
,
uint8_t
N_RB_DL
,
uint8_t
osf
)
{
LTE_DL_FRAME_PARMS
*
lte_frame_parms
;
printf
(
"Start lte_param_init
\n
"
);
PHY_vars_eNB
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_UE
=
malloc
(
sizeof
(
PHY_VARS_UE
));
//PHY_config = malloc(sizeof(PHY_CONFIG));
mac_xface
=
malloc
(
sizeof
(
MAC_xface
));
randominit
(
0
);
set_taus_seed
(
0
);
lte_frame_parms
=
&
(
PHY_vars_eNB
->
lte_frame_parms
);
lte_frame_parms
->
N_RB_DL
=
N_RB_DL
;
//50 for 10MHz and 25 for 5 MHz
lte_frame_parms
->
N_RB_UL
=
N_RB_DL
;
lte_frame_parms
->
Ncp
=
extended_prefix_flag
;
lte_frame_parms
->
Nid_cell
=
Nid_cell
;
lte_frame_parms
->
nushift
=
0
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
// lte_frame_parms->Csrs = 2;
// lte_frame_parms->Bsrs = 0;
// lte_frame_parms->kTC = 0;
// lte_frame_parms->n_RRC = 0;
lte_frame_parms
->
mode1_flag
=
(
transmission_mode
==
1
)
?
1
:
0
;
lte_frame_parms
->
tdd_config
=
1
;
lte_frame_parms
->
frame_type
=
1
;
init_frame_parms
(
lte_frame_parms
,
osf
);
//copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
PHY_vars_UE
->
lte_frame_parms
=
*
lte_frame_parms
;
phy_init_lte_top
(
lte_frame_parms
);
phy_init_lte_ue
(
PHY_vars_UE
,
1
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
0
,
0
);
printf
(
"Done lte_param_init
\n
"
);
}
extern
uint16_t
prach_root_sequence_map0_3
[
838
];
int
main
(
int
argc
,
char
**
argv
)
...
...
@@ -370,7 +318,16 @@ int main(int argc, char **argv)
if
(
transmission_mode
==
2
)
n_tx
=
2
;
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
Nid_cell
,
N_RB_DL
,
osf
);
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
FDD
,
Nid_cell
,
3
,
N_RB_DL
,
osf
,
0
);
if
(
snr1set
==
0
)
{
...
...
openair1/SIMULATION/LTE_PHY/pucchsim.c
View file @
93bf1630
...
...
@@ -58,60 +58,6 @@ PHY_VARS_UE *PHY_vars_UE;
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
unsigned
char
extended_prefix_flag
,
uint16_t
Nid_cell
,
uint8_t
N_RB_DL
,
uint8_t
osf
)
{
LTE_DL_FRAME_PARMS
*
lte_frame_parms
;
printf
(
"Start lte_param_init
\n
"
);
PHY_vars_eNB
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_UE
=
malloc
(
sizeof
(
PHY_VARS_UE
));
//PHY_config = malloc(sizeof(PHY_CONFIG));
mac_xface
=
malloc
(
sizeof
(
MAC_xface
));
randominit
(
0
);
set_taus_seed
(
0
);
lte_frame_parms
=
&
(
PHY_vars_eNB
->
lte_frame_parms
);
lte_frame_parms
->
N_RB_DL
=
N_RB_DL
;
//50 for 10MHz and 25 for 5 MHz
lte_frame_parms
->
N_RB_UL
=
N_RB_DL
;
lte_frame_parms
->
Ncp
=
extended_prefix_flag
;
lte_frame_parms
->
Nid_cell
=
Nid_cell
;
lte_frame_parms
->
nushift
=
0
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
// lte_frame_parms->Csrs = 2;
// lte_frame_parms->Bsrs = 0;
// lte_frame_parms->kTC = 0;
// lte_frame_parms->n_RRC = 0;
lte_frame_parms
->
mode1_flag
=
(
transmission_mode
==
1
)
?
1
:
0
;
lte_frame_parms
->
tdd_config
=
3
;
lte_frame_parms
->
frame_type
=
0
;
init_frame_parms
(
lte_frame_parms
,
osf
);
//copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
// phy_init_top(lte_frame_parms); //allocation
PHY_vars_UE
->
lte_frame_parms
=
*
lte_frame_parms
;
phy_init_lte_ue
(
PHY_vars_UE
,
1
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
0
,
0
);
phy_init_lte_top
(
lte_frame_parms
);
printf
(
"Done lte_param_init
\n
"
);
}
int
main
(
int
argc
,
char
**
argv
)
{
...
...
@@ -368,7 +314,16 @@ int main(int argc, char **argv)
if
(
transmission_mode
==
2
)
n_tx
=
2
;
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
Nid_cell
,
N_RB_DL
,
osf
);
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
Nid_cell
,
FDD
,
3
,
N_RB_DL
,
osf
,
0
);
if
(
snr1set
==
0
)
{
...
...
@@ -473,7 +428,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
txdataF2
[
aa
],
// input
txdata
[
aa
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
2
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
@@ -496,7 +451,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
&
PHY_vars_UE
->
lte_ue_common_vars
.
txdataF
[
aa
][
2
*
subframe
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX
],
// input,
&
txdata
[
aa
][
PHY_vars_eNB
->
lte_frame_parms
.
samples_per_tti
*
subframe
],
// output
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
openair1/SIMULATION/LTE_PHY/scansim.c
View file @
93bf1630
...
...
@@ -56,94 +56,11 @@
#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
;
#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
dummy0
[
2048
*
14
];
mod_sym_t
dummy1
[
2048
*
14
];
...
...
@@ -404,7 +321,16 @@ int main(int argc, char **argv)
if
(
transmission_mode
>=
2
)
n_tx
=
2
;
lte_param_init
(
n_tx
,
n_rx
,
transmission_mode
,
extended_prefix_flag
,
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
fl_initialize
(
&
argc
,
argv
,
NULL
,
0
,
0
);
...
...
@@ -422,13 +348,13 @@ int main(int argc, char **argv)
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
];
txdata1
=
PHY_vars_eN
b
1
->
lte_eNB_common_vars
.
txdata
[
0
];
txdata2
=
PHY_vars_eN
b
2
->
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
];
txdata2
=
PHY_vars_eN
B
2
->
lte_eNB_common_vars
.
txdata
[
0
];
s_re
=
malloc
(
2
*
sizeof
(
double
*
));
...
...
@@ -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
,
frame_parms
->
Ncp
,
frame_parms
->
samples_per_tti
,
nsymb
);
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
]);
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
]);
DLSCH_alloc_pdu2
.
rah
=
0
;
...
...
@@ -465,13 +391,14 @@ int main(int argc, char **argv)
// Forget second codeword
DLSCH_alloc_pdu2
.
tpmi
=
(
transmission_mode
==
6
?
5
:
0
)
;
// precoding
eNB2UE
=
new_channel_desc_scm
(
PHY_vars_eNb
->
lte_frame_parms
.
nb_antennas_tx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
channel_model
,
BW
,
0
,
0
,
0
);
eNB2UE
=
new_channel_desc_scm
(
PHY_vars_eNB
->
lte_frame_parms
.
nb_antennas_tx
,
PHY_vars_UE
->
lte_frame_parms
.
nb_antennas_rx
,
channel_model
,
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
);
if
(
eNB2UE
==
NULL
)
{
...
...
@@ -512,51 +439,51 @@ int main(int argc, char **argv)
pbch_pdu
[
1
]
=
1
;
pbch_pdu
[
2
]
=
0
;
if
(
PHY_vars_eN
b
->
lte_frame_parms
.
frame_type
==
FDD
)
{
generate_pss
(
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
],
if
(
PHY_vars_eN
B
->
lte_frame_parms
.
frame_type
==
FDD
)
{
generate_pss
(
PHY_vars_eN
B
->
lte_eNB_common_vars
.
txdataF
[
0
],
AMP
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
NORMAL
)
?
6
:
5
,
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,
&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,
(PHY_vars_eN
B
->lte_frame_parms.Ncp==0) ? 5 : 4,
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
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
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,
&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,
(PHY_vars_eN
B
->lte_frame_parms.Ncp==0) ? 5 : 4,
10);
*/
}
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
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
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
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
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
,
&
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
,
(
PHY_vars_eN
B
->
lte_frame_parms
.
Ncp
==
0
)
?
6
:
5
,
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
,
&
PHY_vars_eN
b
->
lte_frame_parms
,
&
PHY_vars_eN
B
->
lte_frame_parms
,
2
,
12
);
...
...
@@ -565,8 +492,8 @@ int main(int argc, char **argv)
/*
generate_pilots(PHY_vars_eN
b
,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
generate_pilots(PHY_vars_eN
B
,
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
AMP,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME);
...
...
@@ -577,8 +504,8 @@ int main(int argc, char **argv)
dci_alloc,
0,
1024,
&PHY_vars_eN
b
->lte_frame_parms,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
&PHY_vars_eN
B
->lte_frame_parms,
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
0);
*/
...
...
@@ -593,25 +520,25 @@ int main(int argc, char **argv)
dummybuf[1] = dummy1;
dummybuf[2] = dummy2;
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,
AMP,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
pbch_pdu,
0);
}
generate_pbch(&PHY_vars_eN
b
->lte_eNB_pbch,
PHY_vars_eN
b
->lte_eNB_common_vars.txdataF[0],
generate_pbch(&PHY_vars_eN
B
->lte_eNB_pbch,
PHY_vars_eN
B
->lte_eNB_common_vars.txdataF[0],
AMP,
&PHY_vars_eN
b
->lte_frame_parms,
&PHY_vars_eN
B
->lte_frame_parms,
pbch_pdu,
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
)
write_output
(
"txsigF1.m"
,
"txsF1"
,
PHY_vars_eN
b
->
lte_eNB_common_vars
.
txdataF
[
0
][
1
],
FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX
,
1
,
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
);
tx_lev
=
0
;
tx_lev1
=
0
;
...
...
@@ -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
)
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
frame_parms
->
log2_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm_symbol_size
,
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
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
],
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
frame_parms
);
...
...
@@ -648,7 +575,7 @@ int main(int argc, char **argv)
// multipath channel
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_im
[
aa
][
i
]
=
((
double
)(((
short
*
)
txdata
[
aa
]))[(
i
<<
1
)
+
1
]);
}
...
...
@@ -667,7 +594,7 @@ int main(int argc, char **argv)
multipath_channel
(
eNB2UE
,
s_re
,
s_im
,
r_re
,
r_im
,
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
)
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)
for
(
n_trials
=
0
;
n_trials
<
ntrials
;
n_trials
++
)
{
//printf("n_trial %d\n",n_trials);
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
+
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 @
93bf1630
...
...
@@ -1189,7 +1189,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
txdataF2
[
aa
],
// input
txdata
[
aa
],
// output
PHY_vars_eNB
->
lte_frame_parms
.
log2
_symbol_size
,
// log2_fft_size
PHY_vars_eNB
->
lte_frame_parms
.
ofdm
_symbol_size
,
// log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
PHY_vars_eNB
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
PHY_vars_eNB
->
lte_frame_parms
.
twiddle_ifft
,
// IFFT twiddle factors
...
...
@@ -1218,7 +1218,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eNB
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
txdata
[
aa
],
// output
frame_parms
->
log2
_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm
_symbol_size
,
// log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
...
...
@@ -1240,7 +1240,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eNB1
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
PHY_vars_eNB1
->
lte_eNB_common_vars
.
txdata
[
eNb_id
][
aa
],
// output
frame_parms
->
log2
_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm
_symbol_size
,
// log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
...
...
@@ -1260,7 +1260,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
PHY_vars_eNB2
->
lte_eNB_common_vars
.
txdataF
[
eNb_id
][
aa
],
// input,
PHY_vars_eNB2
->
lte_eNB_common_vars
.
txdata
[
eNb_id
][
aa
],
// output
frame_parms
->
log2
_symbol_size
,
// log2_fft_size
frame_parms
->
ofdm
_symbol_size
,
// log2_fft_size
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
nsymb
,
// number of symbols
frame_parms
->
nb_prefix_samples
,
// number of prefix samples
frame_parms
->
twiddle_ifft
,
// IFFT twiddle factors
...
...
openair1/SIMULATION/LTE_PHY/ulsim.c
View file @
93bf1630
...
...
@@ -89,60 +89,6 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for tx */
int
n_tx_dropped
=
0
;
/*!< \brief initial max process time for tx */
int
n_rx_dropped
=
0
;
/*!< \brief initial max process time for rx */
void
lte_param_init
(
unsigned
char
N_tx
,
unsigned
char
N_rx
,
unsigned
char
transmission_mode
,
uint8_t
extended_prefix_flag
,
uint8_t
N_RB_DL
,
uint8_t
frame_type
,
uint8_t
tdd_config
,
uint8_t
osf
)
{
LTE_DL_FRAME_PARMS
*
lte_frame_parms
;
printf
(
"Start lte_param_init
\n
"
);
PHY_vars_eNB
=
malloc
(
sizeof
(
PHY_VARS_eNB
));
PHY_vars_UE
=
malloc
(
sizeof
(
PHY_VARS_UE
));
//PHY_config = malloc(sizeof(PHY_CONFIG));
mac_xface
=
malloc
(
sizeof
(
MAC_xface
));
randominit
(
0
);
set_taus_seed
(
0
);
lte_frame_parms
=
&
(
PHY_vars_eNB
->
lte_frame_parms
);
lte_frame_parms
->
frame_type
=
frame_type
;
lte_frame_parms
->
tdd_config
=
tdd_config
;
lte_frame_parms
->
N_RB_DL
=
N_RB_DL
;
//50 for 10MHz and 25 for 5 MHz
lte_frame_parms
->
N_RB_UL
=
N_RB_DL
;
lte_frame_parms
->
Ncp
=
extended_prefix_flag
;
lte_frame_parms
->
Ncp_UL
=
extended_prefix_flag
;
lte_frame_parms
->
Nid_cell
=
10
;
lte_frame_parms
->
nushift
=
0
;
lte_frame_parms
->
nb_antennas_tx
=
N_tx
;
lte_frame_parms
->
nb_antennas_rx
=
N_rx
;
// lte_frame_parms->Csrs = 2;
// lte_frame_parms->Bsrs = 0;
// lte_frame_parms->kTC = 0;
// lte_frame_parms->n_RRC = 0;
lte_frame_parms
->
mode1_flag
=
(
transmission_mode
==
1
)
?
1
:
0
;
lte_frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
=
0
;
//n_DMRS1 set to 0
init_frame_parms
(
lte_frame_parms
,
osf
);
//copy_lte_parms_to_phy_framing(lte_frame_parms, &(PHY_config->PHY_framing));
PHY_vars_UE
->
lte_frame_parms
=
*
lte_frame_parms
;
phy_init_lte_top
(
lte_frame_parms
);
phy_init_lte_ue
(
PHY_vars_UE
,
1
,
0
);
phy_init_lte_eNB
(
PHY_vars_eNB
,
0
,
0
,
0
);
printf
(
"Done lte_param_init
\n
"
);
}
int
main
(
int
argc
,
char
**
argv
)
{
...
...
@@ -520,7 +466,16 @@ int main(int argc, char **argv)
}
}
lte_param_init
(
1
,
n_rx
,
1
,
extended_prefix_flag
,
N_RB_DL
,
frame_type
,
tdd_config
,
osf
);
lte_param_init
(
1
,
n_rx
,
1
,
extended_prefix_flag
,
frame_type
,
0
,
tdd_config
,
N_RB_DL
,
osf
,
0
);
if
(
nb_rb_set
==
0
)
nb_rb
=
PHY_vars_eNB
->
lte_frame_parms
.
N_RB_UL
;
...
...
@@ -1109,7 +1064,7 @@ int main(int argc, char **argv)
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
&
PHY_vars_UE
->
lte_ue_common_vars
.
txdataF
[
aa
][
subframe
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX
],
// input
&
txdata
[
aa
][
PHY_vars_eNB
->
lte_frame_parms
.
samples_per_tti
*
subframe
],
// output
PHY_vars_UE
->
lte_frame_parms
.
log2_symbol_size
,
// log2_fft_size
PHY_vars_UE
->
lte_frame_parms
.
ofdm_symbol_size
,
nsymb
,
// number of symbols
PHY_vars_UE
->
lte_frame_parms
.
nb_prefix_samples
,
// number of prefix samples
CYCLIC_PREFIX
);
...
...
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