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
alex037yang
OpenXG-RAN
Commits
18cca485
Commit
18cca485
authored
Mar 07, 2018
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
full trx for PSCCH
parent
314bf57f
Changes
12
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
980 additions
and
121 deletions
+980
-121
openair1/PHY/LTE_ESTIMATION/defs.h
openair1/PHY/LTE_ESTIMATION/defs.h
+14
-5
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+58
-50
openair1/PHY/LTE_TRANSPORT/dci.c
openair1/PHY/LTE_TRANSPORT/dci.c
+7
-8
openair1/PHY/LTE_TRANSPORT/defs.h
openair1/PHY/LTE_TRANSPORT/defs.h
+2
-1
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
+77
-20
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+35
-2
openair1/PHY/LTE_TRANSPORT/sldch.c
openair1/PHY/LTE_TRANSPORT/sldch.c
+2
-2
openair1/PHY/LTE_TRANSPORT/slsch.c
openair1/PHY/LTE_TRANSPORT/slsch.c
+694
-18
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+24
-11
openair1/PHY/defs.h
openair1/PHY/defs.h
+10
-1
openair1/PHY/impl_defs_lte.h
openair1/PHY/impl_defs_lte.h
+53
-0
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+4
-3
No files found.
openair1/PHY/LTE_ESTIMATION/defs.h
View file @
18cca485
...
...
@@ -218,11 +218,20 @@ void phy_adjust_gain (PHY_VARS_UE *phy_vars_ue,
uint32_t
rx_power_fil_dB
,
unsigned
char
eNB_id
);
int
lte_ul_channel_estimation
(
PHY_VARS_eNB
*
phy_vars_eNB
,
eNB_rxtx_proc_t
*
proc
,
module_id_t
UE_id
,
uint8_t
l
,
uint8_t
Ns
);
int32_t
lte_ul_channel_estimation
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int32_t
**
ul_ch_estimates
,
int32_t
**
ul_ch_estimates_time
,
int32_t
**
rxdataF_ext
,
int
N_rb_alloc
,
int
frame_rx
,
int
subframe_rx
,
uint32_t
u
,
uint32_t
v
,
uint32_t
cyclic_shift
,
unsigned
char
l
,
unsigned
char
Ns
,
uint16_t
rnti
);
int16_t
lte_ul_freq_offset_estimation
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
...
...
openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
View file @
18cca485
...
...
@@ -34,24 +34,33 @@ static int16_t ru_90c[2*128] = {32767, 0,32766, -402,32758, -804,32746, -1206,32
#define SCALE 0x3FFF
int32_t
lte_ul_channel_estimation
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
uint8_t
UE_id
,
int32_t
lte_ul_channel_estimation
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int32_t
**
ul_ch_estimates
,
int32_t
**
ul_ch_estimates_time
,
int32_t
**
rxdataF_ext
,
int
N_rb_alloc
,
int
frame_rx
,
int
subframe_rx
,
uint32_t
u
,
uint32_t
v
,
uint32_t
cyclic_shift
,
unsigned
char
l
,
unsigned
char
Ns
)
{
unsigned
char
Ns
,
uint16_t
rnti
)
{
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
eNB
->
frame_parms
;
LTE_eNB_PUSCH
*
pusch_vars
=
eNB
->
pusch_vars
[
UE_id
];
int32_t
**
ul_ch_estimates
=
pusch_vars
->
drs_ch_estimates
;
/*
int32_t **ul_ch_estimates=pusch_vars->drs_ch_estimates;
int32_t **ul_ch_estimates_time= pusch_vars->drs_ch_estimates_time;
int32_t **rxdataF_ext= pusch_vars->rxdataF_ext;
int subframe = proc->subframe_rx;
uint8_t
harq_pid
=
subframe2harq_pid
(
frame_parms
,
proc
->
frame_rx
,
subframe
);
*/
int16_t
delta_phase
=
0
;
int16_t
*
ru1
=
ru_90
;
int16_t
*
ru2
=
ru_90
;
int16_t
current_phase1
,
current_phase2
;
uint16_t
N_rb_alloc
=
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
;
//
uint16_t N_rb_alloc = eNB->ulsch[UE_id]->harq_processes[harq_pid]->nb_rb;
uint16_t
aa
,
Msc_RS
,
Msc_RS_idx
;
uint16_t
*
Msc_idx_ptr
;
int
k
,
pilot_pos1
=
3
-
frame_parms
->
Ncp
,
pilot_pos2
=
10
-
2
*
frame_parms
->
Ncp
;
...
...
@@ -60,11 +69,10 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB,
//uint8_t nb_antennas_rx = frame_parms->nb_antenna_ports_eNB;
uint8_t
nb_antennas_rx
=
frame_parms
->
nb_antennas_rx
;
uint8_t
cyclic_shift
;
uint32_t
alpha_ind
;
uint32_t
u
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
Ns
+
(
subframe
<<
1
)];
uint32_t
v
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
Ns
+
(
subframe
<<
1
)];
//
uint32_t u=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[Ns+(subframe<<1)];
//
uint32_t v=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[Ns+(subframe<<1)];
int32_t
tmp_estimates
[
N_rb_alloc
*
12
]
__attribute__
((
aligned
(
16
)));
int
symbol_offset
,
i
;
...
...
@@ -86,10 +94,9 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *eNB,
int32_t
temp_in_ifft_0
[
2048
*
2
]
__attribute__
((
aligned
(
32
)));
Msc_RS
=
N_rb_alloc
*
12
;
/*
cyclic_shift
=
(
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
+
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
n_DMRS2
+
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
nPRS
[(
subframe
<<
1
)
+
Ns
])
%
12
;
*/
#if defined(USER_MODE)
Msc_idx_ptr
=
(
uint16_t
*
)
bsearch
(
&
Msc_RS
,
dftsizes
,
33
,
sizeof
(
uint16_t
),
compareints
);
...
...
@@ -267,6 +274,7 @@ int32_t temp_in_ifft_0[2048*2] __attribute__((aligned(32)));
#endif
}
if
(
ul_ch_estimates_time
[
aa
])
{
// Convert to time domain for visualization
memset
(
temp_in_ifft_0
,
0
,
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int32_t
));
for
(
i
=
0
;
i
<
Msc_RS
;
i
++
)
...
...
@@ -297,20 +305,20 @@ int32_t temp_in_ifft_0[2048*2] __attribute__((aligned(32)));
#if T_TRACER
if
(
aa
==
0
)
T
(
T_ENB_PHY_UL_CHANNEL_ESTIMATE
,
T_INT
(
0
),
T_INT
(
eNB
->
ulsch
[
UE_id
]
->
rnti
),
T_INT
(
proc
->
frame_rx
),
T_INT
(
subframe
),
T
(
T_ENB_PHY_UL_CHANNEL_ESTIMATE
,
T_INT
(
0
),
T_INT
(
rnti
),
T_INT
(
frame_rx
),
T_INT
(
subframe
),
T_INT
(
0
),
T_BUFFER
(
ul_ch_estimates_time
[
0
],
512
*
4
));
#endif
}
#ifdef DEBUG_CH
if
(
aa
==
0
)
{
if
(
Ns
==
0
)
{
write_output
(
"rxdataF_ext.m"
,
"rxF_ext"
,
&
rxdataF_ext
[
aa
][
symbol_offset
],
512
*
2
,
2
,
1
);
write_output
(
"tmpin_ifft.m"
,
"drs_in"
,
temp_in_ifft_0
,
512
,
1
,
1
);
write_output
(
"drs_est0.m"
,
"drs0"
,
ul_ch_estimates_time
[
aa
],
512
,
1
,
1
);
if
(
ul_ch_estimates_time
[
aa
])
write_output
(
"drs_est0.m"
,
"drs0"
,
ul_ch_estimates_time
[
aa
],
512
,
1
,
1
);
}
else
write_output
(
"drs_est1.m"
,
"drs1"
,
ul_ch_estimates_time
[
aa
],
512
,
1
,
1
);
if
(
ul_ch_estimates_time
[
aa
])
write_output
(
"drs_est1.m"
,
"drs1"
,
ul_ch_estimates_time
[
aa
],
512
,
1
,
1
);
}
#endif
...
...
openair1/PHY/LTE_TRANSPORT/dci.c
View file @
18cca485
...
...
@@ -2544,7 +2544,7 @@ uint8_t generate_dci_top(uint8_t num_pdcch_symbols,
void
dci_decoding
(
uint8_t
DCI_LENGTH
,
uint
8_t
aggregation_level
,
uint
16_t
coded_bits
,
int8_t
*
e
,
uint8_t
*
decoded_output
)
{
...
...
@@ -2555,15 +2555,14 @@ void dci_decoding(uint8_t DCI_LENGTH,
uint16_t
RCC
;
uint16_t
D
=
(
DCI_LENGTH
+
16
+
64
);
uint16_t
coded_bits
;
#ifdef DEBUG_DCI_DECODING
int32_t
i
;
#endif
AssertFatal
(
aggregation_level
<
4
,
"dci_decoding FATAL, illegal
aggregation_level %d
\n
"
,
aggregation_level
);
AssertFatal
(
coded_bits
<
8
*
72
,
"dci_decoding FATAL, illegal
codeblock size %d
\n
"
,
coded_bits
);
coded_bits
=
72
*
(
1
<<
aggregation_level
);
#ifdef DEBUG_DCI_DECODING
LOG_I
(
PHY
,
" Doing DCI decoding for %d bits, DCI_LENGTH %d,coded_bits %d, e %p
\n
"
,
3
*
(
DCI_LENGTH
+
16
),
DCI_LENGTH
,
coded_bits
,
e
);
...
...
@@ -2905,7 +2904,7 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars,
pdcch_vars
[
eNB_id
]
->
num_pdcch_symbols
,
m
,
L2
,
sizeof_bits
,
CCEind
,
nCCE
,
*
CCEmap
,
CCEmap_mask
,
format_c
);
dci_decoding
(
sizeof_bits
,
L
,
(
1
<<
L
)
*
72
,
&
pdcch_vars
[
eNB_id
]
->
e_rx
[
CCEind
*
72
],
&
dci_decoded_output
[
current_thread_id
][
0
]);
/*
...
...
openair1/PHY/LTE_TRANSPORT/defs.h
View file @
18cca485
...
...
@@ -886,6 +886,8 @@ typedef struct {
uint32_t
prb_End
;
/// SL-OffsetIndicator (0-10239)
uint32_t
SL_OffsetIndicator
;
/// SC-SC_Period
uint32_t
SL_SC_Period
;
/// PSCCH subframe bitmap, first 64-bits (up to 40 bits for Rel 12)
uint64_t
bitmap1
;
/// PSCCH subframe bitmap, 2nd 64-bits (up to 100 bits for Rel 14)
...
...
@@ -908,7 +910,6 @@ typedef struct {
uint32_t
timing_advance_indication
;
/// SCI0 Group Destination ID for SLSCH
uint32_t
group_destination_id
;
// SLSCH Parameters
/// Number of Subbands (36.213 14.1.1.2)
uint32_t
Nsb
;
...
...
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
View file @
18cca485
...
...
@@ -58,13 +58,70 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
ue
->
frame_parms
;
int32_t
*
txdataF
=
ue
->
common_vars
.
txdataF
[
ant
];
uint32_t
u
,
v
,
alpha_ind
;
uint32_t
u0
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
subframe
<<
1
];
uint32_t
u1
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
1
+
(
subframe
<<
1
)];
uint32_t
v0
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
subframe
<<
1
];
uint32_t
v1
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
1
+
(
subframe
<<
1
)];
uint32_t
u0
,
u1
,
v0
,
v1
;
int32_t
ref_re
,
ref_im
;
uint8_t
harq_pid
=
subframe2harq_pid
(
frame_parms
,
proc
->
frame_tx
,
subframe
);
uint8_t
harq_pid
;
int
lstart
,
linc
;
AssertFatal
(
ue
->
sl_chan
>=
0
&&
ue
->
sl_chan
<
MAX_SLTYPES
,
"ue->sl_chan %d impossible
\n
"
,
ue
->
sl_chan
);
switch
(
ue
->
sl_chan
)
{
case
PSCCH_12_EVEN
:
cyclic_shift0
=
0
;
cyclic_shift1
=
0
;
u0
=
0
;
u1
=
0
;
v0
=
0
;
v1
=
0
;
lstart
=
(
3
-
frame_parms
->
Ncp
);
linc
=
frame_parms
->
symbols_per_tti
;
break
;
case
PSCCH_12_ODD
:
cyclic_shift0
=
0
;
cyclic_shift1
=
0
;
u0
=
0
;
u1
=
0
;
v0
=
0
;
v1
=
0
;
lstart
=
(
10
-
(
frame_parms
->
Ncp
<<
1
));
linc
=
frame_parms
->
symbols_per_tti
;
break
;
break
;
case
PSCCH_34_EVEN
:
AssertFatal
(
1
==
0
,
"SL Transmission type 3/4 not supported for now
\n
"
);
break
;
case
PSCCH_34_ODD
:
AssertFatal
(
1
==
0
,
"SL Transmission type 3/4 not supported for now
\n
"
);
break
;
case
PSSCH_12
:
/* Need to figure this out ...
u0=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[subframe<<1];
u1=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.grouphop[1+(subframe<<1)];
v0=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[subframe<<1];
v1=frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.seqhop[1+(subframe<<1)];*/
cyclic_shift0
=
(
ue
->
slsch
->
n_ss_PSSCH
>>
1
)
&
7
;
cyclic_shift1
=
cyclic_shift0
;
lstart
=
(
3
-
frame_parms
->
Ncp
);
linc
=
frame_parms
->
symbols_per_tti
;
break
;
case
PSSCH_34
:
AssertFatal
(
1
==
0
,
"SL Transmission type 3/4 not supported for now
\n
"
);
break
;
case
PSDCH_ODD
:
case
PSDCH_EVEN
:
AssertFatal
(
1
==
0
,
"PSDCH Transmission not supported for now
\n
"
);
break
;
case
PSBCH
:
AssertFatal
(
1
==
0
,
"PSBCH Transmission not supported for now
\n
"
);
break
;
case
NO_SL
:
u0
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
subframe
<<
1
];
u1
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
1
+
(
subframe
<<
1
)];
v0
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
subframe
<<
1
];
v1
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
1
+
(
subframe
<<
1
)];
harq_pid
=
subframe2harq_pid
(
frame_parms
,
proc
->
frame_tx
,
subframe
);
lstart
=
(
3
-
frame_parms
->
Ncp
);
linc
=
(
7
-
frame_parms
->
Ncp
);
cyclic_shift0
=
(
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
+
ue
->
ulsch
[
eNB_id
]
->
harq_processes
[
harq_pid
]
->
n_DMRS2
+
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
nPRS
[
subframe
<<
1
]
+
...
...
@@ -76,7 +133,7 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
nPRS
[(
subframe
<<
1
)
+
1
]
+
((
ue
->
ulsch
[
0
]
->
cooperation_flag
==
2
)
?
10
:
0
)
+
ant
*
6
)
%
12
;
}
// cyclic_shift0 = 0;
// cyclic_shift1 = 0;
Msc_RS
=
12
*
nb_rb
;
...
...
@@ -105,9 +162,9 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
#endif
for
(
l
=
(
3
-
frame_parms
->
Ncp
)
,
u
=
u0
,
v
=
v0
,
cyclic_shift
=
cyclic_shift0
;
for
(
l
=
lstart
,
u
=
u0
,
v
=
v0
,
cyclic_shift
=
cyclic_shift0
;
l
<
frame_parms
->
symbols_per_tti
;
l
+=
(
7
-
frame_parms
->
Ncp
)
,
u
=
u1
,
v
=
v1
,
cyclic_shift
=
cyclic_shift1
)
{
l
+=
linc
,
u
=
u1
,
v
=
v1
,
cyclic_shift
=
cyclic_shift1
)
{
drs_offset
=
0
;
// printf("drs_modulation: Msc_RS = %d, Msc_RS_idx = %d\n",Msc_RS, Msc_RS_idx);
...
...
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
18cca485
...
...
@@ -1523,12 +1523,12 @@ void qpsk_qpsk_TM3456(short *stream0_in,
/** \brief Attempt decoding of a particular DCI with given length and format.
@param DCI_LENGTH length of DCI in bits
@param
DCI_FMT Format of DCI
@param
coded_bits number of physical channel bits
@param e e-sequence (soft bits)
@param decoded_output Output of Viterbi decoder
*/
void
dci_decoding
(
uint8_t
DCI_LENGTH
,
uint
8_t
DCI_FMT
,
uint
16_t
coded_bits
,
int8_t
*
e
,
uint8_t
*
decoded_output
);
...
...
@@ -1719,6 +1719,24 @@ void ulsch_extract_rbs_single(int32_t **rxdataF,
uint8_t
Ns
,
LTE_DL_FRAME_PARMS
*
frame_parms
);
void
ulsch_channel_compensation
(
int32_t
**
rxdataF_ext
,
int32_t
**
ul_ch_estimates_ext
,
int32_t
**
ul_ch_mag
,
int32_t
**
ul_ch_magb
,
int32_t
**
rxdataF_comp
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
symbol
,
uint8_t
Qm
,
uint16_t
nb_rb
,
uint8_t
output_shift
);
void
ulsch_detection_mrc
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int32_t
**
rxdataF_comp
,
int32_t
**
ul_ch_mag
,
int32_t
**
ul_ch_magb
,
uint8_t
symbol
,
uint16_t
nb_rb
);
uint8_t
subframe2harq_pid
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
frame_t
frame
,
uint8_t
subframe
);
uint8_t
subframe2harq_pid_eNBrx
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
subframe
);
...
...
@@ -1738,6 +1756,21 @@ int generate_ue_dlsch_params_from_dci(int frame,
uint8_t
beamforming_mode
,
uint16_t
tc_rnti
);
int32_t
ulsch_qpsk_llr
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int32_t
**
rxdataF_comp
,
int16_t
*
ulsch_llr
,
uint8_t
symbol
,
uint16_t
nb_rb
,
int16_t
**
llrp
);
void
ulsch_16qam_llr
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int32_t
**
rxdataF_comp
,
int16_t
*
ulsch_llr
,
int32_t
**
ul_ch_mag
,
uint8_t
symbol
,
uint16_t
nb_rb
,
int16_t
**
llrp
);
void
fill_dci_and_dlsch
(
PHY_VARS_eNB
*
eNB
,
eNB_rxtx_proc_t
*
proc
,
DCI_ALLOC_t
*
dci_alloc
,
...
...
openair1/PHY/LTE_TRANSPORT/sldch.c
View file @
18cca485
...
...
@@ -44,13 +44,13 @@ void generate_sldch(PHY_VARS_UE *ue,SLDCH_t *sldch,int frame_tx,int subframe_tx)
AssertFatal
(
sldch
->
payload_length
<=
1500
-
sldch_header_len
-
sizeof
(
SLDCH_t
)
+
sizeof
(
uint8_t
*
),
"SLDCH payload length > %
d
\n
"
,
"SLDCH payload length > %
lu
\n
"
,
1500
-
sldch_header_len
-
sizeof
(
SLDCH_t
)
+
sizeof
(
uint8_t
*
));
memcpy
((
void
*
)
&
pdu
.
sldch
,
(
void
*
)
sldch
,
sizeof
(
SLDCH_t
));
LOG_I
(
PHY
,
"SLDCH configuration %
d bytes, TBS payload %d bytes => %d
bytes
\n
"
,
LOG_I
(
PHY
,
"SLDCH configuration %
lu bytes, TBS payload %d bytes => %lu
bytes
\n
"
,
sizeof
(
SLDCH_t
)
-
sizeof
(
uint8_t
*
),
sldch
->
payload_length
,
sldch_header_len
+
sizeof
(
SLDCH_t
)
-
sizeof
(
uint8_t
*
)
+
sldch
->
payload_length
);
...
...
openair1/PHY/LTE_TRANSPORT/slsch.c
View file @
18cca485
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
View file @
18cca485
...
...
@@ -1140,7 +1140,6 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
Qm
=
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
Qm
;
#ifdef DEBUG_ULSCH
printf
(
"rx_ulsch: harq_pid %d, nb_rb %d first_rb %d
\n
"
,
harq_pid
,
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
,
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
first_rb
);
#endif //DEBUG_ULSCH
if
(
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
==
0
)
{
...
...
@@ -1166,10 +1165,24 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
l
/
(
frame_parms
->
symbols_per_tti
/
2
),
frame_parms
);
lte_ul_channel_estimation
(
eNB
,
proc
,
UE_id
,
l
%
(
frame_parms
->
symbols_per_tti
/
2
),
l
/
(
frame_parms
->
symbols_per_tti
/
2
));
int
Ns
=
l
/
(
frame_parms
->
symbols_per_tti
/
2
);
int
lmod
=
l
%
(
frame_parms
->
symbols_per_tti
/
2
);
int
cyclic_shift
=
(
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
cyclicShift
+
eNB
->
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
n_DMRS2
+
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
nPRS
[(
subframe
<<
1
)
+
Ns
])
%
12
;
lte_ul_channel_estimation
(
&
eNB
->
frame_parms
,
pusch_vars
->
drs_ch_estimates
,
pusch_vars
->
drs_ch_estimates_time
,
pusch_vars
->
rxdataF_ext
,
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
,
proc
->
frame_rx
,
subframe
,
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
Ns
+
(
subframe
<<
1
)],
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
Ns
+
(
subframe
<<
1
)],
cyclic_shift
,
lmod
,
Ns
,
ulsch
[
UE_id
]
->
rnti
);
}
int
correction_factor
=
1
;
...
...
@@ -1212,7 +1225,7 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
avgs
=
0
;
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
avgs
=
cmax
(
avgs
,
avgU
[
(
aarx
<<
1
)
]);
avgs
=
cmax
(
avgs
,
avgU
[
aarx
]);
// log2_maxh = 4+(log2_approx(avgs)/2);
...
...
openair1/PHY/defs.h
View file @
18cca485
...
...
@@ -1240,6 +1240,8 @@ typedef struct {
LTE_UE_PBCH
*
pbch_vars
[
NUMBER_OF_CONNECTED_eNB_MAX
];
LTE_UE_PDCCH
*
pdcch_vars
[
RX_NB_TH_MAX
][
NUMBER_OF_CONNECTED_eNB_MAX
];
LTE_UE_PRACH
*
prach_vars
[
NUMBER_OF_CONNECTED_eNB_MAX
];
LTE_UE_PSCCH_TX
*
pscch_vars_tx
;
LTE_UE_PSCCH_RX
*
pscch_vars_rx
;
LTE_UE_DLSCH_t
*
dlsch
[
RX_NB_TH_MAX
][
NUMBER_OF_CONNECTED_eNB_MAX
][
2
];
// two RxTx Threads
LTE_UE_ULSCH_t
*
ulsch
[
NUMBER_OF_CONNECTED_eNB_MAX
];
LTE_UE_DLSCH_t
*
dlsch_SI
[
NUMBER_OF_CONNECTED_eNB_MAX
];
...
...
@@ -1248,7 +1250,11 @@ typedef struct {
LTE_UE_DLSCH_t
*
dlsch_MCH
[
NUMBER_OF_CONNECTED_eNB_MAX
];
// This is for SIC in the UE, to store the reencoded data
LTE_eNB_DLSCH_t
*
dlsch_eNB
[
NUMBER_OF_CONNECTED_eNB_MAX
];
SL_chan_t
sl_chan
;
SLSCH_t
*
slsch
;
SLSCH_t
slsch_rx
;
int
slcch_received
;
uint8_t
sidelink_l2_emulation
;
//Paging parameters
uint32_t
IMSImod1024
;
uint32_t
PF
;
...
...
@@ -1323,6 +1329,9 @@ typedef struct {
int
dlsch_mtch_trials
[
MAX_MBSFN_AREA
][
NUMBER_OF_CONNECTED_eNB_MAX
];
int
current_dlsch_cqi
[
NUMBER_OF_CONNECTED_eNB_MAX
];
unsigned
char
first_run_timing_advance
[
NUMBER_OF_CONNECTED_eNB_MAX
];
uint8_t
sidelink_active
;
uint8_t
pscch_coded
;
uint8_t
pscch_generated
;
uint8_t
generate_prach
;
uint8_t
prach_cnt
;
uint8_t
prach_PreambleIndex
;
...
...
openair1/PHY/impl_defs_lte.h
View file @
18cca485
...
...
@@ -344,6 +344,21 @@ typedef enum {
deltaF_PUCCH_Format2b_deltaF2
=
2
}
deltaF_PUCCH_Format2b_t
;
/// Enumeration of SL_channel_config
typedef
enum
{
NO_SL
=
0
,
PSCCH_12_EVEN
=
1
,
PSCCH_12_ODD
=
2
,
PSCCH_34_EVEN
=
3
,
PSCCH_34_ODD
=
4
,
PSSCH_12
=
5
,
PSSCH_34
=
6
,
PSDCH_EVEN
=
7
,
PSDCH_ODD
=
8
,
PSBCH
=
9
,
MAX_SLTYPES
=
10
}
SL_chan_t
;
/// DeltaFList-PUCCH from 36.331 RRC spec
typedef
struct
{
deltaF_PUCCH_Format1_t
deltaF_PUCCH_Format1
;
...
...
@@ -353,6 +368,7 @@ typedef struct {
deltaF_PUCCH_Format2b_t
deltaF_PUCCH_Format2b
;
}
deltaFList_PUCCH_t
;
/// SoundingRS-UL-ConfigDedicated Information Element from 36.331 RRC spec
typedef
struct
{
/// This descriptor is active
...
...
@@ -1068,6 +1084,43 @@ 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..168*N_RB_DL[
int32_t
**
rxdataF_ext
;
/// \brief Hold the channel estimates in time domain based on DRS.
/// - first index: rx antenna id [0..nb_antennas_rx[
/// - second index: ? [0..4*ofdm_symbol_size[
int32_t
**
drs_ch_estimates_time
;
/// \brief Hold the channel estimates in frequency domain based on DRS.
/// - first index: rx antenna id [0..nb_antennas_rx[
/// - second index: ? [0..12*N_RB_UL*frame_parms->symbols_per_tti[
int32_t
**
drs_ch_estimates
;
/// \brief Holds the compensated signal.
/// - first index: rx antenna id [0..nb_antennas_rx[
/// - second index: ? [0..12*N_RB_UL*frame_parms->symbols_per_tti[
int32_t
**
rxdataF_comp
;
/// received signal energy of PSCCH
int
slcch_power
;
/// \brief llr values.
/// - first index: ? [0..1179743] (hard coded)
int16_t
*
llr
;
}
LTE_UE_PSCCH_RX
;
/// maximum size for N_SL_RB=100, SCI_A=1+13+7+5+11+8 = 45,
#define SCI_A 45
/// SCI_E=12 REs * 6 symbols * 2 bits/RE
#define SCI_E (12*6*2)
typedef
struct
{
/// Coded PSCCH bits (12 REs, 12 OFDM symbols, 2 bits/RE)
uint8_t
f
[
SCI_E
];
// interleaved PSSCH bits
uint8_t
h
[
SCI_E
];
// interleaved+scrambled PSSCH bits
uint8_t
b_tilde
[
SCI_E
];
}
LTE_UE_PSCCH_TX
;
typedef
struct
{
/// \brief Received frequency-domain signal after extraction.
/// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
18cca485
...
...
@@ -2379,7 +2379,8 @@ void phy_procedures_UE_SL_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc) {
LOG_D
(
PHY
,
"****** start Sidelink TX-Chain for AbsSubframe %d.%d ******
\n
"
,
frame_tx
,
subframe_tx
);
// check for SLBCH/SLSS
if
((
slss
=
ue_get_slss
(
ue
->
Mod_id
,
ue
->
CC_id
,
frame_tx
,
subframe_tx
))
!=
NULL
)
generate_slss
(
ue
,
slss
,
frame_tx
,
subframe_tx
);
if
((
slss
=
ue_get_slss
(
ue
->
Mod_id
,
ue
->
CC_id
,
frame_tx
,
subframe_tx
))
!=
NULL
||
ue
->
sidelink_active
==
1
)
generate_slss
(
ue
,
slss
,
frame_tx
,
subframe_tx
);
// check for SLDCH
if
((
sldch
=
ue_get_sldch
(
ue
->
Mod_id
,
ue
->
CC_id
,
frame_tx
,
subframe_tx
))
!=
NULL
)
generate_sldch
(
ue
,
sldch
,
frame_tx
,
subframe_tx
);
...
...
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