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
Michael Black
OpenXG-RAN
Commits
a05f7e14
Commit
a05f7e14
authored
Sep 03, 2020
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/nr_ue_txdata_cleanup' into develop_integration_2020_w36
parents
ec1a7cad
070ee365
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
88 additions
and
466 deletions
+88
-466
executables/nr-ue.c
executables/nr-ue.c
+43
-38
executables/nr-uesoftmodem.c
executables/nr-uesoftmodem.c
+0
-6
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+0
-17
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+3
-6
openair1/PHY/NR_UE_TRANSPORT/nr_prach.c
openair1/PHY/NR_UE_TRANSPORT/nr_prach.c
+8
-47
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+17
-54
openair1/PHY/TOOLS/nr_phy_scope.c
openair1/PHY/TOOLS/nr_phy_scope.c
+15
-22
openair1/PHY/defs_UE.h
openair1/PHY/defs_UE.h
+0
-50
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+0
-55
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+1
-170
openair1/SIMULATION/NR_PHY/prachsim.c
openair1/SIMULATION/NR_PHY/prachsim.c
+1
-1
No files found.
executables/nr-ue.c
View file @
a05f7e14
...
...
@@ -471,21 +471,22 @@ void UE_processing(void *arg) {
UE_nr_rxtx_proc_t
*
proc
=
&
rxtxD
->
proc
;
PHY_VARS_NR_UE
*
UE
=
rxtxD
->
UE
;
uint8_t
gNB_id
=
0
;
// params for UL time alignment procedure
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
=
&
UE
->
ul_time_alignment
[
gNB_id
];
uint8_t
numerology
=
UE
->
frame_parms
.
numerology_index
;
uint16_t
bwp_ul_NB_RB
=
UE
->
frame_parms
.
N_RB_UL
;
int
slot_tx
=
proc
->
nr_tti_tx
;
int
frame_tx
=
proc
->
frame_tx
;
processSlotRX
(
UE
,
proc
);
processSlotTX
(
UE
,
proc
);
/* UL time alignment
// If the current tx frame and slot match the TA configuration in ul_time_alignment
// then timing advance is processed and set to be applied in the next UL transmission */
if
(
UE
->
mac_enabled
==
1
)
{
uint8_t
gNB_id
=
0
;
NR_UL_TIME_ALIGNMENT_t
*
ul_time_alignment
=
&
UE
->
ul_time_alignment
[
gNB_id
];
int
slot_tx
=
proc
->
nr_tti_tx
;
int
frame_tx
=
proc
->
frame_tx
;
if
(
frame_tx
==
ul_time_alignment
->
ta_frame
&&
slot_tx
==
ul_time_alignment
->
ta_slot
)
{
uint8_t
numerology
=
UE
->
frame_parms
.
numerology_index
;
uint16_t
bwp_ul_NB_RB
=
UE
->
frame_parms
.
N_RB_UL
;
LOG_D
(
PHY
,
"Applying timing advance -- frame %d -- slot %d
\n
"
,
frame_tx
,
slot_tx
);
//if (nfapi_mode!=3){
...
...
@@ -495,9 +496,6 @@ void UE_processing(void *arg) {
//}
}
}
processSlotRX
(
UE
,
proc
);
processSlotTX
(
UE
,
proc
);
}
void
dummyWrite
(
PHY_VARS_NR_UE
*
UE
,
openair0_timestamp
timestamp
,
int
writeBlockSize
)
{
...
...
@@ -622,6 +620,7 @@ void *UE_thread(void *arg) {
notifiedFIFO_t
freeBlocks
;
initNotifiedFIFO_nothreadSafe
(
&
freeBlocks
);
NR_UE_MAC_INST_t
*
mac
=
get_mac_inst
(
0
);
int
timing_advance
=
UE
->
timing_advance
;
for
(
int
i
=
0
;
i
<
RX_NB_TH
+
1
;
i
++
)
// RX_NB_TH working + 1 we are making to be pushed
pushNotifiedFIFO_nothreadSafe
(
&
freeBlocks
,
...
...
@@ -726,21 +725,26 @@ void *UE_thread(void *arg) {
for
(
int
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_tx
;
i
++
)
txp
[
i
]
=
(
void
*
)
&
UE
->
common_vars
.
txdata
[
i
][
UE
->
frame_parms
.
get_samples_slot_timestamp
(
((
curMsg
->
proc
.
nr_tti_rx
+
DURATION_RX_TO_TX
-
2
)
%
nb_slot_frame
),
&
UE
->
frame_parms
,
0
)];
((
slot_nr
+
DURATION_RX_TO_TX
-
RX_NB_TH
)
%
nb_slot_frame
),
&
UE
->
frame_parms
,
0
)];
int
readBlockSize
,
writeBlockSize
;
if
(
slot_nr
<
(
nb_slot_frame
-
1
))
{
readBlockSize
=
get_readBlockSize
(
slot_nr
,
&
UE
->
frame_parms
);
writeBlockSize
=
UE
->
frame_parms
.
get_samples_per_slot
(
curMsg
->
proc
.
nr_tti_tx
,
&
UE
->
frame_parms
);
writeBlockSize
=
UE
->
frame_parms
.
get_samples_per_slot
(
(
slot_nr
+
DURATION_RX_TO_TX
-
RX_NB_TH
)
%
nb_slot_frame
,
&
UE
->
frame_parms
);
}
else
{
UE
->
rx_offset_diff
=
computeSamplesShift
(
UE
);
readBlockSize
=
get_readBlockSize
(
slot_nr
,
&
UE
->
frame_parms
)
-
UE
->
rx_offset_diff
;
writeBlockSize
=
UE
->
frame_parms
.
get_samples_per_slot
(
curMsg
->
proc
.
nr_tti_tx
,
&
UE
->
frame_parms
)
-
writeBlockSize
=
UE
->
frame_parms
.
get_samples_per_slot
(
(
slot_nr
+
DURATION_RX_TO_TX
-
RX_NB_TH
)
%
nb_slot_frame
,
&
UE
->
frame_parms
)
-
UE
->
rx_offset_diff
;
}
if
(
UE
->
timing_advance
!=
timing_advance
)
{
writeBlockSize
-=
UE
->
timing_advance
-
timing_advance
;
timing_advance
=
UE
->
timing_advance
;
}
AssertFatal
(
readBlockSize
==
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
&
timestamp
,
...
...
@@ -748,29 +752,19 @@ void *UE_thread(void *arg) {
readBlockSize
,
UE
->
frame_parms
.
nb_antennas_rx
),
""
);
AssertFatal
(
writeBlockSize
==
UE
->
rfdevice
.
trx_write_func
(
&
UE
->
rfdevice
,
timestamp
+
UE
->
frame_parms
.
get_samples_slot_timestamp
(
slot_nr
,
&
UE
->
frame_parms
,
DURATION_RX_TO_TX
-
2
)
-
firstSymSamp
-
openair0_cfg
[
0
].
tx_sample_advance
,
txp
,
writeBlockSize
,
UE
->
frame_parms
.
nb_antennas_tx
,
1
),
""
);
if
(
slot_nr
==
(
nb_slot_frame
-
1
))
{
// read in first symbol of next frame and adjust for timing drift
int
first_symbols
=
UE
->
frame_parms
.
ofdm_symbol_size
+
UE
->
frame_parms
.
nb_prefix_samples0
;
// first symbol of every frames
if
(
first_symbols
>
0
)
if
(
first_symbols
>
0
)
{
openair0_timestamp
ignore_timestamp
;
AssertFatal
(
first_symbols
==
UE
->
rfdevice
.
trx_read_func
(
&
UE
->
rfdevice
,
&
timestamp
,
&
ignore_
timestamp
,
(
void
**
)
UE
->
common_vars
.
rxdata
,
first_symbols
,
UE
->
frame_parms
.
nb_antennas_rx
),
""
);
else
}
else
LOG_E
(
PHY
,
"can't compensate: diff =%d
\n
"
,
first_symbols
);
}
...
...
@@ -781,18 +775,15 @@ void *UE_thread(void *arg) {
notifiedFIFO_elt_t
*
res
;
while
(
nbSlotProcessing
>=
RX_NB_TH
)
{
if
(
(
res
=
tryPullTpool
(
&
nf
,
Tpool
))
!=
NULL
)
{
nbSlotProcessing
--
;
processingData_t
*
tmp
=
(
processingData_t
*
)
res
->
msgData
;
if
(
tmp
->
proc
.
decoded_frame_rx
!=
-
1
)
decoded_frame_rx
=
(((
mac
->
mib
->
systemFrameNumber
.
buf
[
0
]
>>
mac
->
mib
->
systemFrameNumber
.
bits_unused
)
<<
4
)
|
tmp
->
proc
.
decoded_frame_rx
);
//decoded_frame_rx=tmp->proc.decoded_frame_rx;
res
=
pullTpool
(
&
nf
,
Tpool
);
nbSlotProcessing
--
;
processingData_t
*
tmp
=
(
processingData_t
*
)
res
->
msgData
;
pushNotifiedFIFO_nothreadSafe
(
&
freeBlocks
,
res
);
}
if
(
tmp
->
proc
.
decoded_frame_rx
!=
-
1
)
decoded_frame_rx
=
(((
mac
->
mib
->
systemFrameNumber
.
buf
[
0
]
>>
mac
->
mib
->
systemFrameNumber
.
bits_unused
)
<<
4
)
|
tmp
->
proc
.
decoded_frame_rx
);
//decoded_frame_rx=tmp->proc.decoded_frame_rx;
usleep
(
200
);
pushNotifiedFIFO_nothreadSafe
(
&
freeBlocks
,
res
);
}
if
(
(
decoded_frame_rx
!=
curMsg
->
proc
.
frame_rx
)
&&
...
...
@@ -801,6 +792,20 @@ void *UE_thread(void *arg) {
LOG_E
(
PHY
,
"Decoded frame index (%d) is not compatible with current context (%d), UE should go back to synch mode
\n
"
,
decoded_frame_rx
,
curMsg
->
proc
.
frame_rx
);
AssertFatal
(
writeBlockSize
==
UE
->
rfdevice
.
trx_write_func
(
&
UE
->
rfdevice
,
timestamp
+
UE
->
frame_parms
.
get_samples_slot_timestamp
(
slot_nr
,
&
UE
->
frame_parms
,
DURATION_RX_TO_TX
-
RX_NB_TH
)
-
firstSymSamp
-
openair0_cfg
[
0
].
tx_sample_advance
-
UE
->
N_TA_offset
-
UE
->
timing_advance
,
txp
,
writeBlockSize
,
UE
->
frame_parms
.
nb_antennas_tx
,
1
),
""
);
for
(
int
i
=
0
;
i
<
UE
->
frame_parms
.
nb_antennas_tx
;
i
++
)
memset
(
txp
[
i
],
0
,
writeBlockSize
);
nbSlotProcessing
++
;
msgToPush
->
key
=
slot_nr
;
pushTpool
(
Tpool
,
msgToPush
);
...
...
executables/nr-uesoftmodem.c
View file @
a05f7e14
...
...
@@ -768,13 +768,7 @@ int main( int argc, char **argv ) {
for
(
int
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
PHY_vars_UE_g
[
0
][
CC_id
]
->
rf_map
.
card
=
0
;
PHY_vars_UE_g
[
0
][
CC_id
]
->
rf_map
.
chain
=
CC_id
+
chain_offset
;
#if defined(OAI_USRP) || defined(OAI_ADRV9371_ZC706)
PHY_vars_UE_g
[
0
][
CC_id
]
->
hw_timing_advance
=
timing_advance
;
PHY_vars_UE_g
[
0
][
CC_id
]
->
timing_advance
=
timing_advance
;
#else
PHY_vars_UE_g
[
0
][
CC_id
]
->
hw_timing_advance
=
160
;
#endif
}
init_NR_UE_threads
(
1
);
...
...
openair1/PHY/INIT/nr_init_ue.c
View file @
a05f7e14
...
...
@@ -643,10 +643,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
// create shortcuts
NR_DL_FRAME_PARMS
*
const
fp
=
&
ue
->
frame_parms
;
NR_UE_COMMON
*
const
common_vars
=
&
ue
->
common_vars
;
NR_UE_PDSCH
**
const
pdsch_vars_SI
=
ue
->
pdsch_vars_SI
;
NR_UE_PDSCH
**
const
pdsch_vars_ra
=
ue
->
pdsch_vars_ra
;
NR_UE_PDSCH
**
const
pdsch_vars_p
=
ue
->
pdsch_vars_p
;
NR_UE_PDSCH
**
const
pdsch_vars_mch
=
ue
->
pdsch_vars_MCH
;
NR_UE_PBCH
**
const
pbch_vars
=
ue
->
pbch_vars
;
NR_UE_PRACH
**
const
prach_vars
=
ue
->
prach_vars
;
int
i
,
j
,
k
,
l
,
slot
,
symb
,
q
;
...
...
@@ -799,10 +795,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
ue
->
pdcch_vars
[
th_id
][
eNB_id
]
=
(
NR_UE_PDCCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PDCCH
));
}
pdsch_vars_SI
[
eNB_id
]
=
(
NR_UE_PDSCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PDSCH
));
pdsch_vars_ra
[
eNB_id
]
=
(
NR_UE_PDSCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PDSCH
));
pdsch_vars_p
[
eNB_id
]
=
(
NR_UE_PDSCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PDSCH
));
pdsch_vars_mch
[
eNB_id
]
=
(
NR_UE_PDSCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PDSCH
));
prach_vars
[
eNB_id
]
=
(
NR_UE_PRACH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PRACH
));
pbch_vars
[
eNB_id
]
=
(
NR_UE_PBCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PBCH
));
...
...
@@ -864,11 +856,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
}
}
phy_init_nr_ue__PDSCH
(
pdsch_vars_SI
[
eNB_id
],
fp
);
phy_init_nr_ue__PDSCH
(
pdsch_vars_ra
[
eNB_id
],
fp
);
phy_init_nr_ue__PDSCH
(
pdsch_vars_p
[
eNB_id
],
fp
);
phy_init_nr_ue__PDSCH
(
pdsch_vars_mch
[
eNB_id
],
fp
);
// 100 PRBs * 12 REs/PRB * 4 PDCCH SYMBOLS * 2 LLRs/RE
for
(
th_id
=
0
;
th_id
<
RX_NB_TH_MAX
;
th_id
++
)
{
ue
->
pdcch_vars
[
th_id
][
eNB_id
]
->
llr
=
(
int16_t
*
)
malloc16_clear
(
2
*
4
*
100
*
12
*
sizeof
(
uint16_t
)
);
...
...
@@ -932,10 +919,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
ue
->
pdsch_vars
[
th_id
][
eNB_id
]
=
(
NR_UE_PDSCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PDSCH
)
);
}
pdsch_vars_SI
[
eNB_id
]
=
(
NR_UE_PDSCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PDSCH
)
);
pdsch_vars_ra
[
eNB_id
]
=
(
NR_UE_PDSCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PDSCH
)
);
pdsch_vars_p
[
eNB_id
]
=
(
NR_UE_PDSCH
*
)
malloc16_clear
(
sizeof
(
NR_UE_PDSCH
)
);
if
(
abstraction_flag
==
0
)
{
for
(
th_id
=
0
;
th_id
<
RX_NB_TH_MAX
;
th_id
++
)
{
//phy_init_lte_ue__PDSCH( ue->pdsch_vars[th_id][eNB_id], fp );
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
a05f7e14
...
...
@@ -159,20 +159,17 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
switch
(
type
)
{
case
SI_PDSCH
:
pdsch_vars
=
ue
->
pdsch_vars
_SI
;
pdsch_vars
=
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]]
;
dlsch
=
&
ue
->
dlsch_SI
[
eNB_id
];
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
break
;
case
RA_PDSCH
:
pdsch_vars
=
ue
->
pdsch_vars
_ra
;
pdsch_vars
=
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]]
;
dlsch
=
&
ue
->
dlsch_ra
[
eNB_id
];
dlsch0_harq
=
dlsch
[
0
]
->
harq_processes
[
harq_pid
];
// WIP TBR Hotfix
memcpy
((
void
*
)
&
pdsch_vars
[
eNB_id
]
->
dl_ch_estimates
[
0
][
ue
->
frame_parms
.
ofdm_symbol_size
*
2
],
(
void
*
)
&
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]][
0
]
->
dl_ch_estimates
[
0
][
ue
->
frame_parms
.
ofdm_symbol_size
*
2
],
ue
->
frame_parms
.
ofdm_symbol_size
*
sizeof
(
int32_t
));
break
;
case
PDSCH
:
...
...
@@ -189,7 +186,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
break
;
}
if
(
dlsch1_harq
){
if
(
dlsch
0_harq
&&
dlsch
1_harq
){
//printf("status TB0 = %d, status TB1 = %d \n", dlsch[0]->harq_processes[harq_pid]->status, dlsch[1]->harq_processes[harq_pid]->status);
LOG_D
(
PHY
,
"AbsSubframe %d.%d / Sym %d harq_pid %d, harq status %d.%d
\n
"
,
frame
,
nr_tti_rx
,
symbol
,
harq_pid
,
dlsch0_harq
->
status
,
dlsch1_harq
->
status
);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_prach.c
View file @
a05f7e14
...
...
@@ -71,7 +71,7 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
int16_t
prach_tmp
[
98304
*
2
*
4
]
__attribute__
((
aligned
(
32
)));
int16_t
Ncp
=
0
,
amp
,
*
prach
,
*
prach2
,
*
prachF
,
*
Xu
;
int32_t
Xu_re
,
Xu_im
,
samp_count
;
int32_t
Xu_re
,
Xu_im
;
int
prach_start
,
prach_sequence_length
,
i
,
prach_len
,
dftlen
,
mu
,
kbar
,
K
,
n_ra_prb
,
k
;
//int restricted_Type;
...
...
@@ -103,22 +103,7 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
nrUE_config
->
prach_config
.
num_prach_fd_occasions_list
[
fd_occasion
].
prach_root_sequence_index
,
ue
->
X_u
);
if
(
mu
==
0
)
samp_count
=
fp
->
samples_per_subframe
;
else
samp_count
=
(
slot
%
(
fp
->
slots_per_subframe
/
2
))
?
fp
->
samples_per_slotN0
:
fp
->
samples_per_slot0
;
#ifdef OAI_USRP
prach_start
=
(
ue
->
rx_offset
+
slot
*
samp_count
-
ue
->
hw_timing_advance
-
ue
->
N_TA_offset
);
#else //normal case (simulation)
prach_start
=
slot
*
samp_count
-
ue
->
N_TA_offset
;
#endif
if
(
prach_start
<
0
)
prach_start
+=
(
fp
->
samples_per_subframe
*
NR_NUMBER_OF_SUBFRAMES_PER_FRAME
);
if
(
prach_start
>=
(
fp
->
samples_per_subframe
*
NR_NUMBER_OF_SUBFRAMES_PER_FRAME
))
prach_start
-=
(
fp
->
samples_per_subframe
*
NR_NUMBER_OF_SUBFRAMES_PER_FRAME
);
prach_start
=
fp
->
get_samples_slot_timestamp
(
slot
,
fp
,
0
);
// First compute physical root sequence
/************************************************************************
...
...
@@ -796,40 +781,16 @@ int32_t generate_nr_prach(PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t slot){
}
#ifdef NR_PRACH_DEBUG
LOG_I
(
PHY
,
"PRACH [UE %d] N_RB_UL %d prach_start %d, prach_len %d
, rx_offset %d, hw_timing_advance %d, N_TA_offset %d
\n
"
,
Mod_id
,
LOG_I
(
PHY
,
"PRACH [UE %d] N_RB_UL %d prach_start %d, prach_len %d
\n
"
,
Mod_id
,
fp
->
N_RB_UL
,
prach_start
,
prach_len
,
ue
->
rx_offset
,
ue
->
hw_timing_advance
,
ue
->
N_TA_offset
);
prach_len
);
#endif
#if defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
int
j
,
overflow
=
prach_start
+
prach_len
-
NR_NUMBER_OF_SUBFRAMES_PER_FRAME
*
fp
->
samples_per_subframe
;
#ifdef NR_PRACH_DEBUG
LOG_I
(
PHY
,
"PRACH [UE %d] overflow = %d
\n
"
,
Mod_id
,
overflow
);
#endif
// prach_start=414.730, overflow=-39470 prach_len=6600 fp->samples_per_subframe*NR_NUMBER_OF_SUBFRAMES_PER_FRAME 460.800 prach_start+prach_len 421.330 fp->samples_per_subframe 46080
// from prach_start=414.730 to prach_start+prach_len 421.330
for
(
i
=
prach_start
,
j
=
0
;
i
<
min
(
fp
->
samples_per_subframe
*
NR_NUMBER_OF_SUBFRAMES_PER_FRAME
,
prach_start
+
prach_len
);
i
++
,
j
++
)
{
((
int16_t
*
)
ue
->
common_vars
.
txdata
[
0
])[
2
*
i
]
=
prach
[
2
*
j
];
((
int16_t
*
)
ue
->
common_vars
.
txdata
[
0
])[
2
*
i
+
1
]
=
prach
[
2
*
j
+
1
];
}
for
(
i
=
0
;
i
<
overflow
;
i
++
,
j
++
)
{
((
int16_t
*
)
ue
->
common_vars
.
txdata
[
0
])[
2
*
i
]
=
prach
[
2
*
j
];
((
int16_t
*
)
ue
->
common_vars
.
txdata
[
0
])[
2
*
i
+
1
]
=
prach
[
2
*
j
+
1
];
}
#else // simulators
for
(
i
=
0
;
i
<
prach_len
;
i
++
)
{
((
int16_t
*
)(
&
ue
->
common_vars
.
txdata
[
0
][
prach_start
]))[
2
*
i
]
=
prach
[
2
*
i
];
((
int16_t
*
)(
&
ue
->
common_vars
.
txdata
[
0
][
prach_start
]))[
2
*
i
+
1
]
=
prach
[
2
*
i
+
1
];
}
#endif
for
(
i
=
0
;
i
<
prach_len
;
i
++
)
{
((
int16_t
*
)(
&
ue
->
common_vars
.
txdata
[
0
][
prach_start
]))[
2
*
i
]
=
prach
[
2
*
i
];
((
int16_t
*
)(
&
ue
->
common_vars
.
txdata
[
0
][
prach_start
]))[
2
*
i
+
1
]
=
prach
[
2
*
i
+
1
];
}
//printf("----------------------\n");
//for(int ii = prach_start; ii<2*(prach_start + prach_len); ii++){
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
View file @
a05f7e14
...
...
@@ -432,21 +432,12 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE,
int
tx_offset
,
ap
;
int32_t
**
txdata
;
int32_t
**
txdataF
;
int
timing_advance
;
uint8_t
Nl
=
UE
->
ulsch
[
thread_id
][
gNB_id
][
0
]
->
harq_processes
[
harq_pid
]
->
pusch_pdu
.
nrOfLayers
;
// cw 0
/////////////////////////IFFT///////////////////////
///////////
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
timing_advance
=
UE
->
timing_advance
;
#else
timing_advance
=
0
;
#endif
tx_offset
=
frame_parms
->
get_samples_slot_timestamp
(
slot
,
frame_parms
,
0
)
-
timing_advance
;
if
(
tx_offset
<
0
)
tx_offset
+=
frame_parms
->
samples_per_frame
;
tx_offset
=
frame_parms
->
get_samples_slot_timestamp
(
slot
,
frame_parms
,
0
);
// clear the transmit data array for the current subframe
/*for (int aa=0; aa<UE->frame_parms.nb_antennas_tx; aa++) {
...
...
@@ -458,6 +449,7 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE,
txdata
=
UE
->
common_vars
.
txdata
;
txdataF
=
UE
->
common_vars
.
txdataF
;
#if 0
int symb_offset = (slot%frame_parms->slots_per_subframe)*frame_parms->symbols_per_slot;
for(ap = 0; ap < Nl; ap++) {
for (int s=0;s<NR_NUMBER_OF_SYMBOLS_PER_SLOT;s++){
...
...
@@ -470,50 +462,21 @@ uint8_t nr_ue_pusch_common_procedures(PHY_VARS_NR_UE *UE,
15);
}
}
#endif
if
(
UE
->
N_TA_offset
>
tx_offset
)
{
int32_t
*
tmp_idft_out
=
(
int32_t
*
)
malloc16
(
frame_parms
->
get_samples_per_slot
(
slot
,
frame_parms
)
*
sizeof
(
int32_t
));
for
(
ap
=
0
;
ap
<
Nl
;
ap
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
{
// extended cyclic prefix
PHY_ofdm_mod
(
txdataF
[
ap
],
tmp_idft_out
,
frame_parms
->
ofdm_symbol_size
,
12
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
}
else
{
// normal cyclic prefix
nr_normal_prefix_mod
(
txdataF
[
ap
],
tmp_idft_out
,
14
,
frame_parms
);
}
memcpy
((
void
*
)
&
txdata
[
ap
][
frame_parms
->
samples_per_frame
-
UE
->
N_TA_offset
+
tx_offset
],
(
void
*
)
tmp_idft_out
,
(
UE
->
N_TA_offset
-
tx_offset
)
*
sizeof
(
int32_t
));
memcpy
((
void
*
)
&
txdata
[
ap
][
0
],
(
void
*
)
&
tmp_idft_out
[
UE
->
N_TA_offset
-
tx_offset
],
(
frame_parms
->
get_samples_per_slot
(
slot
,
frame_parms
)
-
UE
->
N_TA_offset
+
tx_offset
)
*
sizeof
(
int32_t
));
}
free
(
tmp_idft_out
);
}
else
{
// UE->N_TA_offset <= tx_offset
for
(
ap
=
0
;
ap
<
Nl
;
ap
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
{
// extended cyclic prefix
PHY_ofdm_mod
(
txdataF
[
ap
],
&
txdata
[
ap
][
tx_offset
-
UE
->
N_TA_offset
],
frame_parms
->
ofdm_symbol_size
,
12
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
}
else
{
// normal cyclic prefix
nr_normal_prefix_mod
(
txdataF
[
ap
],
&
txdata
[
ap
][
tx_offset
-
UE
->
N_TA_offset
],
14
,
frame_parms
);
}
for
(
ap
=
0
;
ap
<
Nl
;
ap
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
{
// extended cyclic prefix
PHY_ofdm_mod
(
txdataF
[
ap
],
&
txdata
[
ap
][
tx_offset
],
frame_parms
->
ofdm_symbol_size
,
12
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
}
else
{
// normal cyclic prefix
nr_normal_prefix_mod
(
txdataF
[
ap
],
&
txdata
[
ap
][
tx_offset
],
14
,
frame_parms
);
}
}
...
...
openair1/PHY/TOOLS/nr_phy_scope.c
View file @
a05f7e14
...
...
@@ -525,32 +525,25 @@ static void uePcchLLR (OAIgraph_t *graph, PHY_VARS_NR_UE *phy_vars_ue, int eNB_
if
(
!
phy_vars_ue
->
pdcch_vars
[
0
][
eNB_id
]
->
llr
)
return
;
NR_DL_FRAME_PARMS
*
frame_parms
=
&
phy_vars_ue
->
frame_parms
;
uint8_t
nb_antennas_rx
=
frame_parms
->
nb_antennas_rx
;
uint8_t
nb_antennas_tx
=
frame_parms
->
nb_antennas_tx
;
scopeSample_t
**
chest_f
=
(
scopeSample_t
**
)
phy_vars_ue
->
pbch_vars
[
eNB_id
]
->
dl_ch_estimates
;
int
ind
=
0
;
float
chest_f_abs
[
frame_parms
->
ofdm_symbol_size
];
float
freq
[
frame_parms
->
ofdm_symbol_size
];
int
num_re
=
4
*
273
*
12
;
// 12*frame_parms->N_RB_DL*num_pdcch_symbols
int
Qm
=
2
;
int
coded_bits_per_codeword
=
num_re
*
Qm
;
localBuff
(
llr
,
coded_bits_per_codeword
*
RX_NB_TH_MAX
);
localBuff
(
bit
,
coded_bits_per_codeword
*
RX_NB_TH_MAX
);
int
base
=
0
;
for
(
int
atx
=
0
;
atx
<
nb_antennas_tx
;
atx
++
)
{
for
(
int
arx
=
0
;
arx
<
nb_antennas_rx
;
arx
++
)
{
if
(
chest_f
[(
atx
<<
1
)
+
arx
]
!=
NULL
)
{
for
(
int
k
=
0
;
k
<
frame_parms
->
ofdm_symbol_size
;
k
++
)
{
freq
[
ind
]
=
(
float
)
ind
;
chest_f_abs
[
ind
]
=
(
short
)
10
*
log10
(
1
.
0
+
SquaredNorm
(
chest_f
[(
atx
<<
1
)
+
arx
][
6144
+
k
]));
ind
++
;
}
}
for
(
int
thr
=
0
;
thr
<
RX_NB_TH_MAX
;
thr
++
)
{
int16_t
*
pdcch_llr
=
(
int16_t
*
)
phy_vars_ue
->
pdcch_vars
[
thr
][
eNB_id
]
->
llr
;
for
(
int
i
=
0
;
i
<
coded_bits_per_codeword
;
i
++
)
{
llr
[
base
+
i
]
=
(
float
)
pdcch_llr
[
i
];
bit
[
base
+
i
]
=
(
float
)
base
+
i
;
}
base
+=
coded_bits_per_codeword
;
}
// tx antenna 0
//fl_set_xyplot_xbounds(form->chest_f,0,nb_antennas_rx*nb_antennas_tx*nsymb_ce);
//fl_set_xyplot_xtics(form->chest_f,nb_antennas_rx*nb_antennas_tx*frame_parms->symbols_per_tti,2);
// fl_set_xyplot_xtics(form->chest_f,nb_antennas_rx*nb_antennas_tx*2,2);
//fl_set_xyplot_xgrid(form->chest_f,FL_GRID_MAJOR);
oai_xygraph
(
graph
,
freq
,
chest_f_abs
,
frame_parms
->
ofdm_symbol_size
,
0
,
10
);
oai_xygraph
(
graph
,
bit
,
llr
,
base
,
0
,
10
);
}
static
void
uePcchIQ
(
OAIgraph_t
*
graph
,
PHY_VARS_NR_UE
*
phy_vars_ue
,
int
eNB_id
,
int
UE_id
)
{
...
...
openair1/PHY/defs_UE.h
View file @
a05f7e14
...
...
@@ -452,55 +452,6 @@ typedef struct {
uint32_t
llr_length
[
14
];
}
LTE_UE_PDSCH
;
typedef
struct
{
/// \brief Received frequency-domain signal after extraction.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
int32_t
**
rxdataF_ext
;
/// \brief Received frequency-domain signal after extraction and channel compensation.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
double
**
rxdataF_comp
;
/// \brief Downlink channel estimates extracted in PRBS.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
int32_t
**
dl_ch_estimates_ext
;
/// \brief Downlink cross-correlation of MIMO channel estimates (unquantized PMI) extracted in PRBS.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
double
**
dl_ch_rho_ext
;
/// \brief Downlink PMIs extracted in PRBS and grouped in subbands.
/// - first index: ressource block [0..N_RB_DL[
uint8_t
*
pmi_ext
;
/// \brief Magnitude of Downlink Channel (16QAM level/First 64QAM level).
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
double
**
dl_ch_mag
;
/// \brief Magnitude of Downlink Channel (2nd 64QAM level).
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
double
**
dl_ch_magb
;
/// \brief Cross-correlation of two eNB signals.
/// - first index: rx antenna [0..nb_antennas_rx[
/// - second index: ? [0..]
double
**
rho
;
/// never used... always send dl_ch_rho_ext instead...
double
**
rho_i
;
/// \brief Pointers to llr vectors (2 TBs).
/// - first index: ? [0..1] (hard coded)
/// - second index: ? [0..1179743] (hard coded)
int16_t
*
llr
[
2
];
/// \f$\log_2(\max|H_i|^2)\f$
uint8_t
log2_maxh
;
/// \brief Pointers to llr vectors (128-bit alignment).
/// - first index: ? [0..0] (hard coded)
/// - second index: ? [0..]
int16_t
**
llr128
;
//uint32_t *rb_alloc;
//uint8_t Qm[2];
//MIMO_mode_t mimo_mode;
}
LTE_UE_PDSCH_FLP
;
typedef
struct
{
/// \brief Pointers to extracted PDCCH symbols in frequency-domain.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
...
...
@@ -667,7 +618,6 @@ typedef struct {
uint8_t
current_thread_id
[
10
];
LTE_UE_PDSCH
*
pdsch_vars
[
RX_NB_TH_MAX
][
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
// two RxTx Threads
LTE_UE_PDSCH_FLP
*
pdsch_vars_flp
[
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
LTE_UE_PDSCH
*
pdsch_vars_SI
[
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
LTE_UE_PDSCH
*
pdsch_vars_ra
[
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
LTE_UE_PDSCH
*
pdsch_vars_p
[
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
...
...
openair1/PHY/defs_nr_UE.h
View file @
a05f7e14
...
...
@@ -416,55 +416,6 @@ typedef struct {
uint32_t
llr_length
[
14
];
}
NR_UE_PDSCH
;
typedef
struct
{
/// \brief Received frequency-domain signal after extraction.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
int32_t
**
rxdataF_ext
;
/// \brief Received frequency-domain signal after extraction and channel compensation.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
double
**
rxdataF_comp
;
/// \brief Downlink channel estimates extracted in PRBS.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
int32_t
**
dl_ch_estimates_ext
;
/// \brief Downlink cross-correlation of MIMO channel estimates (unquantized PMI) extracted in PRBS.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
double
**
dl_ch_rho_ext
;
/// \brief Downlink PMIs extracted in PRBS and grouped in subbands.
/// - first index: ressource block [0..N_RB_DL[
uint8_t
*
pmi_ext
;
/// \brief Magnitude of Downlink Channel (16QAM level/First 64QAM level).
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
double
**
dl_ch_mag
;
/// \brief Magnitude of Downlink Channel (2nd 64QAM level).
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
/// - second index: ? [0..]
double
**
dl_ch_magb
;
/// \brief Cross-correlation of two eNB signals.
/// - first index: rx antenna [0..nb_antennas_rx[
/// - second index: ? [0..]
double
**
rho
;
/// never used... always send dl_ch_rho_ext instead...
double
**
rho_i
;
/// \brief Pointers to llr vectors (2 TBs).
/// - first index: ? [0..1] (hard coded)
/// - second index: ? [0..1179743] (hard coded)
int16_t
*
llr
[
2
];
/// \f$\log_2(\max|H_i|^2)\f$
uint8_t
log2_maxh
;
/// \brief Pointers to llr vectors (128-bit alignment).
/// - first index: ? [0..0] (hard coded)
/// - second index: ? [0..]
int16_t
**
llr128
;
//uint32_t *rb_alloc;
//uint8_t Qm[2];
//MIMO_mode_t mimo_mode;
}
NR_UE_PDSCH_FLP
;
#define NR_PDCCH_DEFS_NR_UE
#define NR_NBR_CORESET_ACT_BWP 3 // The number of CoreSets per BWP is limited to 3 (including initial CORESET: ControlResourceId 0)
#define NR_NBR_SEARCHSPACE_ACT_BWP 10 // The number of SearchSpaces per BWP is limited to 10 (including initial SEARCHSPACE: SearchSpaceId 0)
...
...
@@ -902,11 +853,6 @@ typedef struct {
t_nrPolar_params
*
polarList
;
NR_UE_PDSCH
*
pdsch_vars
[
RX_NB_TH_MAX
][
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
// two RxTx Threads
NR_UE_PDSCH_FLP
*
pdsch_vars_flp
[
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
NR_UE_PDSCH
*
pdsch_vars_SI
[
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
NR_UE_PDSCH
*
pdsch_vars_ra
[
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
NR_UE_PDSCH
*
pdsch_vars_p
[
NUMBER_OF_CONNECTED_eNB_MAX
+
1
];
NR_UE_PDSCH
*
pdsch_vars_MCH
[
NUMBER_OF_CONNECTED_eNB_MAX
];
NR_UE_PBCH
*
pbch_vars
[
NUMBER_OF_CONNECTED_eNB_MAX
];
NR_UE_PDCCH
*
pdcch_vars
[
RX_NB_TH_MAX
][
NUMBER_OF_CONNECTED_eNB_MAX
];
NR_UE_PRACH
*
prach_vars
[
NUMBER_OF_CONNECTED_eNB_MAX
];
...
...
@@ -1022,7 +968,6 @@ typedef struct {
/// Timing Advance updates variables
/// Timing advance update computed from the TA command signalled from gNB
int
timing_advance
;
int
hw_timing_advance
;
int
N_TA_offset
;
///timing offset used in TDD
NR_UL_TIME_ALIGNMENT_t
ul_time_alignment
[
NUMBER_OF_CONNECTED_gNB_MAX
];
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
a05f7e14
...
...
@@ -1101,169 +1101,6 @@ uint16_t nr_get_n1_pucch(PHY_VARS_NR_UE *ue,
return(-1);
}
void ulsch_common_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t empty_subframe) {
int aa;
NR_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
int nsymb;
int nr_tti_tx = proc->nr_tti_tx;
int frame_tx = proc->frame_tx;
int ulsch_start;
int overflow=0;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
int k,l;
int dummy_tx_buffer[frame_parms->samples_per_subframe] __attribute__((aligned(16)));
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_IN);
#if UE_TIMING_TRACE
start_meas(&ue->ofdm_mod_stats);
#endif
nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)//this is the EXPRESS MIMO case
ulsch_start = (ue->rx_offset+nr_tti_tx*frame_parms->samples_per_subframe-
ue->hw_timing_advance-
ue->timing_advance-
ue->N_TA_offset+5);
//LOG_E(PHY,"ul-signal [nr_tti_rx: %d, ulsch_start %d]\n",nr_tti_tx, ulsch_start);
if(ulsch_start < 0)
ulsch_start = ulsch_start + (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_subframe);
if (ulsch_start > (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_subframe))
ulsch_start = ulsch_start % (LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*frame_parms->samples_per_subframe);
//LOG_E(PHY,"ul-signal [nr_tti_rx: %d, ulsch_start %d]\n",nr_tti_tx, ulsch_start);
#else //this is the normal case
ulsch_start = (frame_parms->samples_per_subframe*nr_tti_tx)-ue->N_TA_offset; //-ue->timing_advance;
#endif //else EXMIMO
//#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
if
(
empty_subframe
)
{
//#if 1
overflow
=
ulsch_start
-
9
*
frame_parms
->
samples_per_subframe
;
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
;
aa
++
)
{
if
(
overflow
>
0
)
{
memset
(
&
ue
->
common_vars
.
txdata
[
aa
][
ulsch_start
],
0
,
4
*
(
frame_parms
->
samples_per_subframe
-
overflow
));
memset
(
&
ue
->
common_vars
.
txdata
[
aa
][
0
],
0
,
4
*
overflow
);
}
else
{
memset
(
&
ue
->
common_vars
.
txdata
[
aa
][
ulsch_start
],
0
,
4
*
frame_parms
->
samples_per_subframe
);
}
}
/*#else
overflow = ulsch_start - 9*frame_parms->samples_per_subframe;
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
for (k=ulsch_start; k<cmin(frame_parms->samples_per_subframe*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_subframe); k++) {
((short*)ue->common_vars.txdata[aa])[2*k] = 0;
((short*)ue->common_vars.txdata[aa])[2*k+1] = 0;
}
for (k=0; k<overflow; k++) {
((short*)ue->common_vars.txdata[aa])[2*k] = 0;
((short*)ue->common_vars.txdata[aa])[2*k+1] = 0;
}
}
endif*/
return
;
}
if
((
frame_tx
%
100
)
==
0
)
LOG_D
(
PHY
,
"[UE %d] Frame %d, nr_tti_rx %d: ulsch_start = %d (rxoff %d, HW TA %d, timing advance %d, TA_offset %d
\n
"
,
ue
->
Mod_id
,
frame_tx
,
nr_tti_tx
,
ulsch_start
,
ue
->
rx_offset
,
ue
->
hw_timing_advance
,
ue
->
timing_advance
,
ue
->
N_TA_offset
);
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antennas_tx
;
aa
++
)
{
if
(
frame_parms
->
Ncp
==
1
)
PHY_ofdm_mod
(
&
ue
->
common_vars
.
txdataF
[
aa
][
nr_tti_tx
*
nsymb
*
frame_parms
->
ofdm_symbol_size
],
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
dummy_tx_buffer
,
#else
&
ue
->
common_vars
.
txdata
[
aa
][
ulsch_start
],
#endif
frame_parms
->
ofdm_symbol_size
,
nsymb
,
frame_parms
->
nb_prefix_samples
,
CYCLIC_PREFIX
);
else
normal_prefix_mod
(
&
ue
->
common_vars
.
txdataF
[
aa
][
nr_tti_tx
*
nsymb
*
frame_parms
->
ofdm_symbol_size
],
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
dummy_tx_buffer
,
#else
&
ue
->
common_vars
.
txdata
[
aa
][
ulsch_start
],
#endif
nsymb
,
&
ue
->
frame_parms
);
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
apply_7_5_kHz
(
ue
,
dummy_tx_buffer
,
0
);
apply_7_5_kHz
(
ue
,
dummy_tx_buffer
,
1
);
#else
apply_7_5_kHz
(
ue
,
&
ue
->
common_vars
.
txdata
[
aa
][
ulsch_start
],
0
);
apply_7_5_kHz
(
ue
,
&
ue
->
common_vars
.
txdata
[
aa
][
ulsch_start
],
1
);
#endif
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR) || defined(OAI_ADRV9371_ZC706)
overflow
=
ulsch_start
-
9
*
frame_parms
->
samples_per_subframe
;
for
(
k
=
ulsch_start
,
l
=
0
;
k
<
cmin
(
frame_parms
->
samples_per_subframe
*
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
,
ulsch_start
+
frame_parms
->
samples_per_subframe
);
k
++
,
l
++
)
{
((
short
*
)
ue
->
common_vars
.
txdata
[
aa
])[
2
*
k
]
=
((
short
*
)
dummy_tx_buffer
)[
2
*
l
]
<<
4
;
((
short
*
)
ue
->
common_vars
.
txdata
[
aa
])[
2
*
k
+
1
]
=
((
short
*
)
dummy_tx_buffer
)[
2
*
l
+
1
]
<<
4
;
}
for
(
k
=
0
;
k
<
overflow
;
k
++
,
l
++
)
{
((
short
*
)
ue
->
common_vars
.
txdata
[
aa
])[
2
*
k
]
=
((
short
*
)
dummy_tx_buffer
)[
2
*
l
]
<<
4
;
((
short
*
)
ue
->
common_vars
.
txdata
[
aa
])[
2
*
k
+
1
]
=
((
short
*
)
dummy_tx_buffer
)[
2
*
l
+
1
]
<<
4
;
}
#if defined(EXMIMO)
// handle switch before 1st TX nr_tti_rx, guarantee that the slot prior to transmission is switch on
for
(
k
=
ulsch_start
-
(
frame_parms
->
samples_per_subframe
>>
1
)
;
k
<
ulsch_start
;
k
++
)
{
if
(
k
<
0
)
ue
->
common_vars
.
txdata
[
aa
][
k
+
frame_parms
->
samples_per_subframe
*
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
]
&=
0xFFFEFFFE
;
else
if
(
k
>
(
frame_parms
->
samples_per_subframe
*
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
))
ue
->
common_vars
.
txdata
[
aa
][
k
-
frame_parms
->
samples_per_subframe
*
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
]
&=
0xFFFEFFFE
;
else
ue
->
common_vars
.
txdata
[
aa
][
k
]
&=
0xFFFEFFFE
;
}
#endif
#endif
/*
only for debug
LOG_I(PHY,"ul-signal [nr_tti_rx: %d, ulsch_start %d, TA: %d, rxOffset: %d, timing_advance: %d, hw_timing_advance: %d]\n",nr_tti_tx, ulsch_start, ue->N_TA_offset, ue->rx_offset, ue->timing_advance, ue->hw_timing_advance);
if( (crash == 1) && (nr_tti_tx == 0) )
{
LOG_E(PHY,"***** DUMP TX Signal [ulsch_start %d] *****\n",ulsch_start);
write_output("txBuff.m","txSignal",&ue->common_vars.txdata[aa][ulsch_start],frame_parms->samples_per_subframe,1,1);
}
*/
}
//nb_antennas_tx
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
ofdm_mod_stats
);
#endif
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON
,
VCD_FUNCTION_OUT
);
}
#endif
UE_MODE_t
get_nrUE_mode
(
uint8_t
Mod_id
,
uint8_t
CC_id
,
uint8_t
gNB_id
){
...
...
@@ -3094,7 +2931,7 @@ void nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB
i_mod
,
dlsch0
->
current_harq_pid
);
else
{
// This is to adjust the llr offset in the case of skipping over a dmrs symbol (i.e. in case of no PDSCH REs in DMRS)
if
(
pdsch
==
RA_PDSCH
)
ue
->
pdsch_vars
_ra
[
eNB_id
]
->
llr_offset
[
m
]
=
ue
->
pdsch_vars_ra
[
eNB_id
]
->
llr_offset
[
m
-
1
];
if
(
pdsch
==
RA_PDSCH
)
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
]
->
llr_offset
[
m
]
=
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]]
[
eNB_id
]
->
llr_offset
[
m
-
1
];
else
if
(
pdsch
==
PDSCH
)
nr_rx_pdsch
(
ue
,
pdsch
,
eNB_id
,
...
...
@@ -3341,14 +3178,8 @@ void nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue,
if
(
1
)
{
switch
(
pdsch
)
{
case
SI_PDSCH
:
pdsch_vars
=
ue
->
pdsch_vars_SI
[
eNB_id
];
break
;
case
RA_PDSCH
:
pdsch_vars
=
ue
->
pdsch_vars_ra
[
eNB_id
];
break
;
case
P_PDSCH
:
pdsch_vars
=
ue
->
pdsch_vars_p
[
eNB_id
];
break
;
case
PDSCH
:
pdsch_vars
=
ue
->
pdsch_vars
[
ue
->
current_thread_id
[
nr_tti_rx
]][
eNB_id
];
break
;
...
...
openair1/SIMULATION/NR_PHY/prachsim.c
View file @
a05f7e14
...
...
@@ -604,7 +604,7 @@ int main(int argc, char **argv){
/* tx_lev_dB not used later, no need to set */
//tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
prach_start
=
subframe
*
frame_parms
->
samples_per_subframe
-
UE
->
N_TA_offset
;
prach_start
=
subframe
*
frame_parms
->
samples_per_subframe
;
#ifdef NR_PRACH_DEBUG
LOG_M
(
"txsig0.m"
,
"txs0"
,
&
txdata
[
0
][
subframe
*
frame_parms
->
samples_per_subframe
],
frame_parms
->
samples_per_subframe
,
1
,
1
);
...
...
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