Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenXG
OpenXG UE
Commits
ce92c827
Commit
ce92c827
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
abd152ab
84b60525
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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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 @
ce92c827
...
...
@@ -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