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
promise
OpenXG-RAN
Commits
2e29a27c
Commit
2e29a27c
authored
Nov 06, 2017
by
lfarizav
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
some updates
parent
75cf5870
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
139 additions
and
483 deletions
+139
-483
openair1/PHY/LTE_TRANSPORT/dci.c
openair1/PHY/LTE_TRANSPORT/dci.c
+28
-25
openair1/PHY/LTE_TRANSPORT/prach.c
openair1/PHY/LTE_TRANSPORT/prach.c
+76
-421
openair1/PHY/TOOLS/signal_energy.c
openair1/PHY/TOOLS/signal_energy.c
+3
-3
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+2
-0
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+8
-7
openair1/SIMULATION/RF/adc.c
openair1/SIMULATION/RF/adc.c
+1
-1
openair1/SIMULATION/RF/dac.c
openair1/SIMULATION/RF/dac.c
+1
-1
openair1/SIMULATION/TOOLS/multipath_channel.c
openair1/SIMULATION/TOOLS/multipath_channel.c
+8
-18
targets/SIMU/USER/channel_sim.c
targets/SIMU/USER/channel_sim.c
+12
-7
No files found.
openair1/PHY/LTE_TRANSPORT/dci.c
View file @
2e29a27c
...
...
@@ -3537,7 +3537,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
dci_decoded_output
[
current_thread_id
][
4
],
dci_decoded_output
[
current_thread_id
][
5
],
dci_decoded_output
[
current_thread_id
][
6
],
dci_decoded_output
[
current_thread_id
][
7
]);
#endif
}
printf
(
"[dci] crc %x
\n
"
,
crc
);
if
(
crc
==
si_rnti
)
{
dci_alloc
[
*
dci_cnt
].
format
=
format_si
;
*
dci_cnt
=
*
dci_cnt
+
1
;
...
...
@@ -4011,9 +4011,10 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
printf
(
"[DCI search] doing common search/format0 aggregation 4
\n
"
);
#endif
if
(
ue
->
prach_resources
[
eNB_id
])
if
(
ue
->
prach_resources
[
eNB_id
])
{
ra_rnti
=
ue
->
prach_resources
[
eNB_id
]
->
ra_RNTI
;
printf
(
"[dci] ra_RNTI %d, ue->decode_SIB? %d
\n
"
,
ra_rnti
,
ue
->
decode_SIB
);
}
// First check common search spaces at aggregation 4 (SI_RNTI, P_RNTI and RA_RNTI format 0/1A),
// and UE_SPEC format0 (PUSCH) too while we're at it
dci_decoding_procedure0
(
pdcch_vars
,
1
,
mode
,
subframe
,
...
...
@@ -4038,7 +4039,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]1 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4067,7 +4068,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]2 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4100,7 +4101,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]3 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4130,7 +4131,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap1
,
&
CCEmap2
);
//#endif
printf
(
"[dci]4 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
}
if
(
ue
->
UE_mode
[
eNB_id
]
<=
PRACH
)
...
...
@@ -4164,7 +4165,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]5 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4197,7 +4198,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]6 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4232,7 +4233,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]7 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4266,7 +4267,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]8 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4301,7 +4302,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap1
,
&
CCEmap2
);
//printf("[DCI search] Format 1 aggregation 1 dci_cnt %d\n",dci_cnt);
printf
(
"[dci]9 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
(
format_c_found
==
1
))
return
(
dci_cnt
);
...
...
@@ -4334,7 +4335,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap1
,
&
CCEmap2
);
//printf("[DCI search] Format 1 aggregation 2 dci_cnt %d\n",dci_cnt);
printf
(
"[dci]10 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
(
format_c_found
==
1
))
return
(
dci_cnt
);
...
...
@@ -4367,7 +4368,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap1
,
&
CCEmap2
);
//printf("[DCI search] Format 1 aggregation 4 dci_cnt %d\n",dci_cnt);
printf
(
"[dci]11 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4401,7 +4402,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap1
,
&
CCEmap2
);
//printf("[DCI search] Format 1 aggregation 8 dci_cnt %d\n",dci_cnt);
printf
(
"[dci]12 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4439,7 +4440,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]13 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
LOG_D
(
PHY
,
" format 2A_2A search CCEmap0 %x, format0_found %d, format_c_found %d
\n
"
,
CCEmap0
,
format0_found
,
format_c_found
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
...
...
@@ -4475,7 +4476,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]14 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4510,7 +4511,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]15 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4546,6 +4547,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]16 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
//#endif
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
...
...
@@ -4581,7 +4583,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]17 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4614,7 +4616,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]18 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4647,7 +4649,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]19 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4681,6 +4683,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]20 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
//#endif
}
else
if
((
tmode
==
5
)
||
(
tmode
==
6
))
{
// This is MU-MIMO
...
...
@@ -4712,7 +4715,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]21 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
...
...
@@ -4746,7 +4749,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]22 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4779,7 +4782,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]23 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
@@ -4814,7 +4817,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
printf
(
"[dci]24 dci_cnt %d, CCEmap0 %x
\n
"
,
dci_cnt
,
CCEmap0
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
...
...
openair1/PHY/LTE_TRANSPORT/prach.c
View file @
2e29a27c
...
...
@@ -2058,7 +2058,6 @@ void rx_prach(PHY_VARS_eNB *eNB,
if
(
k
==
(
12
*
2
*
eNB
->
frame_parms
.
ofdm_symbol_size
))
k
=
0
;
}
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
if
(
N_ZC
==
839
)
{
log2_ifft_size
=
10
;
...
...
@@ -2070,7 +2069,7 @@ void rx_prach(PHY_VARS_eNB *eNB,
#ifdef PRACH_DEBUG
if
(
aa
==
0
)
write_output
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
#endif
// if (aa=1) write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
}
// antennas_rx
#ifdef PRACH_DEBUG
...
...
@@ -2118,47 +2117,11 @@ void rx_prach(PHY_VARS_eNB *eNB,
#endif
}
// preamble_index
stop_meas
(
&
eNB
->
rx_prach
);
}
void
init_prach_tables
(
int
N_ZC
)
{
int
i
,
m
;
// Compute the modular multiplicative inverse 'iu' of u s.t. iu*u = 1 mod N_ZC
ZC_inv
[
0
]
=
0
;
ZC_inv
[
1
]
=
1
;
for
(
i
=
2
;
i
<
N_ZC
;
i
++
)
{
for
(
m
=
2
;
m
<
N_ZC
;
m
++
)
if
(((
i
*
m
)
%
N_ZC
)
==
1
)
{
ZC_inv
[
i
]
=
m
;
break
;
}
#ifdef PRACH_DEBUG
if
(
i
<
16
)
printf
(
"i %d : inv %d
\n
"
,
i
,
ZC_inv
[
i
]);
#endif
}
// Compute quantized roots of unity
for
(
i
=
0
;
i
<
N_ZC
;
i
++
)
{
ru
[
i
<<
1
]
=
(
int16_t
)(
floor
(
32767
.
0
*
cos
(
2
*
M_PI
*
(
double
)
i
/
N_ZC
)));
ru
[
1
+
(
i
<<
1
)]
=
(
int16_t
)(
floor
(
32767
.
0
*
sin
(
2
*
M_PI
*
(
double
)
i
/
N_ZC
)));
#ifdef PRACH_DEBUG
if
(
i
<
16
)
printf
(
"i %d : runity %d,%d
\n
"
,
i
,
ru
[
i
<<
1
],
ru
[
1
+
(
i
<<
1
)]);
#endif
}
}
void
rx_prach_freq
(
PHY_VARS_eNB
*
eNB
,
uint16_t
*
preamble_energy_list
,
uint16_t
*
preamble_delay_list
,
...
...
@@ -2204,7 +2167,6 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
int
fft_size
,
log2_ifft_size
;
uint8_t
nb_ant_rx
=
1
;
//eNB->frame_parms.nb_antennas_rx;
/*for (aa=0; aa<nb_ant_rx; aa++) {
prach[aa] = (int16_t*)&eNB->common_vars.rxdata[0][aa][subframe*eNB->frame_parms.samples_per_tti-eNB->N_TA_offset];
}*/
...
...
@@ -2233,340 +2195,7 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
n_ra_prb
=
get_prach_prb_offset
(
&
(
eNB
->
frame_parms
),
tdd_mapindex
,
Nf
);
prach_root_sequence_map
=
(
prach_fmt
<
4
)
?
prach_root_sequence_map0_3
:
prach_root_sequence_map4
;
// PDP is oversampled, e.g. 1024 sample instead of 839
// Adapt the NCS (zero-correlation zones) with oversampling factor e.g. 1024/839
NCS2
=
(
N_ZC
==
839
)
?
((
NCS
<<
10
)
/
839
)
:
((
NCS
<<
8
)
/
139
);
if
(
NCS2
==
0
)
NCS2
=
N_ZC
;
/*switch (prach_fmt) {
case 0:
Ncp = 3168;
break;
case 1:
case 3:
Ncp = 21024;
break;
case 2:
Ncp = 6240;
break;
case 4:
Ncp = 448;
break;
default:
Ncp = 3168;
break;
}
// Adjust CP length based on UL bandwidth
switch (eNB->frame_parms.N_RB_UL) {
case 6:
Ncp>>=4;
break;
case 15:
Ncp>>=3;
break;
case 25:
Ncp>>=2;
break;
case 50:
Ncp>>=1;
break;
case 75:
Ncp=(Ncp*3)>>2;
break;
case 100:
if (eNB->frame_parms.threequarter_fs == 1)
Ncp=(Ncp*3)>>2;
break;
}*/
/*if ((eNB->node_function == eNodeB_3GPP) ||
(eNB->node_function == eNodeB_3GPP_BBU) ||
(eNB->node_function == NGFI_RRU_IF4p5)) { // compute the DFTs of the PRACH temporal resources
// Do forward transform
for (aa=0; aa<nb_ant_rx; aa++) {
prach2 = prach[aa] + (Ncp<<1);
// do DFT
switch (eNB->frame_parms.N_RB_UL) {
case 6:
if (prach_fmt == 4) {
dft256(prach2,rxsigF[aa],1);
} else {
dft1536(prach2,rxsigF[aa],1);
if (prach_fmt>1)
dft1536(prach2+3072,rxsigF[aa]+3072,1);
}
break;
case 15:
if (prach_fmt == 4) {
dft256(prach2,rxsigF[aa],1);
} else {
dft3072(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft3072(prach2+6144,rxsigF[aa]+6144);
}
break;
case 25:
default:
if (prach_fmt == 4) {
dft1024(prach2,rxsigF[aa],1);
fft_size = 1024;
} else {
dft6144(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft6144(prach2+12288,rxsigF[aa]+12288);
fft_size = 6144;
}
break;
case 50:
if (prach_fmt == 4) {
dft2048(prach2,rxsigF[aa],1);
} else {
dft12288(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft12288(prach2+24576,rxsigF[aa]+24576);
}
break;
case 75:
if (prach_fmt == 4) {
dft3072(prach2,rxsigF[aa]);
} else {
dft18432(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft18432(prach2+36864,rxsigF[aa]+36864);
}
break;
case 100:
if (eNB->frame_parms.threequarter_fs==0) {
if (prach_fmt == 4) {
dft4096(prach2,rxsigF[aa],1);
} else {
dft24576(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft24576(prach2+49152,rxsigF[aa]+49152);
}
} else {
if (prach_fmt == 4) {
dft3072(prach2,rxsigF[aa]);
} else {
dft18432(prach2,rxsigF[aa]);
if (prach_fmt>1)
dft18432(prach2+36864,rxsigF[aa]+36864);
}
}
break;
}
}
}*/
if
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
)
{
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
if
(
k
<
0
)
{
k
+=
(
eNB
->
frame_parms
.
ofdm_symbol_size
);
}
k
*=
12
;
k
+=
13
;
k
*=
2
;
/// **** send_IF4 of rxsigF to RCC **** ///
send_IF4p5
(
eNB
,
eNB
->
proc
.
frame_prach
,
eNB
->
proc
.
subframe_prach
,
IF4p5_PRACH
,
k
);
#if 0
/* TODO: resolv this conflict (there should be no printf anyway, so no big deal) */
<<<<<<< HEAD
/*
en = dB_fixed(signal_energy(&rxsigF[0][k],840));
printf("Sending PRACH, k %d,n_ra_prb %d, N_RB_UL %d, en %d\n",k,n_ra_prb,eNB->frame_parms.N_RB_UL,en);
if (en>60) {
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
write_output("prach_rx0.m","prach_rx0",(int16_t*)&rxsigF[0][k],839,1,1);
exit(-1);
}
*/
=======
en = dB_fixed(signal_energy(&rxsigF[0][k],840));
if (en>60)
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
>>>>>>> origin/fix-if4p5
#endif
return
;
}
else
if
(
eNB
->
node_function
==
NGFI_RCC_IF4p5
)
{
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
if
(
k
<
0
)
{
k
+=
(
eNB
->
frame_parms
.
ofdm_symbol_size
);
}
k
*=
12
;
k
+=
13
;
k
*=
2
;
// Adjust received rxsigF offset
memmove
((
&
rxsigF
[
0
][
k
]),
(
&
rxsigF
[
0
][
0
]),
839
*
2
*
sizeof
(
int16_t
));
#if 0
/* TODO: resolv this conflict (there should be no printf anyway, so no big deal) */
<<<<<<< HEAD
/*
en = dB_fixed(signal_energy(&rxsigF[0][k],840));
printf("Receiving PRACH, k %d,n_ra_prb %d, N_RB_UL %d, en %d\n",k,n_ra_prb,eNB->frame_parms.N_RB_UL,en);
if (en>60) {
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
write_output("prach_rx0.m","prach_rx0",(int16_t*)&rxsigF[0][k],839,1,1);
exit(-1);
}
*/
=======
en = dB_fixed(signal_energy(&rxsigF[0][k],840));
/*if (en>60)
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);*/
>>>>>>> origin/fix-if4p5
#endif
}
// in case of RCC and prach received rx_thread wakes up prach
// here onwards is for eNodeB_3GPP or NGFI_RCC_IF4p5
preamble_offset_old
=
99
;
for
(
preamble_index
=
0
;
preamble_index
<
64
;
preamble_index
++
)
{
if
(
restricted_set
==
0
)
{
// This is the relative offset in the root sequence table (5.7.2-4 from 36.211) for the given preamble index
preamble_offset
=
((
NCS
==
0
)
?
preamble_index
:
(
preamble_index
/
(
N_ZC
/
NCS
)));
if
(
preamble_offset
!=
preamble_offset_old
)
{
preamble_offset_old
=
preamble_offset
;
new_dft
=
1
;
// This is the \nu corresponding to the preamble index
preamble_shift
=
0
;
}
else
{
preamble_shift
-=
NCS
;
if
(
preamble_shift
<
0
)
preamble_shift
+=
N_ZC
;
}
}
else
{
// This is the high-speed case
new_dft
=
0
;
// set preamble_offset to initial rootSequenceIndex and look if we need more root sequences for this
// preamble index and find the corresponding cyclic shift
// Check if all shifts for that root have been processed
if
(
preamble_index0
==
numshift
)
{
not_found
=
1
;
new_dft
=
1
;
preamble_index0
-=
numshift
;
(
preamble_offset
==
0
&&
numshift
==
0
)
?
(
preamble_offset
)
:
(
preamble_offset
++
);
while
(
not_found
==
1
)
{
// current root depending on rootSequenceIndex
int
index
=
(
rootSequenceIndex
+
preamble_offset
)
%
N_ZC
;
if
(
prach_fmt
<
4
)
{
// prach_root_sequence_map points to prach_root_sequence_map0_3
DevAssert
(
index
<
sizeof
(
prach_root_sequence_map0_3
)
/
sizeof
(
prach_root_sequence_map0_3
[
0
])
);
}
else
{
// prach_root_sequence_map points to prach_root_sequence_map4
DevAssert
(
index
<
sizeof
(
prach_root_sequence_map4
)
/
sizeof
(
prach_root_sequence_map4
[
0
])
);
}
u
=
prach_root_sequence_map
[
index
];
uint16_t
n_group_ra
=
0
;
if
(
(
du
[
u
]
<
(
N_ZC
/
3
))
&&
(
du
[
u
]
>=
NCS
)
)
{
n_shift_ra
=
du
[
u
]
/
NCS
;
d_start
=
(
du
[
u
]
<<
1
)
+
(
n_shift_ra
*
NCS
);
n_group_ra
=
N_ZC
/
d_start
;
n_shift_ra_bar
=
max
(
0
,(
N_ZC
-
(
du
[
u
]
<<
1
)
-
(
n_group_ra
*
d_start
))
/
N_ZC
);
}
else
if
(
(
du
[
u
]
>=
(
N_ZC
/
3
))
&&
(
du
[
u
]
<=
((
N_ZC
-
NCS
)
>>
1
))
)
{
n_shift_ra
=
(
N_ZC
-
(
du
[
u
]
<<
1
))
/
NCS
;
d_start
=
N_ZC
-
(
du
[
u
]
<<
1
)
+
(
n_shift_ra
*
NCS
);
n_group_ra
=
du
[
u
]
/
d_start
;
n_shift_ra_bar
=
min
(
n_shift_ra
,
max
(
0
,(
du
[
u
]
-
(
n_group_ra
*
d_start
))
/
NCS
));
}
else
{
n_shift_ra
=
0
;
n_shift_ra_bar
=
0
;
}
// This is the number of cyclic shifts for the current root u
numshift
=
(
n_shift_ra
*
n_group_ra
)
+
n_shift_ra_bar
;
// skip to next root and recompute parameters if numshift==0
(
numshift
>
0
)
?
(
not_found
=
0
)
:
(
preamble_offset
++
);
}
}
if
(
n_shift_ra
>
0
)
preamble_shift
=
-
((
d_start
*
(
preamble_index0
/
n_shift_ra
))
+
((
preamble_index0
%
n_shift_ra
)
*
NCS
));
// minus because the channel is h(t -\tau + Cv)
else
preamble_shift
=
0
;
if
(
preamble_shift
<
0
)
preamble_shift
+=
N_ZC
;
preamble_index0
++
;
if
(
preamble_index
==
0
)
first_nonzero_root_idx
=
preamble_offset
;
}
// Compute DFT of RX signal (conjugate input, results in conjugate output) for each new rootSequenceIndex
#ifdef PRACH_DEBUG
LOG_I
(
PHY
,
"preamble index %d: offset %d, preamble shift %d
\n
"
,
preamble_index
,
preamble_offset
,
preamble_shift
);
#endif
log2_ifft_size
=
10
;
fft_size
=
6144
;
if
(
new_dft
==
1
)
{
new_dft
=
0
;
Xu
=
(
int16_t
*
)
eNB
->
X_u
[
preamble_offset
-
first_nonzero_root_idx
];
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
if
(
k
<
0
)
k
+=
(
eNB
->
frame_parms
.
ofdm_symbol_size
);
...
...
@@ -2584,7 +2213,7 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
memset
(
prachF
,
0
,
sizeof
(
int16_t
)
*
2
*
1024
);
#ifdef PRACH_DEBUG
write_output
(
"prach_rx0.m"
,
"prach_rx0"
,
prach
[
0
],
6144
+
792
,
1
,
1
);
//
write_output("prach_rx0.m","prach_rx0",prach[0],6144+792,1,1);
#endif
// write_output("prach_rx1.m","prach_rx1",prach[1],6144+792,1,1);
// write_output("prach_rxF0.m","prach_rxF0",rxsigF[0],24576,1,1);
...
...
@@ -2594,8 +2223,8 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
// Do componentwise product with Xu*
for
(
offset
=
0
;
offset
<
(
N_ZC
<<
1
);
offset
+=
2
)
{
prachF
[
offset
]
=
(
int16_t
)(((
int32_t
)
Xu
[
offset
]
*
rxsigF
[
aa
][
k
]
+
(
int32_t
)
Xu
[
offset
+
1
]
*
rxsigF
[
aa
][
k
+
1
])
>>
15
)
;
prachF
[
offset
+
1
]
=
(
int16_t
)(((
int32_t
)
Xu
[
offset
]
*
rxsigF
[
aa
][
k
+
1
]
-
(
int32_t
)
Xu
[
offset
+
1
]
*
rxsigF
[
aa
][
k
])
>>
15
)
;
prachF
[
offset
]
=
1
;
//((short *)eNB->prach_vars.prachF)[((offset)<<1)]
;
prachF
[
offset
+
1
]
=
2
;
//((short *)eNB->prach_vars.prachF)[1+((offset)<<1)]
;
/*
if (offset<16)
printf("Xu[%d] %d %d, rxsigF[%d][%d] %d %d\n",offset,Xu[offset],Xu[offset+1],aa,k,rxsigF[aa][k],rxsigF[aa][k+1]);
...
...
@@ -2619,69 +2248,95 @@ void rx_prach_freq(PHY_VARS_eNB *eNB,
}
// Now do IFFT of size 1024 (N_ZC=839) or 256 (N_ZC=139)
if
(
N_ZC
==
839
)
{
/*
if (N_ZC == 839) {
log2_ifft_size = 10;
idft1024(prachF,prach_ifft[aa],1);
} else {
idft256(prachF,prach_ifft[aa],1);
log2_ifft_size = 8;
}
}
*/
#ifdef PRACH_DEBUG
if
(
aa
==
0
)
write_output
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
//
write_output("prach_rxF_comp0.m","prach_rxF_comp0",prachF,1024,1,1);
#endif
// if (aa=1)
write_output("prach_rxF_comp1.m","prach_rxF_comp1",prachF,1024,1,1);
write_output
(
"prach_rxF_comp1.m"
,
"prach_rxF_comp1"
,
prachF
,
1024
,
1
,
1
);
}
// antennas_rx
#ifdef PRACH_DEBUG
if
(
en
>
40
)
{
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
if
(
k
<
0
)
k
+=
(
eNB
->
frame_parms
.
ofdm_symbol_size
);
k
*=
12
;
k
+=
13
;
k
*=
2
;
printf
(
"Dumping prach, k = %d (n_ra_prb %d)
\n
"
,
k
,
n_ra_prb
);
write_output
(
"rxsigF.m"
,
"prach_rxF"
,
&
rxsigF
[
0
][
k
],
840
,
1
,
1
);
write_output
(
"prach_rxF_comp0.m"
,
"prach_rxF_comp0"
,
prachF
,
1024
,
1
,
1
);
write_output
(
"prach_ifft0.m"
,
"prach_t0"
,
prach_ifft
[
0
],
1024
,
1
,
1
);
exit
(
-
1
);
}
#endif
}
// new dft
if
(
eNB
->
node_function
==
NGFI_RRU_IF4p5
)
{
k
=
(
12
*
n_ra_prb
)
-
6
*
eNB
->
frame_parms
.
N_RB_UL
;
// check energy in nth time shift
preamble_shift2
=
((
preamble_shift
==
0
)
?
0
:
((
preamble_shift
<<
log2_ifft_size
)
/
N_ZC
));
preamble_energy_list
[
preamble_index
]
=
0
;
if
(
k
<
0
)
{
k
+=
(
eNB
->
frame_parms
.
ofdm_symbol_size
);
}
k
*=
12
;
k
+=
13
;
k
*=
2
;
for
(
i
=
0
;
i
<
NCS2
;
i
++
)
{
lev
=
0
;
for
(
aa
=
0
;
aa
<
nb_ant_rx
;
aa
++
)
{
lev
+=
(
int32_t
)
prach_ifft
[
aa
][(
preamble_shift2
+
i
)
<<
1
]
*
prach_ifft
[
aa
][(
preamble_shift2
+
i
)
<<
1
]
+
(
int32_t
)
prach_ifft
[
aa
][
1
+
((
preamble_shift2
+
i
)
<<
1
)]
*
prach_ifft
[
aa
][
1
+
((
preamble_shift2
+
i
)
<<
1
)];
}
levdB
=
dB_fixed_times10
(
lev
);
if
(
levdB
>
preamble_energy_list
[
preamble_index
]
)
{
preamble_energy_list
[
preamble_index
]
=
levdB
;
preamble_delay_list
[
preamble_index
]
=
(
i
*
fft_size
)
>>
log2_ifft_size
;
}
/// **** send_IF4 of rxsigF to RCC **** ///
send_IF4p5
(
eNB
,
eNB
->
proc
.
frame_prach
,
eNB
->
proc
.
subframe_prach
,
IF4p5_PRACH
,
k
)
;
#if 0
/* TODO: resolv this conflict (there should be no printf anyway, so no big deal) */
<<<<<<< HEAD
/*
en = dB_fixed(signal_energy(&rxsigF[0][k],840)
);
printf("Sending PRACH, k %d,n_ra_prb %d, N_RB_UL %d, en %d\n",k,n_ra_prb,eNB->frame_parms.N_RB_UL,en);
if (en>60
) {
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en)
;
write_output("prach_rx0.m","prach_rx0",(int16_t*)&rxsigF[0][k],839,1,1)
;
exit(-1);
}
#ifdef PRACH_DEBUG
LOG_D
(
PHY
,
"[RAPROC] Preamble %d => %d dB, %d (shift %d (%d), NCS2 %d(%d), Ncp %d)
\n
"
,
preamble_index
,
preamble_energy_list
[
preamble_index
],
preamble_delay_list
[
preamble_index
],
preamble_shift2
,
preamble_shift
,
NCS2
,
NCS
,
Ncp
);
// exit(-1);
*/
=======
en = dB_fixed(signal_energy(&rxsigF[0][k],840));
if (en>60)
printf("PRACH: Frame %d, Subframe %d => %d dB\n",eNB->proc.frame_rx,eNB->proc.subframe_rx,en);
>>>>>>> origin/fix-if4p5
#endif
}
// preamble_index
return
;
}
stop_meas
(
&
eNB
->
rx_prach
);
}
void
init_prach_tables
(
int
N_ZC
)
{
int
i
,
m
;
// Compute the modular multiplicative inverse 'iu' of u s.t. iu*u = 1 mod N_ZC
ZC_inv
[
0
]
=
0
;
ZC_inv
[
1
]
=
1
;
for
(
i
=
2
;
i
<
N_ZC
;
i
++
)
{
for
(
m
=
2
;
m
<
N_ZC
;
m
++
)
if
(((
i
*
m
)
%
N_ZC
)
==
1
)
{
ZC_inv
[
i
]
=
m
;
break
;
}
#ifdef PRACH_DEBUG
if
(
i
<
16
)
printf
(
"i %d : inv %d
\n
"
,
i
,
ZC_inv
[
i
]);
#endif
}
// Compute quantized roots of unity
for
(
i
=
0
;
i
<
N_ZC
;
i
++
)
{
ru
[
i
<<
1
]
=
(
int16_t
)(
floor
(
32767
.
0
*
cos
(
2
*
M_PI
*
(
double
)
i
/
N_ZC
)));
ru
[
1
+
(
i
<<
1
)]
=
(
int16_t
)(
floor
(
32767
.
0
*
sin
(
2
*
M_PI
*
(
double
)
i
/
N_ZC
)));
#ifdef PRACH_DEBUG
if
(
i
<
16
)
printf
(
"i %d : runity %d,%d
\n
"
,
i
,
ru
[
i
<<
1
],
ru
[
1
+
(
i
<<
1
)]);
#endif
}
}
void
compute_prach_seq
(
PRACH_CONFIG_COMMON
*
prach_config_common
,
lte_frame_type_t
frame_type
,
uint32_t
X_u
[
64
][
839
])
...
...
openair1/PHY/TOOLS/signal_energy.c
View file @
2e29a27c
...
...
@@ -125,7 +125,7 @@ int32_t signal_energy_prach(int32_t *input,uint32_t length)
mm0
=
_mm_setzero_si64
();
//pxor(mm0,mm0);
mm3
=
_mm_setzero_si64
();
//pxor(mm3,mm3);
for
(
i
=
0
;
i
<
length
;
i
+=
2
)
{
for
(
i
=
0
;
i
<
2
*
length
;
i
+=
2
)
{
mm1
=
in
[
i
];
mm2
=
mm1
;
...
...
@@ -140,7 +140,7 @@ int32_t signal_energy_prach(int32_t *input,uint32_t length)
mm0
=
_m_psrlqi
(
mm0
,
32
);
mm0
=
_m_paddd
(
mm0
,
mm1
);
temp
=
_m_to_int
(
mm0
);
temp
/=
(
length
/
2
);
temp
/=
(
length
);
temp
<<=
shift
;
// this is the average of x^2
// now remove the DC component
...
...
@@ -150,7 +150,7 @@ int32_t signal_energy_prach(int32_t *input,uint32_t length)
mm2
=
_m_paddw
(
mm2
,
mm3
);
mm2
=
_m_pmaddwd
(
mm2
,
mm2
);
temp2
=
_m_to_int
(
mm2
);
temp2
/=
(
length
*
length
/
4
);
temp2
/=
(
length
*
length
);
// temp2<<=(2*shift_DC);
temp
-=
temp2
;
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
2e29a27c
...
...
@@ -2023,6 +2023,8 @@ void prach_procedures(PHY_VARS_eNB *eNB) {
preamble_delay_list
,
frame
,
0
);
printf
(
"[prach] ook
\n
"
);
write_output
(
"prach_rxF_comp1.m"
,
"prach_rxF_comp1"
,
eNB
->
prach_vars
.
prachF
,
1024
,
1
,
1
);
}
}
else
{
for
(
UE_id
=
0
;
UE_id
<
NB_UE_INST
;
UE_id
++
)
{
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
2e29a27c
...
...
@@ -3108,6 +3108,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
if
(
abstraction_flag
==
0
)
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH
,
VCD_FUNCTION_IN
);
printf
(
"[phy_procedures_lte_ue]before is %s
\n
"
,
"ok"
);
rx_pdcch
(
ue
,
proc
->
frame_rx
,
subframe_rx
,
...
...
@@ -3115,7 +3116,8 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
(
ue
->
frame_parms
.
mode1_flag
==
1
)
?
SISO
:
ALAMOUTI
,
ue
->
high_speed_flag
,
ue
->
is_secondary_ue
);
printf
(
"[phy_procedures_lte_ue]after is %s
\n
"
,
"ok"
);
printf
(
"[phy_procedures_lte_ue] ue->prach_resources[%d] %d
\n
"
,
eNB_id
,
ue
->
prach_resources
[
eNB_id
]);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH
,
VCD_FUNCTION_OUT
);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_DCI_DECODING
,
VCD_FUNCTION_IN
);
...
...
@@ -3225,9 +3227,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
#endif
for
(
i
=
0
;
i
<
dci_cnt
;
i
++
)
{
printf
(
"[phy_procedures_lte_ue] rnti[%d] %x, crnti %x
\n
"
,
i
,
dci_alloc_rx
[
i
].
rnti
,
ue
->
pdcch_vars
[
ue
->
current_thread_id
[
subframe_rx
]][
eNB_id
]
->
crnti
);
if
((
ue
->
UE_mode
[
eNB_id
]
>
PRACH
)
&&
(
dci_alloc_rx
[
i
].
rnti
==
ue
->
pdcch_vars
[
ue
->
current_thread_id
[
subframe_rx
]][
eNB_id
]
->
crnti
)
&&
(
dci_alloc_rx
[
i
].
format
!=
format0
))
{
...
...
@@ -3241,7 +3241,6 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
get_nCCE
(
3
,
&
ue
->
frame_parms
,
get_mi
(
&
ue
->
frame_parms
,
0
)));
//dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
if
((
ue
->
UE_mode
[
eNB_id
]
>
PRACH
)
&&
(
generate_ue_dlsch_params_from_dci
(
frame_rx
,
subframe_rx
,
...
...
@@ -3367,14 +3366,13 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
}
}
else
if
((
ue
->
prach_resources
[
eNB_id
])
&&
(
dci_alloc_rx
[
i
].
rnti
==
ue
->
prach_resources
[
eNB_id
]
->
ra_RNTI
)
&&
(
dci_alloc_rx
[
i
].
format
==
format1A
))
{
#ifdef DEBUG_PHY_PROC
LOG_D
(
PHY
,
"[UE %d][RAPROC] subframe %d: Found RA rnti %x, format 1A, dci_cnt %d
\n
"
,
ue
->
Mod_id
,
subframe_rx
,
dci_alloc_rx
[
i
].
rnti
,
i
);
printf
(
"[UE %d][RAPROC] ue->prach_resources[eNB_id] %d, ue->prach_resources[eNB_id]->ra_RNTI %d
\n
"
,
ue
->
Mod_id
,
ue
->
prach_resources
[
eNB_id
],
ue
->
prach_resources
[
eNB_id
]
->
ra_RNTI
);
//if (((frame_rx%100) == 0) || (frame_rx < 20))
//dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
//mac_xface->macphy_exit("so far so good...\n");
...
...
@@ -3413,6 +3411,8 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
#endif
ue
->
ulsch_no_allocation_counter
[
eNB_id
]
=
0
;
//dump_dci(&ue->frame_parms,&dci_alloc_rx[i]);
if
((
ue
->
UE_mode
[
eNB_id
]
>
PRACH
)
&&
...
...
@@ -3496,6 +3496,7 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
}
}
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_rx_pdcch_stats
);
#endif
...
...
openair1/SIMULATION/RF/adc.c
View file @
2e29a27c
...
...
@@ -119,7 +119,7 @@ void adc_prach(double *r_re[2],
for
(
aa
=
0
;
aa
<
nb_rx_antennas
;
aa
++
)
{
((
short
*
)
output
)[((
i
+
output_offset
)
<<
1
)]
=
(
short
)(
r_re
[
aa
][
i
+
input_offset
]
*
gain
);
((
short
*
)
output
)[
1
+
((
i
+
output_offset
)
<<
1
)]
=
(
short
)(
r_im
[
aa
][
i
+
input_offset
]
*
gain
);
printf
(
"[adc_prach]i %d output (%d,%d)
\n
"
,
i
,((
short
*
)
output
)[((
i
+
output_offset
)
<<
1
)],((
short
*
)
output
)[
1
+
((
i
+
output_offset
)
<<
1
)]);
if
((
r_re
[
aa
][
i
+
input_offset
]
*
gain
)
>
30000
)
{
//("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
}
...
...
openair1/SIMULATION/RF/dac.c
View file @
2e29a27c
...
...
@@ -148,7 +148,7 @@ double dac_fixed_gain_prach(double *s_re[2],
amp1
=
0
;
for
(
aa
=
0
;
aa
<
nb_tx_antennas
;
aa
++
)
{
amp1
+=
sqrt
((
double
)
signal_energy_prach
((
int32_t
*
)
&
input
[
input_offset_meas
],
length_meas
*
2
)
/
NB_RE
);
amp1
+=
sqrt
((
double
)
signal_energy_prach
((
int32_t
*
)
&
input
[
input_offset_meas
],
length_meas
)
/
NB_RE
);
}
amp1
/=
nb_tx_antennas
;
...
...
openair1/SIMULATION/TOOLS/multipath_channel.c
View file @
2e29a27c
...
...
@@ -377,37 +377,27 @@ void multipath_channel_prach(channel_desc_t *desc,
printf
(
"[CHANNEL_PRACH] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, len %d
\n
"
,
keep_channel
,
path_loss
,
desc
->
path_loss_dB
,
desc
->
nb_rx
,
desc
->
nb_tx
,
desc
->
channel_length
);
#endif
printf
(
"[CHANNEL_PRACH] keep = %d : path_loss = %g (%f), nb_rx %d, nb_tx %d, len %d , symbols tti %d
\n
"
,
keep_channel
,
path_loss
,
desc
->
path_loss_dB
,
desc
->
nb_rx
,
desc
->
nb_tx
,
desc
->
channel_length
,
symbols_per_tti
);
if
(
keep_channel
)
{
if
(
keep_channel
)
{
// do nothing - keep channel
}
else
{
random_channel
(
desc
,
0
);
//Find a(l)
freq_channel_prach
(
desc
,
nb_rb
,
n_samples
,
prach_fmt
,
n_ra_prb
);
//Find desc->chF_prach
}
for
(
l
=
0
;
l
<
symbols_per_tti
;
l
++
){
//0-13 normal cyclic prefix
k
=
(
12
*
n_ra_prb
)
-
6
*
fp
->
N_RB_UL
;
if
(
k
<
0
)
k
+=
fp
->
ofdm_symbol_size
;
k
*=
12
;
k
+=
13
;
k
*=
2
;
}
for
(
f
=
0
;
f
<
prach_samples
;
f
++
)
{
if
(
k
>=
((
prach_fmt
<
4
)
?
12
:
2
)
*
ofdm_symbol_size
)
k
=
0
;
rx_tmp
.
x
=
0
;
rx_tmp
.
y
=
0
;
for
(
ii
=
0
;
ii
<
desc
->
nb_rx
;
ii
++
)
{
for
(
j
=
0
;
j
<
desc
->
nb_tx
;
j
++
)
{
//RX_RE(k) = TX_RE(k).chF(k).x - TX_IM(k).chF(k).y
rx_tmp
.
x
+=
(
(
tx_sig_re
[
ii
][
k
+
l
*
ofdm_symbol_size
*
12
]
*
desc
->
chF_prach
[
ii
+
(
j
*
desc
->
nb_rx
)][
f
].
x
)
-
(
tx_sig_im
[
ii
][
k
+
l
*
ofdm_symbol_size
*
12
]
*
desc
->
chF_prach
[
ii
+
(
j
*
desc
->
nb_rx
)][
f
].
y
)
);
rx_tmp
.
x
+=
(
tx_sig_re
[
ii
][
f
]
*
desc
->
chF_prach
[
ii
+
(
j
*
desc
->
nb_rx
)][
f
+
(
prach_fmt
<
4
)
?
13
:
3
].
x
)
-
(
tx_sig_im
[
ii
][
f
]
*
desc
->
chF_prach
[
ii
+
(
j
*
desc
->
nb_rx
)][
f
+
(
prach_fmt
<
4
)
?
13
:
3
].
y
);
//RX_IM(k) = TX_IM(k).chF(k).x + TX_RE(k).chF(k).y
rx_tmp
.
y
+=
(
(
tx_sig_im
[
ii
][
k
+
l
*
ofdm_symbol_size
*
12
]
*
desc
->
chF_prach
[
ii
+
(
j
*
desc
->
nb_rx
)][
f
].
x
)
+
(
tx_sig_re
[
ii
][
k
+
l
*
ofdm_symbol_size
*
12
]
*
desc
->
chF_prach
[
ii
+
(
j
*
desc
->
nb_rx
)][
f
].
y
)
);
rx_tmp
.
y
+=
(
tx_sig_im
[
ii
][
f
]
*
desc
->
chF_prach
[
ii
+
(
j
*
desc
->
nb_rx
)][
f
+
(
prach_fmt
<
4
)
?
13
:
3
].
x
)
+
(
tx_sig_re
[
ii
][
f
]
*
desc
->
chF_prach
[
ii
+
(
j
*
desc
->
nb_rx
)][
f
+
(
prach_fmt
<
4
)
?
13
:
3
].
y
);
}
// j
//printf("[multipath prach] k: %d\n",k/2);
rx_sig_re
[
ii
][(
k
++
)
+
l
*
ofdm_symbol_size
*
12
]
=
rx_tmp
.
x
*
path_loss
;
rx_sig_im
[
ii
][(
k
++
)
+
l
*
ofdm_symbol_size
*
12
]
=
rx_tmp
.
y
*
path_loss
;
}
// ii
//printf("[multipath prach] k: %d\n",k/2);
rx_sig_re
[
ii
][
f
]
=
rx_tmp
.
x
*
path_loss
;
rx_sig_im
[
ii
][
f
]
=
rx_tmp
.
y
*
path_loss
;
}
// ii
}
// f
}
//l
}
targets/SIMU/USER/channel_sim.c
View file @
2e29a27c
...
...
@@ -1106,7 +1106,7 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX
tx_prachF
=
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
prach_vars
[
eNB_id
]
->
prachF
;
//write_output("txprachF.m","prach_txF", PHY_vars_UE_g[0][0]->prach_vars[0]->prachF,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12,1,1);
sf_offset
=
subframe
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
*
12
;
//
sf_offset = subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12;
//for (int idx=0;idx<10;idx++) printf("dumping DL raw subframe %d: txdataF[%d] = (%d,%d)\n", subframe, idx, ((short*)&txdataF[0][sf_offset+idx])[0], ((short*)&txdataF[0][sf_offset+idx])[1]);
pointer_firstvalue_PRACH
=
((
12
*
n_ra_prb
)
-
6
*
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
frame_parms
.
N_RB_UL
<
0
)
?
(((
12
*
n_ra_prb
)
-
6
*
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
frame_parms
.
N_RB_UL
+
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
frame_parms
.
ofdm_symbol_size
)
*
12
+
13
)
*
2
:
(((
12
*
n_ra_prb
)
-
6
*
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
frame_parms
.
N_RB_UL
)
*
12
+
13
)
*
2
;
...
...
@@ -1143,10 +1143,14 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
tx_power_dBm
[
subframe
],
PHY_vars_UE_g
[
UE_id
][
CC_id
]
->
tx_total_RE
[
subframe
],
subframe
,
sf_offset
);
for
(
int
idx
=
0
;
idx
<
10
;
idx
++
)
printf
(
"dumping raw PRACH UL tx subframe (input) %d: s_f[%d] = (%f,%f)
\n
"
,
subframe
,
idx
,
s_re_f_prach
[
0
][
idx
],
s_im_f_prach
[
0
][
idx
]);
// write_output("s_re_f_prach.m","s_re_f_prach_txF", s_re_f_prach,frame_parms->ofdm_symbol_size*12,1,1);
multipath_channel_prach
(
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
],
s_re_f_prach
,
s_im_f_prach
,
r_re0_f_prach
,
r_im0_f_prach
,
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
*
12
,
hold_channel
,
eNB_id
,
UE_id
,
CC_id
,
subframe
&
0x1
,
subframe
);
for
(
int
idx
=
0
;
idx
<
10
;
idx
++
)
printf
(
"dumping raw PRACH UL tx subframe (input) %d: s_f[%d] = (%f,%f)
\n
"
,
subframe
,
idx
,
s_re_f_prach
[
0
][
idx
],
s_im_f_prach
[
0
][
idx
]);
for
(
int
idx
=
829
;
idx
<
839
;
idx
++
)
printf
(
"dumping raw PRACH UL tx subframe (input) %d: s_f[%d] = (%f,%f)
\n
"
,
subframe
,
idx
,
s_re_f_prach
[
0
][
idx
],
s_im_f_prach
[
0
][
idx
]);
for
(
int
idx
=
0
;
idx
<
10
;
idx
++
)
printf
(
"dumping raw PRACH UL tx subframe (output) %d: r_f[%d] = (%f,%f)
\n
"
,
subframe
,
idx
,
r_re0_f_prach
[
0
][
idx
],
r_im0_f_prach
[
0
][
idx
]);
for
(
int
idx
=
829
;
idx
<
839
;
idx
++
)
printf
(
"dumping raw PRACH UL tx subframe (output) %d: r_f[%d] = (%f,%f)
\n
"
,
subframe
,
idx
,
r_re0_f_prach
[
0
][
idx
],
r_im0_f_prach
[
0
][
idx
]);
//write_output("txprachF.m","prach_txF", PHY_vars_UE_g[0][0]->prach_vars[0]->prachF,frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,1,1);
rx_pwr
=
signal_energy_fp2
(
UE2eNB
[
UE_id
][
eNB_id
][
CC_id
]
->
chF
[
0
],(
12
*
frame_parms
->
N_RB_DL
+
1
))
*
(
12
*
frame_parms
->
N_RB_DL
+
1
);
LOG_D
(
OCM
,
"[SIM][UL] subframe %d Channel UE %d => eNB %d : %f dB (hold %d,length %d, PL %f)
\n
"
,
subframe
,
UE_id
,
eNB_id
,
10
*
log10
(
rx_pwr
),
...
...
@@ -1190,6 +1194,7 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX
1e3
/
UE2eNB
[
0
][
eNB_id
][
CC_id
]
->
sampling_rate
,
// sampling time (ns)
(
double
)
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
rx_total_gain_dB
-
66
.
227
);
// rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
#ifdef DEBUG_SIM
rx_pwr
=
signal_energy_fp
(
r_re_p_f_prach
,
r_im_p_f_prach
,
nb_antennas_rx
,
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
*
12
,
0
)
*
(
double
)
frame_parms
->
ofdm_symbol_size
/
(
12
.
0
*
frame_parms
->
N_RB_DL
);
...
...
@@ -1197,16 +1202,16 @@ void do_UL_prach(channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX][MAX
#endif
rx_prachF
=
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
prach_vars
.
prachF
;
sf_offset
=
subframe
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
*
12
;
adc_prach
(
r_re_p_f_prach
,
//
sf_offset = subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti*12;
adc_prach
(
r_re_p_f_prach
,
r_im_p_f_prach
,
0
,
sf_offset
,
0
,
(
unsigned
int
*
)
rx_prachF
,
nb_antennas_rx
,
subframe
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
*
12
,
(
prach_fmt
<
4
)
?
839
:
139
,
12
);
write_output
(
"rxprachF.m"
,
"prach_rxF"
,
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
prach_vars
.
prachF
,
12
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
,
1
,
16
);
write_output
(
"rxprachF.m"
,
"prach_rxF"
,
PHY_vars_eNB_g
[
eNB_id
][
CC_id
]
->
prach_vars
.
prachF
,
4
*
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_tti
,
1
,
16
);
#ifdef DEBUG_SIM
//rx_pwr2 = signal_energy(rxdataF[0]+sf_offset,subframe*frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti)*(double)frame_parms->ofdm_symbol_size/(12.0*frame_parms->N_RB_DL);
...
...
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