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
7 years ago
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
full trx for PSCCH
parent
314bf57f
Changes
12
Expand all
Hide 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
,
...
...
This diff is collapsed.
Click to expand it.
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,50 +274,51 @@ int32_t temp_in_ifft_0[2048*2] __attribute__((aligned(32)));
#endif
}
// 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
++
)
((
int32_t
*
)
temp_in_ifft_0
)[
i
]
=
ul_ch_estimates
[
aa
][
symbol_offset
+
i
];
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
idft128
((
int16_t
*
)
temp_in_ifft_0
,
(
int16_t
*
)
ul_ch_estimates_time
[
aa
],
1
);
break
;
case
25
:
idft512
((
int16_t
*
)
temp_in_ifft_0
,
(
int16_t
*
)
ul_ch_estimates_time
[
aa
],
1
);
break
;
case
50
:
idft1024
((
int16_t
*
)
temp_in_ifft_0
,
(
int16_t
*
)
ul_ch_estimates_time
[
aa
],
1
);
break
;
case
100
:
idft2048
((
int16_t
*
)
temp_in_ifft_0
,
(
int16_t
*
)
ul_ch_estimates_time
[
aa
],
1
);
break
;
}
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
++
)
((
int32_t
*
)
temp_in_ifft_0
)[
i
]
=
ul_ch_estimates
[
aa
][
symbol_offset
+
i
];
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
idft128
((
int16_t
*
)
temp_in_ifft_0
,
(
int16_t
*
)
ul_ch_estimates_time
[
aa
],
1
);
break
;
case
25
:
idft512
((
int16_t
*
)
temp_in_ifft_0
,
(
int16_t
*
)
ul_ch_estimates_time
[
aa
],
1
);
break
;
case
50
:
idft1024
((
int16_t
*
)
temp_in_ifft_0
,
(
int16_t
*
)
ul_ch_estimates_time
[
aa
],
1
);
break
;
case
100
:
idft2048
((
int16_t
*
)
temp_in_ifft_0
,
(
int16_t
*
)
ul_ch_estimates_time
[
aa
],
1
);
break
;
}
#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_INT
(
0
),
T_BUFFER
(
ul_ch_estimates_time
[
0
],
512
*
4
));
if
(
aa
==
0
)
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
...
...
This diff is collapsed.
Click to expand it.
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,9 +2904,9 @@ 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
,
&
pdcch_vars
[
eNB_id
]
->
e_rx
[
CCEind
*
72
],
&
dci_decoded_output
[
current_thread_id
][
0
]);
(
1
<<
L
)
*
72
,
&
pdcch_vars
[
eNB_id
]
->
e_rx
[
CCEind
*
72
],
&
dci_decoded_output
[
current_thread_id
][
0
]);
/*
for (i=0;i<3+(sizeof_bits>>3);i++)
printf("dci_decoded_output[%d] => %x\n",i,dci_decoded_output[i]);
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
View file @
18cca485
...
...
@@ -58,25 +58,82 @@ 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
);
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
]
+
((
ue
->
ulsch
[
0
]
->
cooperation_flag
==
2
)
?
10
:
0
)
+
ant
*
6
)
%
12
;
// printf("PUSCH.cyclicShift %d, n_DMRS2 %d, nPRS %d\n",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,ue->ulsch[eNB_id]->n_DMRS2,ue->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1]);
cyclic_shift1
=
(
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
)
+
1
]
+
((
ue
->
ulsch
[
0
]
->
cooperation_flag
==
2
)
?
10
:
0
)
+
ant
*
6
)
%
12
;
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
]
+
((
ue
->
ulsch
[
0
]
->
cooperation_flag
==
2
)
?
10
:
0
)
+
ant
*
6
)
%
12
;
// printf("PUSCH.cyclicShift %d, n_DMRS2 %d, nPRS %d\n",frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift,ue->ulsch[eNB_id]->n_DMRS2,ue->lte_frame_parms.pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[subframe<<1]);
cyclic_shift1
=
(
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
)
+
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);
...
...
This diff is collapsed.
Click to expand it.
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
,
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
)
{
...
...
@@ -1152,10 +1151,10 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
#ifdef DEBUG_ULSCH
printf
(
"rx_ulsch : symbol %d (first_rb %d,nb_rb %d), rxdataF %p, rxdataF_ext %p
\n
"
,
l
,
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
first_rb
,
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
,
common_vars
->
rxdataF
,
pusch_vars
->
rxdataF_ext
);
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
first_rb
,
ulsch
[
UE_id
]
->
harq_processes
[
harq_pid
]
->
nb_rb
,
common_vars
->
rxdataF
,
pusch_vars
->
rxdataF_ext
);
#endif //DEBUG_ULSCH
ulsch_extract_rbs_single
(
common_vars
->
rxdataF
,
...
...
@@ -1165,11 +1164,25 @@ void rx_ulsch(PHY_VARS_eNB *eNB,
l
%
(
frame_parms
->
symbols_per_tti
/
2
),
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);
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
...
...
This diff is collapsed.
Click to expand it.
openair1/SCHED/phy_procedures_lte_ue.c
View file @
18cca485
...
...
@@ -691,7 +691,7 @@ PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type,
return
pucch_format1a
;
}
uint16_t
get_n1_pucch
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
UE_rxtx_proc_t
*
proc
,
harq_status_t
*
harq_ack
,
uint8_t
eNB_id
,
uint8_t
*
b
,
...
...
@@ -2379,8 +2379,9 @@ 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
);
...
...
This diff is collapsed.
Click to expand it.
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