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
常顺宇
OpenXG-RAN
Commits
47658e56
Commit
47658e56
authored
Apr 24, 2018
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
addition of SLDCH transmission, SPSS table
parent
219ddeed
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
691 additions
and
154 deletions
+691
-154
openair1/PHY/INIT/lte_init_ue.c
openair1/PHY/INIT/lte_init_ue.c
+51
-37
openair1/PHY/LTE_REFSIG/primary_synch.m
openair1/PHY/LTE_REFSIG/primary_synch.m
+27
-20
openair1/PHY/LTE_REFSIG/primary_synch_SL.h
openair1/PHY/LTE_REFSIG/primary_synch_SL.h
+2
-0
openair1/PHY/LTE_TRANSPORT/defs.h
openair1/PHY/LTE_TRANSPORT/defs.h
+22
-1
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
+9
-3
openair1/PHY/LTE_TRANSPORT/sldch.c
openair1/PHY/LTE_TRANSPORT/sldch.c
+481
-36
openair1/PHY/LTE_TRANSPORT/slsch.c
openair1/PHY/LTE_TRANSPORT/slsch.c
+54
-45
openair1/PHY/defs.h
openair1/PHY/defs.h
+13
-4
openair1/PHY/impl_defs_lte.h
openair1/PHY/impl_defs_lte.h
+3
-4
openair1/SIMULATION/LTE_PHY/slschsim.c
openair1/SIMULATION/LTE_PHY/slschsim.c
+29
-4
No files found.
openair1/PHY/INIT/lte_init_ue.c
View file @
47658e56
...
@@ -935,45 +935,55 @@ int init_lte_ue_signal(PHY_VARS_UE *ue,
...
@@ -935,45 +935,55 @@ int init_lte_ue_signal(PHY_VARS_UE *ue,
init_prach_tables
(
839
);
init_prach_tables
(
839
);
ue
->
pusch_slsch
=
(
LTE_eNB_PUSCH
*
)
malloc
(
sizeof
(
LTE_eNB_PUSCH
));
ue
->
pusch_slcch
=
(
LTE_eNB_PUSCH
*
)
malloc
(
sizeof
(
LTE_eNB_PUSCH
));
ue
->
pusch_slcch
=
(
LTE_eNB_PUSCH
*
)
malloc
(
sizeof
(
LTE_eNB_PUSCH
));
ue
->
pusch_slcch
->
rxdataF_ext
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slcch
->
drs_ch_estimates
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slcch
->
rxdataF_comp
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slcch
->
ul_ch_mag
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slsch
=
(
LTE_eNB_PUSCH
*
)
malloc
(
sizeof
(
LTE_eNB_PUSCH
));
ue
->
pusch_slsch
->
rxdataF_ext
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slsch
->
rxdataF_ext
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slsch
->
drs_ch_estimates
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slsch
->
drs_ch_estimates
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slsch
->
rxdataF_comp
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slsch
->
rxdataF_comp
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slsch
->
ul_ch_mag
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slsch
->
ul_ch_mag
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
slsch_rxdata_7_5kHz
=
(
int16_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
slsch_rxdataF
=
(
int16_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_sldch
=
(
LTE_eNB_PUSCH
*
)
malloc
(
sizeof
(
LTE_eNB_PUSCH
));
ue
->
pusch_sldch
->
rxdataF_ext
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_sldch
->
drs_ch_estimates
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_sldch
->
rxdataF_comp
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_sldch
->
ul_ch_mag
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
sl_rxdata_7_5kHz
=
(
int16_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
sl_rxdataF
=
(
int16_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
for
(
int
aa
=
0
;
aa
<
ue
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
for
(
int
aa
=
0
;
aa
<
ue
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
ue
->
sl_rxdataF
[
aa
]
=
(
int16_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
ofdm_symbol_size
*
14
*
sizeof
(
int32_t
));
ue
->
sl_rxdata_7_5kHz
[
aa
]
=
(
int16_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
samples_per_tti
*
sizeof
(
int32_t
));
ue
->
pusch_slcch
->
rxdataF_ext
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slcch
->
drs_ch_estimates
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slcch
->
rxdataF_comp
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slcch
->
ul_ch_mag
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slsch
->
rxdataF_ext
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slsch
->
rxdataF_ext
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slsch
->
drs_ch_estimates
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slsch
->
drs_ch_estimates
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slsch
->
rxdataF_comp
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slsch
->
rxdataF_comp
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slsch
->
ul_ch_mag
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slsch
->
ul_ch_mag
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
slsch_rxdataF
[
aa
]
=
(
int16_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
ofdm_symbol_size
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_sldch
->
rxdataF_ext
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
slsch_rxdata_7_5kHz
[
aa
]
=
(
int16_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
samples_per_tti
*
sizeof
(
int32_t
));
ue
->
pusch_sldch
->
drs_ch_estimates
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_sldch
->
rxdataF_comp
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_sldch
->
ul_ch_mag
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
}
}
ue
->
slsch_dlsch_llr
=
(
int16_t
**
)
malloc
(
2
*
6
*
12
*
1200
*
sizeof
(
int16_t
*
));
ue
->
slsch_dlsch_llr
=
(
int16_t
**
)
malloc
(
2
*
6
*
12
*
1200
*
sizeof
(
int16_t
*
));
ue
->
slsch_ulsch_llr
=
(
int16_t
**
)
malloc
(
2
*
6
*
12
*
1200
*
sizeof
(
int16_t
*
));
ue
->
slsch_ulsch_llr
=
(
int16_t
**
)
malloc
(
2
*
6
*
12
*
1200
*
sizeof
(
int16_t
*
));
ue
->
sldch_dlsch_llr
=
(
int16_t
**
)
malloc
(
2
*
2
*
12
*
1200
*
sizeof
(
int16_t
*
));
ue
->
sldch_ulsch_llr
=
(
int16_t
**
)
malloc
(
2
*
2
*
12
*
1200
*
sizeof
(
int16_t
*
));
ue
->
pusch_slcch
=
(
LTE_eNB_PUSCH
*
)
malloc
(
sizeof
(
LTE_eNB_PUSCH
));
ue
->
pusch_slcch
->
rxdataF_ext
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slcch
->
drs_ch_estimates
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slcch
->
rxdataF_comp
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
pusch_slcch
->
ul_ch_mag
=
(
int32_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
slcch_rxdata_7_5kHz
=
(
int16_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
ue
->
slcch_rxdataF
=
(
int16_t
**
)
malloc
(
2
*
sizeof
(
int32_t
*
));
for
(
int
aa
=
0
;
aa
<
ue
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
ue
->
pusch_slcch
->
rxdataF_ext
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slcch
->
drs_ch_estimates
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slcch
->
rxdataF_comp
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
pusch_slcch
->
ul_ch_mag
[
aa
]
=
(
int32_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
N_RB_DL
*
12
*
14
*
sizeof
(
int32_t
));
ue
->
slcch_rxdataF
[
aa
]
=
(
int16_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
ofdm_symbol_size
*
14
*
sizeof
(
int32_t
));
ue
->
slcch_rxdata_7_5kHz
[
aa
]
=
(
int16_t
*
)
malloc16_clear
(
ue
->
frame_parms
.
samples_per_tti
*
sizeof
(
int32_t
));
}
return
0
;
return
0
;
}
}
...
@@ -999,6 +1009,7 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) {
...
@@ -999,6 +1009,7 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) {
}
}
ue
->
dlsch_rx_slsch
=
new_ue_dlsch
(
1
,
4
,
NSOFT
,
1
,
MAX_TURBO_ITERATIONS
,
ue
->
frame_parms
.
N_RB_DL
,
abstraction_flag
);
ue
->
dlsch_rx_slsch
=
new_ue_dlsch
(
1
,
4
,
NSOFT
,
1
,
MAX_TURBO_ITERATIONS
,
ue
->
frame_parms
.
N_RB_DL
,
abstraction_flag
);
for
(
int
i
=
0
;
i
<
MAX_SLDCH
;
i
++
)
ue
->
dlsch_rx_sldch
[
i
]
=
new_ue_dlsch
(
1
,
4
,
NSOFT
,
1
,
MAX_TURBO_ITERATIONS
,
ue
->
frame_parms
.
N_RB_DL
,
abstraction_flag
);
ue
->
dlsch_slsch
=
new_eNB_dlsch
(
1
,
1
,
NSOFT
,
ue
->
frame_parms
.
N_RB_DL
,
abstraction_flag
,
&
ue
->
frame_parms
);
ue
->
dlsch_slsch
=
new_eNB_dlsch
(
1
,
1
,
NSOFT
,
ue
->
frame_parms
.
N_RB_DL
,
abstraction_flag
,
&
ue
->
frame_parms
);
ue
->
ulsch_slsch
=
new_ue_ulsch
(
ue
->
frame_parms
.
N_RB_DL
,
abstraction_flag
);
ue
->
ulsch_slsch
=
new_ue_ulsch
(
ue
->
frame_parms
.
N_RB_DL
,
abstraction_flag
);
for
(
i
=
0
;
i
<
10
;
i
++
)
ue
->
dlsch_slsch
->
harq_ids
[
i
]
=
0
;
for
(
i
=
0
;
i
<
10
;
i
++
)
ue
->
dlsch_slsch
->
harq_ids
[
i
]
=
0
;
...
@@ -1015,34 +1026,37 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) {
...
@@ -1015,34 +1026,37 @@ void init_lte_ue_transport(PHY_VARS_UE *ue,int abstraction_flag) {
void
free_ue_resources
(
PHY_VARS_UE
*
ue
)
{
void
free_ue_resources
(
PHY_VARS_UE
*
ue
)
{
for
(
int
aa
=
0
;
aa
<
ue
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
for
(
int
aa
=
0
;
aa
<
ue
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
free
(
ue
->
sl_rxdataF
[
aa
]);
free
(
ue
->
sl_rxdata_7_5kHz
[
aa
]);
free
(
ue
->
pusch_slcch
->
rxdataF_ext
[
aa
]);
free
(
ue
->
pusch_slcch
->
rxdataF_ext
[
aa
]);
free
(
ue
->
pusch_slcch
->
drs_ch_estimates
[
aa
]);
free
(
ue
->
pusch_slcch
->
drs_ch_estimates
[
aa
]);
free
(
ue
->
pusch_slcch
->
rxdataF_comp
[
aa
]);
free
(
ue
->
pusch_slcch
->
rxdataF_comp
[
aa
]);
free
(
ue
->
pusch_slcch
->
ul_ch_mag
[
aa
]);
free
(
ue
->
pusch_slcch
->
ul_ch_mag
[
aa
]);
free
(
ue
->
slcch_rxdataF
[
aa
]);
free
(
ue
->
slcch_rxdata_7_5kHz
[
aa
]);
}
free
(
ue
->
pusch_slcch
->
rxdataF_ext
);
free
(
ue
->
pusch_slcch
->
drs_ch_estimates
);
free
(
ue
->
pusch_slcch
->
rxdataF_comp
);
free
(
ue
->
pusch_slcch
->
ul_ch_mag
);
free
(
ue
->
slcch_rxdataF
);
free
(
ue
->
slcch_rxdata_7_5kHz
);
for
(
int
aa
=
0
;
aa
<
ue
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
{
free
(
ue
->
pusch_slsch
->
rxdataF_ext
[
aa
]);
free
(
ue
->
pusch_slsch
->
rxdataF_ext
[
aa
]);
free
(
ue
->
pusch_slsch
->
drs_ch_estimates
[
aa
]);
free
(
ue
->
pusch_slsch
->
drs_ch_estimates
[
aa
]);
free
(
ue
->
pusch_slsch
->
rxdataF_comp
[
aa
]);
free
(
ue
->
pusch_slsch
->
rxdataF_comp
[
aa
]);
free
(
ue
->
pusch_slsch
->
ul_ch_mag
[
aa
]);
free
(
ue
->
pusch_slsch
->
ul_ch_mag
[
aa
]);
free
(
ue
->
slsch_rxdataF
[
aa
]);
free
(
ue
->
pusch_sldch
->
rxdataF_ext
[
aa
]);
free
(
ue
->
slsch_rxdata_7_5kHz
[
aa
]);
free
(
ue
->
pusch_sldch
->
drs_ch_estimates
[
aa
]);
}
free
(
ue
->
pusch_sldch
->
rxdataF_comp
[
aa
]);
free
(
ue
->
pusch_sldch
->
ul_ch_mag
[
aa
]);
}
free
(
ue
->
sl_rxdataF
);
free
(
ue
->
sl_rxdata_7_5kHz
);
free
(
ue
->
pusch_slcch
->
rxdataF_ext
);
free
(
ue
->
pusch_slcch
->
drs_ch_estimates
);
free
(
ue
->
pusch_slcch
->
rxdataF_comp
);
free
(
ue
->
pusch_slcch
->
ul_ch_mag
);
free
(
ue
->
pusch_slsch
->
rxdataF_ext
);
free
(
ue
->
pusch_slsch
->
rxdataF_ext
);
free
(
ue
->
pusch_slsch
->
drs_ch_estimates
);
free
(
ue
->
pusch_slsch
->
drs_ch_estimates
);
free
(
ue
->
pusch_slsch
->
rxdataF_comp
);
free
(
ue
->
pusch_slsch
->
rxdataF_comp
);
free
(
ue
->
pusch_slsch
->
ul_ch_mag
);
free
(
ue
->
pusch_slsch
->
ul_ch_mag
);
free
(
ue
->
slsch_rxdataF
);
free
(
ue
->
pusch_sldch
->
rxdataF_ext
);
free
(
ue
->
slsch_rxdata_7_5kHz
);
free
(
ue
->
pusch_sldch
->
drs_ch_estimates
);
free
(
ue
->
pusch_sldch
->
rxdataF_comp
);
free
(
ue
->
pusch_sldch
->
ul_ch_mag
);
free
(
ue
->
slsch_dlsch_llr
);
free
(
ue
->
slsch_dlsch_llr
);
free
(
ue
->
slsch_ulsch_llr
);
free
(
ue
->
slsch_ulsch_llr
);
free
(
ue
->
sldch_dlsch_llr
);
free
(
ue
->
sldch_ulsch_llr
);
}
}
openair1/PHY/LTE_REFSIG/primary_synch.m
View file @
47658e56
...
@@ -2,6 +2,7 @@ primary_synch0 = [zeros(1,5) exp(-1j*pi*25*(0:30).*(1:31)/63) exp(-1j*pi*25*(32:
...
@@ -2,6 +2,7 @@ primary_synch0 = [zeros(1,5) exp(-1j*pi*25*(0:30).*(1:31)/63) exp(-1j*pi*25*(32:
primary_synch1
=
[
zeros
(
1
,
5
)
exp
(
-
1
j
*
pi
*
29
*
(
0
:
30
)
.*
(
1
:
31
)/
63
)
exp
(
-
1
j
*
pi
*
29
*
(
32
:
62
)
.*
(
33
:
63
)/
63
)
zeros
(
1
,
5
)];
primary_synch1
=
[
zeros
(
1
,
5
)
exp
(
-
1
j
*
pi
*
29
*
(
0
:
30
)
.*
(
1
:
31
)/
63
)
exp
(
-
1
j
*
pi
*
29
*
(
32
:
62
)
.*
(
33
:
63
)/
63
)
zeros
(
1
,
5
)];
primary_synch2
=
[
zeros
(
1
,
5
)
exp
(
-
1
j
*
pi
*
34
*
(
0
:
30
)
.*
(
1
:
31
)/
63
)
exp
(
-
1
j
*
pi
*
34
*
(
32
:
62
)
.*
(
33
:
63
)/
63
)
zeros
(
1
,
5
)];
primary_synch2
=
[
zeros
(
1
,
5
)
exp
(
-
1
j
*
pi
*
34
*
(
0
:
30
)
.*
(
1
:
31
)/
63
)
exp
(
-
1
j
*
pi
*
34
*
(
32
:
62
)
.*
(
33
:
63
)/
63
)
zeros
(
1
,
5
)];
%psync_table = [0 exp(-j*2*pi*(0:62)/63)];
%psync_table = [0 exp(-j*2*pi*(0:62)/63)];
%psync_table_mod = zeros(1,63*2);
%psync_table_mod = zeros(1,63*2);
%psync_table_mod(1:2:end) = floor(32767/sqrt(2)*real(psync_table));
%psync_table_mod(1:2:end) = floor(32767/sqrt(2)*real(psync_table));
...
@@ -23,6 +24,14 @@ primary_synch2_mod = zeros(1,72*2);
...
@@ -23,6 +24,14 @@ primary_synch2_mod = zeros(1,72*2);
primary_synch2_mod
(
1
:
2
:
end
)
=
floor
(
32767
*
real
(
primary_synch2
));
primary_synch2_mod
(
1
:
2
:
end
)
=
floor
(
32767
*
real
(
primary_synch2
));
primary_synch2_mod
(
2
:
2
:
end
)
=
floor
(
32767
*
imag
(
primary_synch2
));
primary_synch2_mod
(
2
:
2
:
end
)
=
floor
(
32767
*
imag
(
primary_synch2
));
primary_synch0SL_mod
=
zeros
(
1
,
72
*
2
);
primary_synch0SL_mod
(
1
:
2
:
end
)
=
floor
(
32767
*
real
(
primary_synch0_SL
));
primary_synch0SL_mod
(
2
:
2
:
end
)
=
floor
(
32767
*
imag
(
primary_synch0_SL
));
primary_synch1SL_mod
=
zeros
(
1
,
72
*
2
);
primary_synch1SL_mod
(
1
:
2
:
end
)
=
floor
(
32767
*
real
(
primary_synch1_SL
));
primary_synch1SL_mod
(
2
:
2
:
end
)
=
floor
(
32767
*
imag
(
primary_synch1_SL
));
primary_synch0_mod2
=
zeros
(
1
,
128
);
primary_synch0_mod2
=
zeros
(
1
,
128
);
primary_synch0_mod2
((
128
-
35
):
128
)
=
primary_synch0
(
1
:
36
);
primary_synch0_mod2
((
128
-
35
):
128
)
=
primary_synch0
(
1
:
36
);
primary_synch0_mod2
(
2
:
37
)
=
primary_synch0
(
37
:
end
);
primary_synch0_mod2
(
2
:
37
)
=
primary_synch0
(
37
:
end
);
...
@@ -59,24 +68,22 @@ fprintf(fd,'%d,',primary_synch2_tab(1:end-1));
...
@@ -59,24 +68,22 @@ fprintf(fd,'%d,',primary_synch2_tab(1:end-1));
fprintf
(
fd
,
'%d};\n'
,
primary_synch2_tab
(
end
));
fprintf
(
fd
,
'%d};\n'
,
primary_synch2_tab
(
end
));
fclose
(
fd
);
fclose
(
fd
);
% for LEON we need to invert the endianess
primary_synch0_SL
=
[
zeros
(
1
,
5
)
exp
(
-
1
j
*
pi
*
26
*
(
0
:
30
)
.*
(
1
:
31
)/
63
)
exp
(
-
1
j
*
pi
*
26
*
(
32
:
62
)
.*
(
33
:
63
)/
63
)
zeros
(
1
,
5
)];
fd
=
fopen
(
'primary_synch_leon.h'
,
'w'
);
primary_synch1_SL
=
[
zeros
(
1
,
5
)
exp
(
-
1
j
*
pi
*
37
*
(
0
:
30
)
.*
(
1
:
31
)/
63
)
exp
(
-
1
j
*
pi
*
37
*
(
32
:
62
)
.*
(
33
:
63
)/
63
)
zeros
(
1
,
5
)];
primary_synch0_tab
=
reshape
(
primary_synch0_tab
,
4
,[]);
primary_synch0_tab
=
primary_synch0_tab
([
4
3
2
1
],:);
primary_synch0SL_mod
=
zeros
(
1
,
72
*
2
);
primary_synch0_tab
=
primary_synch0_tab
(:);
primary_synch0SL_mod
(
1
:
2
:
end
)
=
floor
(
32767
*
real
(
primary_synch0_SL
));
primary_synch1_tab
=
reshape
(
primary_synch0_tab
,
4
,[]);
primary_synch0SL_mod
(
2
:
2
:
end
)
=
floor
(
32767
*
imag
(
primary_synch0_SL
));
primary_synch1_tab
=
primary_synch1_tab
([
4
3
2
1
],:);
primary_synch1_tab
=
primary_synch1_tab
(:);
primary_synch1SL_mod
=
zeros
(
1
,
72
*
2
);
primary_synch2_tab
=
reshape
(
primary_synch0_tab
,
4
,[]);
primary_synch1SL_mod
(
1
:
2
:
end
)
=
floor
(
32767
*
real
(
primary_synch1_SL
));
primary_synch2_tab
=
primary_synch2_tab
([
4
3
2
1
],:);
primary_synch1SL_mod
(
2
:
2
:
end
)
=
floor
(
32767
*
imag
(
primary_synch1_SL
));
primary_synch2_tab
=
primary_synch2_tab
(:);
fprintf
(
fd
,
'unsigned char primary_synch0_tab[72] = {'
);
fd
=
fopen
(
'primary_synch_SL.h'
,
'w'
);
fprintf
(
fd
,
'%d,'
,
primary_synch0_tab
(
1
:
end
-
1
));
fprintf
(
fd
,
'short primary_synch0SL[144] = {'
);
fprintf
(
fd
,
'%d};\n'
,
primary_synch0_tab
(
end
));
fprintf
(
fd
,
'%d,'
,
primary_synch0SL_mod
(
1
:
end
-
1
));
fprintf
(
fd
,
'unsigned char primary_synch1_tab[72] = {'
);
fprintf
(
fd
,
'%d};\n'
,
primary_synch0SL_mod
(
end
));
fprintf
(
fd
,
'%d,'
,
primary_synch1_tab
(
1
:
end
-
1
));
fprintf
(
fd
,
'short primary_synch1SL[144] = {'
);
fprintf
(
fd
,
'%d};\n'
,
primary_synch1_tab
(
end
));
fprintf
(
fd
,
'%d,'
,
primary_synch1SL_mod
(
1
:
end
-
1
));
fprintf
(
fd
,
'unsigned char primary_synch2_tab[72] = {'
);
fprintf
(
fd
,
'%d};\n'
,
primary_synch1SL_mod
(
end
));
fprintf
(
fd
,
'%d,'
,
primary_synch2_tab
(
1
:
end
-
1
));
fprintf
(
fd
,
'%d};\n'
,
primary_synch2_tab
(
end
));
fclose
(
fd
);
fclose
(
fd
);
openair1/PHY/LTE_REFSIG/primary_synch_SL.h
0 → 100644
View file @
47658e56
short
primary_synch0SL
[
144
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
32767
,
0
,
-
27960
,
-
17086
,
2448
,
-
32676
,
-
32402
,
-
4884
,
22879
,
-
23457
,
11971
,
-
30502
,
-
16384
,
28377
,
-
30791
,
11206
,
20429
,
25618
,
-
29523
,
14217
,
-
10436
,
31060
,
2448
,
-
32676
,
11971
,
-
30502
,
-
30791
,
11206
,
-
16384
,
-
28378
,
-
32402
,
4883
,
22879
,
-
23457
,
20429
,
-
25619
,
-
29523
,
14217
,
-
27960
,
-
17086
,
-
16384
,
28377
,
-
16384
,
-
28378
,
-
27960
,
-
17086
,
27073
,
18458
,
11971
,
30501
,
22879
,
-
23457
,
20429
,
25618
,
32767
,
-
1
,
-
30791
,
11206
,
-
32402
,
4883
,
27073
,
18458
,
27073
,
18458
,
-
32402
,
4883
,
-
30791
,
11206
,
32767
,
0
,
20429
,
25618
,
22879
,
-
23457
,
11971
,
30501
,
27073
,
18458
,
-
27960
,
-
17086
,
-
16384
,
-
28378
,
-
16384
,
28377
,
-
27960
,
-
17086
,
-
29523
,
14217
,
20429
,
-
25619
,
22879
,
-
23457
,
-
32402
,
4883
,
-
16384
,
-
28378
,
-
30791
,
11206
,
11971
,
-
30502
,
2448
,
-
32676
,
-
10436
,
31060
,
-
29523
,
14217
,
20429
,
25618
,
-
30791
,
11206
,
-
16384
,
28377
,
11971
,
-
30502
,
22879
,
-
23457
,
-
32402
,
-
4884
,
2448
,
-
32676
,
-
27960
,
-
17086
,
32767
,
-
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
primary_synch1SL
[
144
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
32767
,
0
,
-
27960
,
17085
,
2448
,
32675
,
-
32402
,
4883
,
22879
,
23456
,
11971
,
30501
,
-
16384
,
-
28378
,
-
30791
,
-
11207
,
20429
,
-
25619
,
-
29523
,
-
14218
,
-
10436
,
-
31061
,
2448
,
32675
,
11971
,
30501
,
-
30791
,
-
11207
,
-
16384
,
28377
,
-
32402
,
-
4884
,
22879
,
23456
,
20429
,
25618
,
-
29523
,
-
14218
,
-
27960
,
17085
,
-
16384
,
-
28378
,
-
16384
,
28377
,
-
27960
,
17085
,
27073
,
-
18459
,
11971
,
-
30502
,
22879
,
23456
,
20429
,
-
25619
,
32767
,
0
,
-
30791
,
-
11207
,
-
32402
,
-
4884
,
27073
,
-
18459
,
27073
,
-
18459
,
-
32402
,
-
4884
,
-
30791
,
-
11207
,
32767
,
0
,
20429
,
-
25619
,
22879
,
23456
,
11971
,
-
30502
,
27073
,
-
18459
,
-
27960
,
17085
,
-
16384
,
28377
,
-
16384
,
-
28378
,
-
27960
,
17085
,
-
29523
,
-
14218
,
20429
,
25618
,
22879
,
23456
,
-
32402
,
-
4884
,
-
16384
,
28377
,
-
30791
,
-
11207
,
11971
,
30501
,
2448
,
32675
,
-
10436
,
-
31061
,
-
29523
,
-
14218
,
20429
,
-
25619
,
-
30791
,
-
11207
,
-
16384
,
-
28378
,
11971
,
30501
,
22879
,
23456
,
-
32402
,
4883
,
2448
,
32675
,
-
27960
,
17085
,
32767
,
-
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
openair1/PHY/LTE_TRANSPORT/defs.h
View file @
47658e56
...
@@ -941,8 +941,15 @@ typedef struct {
...
@@ -941,8 +941,15 @@ typedef struct {
uint8_t
ljmod10
;
uint8_t
ljmod10
;
}
SLSCH_t
;
}
SLSCH_t
;
typedef
enum
{
disc_type1
=
0
,
disc_type2B
=
1
}
SLD_t
;
typedef
struct
{
typedef
struct
{
// SL Configuration
// SL Discovery Configuration
/// Discovery Type
SLD_t
type
;
/// Number of SL resource blocks (1-100)
/// Number of SL resource blocks (1-100)
uint32_t
N_SL_RB
;
uint32_t
N_SL_RB
;
/// prb-start (0-99)
/// prb-start (0-99)
...
@@ -955,12 +962,26 @@ typedef struct {
...
@@ -955,12 +962,26 @@ typedef struct {
uint32_t
discPeriod
;
uint32_t
discPeriod
;
/// Number of Repetitions (N_R)
/// Number of Repetitions (N_R)
uint32_t
numRepetitions
;
uint32_t
numRepetitions
;
/// Number of retransmissions (numRetx-r12)
uint32_t
numRetx
;
/// PSDCH subframe bitmap (up to 100 bits, first 64)6
/// PSDCH subframe bitmap (up to 100 bits, first 64)6
uint64_t
bitmap1
;
uint64_t
bitmap1
;
/// PSDCH subframe bitmap (up to 100 bits, second 36)
/// PSDCH subframe bitmap (up to 100 bits, second 36)
uint64_t
bitmap2
;
uint64_t
bitmap2
;
/// Bitmap length (N_B) (valid values (4,8,12,16,30,40,42) Rel12, (16,20,100) Rel14
/// Bitmap length (N_B) (valid values (4,8,12,16,30,40,42) Rel12, (16,20,100) Rel14
uint32_t
bitmap_length
;
uint32_t
bitmap_length
;
/// N1_PSDCH (a-r12)
uint32_t
N1
;
/// N1_PSDCH (b-r12)
uint32_t
N2
;
/// N1_PSDCH (c-r12)
uint32_t
N3
;
/// a10 (discPRB-Index)
uint32_t
a10
;
/// b10 (discSF-Index)
uint32_t
b10
;
/// transmission index (j)
uint32_t
j
;
// Discovery resource
// Discovery resource
uint32_t
n_psdch
;
uint32_t
n_psdch
;
/// payload length
/// payload length
...
...
openair1/PHY/LTE_TRANSPORT/drs_modulation.c
View file @
47658e56
...
@@ -109,9 +109,15 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
...
@@ -109,9 +109,15 @@ int generate_drs_pusch(PHY_VARS_UE *ue,
case
PSSCH_34
:
case
PSSCH_34
:
AssertFatal
(
1
==
0
,
"SL Transmission type 3/4 not supported for now
\n
"
);
AssertFatal
(
1
==
0
,
"SL Transmission type 3/4 not supported for now
\n
"
);
break
;
break
;
case
PSDCH_ODD
:
case
PSDCH
:
case
PSDCH_EVEN
:
u0
=
0
;
AssertFatal
(
1
==
0
,
"PSDCH Transmission not supported for now
\n
"
);
u1
=
0
;
v0
=
0
;
v1
=
0
;
cyclic_shift0
=
0
;
cyclic_shift1
=
0
;
lstart
=
(
3
-
frame_parms
->
Ncp
);
linc
=
(
7
-
frame_parms
->
Ncp
);
break
;
break
;
case
PSBCH
:
case
PSBCH
:
AssertFatal
(
1
==
0
,
"PSBCH Transmission not supported for now
\n
"
);
AssertFatal
(
1
==
0
,
"PSBCH Transmission not supported for now
\n
"
);
...
...
openair1/PHY/LTE_TRANSPORT/sldch.c
View file @
47658e56
...
@@ -34,6 +34,323 @@
...
@@ -34,6 +34,323 @@
#include "PHY/defs.h"
#include "PHY/defs.h"
void
sldch_decoding
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
int
frame_rx
,
int
subframe_rx
,
int
npsdch
,
int
nprb
,
int
rvidx
)
{
int
Nsymb
=
7
;
SLDCH_t
*
sldch
=
&
ue
->
sldch
;
int16_t
**
rxdataF_ext
=
ue
->
pusch_sldch
->
rxdataF_ext
;
int16_t
**
drs_ch_estimates
=
ue
->
pusch_sldch
->
drs_ch_estimates
;
int16_t
**
rxdataF_comp
=
ue
->
pusch_sldch
->
rxdataF_comp
;
int16_t
**
ul_ch_mag
=
ue
->
pusch_sldch
->
ul_ch_mag
;
int16_t
**
rxdata_7_5kHz
=
ue
->
sl_rxdata_7_5kHz
;
int16_t
**
rxdataF
=
ue
->
sl_rxdataF
;
int32_t
avgs
;
uint8_t
log2_maxh
=
0
;
int32_t
avgU
[
2
];
LOG_I
(
PHY
,
"sldch_decoding %d.%d
\n
"
,
frame_rx
,
subframe_rx
);
// slot FEP
if
(
ue
->
sl_fep_done
==
0
)
{
ue
->
sl_fep_done
=
1
;
RU_t
ru_tmp
;
memset
((
void
*
)
&
ru_tmp
,
0
,
sizeof
(
RU_t
));
memcpy
((
void
*
)
&
ru_tmp
.
frame_parms
,(
void
*
)
&
ue
->
frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
ru_tmp
.
N_TA_offset
=
0
;
ru_tmp
.
common
.
rxdata
=
ue
->
common_vars
.
rxdata
;
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
ru_tmp
.
nb_rx
=
ue
->
frame_parms
.
nb_antennas_rx
;
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
));
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
)
+
1
);
// extract symbols from slot
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
),
0
);
if
(
l
<
Nsymb
-
1
)
// skip last symbol in second slot
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
)
+
1
,
0
);
}
}
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
ulsch_extract_rbs_single
((
int32_t
**
)
rxdataF
,
(
int32_t
**
)
rxdataF_ext
,
nprb
,
2
,
l
,
(
subframe_rx
<<
1
),
&
ue
->
frame_parms
);
if
(
l
<
Nsymb
-
1
)
// skip last symbol in second slot
ulsch_extract_rbs_single
((
int32_t
**
)
rxdataF
,
(
int32_t
**
)
rxdataF_ext
,
nprb
,
2
,
l
,
(
subframe_rx
<<
1
)
+
1
,
&
ue
->
frame_parms
);
}
#ifdef PSDCH_DEBUG
write_output
(
"sldch_rxF.m"
,
"sldchrxF"
,
&
rxdataF
[
0
][
0
],
14
*
ue
->
frame_parms
.
ofdm_symbol_size
,
1
,
1
);
write_output
(
"sldch_rxF_ext.m"
,
"sldchrxF_ext"
,
rxdataF_ext
[
0
],
14
*
12
*
ue
->
frame_parms
.
N_RB_DL
,
1
,
1
);
#endif
lte_ul_channel_estimation
(
&
ue
->
frame_parms
,
(
int32_t
**
)
drs_ch_estimates
,
(
int32_t
**
)
NULL
,
(
int32_t
**
)
rxdataF_ext
,
2
,
frame_rx
,
subframe_rx
,
0
,
//u
0
,
//v
0
,
//cyclic_shift
3
,
1
,
// interpolation
0
);
lte_ul_channel_estimation
(
&
ue
->
frame_parms
,
(
int32_t
**
)
drs_ch_estimates
,
(
int32_t
**
)
NULL
,
(
int32_t
**
)
rxdataF_ext
,
2
,
frame_rx
,
subframe_rx
,
0
,
//u
0
,
//v
0
,
//cyclic_shift,
10
,
1
,
// interpolation
0
);
ulsch_channel_level
(
drs_ch_estimates
,
&
ue
->
frame_parms
,
avgU
,
2
);
#ifdef PSDCH_DEBUG
write_output
(
"drs_ext0.m"
,
"drsest0"
,
drs_ch_estimates
[
0
],
ue
->
frame_parms
.
N_RB_UL
*
12
*
14
,
1
,
1
);
#endif
avgs
=
0
;
for
(
int
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
avgs
=
cmax
(
avgs
,
avgU
[
aarx
]);
// log2_maxh = 4+(log2_approx(avgs)/2);
log2_maxh
=
(
log2_approx
(
avgs
)
/
2
)
+
log2_approx
(
ue
->
frame_parms
.
nb_antennas_rx
-
1
)
+
4
;
for
(
int
l
=
0
;
l
<
(
Nsymb
<<
1
)
-
1
;
l
++
)
{
if
(((
ue
->
frame_parms
.
Ncp
==
0
)
&&
((
l
==
3
)
||
(
l
==
10
)))
||
// skip pilots
((
ue
->
frame_parms
.
Ncp
==
1
)
&&
((
l
==
2
)
||
(
l
==
8
))))
{
l
++
;
}
ulsch_channel_compensation
(
rxdataF_ext
,
drs_ch_estimates
,
ul_ch_mag
,
NULL
,
rxdataF_comp
,
&
ue
->
frame_parms
,
l
,
2
,
//Qm
2
,
//nb_rb
log2_maxh
);
// log2_maxh+I0_shift
if
(
ue
->
frame_parms
.
nb_antennas_rx
>
1
)
ulsch_detection_mrc
(
&
ue
->
frame_parms
,
rxdataF_comp
,
ul_ch_mag
,
NULL
,
l
,
2
//nb_rb
);
freq_equalization
(
&
ue
->
frame_parms
,
rxdataF_comp
,
ul_ch_mag
,
NULL
,
l
,
24
,
2
);
}
lte_idft
(
&
ue
->
frame_parms
,
rxdataF_comp
[
0
],
24
);
#ifdef PSDCH_DEBUG
write_output
(
"sldch_rxF_comp.m"
,
"sldchrxF_comp"
,
rxdataF_comp
[
0
],
ue
->
frame_parms
.
N_RB_UL
*
12
*
14
,
1
,
1
);
#endif
int
E
=
12
*
2
*
2
*
((
Nsymb
-
1
)
<<
1
);
int16_t
*
llrp
=
ue
->
slsch_ulsch_llr
;
for
(
int
l
=
0
;
l
<
(
Nsymb
<<
1
)
-
1
;
l
++
)
{
if
(((
ue
->
frame_parms
.
Ncp
==
0
)
&&
((
l
==
3
)
||
(
l
==
10
)))
||
// skip pilots
((
ue
->
frame_parms
.
Ncp
==
1
)
&&
((
l
==
2
)
||
(
l
==
8
))))
{
l
++
;
}
ulsch_qpsk_llr
(
&
ue
->
frame_parms
,
rxdataF_comp
,
(
int32_t
*
)
ue
->
slsch_ulsch_llr
,
l
,
2
,
(
int32_t
*
)
&
llrp
);
}
write_output
(
"sldch_llr.m"
,
"sldchllr"
,
ue
->
sldch_ulsch_llr
[
npsdch
],
12
*
2
*
(
ue
->
frame_parms
.
symbols_per_tti
),
1
,
0
);
// unscrambling
uint32_t
x1
,
x2
=
510
;
uint32_t
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
1
);
int
k
=
0
;
int16_t
c
;
for
(
int
i
=
0
;
i
<
(
1
+
(
E
>>
5
));
i
++
)
{
for
(
int
j
=
0
;
j
<
32
;
j
++
,
k
++
)
{
c
=
(
int16_t
)((((
s
>>
j
)
&
1
)
<<
1
)
-
1
);
ue
->
sldch_ulsch_llr
[
k
]
=
c
*
ue
->
sldch_ulsch_llr
[
k
];
}
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
0
);
}
// Deinterleaving
int
Cmux
=
(
Nsymb
-
1
)
*
2
;
for
(
int
i
=
0
,
j
=
0
;
i
<
Cmux
;
i
++
)
{
for
(
int
r
=
0
;
r
<
24
;
r
++
)
{
ue
->
sldch_dlsch_llr
[((
r
*
Cmux
)
+
i
)
<<
1
]
=
ue
->
sldch_ulsch_llr
[
j
++
];
ue
->
sldch_dlsch_llr
[(((
r
*
Cmux
)
+
i
)
<<
1
)
+
1
]
=
ue
->
sldch_ulsch_llr
[
j
++
];
// printf("dlsch_llr[%d] %d(%d) dlsch_llr[%d] %d(%d)\n",
// ((r*Cmux)+i)<<1,ue->slsch_dlsch_llr[((r*Cmux)+i)<<1],j-2,(((r*Cmux)+i)<<1)+1,ue->slsch_dlsch_llr[(((r*Cmux)+i)<<1)+1],j-1);
}
}
// Decoding
ue
->
dlsch_rx_sldch
[
npsdch
]
->
harq_processes
[
0
]
->
rvidx
=
rvidx
;
ue
->
dlsch_rx_sldch
[
npsdch
]
->
harq_processes
[
0
]
->
nb_rb
=
2
;
ue
->
dlsch_rx_sldch
[
npsdch
]
->
harq_processes
[
0
]
->
TBS
=
256
;
ue
->
dlsch_rx_sldch
[
npsdch
]
->
harq_processes
[
0
]
->
Qm
=
2
;
ue
->
dlsch_rx_sldch
[
npsdch
]
->
harq_processes
[
0
]
->
G
=
E
;
ue
->
dlsch_rx_sldch
[
npsdch
]
->
harq_processes
[
0
]
->
Nl
=
1
;
// for (int i=0;i<E/16;i++) printf("decoding: E[%d] %d\n",i,ue->slsch_dlsch_llr[i]);
int
ret
=
dlsch_decoding
(
ue
,
ue
->
sldch_dlsch_llr
,
&
ue
->
frame_parms
,
ue
->
dlsch_rx_sldch
[
npsdch
],
ue
->
dlsch_rx_sldch
[
npsdch
]
->
harq_processes
[
0
],
frame_rx
,
subframe_rx
,
0
,
0
,
1
);
// printf("slsch decoding round %d ret %d\n",ue->dlsch_rx_slsch->harq_processes[0]->round,ret);
if
(
ret
<
ue
->
dlsch_rx_sldch
[
npsdch
]
->
max_turbo_iterations
)
{
LOG_D
(
PHY
,
"SLDCH received for npsdch %d (rvidx %d, iter %d)
\n
"
,
npsdch
,
rvidx
,
ret
);
}
}
void
rx_sldch
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
int
frame_rx
,
int
subframe_rx
)
{
AssertFatal
(
frame_rx
<
1024
&&
frame_rx
>=
0
,
"frame %d is illegal
\n
"
,
frame_rx
);
AssertFatal
(
subframe_rx
<
10
&&
subframe_rx
>=
0
,
"subframe %d is illegal
\n
"
,
subframe_rx
);
SLDCH_t
*
sldch
=
&
ue
->
sldch
;
AssertFatal
(
sldch
!=
NULL
,
"SLDCH is null
\n
"
);
uint32_t
O
=
ue
->
sldch
->
offsetIndicator
;
uint32_t
P
=
ue
->
sldch
->
discPeriod
;
uint32_t
absSF
=
(
frame_rx
*
10
)
+
subframe_rx
;
uint32_t
absSF_offset
,
absSF_modP
;
int
rvtab
[
4
]
=
{
0
,
2
,
3
,
1
};
absSF_offset
=
absSF
-
O
;
if
(
absSF_offset
<
O
)
return
;
absSF_modP
=
absSF_offset
%
P
;
uint64_t
SFpos
=
((
uint64_t
)
1
)
<<
absSF_modP
;
if
((
SFpos
&
sldch
->
bitmap1
)
==
0
)
return
;
// if we get here, then there is a PSDCH subframe for a potential reception
// compute parameters
AssertFatal
(
sldch
->
bitmap_length
==
4
||
sldch
->
bitmap_length
==
8
||
sldch
->
bitmap_length
==
12
||
sldch
->
bitmap_length
==
16
||
sldch
->
bitmap_length
==
30
||
sldch
->
bitmap_length
==
40
||
sldch
->
bitmap_length
==
42
,
"SLDCH Bitmap_length %x not supported
\n
"
,
sldch
->
bitmap_length
);
int
LPSDCH
=
0
;
for
(
int
i
=
0
;
i
<
sldch
->
bitmap_length
;
i
++
)
if
(((((
uint64_t
)
1
)
<<
i
)
&
sldch
->
bitmap1
)
==
1
)
LPSDCH
++
;
AssertFatal
(
sldch
->
type
==
disc_type1
||
sldch
->
type
==
disc_type2B
,
"unknown Discovery type %d
\n
"
,
sldch
->
type
);
int
N_TX_SLD
=
1
+
sldch
->
numRepetitions
;
uint32_t
M_RB_PSDCH_RP
=
sldch
->
N_SL_RB
;
int
first_prb
;
if
(
sldch
->
type
==
disc_type1
)
{
int
Ni
=
LPSDCH
/
N_TX_SLD
;
int
Nf
=
M_RB_PSDCH_RP
>>
1
;
// int a_ji = (((sldch->j-1)*(Nf/N_TX_SLD)) + (sldch->n_psdch/Ni))%Nf;
// int b_1i = sldch->n_psdch%Ni;
// repetition number
int
jrx
;
int
npsdch
;
int
nprb
;
// loop over all candidate PRBs
for
(
int
i
=
0
;
i
<
Nf
;
i
++
){
jrx
=
i
/
(
Nf
/
N_TX_SLD
);
npsdch
=
(
i
%
(
Nf
/
N_TX_SLD
))
*
Ni
+
((
absSF
/
N_TX_SLD
)
%
Ni
);
nprb
=
i
<<
1
;
if
(
nprb
<
(
sldch
->
N_SL_RB
>>
1
))
nprb
+=
sldch
->
prb_Start
;
else
nprb
+=
(
sldch
->
prb_End
-
(
sldch
->
N_SL_RB
>>
1
));
// call decoding for candidate npsdch
LOG_I
(
PHY
,
"SLDCH (RX): Trying npsdch %d, j %d (nprb %d)
\n
"
,
npsdch
,
jrx
,
nprb
);
sldch_decoding
(
ue
,
proc
,
frame_rx
,
subframe_rx
,
npsdch
,
nprb
,
rvtab
[
jrx
]);
}
}
else
{
AssertFatal
(
1
==
0
,
"Discovery Type 2B not supported yet
\n
"
);
}
}
void
generate_sldch
(
PHY_VARS_UE
*
ue
,
SLDCH_t
*
sldch
,
int
frame_tx
,
int
subframe_tx
)
{
void
generate_sldch
(
PHY_VARS_UE
*
ue
,
SLDCH_t
*
sldch
,
int
frame_tx
,
int
subframe_tx
)
{
UE_tport_t
pdu
;
UE_tport_t
pdu
;
...
@@ -64,13 +381,129 @@ void generate_sldch(PHY_VARS_UE *ue,SLDCH_t *sldch,int frame_tx,int subframe_tx)
...
@@ -64,13 +381,129 @@ void generate_sldch(PHY_VARS_UE *ue,SLDCH_t *sldch,int frame_tx,int subframe_tx)
#endif
#endif
void
sldch_codingmodulation
(
PHY_VARS_UE
*
ue
,
int
frame_tx
,
int
subframe_tx
,
int
nprb
,
int
rvidx
)
{
SLDCH_t
*
sldch
=
ue
->
sldch
;
LTE_eNB_DLSCH_t
*
dlsch
=
ue
->
dlsch_sldch
;
LTE_UE_ULSCH_t
*
ulsch
=
ue
->
ulsch_sldch
;
int
tx_amp
;
uint32_t
Nsymb
=
7
;
// 24 REs/PRB * 2*(Nsymb-1) symbols * 2 bits/RE
uint32_t
E
=
24
*
(
Nsymb
-
1
)
*
2
*
2
;
AssertFatal
(
sldch
!=
NULL
,
"ue->sldch is null
\n
"
);
AssertFatal
(
ue
->
sldch_sdu_active
>
0
,
"ue->sldch_sdu_active isn't active
\n
"
);
int
mcs
=
8
;
LOG_I
(
PHY
,
"Generating SLDCH for rvidx %d, npsdch %d, first rb %d
\n
"
,
rvidx
,
sldch
->
n_psdch
,
nprb
);
ue
->
sldch_sdu_active
=
1
;
dlsch
->
harq_processes
[
0
]
->
nb_rb
=
2
;
dlsch
->
harq_processes
[
0
]
->
TBS
=
256
;
dlsch
->
harq_processes
[
0
]
->
Qm
=
2
;
dlsch
->
harq_processes
[
0
]
->
mimo_mode
=
SISO
;
dlsch
->
harq_processes
[
0
]
->
rb_alloc
[
0
]
=
0
;
// unused for SL
dlsch
->
harq_processes
[
0
]
->
rb_alloc
[
1
]
=
0
;
// unused for SL
dlsch
->
harq_processes
[
0
]
->
rb_alloc
[
2
]
=
0
;
// unused for SL
dlsch
->
harq_processes
[
0
]
->
rb_alloc
[
3
]
=
0
;
// unused for SL
dlsch
->
harq_processes
[
0
]
->
Nl
=
1
;
dlsch
->
harq_processes
[
0
]
->
round
=
sldch
->
j
;
dlsch
->
harq_processes
[
0
]
->
rvidx
=
rvidx
;
dlsch_encoding0
(
&
ue
->
frame_parms
,
sldch
->
payload
,
0
,
// means SL
dlsch
,
frame_tx
,
subframe_tx
,
&
ue
->
ulsch_rate_matching_stats
,
&
ue
->
ulsch_turbo_encoding_stats
,
&
ue
->
ulsch_interleaving_stats
);
int
Cmux
=
(
Nsymb
-
1
)
<<
1
;
uint8_t
*
eptr
;
for
(
int
i
=
0
,
j
=
0
;
i
<
Cmux
;
i
++
)
// 24 = 12*(Nsymb-1)*2/(Nsymb-1)
for
(
int
r
=
0
;
r
<
24
;
r
++
)
{
if
(
dlsch
->
harq_processes
[
0
]
->
Qm
==
2
)
{
eptr
=&
dlsch
->
harq_processes
[
0
]
->
e
[((
r
*
Cmux
)
+
i
)
<<
1
];
ulsch
->
h
[
j
++
]
=
*
eptr
++
;
ulsch
->
h
[
j
++
]
=
*
eptr
++
;
}
else
if
(
dlsch
->
harq_processes
[
0
]
->
Qm
==
4
)
{
eptr
=&
dlsch
->
harq_processes
[
0
]
->
e
[((
r
*
Cmux
)
+
i
)
<<
2
];
ulsch
->
h
[
j
++
]
=
*
eptr
++
;
ulsch
->
h
[
j
++
]
=
*
eptr
++
;
ulsch
->
h
[
j
++
]
=
*
eptr
++
;
ulsch
->
h
[
j
++
]
=
*
eptr
++
;
}
else
{
AssertFatal
(
1
==
0
,
"64QAM not supported for SL
\n
"
);
}
}
// scrambling
uint32_t
cinit
=
510
;
ulsch
->
harq_processes
[
0
]
->
nb_rb
=
2
;
ulsch
->
harq_processes
[
0
]
->
first_rb
=
nprb
;
ulsch
->
harq_processes
[
0
]
->
mcs
=
8
;
ulsch
->
Nsymb_pusch
=
((
Nsymb
-
1
)
<<
1
);
ue
->
sl_chan
=
PSDCH
;
ue
->
tx_power_dBm
[
subframe_tx
]
=
3
;
ue
->
tx_total_RE
[
subframe_tx
]
=
24
;
#if defined(EXMIMO) || defined(OAI_USRP) || defined(OAI_BLADERF) || defined(OAI_LMSSDR)
tx_amp
=
get_tx_amp
(
ue
->
tx_power_dBm
[
subframe_tx
],
ue
->
tx_power_max_dBm
,
ue
->
frame_parms
.
N_RB_UL
,
1
);
#else
tx_amp
=
AMP
;
#endif
for
(
int
aa
=
0
;
aa
<
ue
->
frame_parms
.
nb_antennas_tx
;
aa
++
)
{
memset
(
&
ue
->
common_vars
.
txdataF
[
aa
][
subframe_tx
*
ue
->
frame_parms
.
ofdm_symbol_size
*
ue
->
frame_parms
.
symbols_per_tti
],
0
,
ue
->
frame_parms
.
ofdm_symbol_size
*
ue
->
frame_parms
.
symbols_per_tti
*
sizeof
(
int32_t
));
}
ulsch_modulation
(
ue
->
common_vars
.
txdataF
,
tx_amp
,
frame_tx
,
subframe_tx
,
&
ue
->
frame_parms
,
ulsch
,
1
,
cinit
);
generate_drs_pusch
(
ue
,
NULL
,
0
,
tx_amp
,
subframe_tx
,
nprb
,
2
,
0
,
NULL
,
0
);
}
void
check_and_generate_psdch
(
PHY_VARS_UE
*
ue
,
int
frame_tx
,
int
subframe_tx
)
{
void
check_and_generate_psdch
(
PHY_VARS_UE
*
ue
,
int
frame_tx
,
int
subframe_tx
)
{
AssertFatal
(
frame_tx
<
1024
&&
frame_tx
>=
0
,
"frame %d is illegal
\n
"
,
frame_tx
);
AssertFatal
(
frame_tx
<
1024
&&
frame_tx
>=
0
,
"frame %d is illegal
\n
"
,
frame_tx
);
AssertFatal
(
subframe_tx
<
10
&&
subframe_tx
>=
0
,
"subframe %d is illegal
\n
"
,
subframe_tx
);
AssertFatal
(
subframe_tx
<
10
&&
subframe_tx
>=
0
,
"subframe %d is illegal
\n
"
,
subframe_tx
);
/*
SLDCH_t
*
sldch
=
ue
->
sldch
;
SLDCH_t
*
sldch
=
ue
->
sldch
;
AssertFatal(sl
sch!=NULL,"SLS
CH is null\n");
AssertFatal
(
sl
dch
!=
NULL
,
"SLD
CH is null
\n
"
);
uint32_t
O
=
ue
->
sldch
->
offsetIndicator
;
uint32_t
O
=
ue
->
sldch
->
offsetIndicator
;
uint32_t
P
=
ue
->
sldch
->
discPeriod
;
uint32_t
P
=
ue
->
sldch
->
discPeriod
;
uint32_t
absSF
=
(
frame_tx
*
10
)
+
subframe_tx
;
uint32_t
absSF
=
(
frame_tx
*
10
)
+
subframe_tx
;
...
@@ -80,43 +513,55 @@ void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) {
...
@@ -80,43 +513,55 @@ void check_and_generate_psdch(PHY_VARS_UE *ue,int frame_tx,int subframe_tx) {
if
(
absSF_offset
<
O
)
return
;
if
(
absSF_offset
<
O
)
return
;
absSF_modP = absSF_offset%P
;
if
(
absSF_offset
==
0
)
sldch
->
j
=
0
;
if (absSF_mod == 0) {
absSF_modP
=
absSF_offset
%
P
;
ue->psdch_coded =0;
}
uint64_t
SFpos
=
((
uint64_t
)
1
)
<<
absSF_modP
;
uint64_t
SFpos
=
((
uint64_t
)
1
)
<<
absSF_modP
;
if ((SFpos & slsch->bitmap1) == 0) return;
if
((
SFpos
&
sldch
->
bitmap1
)
==
0
)
return
;
// if we get here, then this is a potential PSDCH subframe
int
rvtab
[
4
]
=
{
0
,
2
,
3
,
1
};
int
rvidx
=
rvtab
[
sldch
->
j
&
3
];
int
nprb
;
// compute parameters
AssertFatal
(
sldch
->
bitmap_length
==
4
||
sldch
->
bitmap_length
==
8
||
sldch
->
bitmap_length
==
12
||
sldch
->
bitmap_length
==
16
||
sldch
->
bitmap_length
==
30
||
sldch
->
bitmap_length
==
40
||
sldch
->
bitmap_length
==
42
,
"SLDCH Bitmap_length %x not supported
\n
"
,
sldch
->
bitmap_length
);
int
LPSDCH
=
0
;
for
(
int
i
=
0
;
i
<
sldch
->
bitmap_length
;
i
++
)
if
(((((
uint64_t
)
1
)
<<
i
)
&
sldch
->
bitmap1
)
>
0
)
LPSDCH
++
;
// if we get here, then there is a PSCCH subframe for a potential transmission
AssertFatal
(
LPSDCH
>
0
,
"LPSDCH is 0 (bitmap1 %lx, bitmap_length %d)
\n
"
,
sldch
->
bitmap1
,
sldch
->
bitmap_length
);
uint32_t sf_index=40,LPSCCH=0;
AssertFatal
(
sldch
->
type
==
disc_type1
||
sldch
->
type
==
disc_type2B
,
for (int i=0;i<40;i++) {
"unknown Discovery type %d
\n
"
,
sldch
->
type
);
if (i==absSF_modP) sf_index=LPSCCH;
if (((((uint64_t)1)<<i) & slsch->bitmap1)>0) LPSCCH++;
int
N_TX_SLD
=
1
+
sldch
->
numRepetitions
;
uint32_t
M_RB_PSDCH_RP
=
sldch
->
N_SL_RB
;
if
(
sldch
->
type
==
disc_type1
)
{
int
Ni
=
LPSDCH
/
N_TX_SLD
;
int
Nf
=
M_RB_PSDCH_RP
>>
1
;
int
a_ji
=
(((
sldch
->
j
-
1
)
*
(
Nf
/
N_TX_SLD
))
+
(
sldch
->
n_psdch
/
Ni
))
%
Nf
;
int
b_1i
=
sldch
->
n_psdch
%
Ni
;
if
(
absSF_modP
!=
((
b_1i
*
N_TX_SLD
)
+
sldch
->
j
-
1
))
return
;
nprb
=
2
*
a_ji
;
}
else
{
AssertFatal
(
1
==
0
,
"Discovery Type 2B not supported yet
\n
"
);
}
}
AssertFatal(sf_index<40,"sf_index not set, should not happen (absSF_modP %d)\n",absSF_modP);
// sf_index now contains the SF index in 0...LPSCCH-1
if
(
nprb
<
sldch
->
N_SL_RB
)
nprb
+=
sldch
->
prb_Start
;
// LPSCCH has the number of PSCCH subframes
else
nprb
+=
(
sldch
->
prb_End
-
(
sldch
->
N_SL_RB
>>
1
));
// number of resources blocks per slot times 2 slots
sldch_codingmodulation
(
ue
,
frame_tx
,
subframe_tx
,
nprb
,
rvidx
);
uint32_t M_RB_PSCCH_RP = slsch->N_SL_RB*LPSCCH<<1;
ue
->
psdch_generated
=
1
;
AssertFatal(slsch->n_pscch < (M_RB_PSCCH_RP>>1)*LPSCCH,"n_pscch not in 0..%d\n",
((M_RB_PSCCH_RP>>1)*LPSCCH)-1);
// hard-coded to transmission mode one for now (Section 14.2.1.1 from 36.213 Rel14.3)
uint32_t a1=slsch->n_pscch/LPSCCH;
uint32_t a2=a1+slsch->n_pscch/LPSCCH+(M_RB_PSCCH_RP>>1);
uint32_t b1=slsch->n_pscch%LPSCCH;
uint32_t b2=(slsch->n_pscch + 1 + (a1%(LPSCCH-1)))%LPSCCH;
LOG_I(PHY,"Checking pscch for absSF %d (LPSCCH %d, M_RB_PSCCH_RP %d, a1 %d, a2 %d, b1 %d, b2 %d) pscch_coded %d\n",
absSF, LPSCCH, M_RB_PSCCH_RP,a1,a2,b1,b2,ue->pscch_coded);
ue->slsch_sdu_active = 1;
if (absSF_modP == b1) pscch_codingmodulation(ue,frame_tx,subframe_tx,a1,0);
else if (absSF_modP == b2) pscch_codingmodulation(ue,frame_tx,subframe_tx,a2,1);
else return;
*/
}
}
openair1/PHY/LTE_TRANSPORT/slsch.c
View file @
47658e56
...
@@ -398,7 +398,7 @@ void pscch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,uint32_
...
@@ -398,7 +398,7 @@ void pscch_codingmodulation(PHY_VARS_UE *ue,int frame_tx,int subframe_tx,uint32_
uint32_t
amod
=
a
%
(
slsch
->
N_SL_RB
);
uint32_t
amod
=
a
%
(
slsch
->
N_SL_RB
);
if
(
amod
<
(
slsch
->
N_SL_RB
>>
1
))
nprb
=
slsch
->
prb_Start
+
amod
;
if
(
amod
<
(
slsch
->
N_SL_RB
>>
1
))
nprb
=
slsch
->
prb_Start
+
amod
;
else
nprb
=
slsch
->
prb_End
-
slsch
->
N_SL_RB
+
amod
;
else
nprb
=
slsch
->
prb_End
-
(
slsch
->
N_SL_RB
>>
1
)
+
amod
;
// Fill in power control later
// Fill in power control later
...
@@ -497,7 +497,7 @@ void slsch_codingmodulation(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_tx,in
...
@@ -497,7 +497,7 @@ void slsch_codingmodulation(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_tx,in
AssertFatal
(
slsch
!=
NULL
,
"ue->slsch is null
\n
"
);
AssertFatal
(
slsch
!=
NULL
,
"ue->slsch is null
\n
"
);
AssertFatal
(
ue
->
slsch_sdu_active
>
0
,
"ue->slsch_sdu_active is
G=
\n
"
);
AssertFatal
(
ue
->
slsch_sdu_active
>
0
,
"ue->slsch_sdu_active is
n't active
\n
"
);
LOG_I
(
PHY
,
"Generating SLSCH for rvidx %d, group_id %d, mcs %d, resource first rb %d, L_crbs %d
\n
"
,
LOG_I
(
PHY
,
"Generating SLSCH for rvidx %d, group_id %d, mcs %d, resource first rb %d, L_crbs %d
\n
"
,
slsch
->
rvidx
,
slsch
->
group_destination_id
,
slsch
->
mcs
,
slsch
->
RB_start
,
slsch
->
L_CRBs
);
slsch
->
rvidx
,
slsch
->
group_destination_id
,
slsch
->
mcs
,
slsch
->
RB_start
,
slsch
->
L_CRBs
);
...
@@ -779,8 +779,8 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot)
...
@@ -779,8 +779,8 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot)
int16_t
**
drs_ch_estimates
=
ue
->
pusch_slcch
->
drs_ch_estimates
;
int16_t
**
drs_ch_estimates
=
ue
->
pusch_slcch
->
drs_ch_estimates
;
int16_t
**
rxdataF_comp
=
ue
->
pusch_slcch
->
rxdataF_comp
;
int16_t
**
rxdataF_comp
=
ue
->
pusch_slcch
->
rxdataF_comp
;
int16_t
**
ul_ch_mag
=
ue
->
pusch_slcch
->
ul_ch_mag
;
int16_t
**
ul_ch_mag
=
ue
->
pusch_slcch
->
ul_ch_mag
;
int16_t
**
rxdata_7_5kHz
=
ue
->
sl
cch
_rxdata_7_5kHz
;
int16_t
**
rxdata_7_5kHz
=
ue
->
sl_rxdata_7_5kHz
;
int16_t
**
rxdataF
=
ue
->
sl
cch
_rxdataF
;
int16_t
**
rxdataF
=
ue
->
sl_rxdataF
;
int32_t
avgs
;
int32_t
avgs
;
uint8_t
log2_maxh
=
0
;
uint8_t
log2_maxh
=
0
;
int32_t
avgU
[
2
];
int32_t
avgU
[
2
];
...
@@ -791,29 +791,31 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot)
...
@@ -791,29 +791,31 @@ void pscch_decoding(PHY_VARS_UE *ue,int frame_rx,int subframe_rx,int a,int slot)
if
(
amod
<
(
slsch
->
N_SL_RB
>>
1
))
nprb
=
slsch
->
prb_Start
+
amod
;
if
(
amod
<
(
slsch
->
N_SL_RB
>>
1
))
nprb
=
slsch
->
prb_Start
+
amod
;
else
nprb
=
slsch
->
prb_End
-
slsch
->
N_SL_RB
+
amod
;
else
nprb
=
slsch
->
prb_End
-
(
slsch
->
N_SL_RB
>>
1
)
+
amod
;
// slot FEP
// slot FEP
RU_t
ru_tmp
;
if
(
ue
->
sl_fep_done
==
0
)
{
memset
((
void
*
)
&
ru_tmp
,
0
,
sizeof
(
RU_t
));
RU_t
ru_tmp
;
memset
((
void
*
)
&
ru_tmp
,
0
,
sizeof
(
RU_t
));
memcpy
((
void
*
)
&
ru_tmp
.
frame_parms
,(
void
*
)
&
ue
->
frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
ru_tmp
.
N_TA_offset
=
0
;
memcpy
((
void
*
)
&
ru_tmp
.
frame_parms
,(
void
*
)
&
ue
->
frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
ru_tmp
.
common
.
rxdata
=
ue
->
common_vars
.
rxdata
;
ru_tmp
.
N_TA_offset
=
0
;
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
ru_tmp
.
common
.
rxdata
=
ue
->
common_vars
.
rxdata
;
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
ru_tmp
.
nb_rx
=
ue
->
frame_parms
.
nb_antennas_rx
;
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
ru_tmp
.
nb_rx
=
ue
->
frame_parms
.
nb_antennas_rx
;
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
)
+
slot
);
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
)
+
slot
);
#ifdef PSCCH_DEBUG
#ifdef PSCCH_DEBUG
write_output
(
"rxsig0_input.m"
,
"rxs0_in"
,
&
ue
->
common_vars
.
rxdata
[
0
][((
subframe_rx
<<
1
)
+
slot
)
*
ue
->
frame_parms
.
samples_per_tti
>>
1
],
ue
->
frame_parms
.
samples_per_tti
>>
1
,
1
,
1
);
write_output
(
"rxsig0_input.m"
,
"rxs0_in"
,
&
ue
->
common_vars
.
rxdata
[
0
][((
subframe_rx
<<
1
)
+
slot
)
*
ue
->
frame_parms
.
samples_per_tti
>>
1
],
ue
->
frame_parms
.
samples_per_tti
>>
1
,
1
,
1
);
write_output
(
"rxsig0_7_5kHz.m"
,
"rxs0_7_5kHz"
,
rxdata_7_5kHz
[
0
],
ue
->
frame_parms
.
samples_per_tti
,
1
,
1
);
write_output
(
"rxsig0_7_5kHz.m"
,
"rxs0_7_5kHz"
,
rxdata_7_5kHz
[
0
],
ue
->
frame_parms
.
samples_per_tti
,
1
,
1
);
#endif
#endif
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
)
+
slot
,
0
);
}
// extract symbols from slot
// extract symbols from slot
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
)
+
slot
,
0
);
ulsch_extract_rbs_single
((
int32_t
**
)
rxdataF
,
ulsch_extract_rbs_single
((
int32_t
**
)
rxdataF
,
(
int32_t
**
)
rxdataF_ext
,
(
int32_t
**
)
rxdataF_ext
,
nprb
,
nprb
,
...
@@ -1116,8 +1118,8 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
...
@@ -1116,8 +1118,8 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
int16_t
**
drs_ch_estimates
=
ue
->
pusch_slsch
->
drs_ch_estimates
;
int16_t
**
drs_ch_estimates
=
ue
->
pusch_slsch
->
drs_ch_estimates
;
int16_t
**
rxdataF_comp
=
ue
->
pusch_slsch
->
rxdataF_comp
;
int16_t
**
rxdataF_comp
=
ue
->
pusch_slsch
->
rxdataF_comp
;
int16_t
**
ul_ch_mag
=
ue
->
pusch_slsch
->
ul_ch_mag
;
int16_t
**
ul_ch_mag
=
ue
->
pusch_slsch
->
ul_ch_mag
;
int16_t
**
rxdata_7_5kHz
=
ue
->
sl
sch
_rxdata_7_5kHz
;
int16_t
**
rxdata_7_5kHz
=
ue
->
sl_rxdata_7_5kHz
;
int16_t
**
rxdataF
=
ue
->
sl
sch
_rxdataF
;
int16_t
**
rxdataF
=
ue
->
sl_rxdataF
;
int32_t
avgs
;
int32_t
avgs
;
uint8_t
log2_maxh
=
0
;
uint8_t
log2_maxh
=
0
;
int32_t
avgU
[
2
];
int32_t
avgU
[
2
];
...
@@ -1126,23 +1128,30 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
...
@@ -1126,23 +1128,30 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
LOG_I
(
PHY
,
"slsch_decoding %d.%d => lmod10 %d
\n
"
,
frame_rx
,
subframe_rx
,
ljmod10
);
LOG_I
(
PHY
,
"slsch_decoding %d.%d => lmod10 %d
\n
"
,
frame_rx
,
subframe_rx
,
ljmod10
);
// slot FEP
// slot FEP
RU_t
ru_tmp
;
if
(
ue
->
sl_fep_done
==
0
)
{
memset
((
void
*
)
&
ru_tmp
,
0
,
sizeof
(
RU_t
));
ue
->
sl_fep_done
=
1
;
RU_t
ru_tmp
;
memcpy
((
void
*
)
&
ru_tmp
.
frame_parms
,(
void
*
)
&
ue
->
frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
memset
((
void
*
)
&
ru_tmp
,
0
,
sizeof
(
RU_t
));
ru_tmp
.
N_TA_offset
=
0
;
ru_tmp
.
common
.
rxdata
=
ue
->
common_vars
.
rxdata
;
memcpy
((
void
*
)
&
ru_tmp
.
frame_parms
,(
void
*
)
&
ue
->
frame_parms
,
sizeof
(
LTE_DL_FRAME_PARMS
));
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
ru_tmp
.
N_TA_offset
=
0
;
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
ru_tmp
.
common
.
rxdata
=
ue
->
common_vars
.
rxdata
;
ru_tmp
.
nb_rx
=
ue
->
frame_parms
.
nb_antennas_rx
;
ru_tmp
.
common
.
rxdata_7_5kHz
=
(
int32_t
**
)
rxdata_7_5kHz
;
ru_tmp
.
common
.
rxdataF
=
(
int32_t
**
)
rxdataF
;
ru_tmp
.
nb_rx
=
ue
->
frame_parms
.
nb_antennas_rx
;
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
));
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
)
+
1
);
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
));
// extract symbols from slot
remove_7_5_kHz
(
&
ru_tmp
,(
subframe_rx
<<
1
)
+
1
);
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
),
0
);
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
),
0
);
if
(
l
<
Nsymb
-
1
)
// skip last symbol in second slot
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
)
+
1
,
0
);
}
LOG_I
(
PHY
,
"SLSCH Slot FEP %d.%d
\n
"
,
frame_rx
,
subframe_rx
);
}
// extract symbols from slot
for
(
int
l
=
0
;
l
<
Nsymb
;
l
++
)
{
ulsch_extract_rbs_single
((
int32_t
**
)
rxdataF
,
ulsch_extract_rbs_single
((
int32_t
**
)
rxdataF
,
(
int32_t
**
)
rxdataF_ext
,
(
int32_t
**
)
rxdataF_ext
,
slsch
->
RB_start
,
slsch
->
RB_start
,
...
@@ -1152,8 +1161,6 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
...
@@ -1152,8 +1161,6 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
&
ue
->
frame_parms
);
&
ue
->
frame_parms
);
if
(
l
<
Nsymb
-
1
)
{
// skip last symbol in second slot
if
(
l
<
Nsymb
-
1
)
{
// skip last symbol in second slot
slot_fep_ul
(
&
ru_tmp
,
l
,(
subframe_rx
<<
1
)
+
1
,
0
);
ulsch_extract_rbs_single
((
int32_t
**
)
rxdataF
,
ulsch_extract_rbs_single
((
int32_t
**
)
rxdataF
,
(
int32_t
**
)
rxdataF_ext
,
(
int32_t
**
)
rxdataF_ext
,
slsch
->
RB_start
,
slsch
->
RB_start
,
...
@@ -1263,9 +1270,9 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
...
@@ -1263,9 +1270,9 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
rxdataF_comp
[
0
],
rxdataF_comp
[
0
],
slsch
->
L_CRBs
*
12
);
slsch
->
L_CRBs
*
12
);
//
#ifdef PSSCH_DEBUG
#ifdef PSSCH_DEBUG
write_output
(
"slsch_rxF_comp.m"
,
"slschrxF_comp"
,
rxdataF_comp
[
0
],
ue
->
frame_parms
.
N_RB_UL
*
12
*
14
,
1
,
1
);
write_output
(
"slsch_rxF_comp.m"
,
"slschrxF_comp"
,
rxdataF_comp
[
0
],
ue
->
frame_parms
.
N_RB_UL
*
12
*
14
,
1
,
1
);
//
#endif
#endif
int
E
=
12
*
Qm
*
slsch
->
L_CRBs
*
((
Nsymb
-
1
)
<<
1
);
int
E
=
12
*
Qm
*
slsch
->
L_CRBs
*
((
Nsymb
-
1
)
<<
1
);
...
@@ -1316,10 +1323,11 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
...
@@ -1316,10 +1323,11 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
}
}
}
}
#ifdef PSSCH_DEBUG
write_output
(
"slsch_llr.m"
,
"slschllr"
,
ue
->
slsch_ulsch_llr
,
write_output
(
"slsch_llr.m"
,
"slschllr"
,
ue
->
slsch_ulsch_llr
,
12
*
Qm
*
(
ue
->
frame_parms
.
symbols_per_tti
),
12
*
slsch
->
L_CRBs
*
Qm
*
(
ue
->
frame_parms
.
symbols_per_tti
-
2
),
1
,
0
);
1
,
0
);
#endif
// unscrambling
// unscrambling
...
@@ -1414,6 +1422,7 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
...
@@ -1414,6 +1422,7 @@ void slsch_decoding(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,int frame_rx,int subfra
else
LOG_I
(
PHY
,
"sLSCH received in error for rvidx %d round %d (L_CRBs %d, mcs %d)
\n
"
,
else
LOG_I
(
PHY
,
"sLSCH received in error for rvidx %d round %d (L_CRBs %d, mcs %d)
\n
"
,
slsch
->
rvidx
,(
ue
->
dlsch_rx_slsch
->
harq_processes
[
0
]
->
round
+
3
)
&
3
,
slsch
->
L_CRBs
,
slsch
->
mcs
);
slsch
->
rvidx
,(
ue
->
dlsch_rx_slsch
->
harq_processes
[
0
]
->
round
+
3
)
&
3
,
slsch
->
L_CRBs
,
slsch
->
mcs
);
}
}
void
rx_slsch
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
int
frame_rx
,
int
subframe_rx
)
{
void
rx_slsch
(
PHY_VARS_UE
*
ue
,
UE_rxtx_proc_t
*
proc
,
int
frame_rx
,
int
subframe_rx
)
{
...
...
openair1/PHY/defs.h
View file @
47658e56
...
@@ -1192,6 +1192,7 @@ typedef struct PHY_VARS_eNB_s {
...
@@ -1192,6 +1192,7 @@ typedef struct PHY_VARS_eNB_s {
#define debug_msg if (((mac_xface->frame%100) == 0) || (mac_xface->frame < 50)) msg
#define debug_msg if (((mac_xface->frame%100) == 0) || (mac_xface->frame < 50)) msg
#define MAX_SLDCH 16
/// Top-level PHY Data Structure for UE
/// Top-level PHY Data Structure for UE
typedef
struct
{
typedef
struct
{
/// \brief Module ID indicator for this instance
/// \brief Module ID indicator for this instance
...
@@ -1265,18 +1266,23 @@ typedef struct {
...
@@ -1265,18 +1266,23 @@ typedef struct {
// This is for SIC in the UE, to store the reencoded data
// This is for SIC in the UE, to store the reencoded data
LTE_eNB_DLSCH_t
*
dlsch_eNB
[
NUMBER_OF_CONNECTED_eNB_MAX
];
LTE_eNB_DLSCH_t
*
dlsch_eNB
[
NUMBER_OF_CONNECTED_eNB_MAX
];
// Sidelink-specific variables
// Sidelink-specific variables
int
sl_fep_done
;
SL_chan_t
sl_chan
;
SL_chan_t
sl_chan
;
LTE_eNB_DLSCH_t
*
dlsch_slsch
;
LTE_eNB_DLSCH_t
*
dlsch_slsch
;
LTE_UE_ULSCH_t
*
ulsch_slsch
;
LTE_UE_ULSCH_t
*
ulsch_slsch
;
LTE_eNB_PUSCH
*
pusch_slsch
;
LTE_eNB_PUSCH
*
pusch_slsch
;
LTE_eNB_DLSCH_t
*
dlsch_sldch
;
LTE_UE_ULSCH_t
*
ulsch_sldch
;
LTE_eNB_PUSCH
*
pusch_sldch
;
LTE_eNB_PUSCH
*
pusch_slcch
;
LTE_eNB_PUSCH
*
pusch_slcch
;
LTE_UE_DLSCH_t
*
dlsch_rx_slsch
;
LTE_UE_DLSCH_t
*
dlsch_rx_slsch
;
int16_t
**
slsch_rxdataF
;
LTE_UE_DLSCH_t
*
dlsch_rx_sldch
[
MAX_SLDCH
];
int16_t
**
slcch_rxdataF
;
int16_t
**
sl_rxdataF
;
int16_t
**
slsch_rxdata_7_5kHz
;
int16_t
**
sl_rxdata_7_5kHz
;
int16_t
**
slcch_rxdata_7_5kHz
;
int16_t
*
slsch_dlsch_llr
;
int16_t
*
slsch_dlsch_llr
;
int16_t
*
slsch_ulsch_llr
;
int16_t
*
slsch_ulsch_llr
;
int16_t
*
sldch_dlsch_llr
;
int16_t
*
sldch_ulsch_llr
;
SLSCH_t
*
slsch
;
SLSCH_t
*
slsch
;
SLSCH_t
slsch_rx
;
SLSCH_t
slsch_rx
;
int
slsch_active
;
int
slsch_active
;
...
@@ -1288,6 +1294,8 @@ typedef struct {
...
@@ -1288,6 +1294,8 @@ typedef struct {
uint32_t
slsch_txcnt
;
uint32_t
slsch_txcnt
;
uint32_t
slsch_errors
;
uint32_t
slsch_errors
;
uint32_t
slsch_rxcnt
[
4
];
uint32_t
slsch_rxcnt
[
4
];
SLDCH_t
*
sldch
;
int
sldch_sdu_active
;
//Paging parameters
//Paging parameters
uint32_t
IMSImod1024
;
uint32_t
IMSImod1024
;
uint32_t
PF
;
uint32_t
PF
;
...
@@ -1368,6 +1376,7 @@ typedef struct {
...
@@ -1368,6 +1376,7 @@ typedef struct {
uint8_t
pscch_coded
;
uint8_t
pscch_coded
;
uint8_t
pscch_generated
;
uint8_t
pscch_generated
;
uint8_t
pssch_generated
;
uint8_t
pssch_generated
;
uint8_t
psdch_generated
;
uint8_t
generate_prach
;
uint8_t
generate_prach
;
uint8_t
prach_cnt
;
uint8_t
prach_cnt
;
uint8_t
prach_PreambleIndex
;
uint8_t
prach_PreambleIndex
;
...
...
openair1/PHY/impl_defs_lte.h
View file @
47658e56
...
@@ -355,10 +355,9 @@ typedef enum {
...
@@ -355,10 +355,9 @@ typedef enum {
PSCCH_34_ODD
=
4
,
PSCCH_34_ODD
=
4
,
PSSCH_12
=
5
,
PSSCH_12
=
5
,
PSSCH_34
=
6
,
PSSCH_34
=
6
,
PSDCH_EVEN
=
7
,
PSDCH
=
7
,
PSDCH_ODD
=
8
,
PSBCH
=
8
,
PSBCH
=
9
,
MAX_SLTYPES
=
9
MAX_SLTYPES
=
10
}
SL_chan_t
;
}
SL_chan_t
;
/// DeltaFList-PUCCH from 36.331 RRC spec
/// DeltaFList-PUCCH from 36.331 RRC spec
...
...
openair1/SIMULATION/LTE_PHY/slschsim.c
View file @
47658e56
...
@@ -62,12 +62,14 @@ int main(int argc, char **argv) {
...
@@ -62,12 +62,14 @@ int main(int argc, char **argv) {
PHY_VARS_UE
*
UE
;
PHY_VARS_UE
*
UE
;
int
log_level
=
LOG_INFO
;
int
log_level
=
LOG_INFO
;
SLSCH_t
slsch
;
SLSCH_t
slsch
;
SLDCH_t
sldch
;
SCM_t
channel_model
=
AWGN
;
SCM_t
channel_model
=
AWGN
;
UE_rxtx_proc_t
proc
;
UE_rxtx_proc_t
proc
;
double
snr0
=
35
;
double
snr0
=
35
;
double
snr_step
=
1
;
double
snr_step
=
1
;
double
snr_int
=
1
;
double
snr_int
=
1
;
uint8_t
slsch_payload
[
768
*
9
];
uint8_t
slsch_payload
[
768
*
9
];
uint8_t
sldch_payload
[
32
];
int
mcs
=
10
;
int
mcs
=
10
;
int
nb_rb
=
20
;
int
nb_rb
=
20
;
char
channel_model_input
[
20
];
char
channel_model_input
[
20
];
...
@@ -235,7 +237,8 @@ int main(int argc, char **argv) {
...
@@ -235,7 +237,8 @@ int main(int argc, char **argv) {
UE
->
N_TA_offset
=
0
;
UE
->
N_TA_offset
=
0
;
UE
->
hw_timing_advance
=
0
;
UE
->
hw_timing_advance
=
0
;
UE
->
slsch
=
&
slsch
;
UE
->
slsch
=
&
slsch
;
// SL Configuration
UE
->
sldch
=
&
sldch
;
// SLSCH/CCH Configuration
slsch
.
N_SL_RB
=
20
;
slsch
.
N_SL_RB
=
20
;
slsch
.
prb_Start
=
5
;
slsch
.
prb_Start
=
5
;
slsch
.
prb_End
=
44
;
slsch
.
prb_End
=
44
;
...
@@ -264,10 +267,28 @@ int main(int argc, char **argv) {
...
@@ -264,10 +267,28 @@ int main(int argc, char **argv) {
slsch
.
L_CRBs
=
nb_rb
;
slsch
.
L_CRBs
=
nb_rb
;
slsch
.
payload_length
=
get_TBS_UL
(
slsch
.
mcs
,
slsch
.
L_CRBs
);
slsch
.
payload_length
=
get_TBS_UL
(
slsch
.
mcs
,
slsch
.
L_CRBs
);
slsch
.
payload
=
slsch_payload
;
slsch
.
payload
=
slsch_payload
;
// SLDCH Configuration
sldch
.
type
=
disc_type1
;
sldch
.
N_SL_RB
=
8
;
sldch
.
prb_Start
=
15
;
sldch
.
prb_End
=
34
;
sldch
.
offsetIndicator
=
0
;
/// 128 frame
sldch
.
discPeriod
=
128
;
// 1 transmission per period
sldch
.
numRepetitions
=
1
;
// 4 transmissions per SLDCH sdu
sldch
.
numRetx
=
3
;
// 16 TXops
sldch
.
bitmap1
=
0xffff
;
sldch
.
bitmap_length
=
16
;
sldch
.
payload_length
=
256
;
// copy sidelink parameters, PSCCH and PSSCH payloads will get overwritten
// copy sidelink parameters, PSCCH and PSSCH payloads will get overwritten
memcpy
((
void
*
)
&
UE
->
slsch_rx
,(
void
*
)
UE
->
slsch
,
sizeof
(
SLSCH_t
));
memcpy
((
void
*
)
&
UE
->
slsch_rx
,(
void
*
)
UE
->
slsch
,
sizeof
(
SLSCH_t
));
for
(
int
i
=
0
;
i
<
768
*
9
;
i
++
)
slsch_payload
[
i
]
=
taus
()
&
255
;
for
(
int
i
=
0
;
i
<
768
*
9
;
i
++
)
slsch_payload
[
i
]
=
taus
()
&
255
;
for
(
int
i
=
0
;
i
<
32
;
i
++
)
sldch_payload
[
i
]
=
taus
()
&
255
;
// 0dBm transmit power for PSCCH = 0dBm - 10*log10(12) dBm/RE
// 0dBm transmit power for PSCCH = 0dBm - 10*log10(12) dBm/RE
...
@@ -279,19 +300,22 @@ int main(int argc, char **argv) {
...
@@ -279,19 +300,22 @@ int main(int argc, char **argv) {
UE
->
slsch_txcnt
=
0
;
UE
->
slsch_txcnt
=
0
;
UE
->
slsch_rxcnt
[
0
]
=
0
;
UE
->
slsch_rxcnt
[
1
]
=
0
;
UE
->
slsch_rxcnt
[
2
]
=
0
;
UE
->
slsch_rxcnt
[
3
]
=
0
;
UE
->
slsch_rxcnt
[
0
]
=
0
;
UE
->
slsch_rxcnt
[
1
]
=
0
;
UE
->
slsch_rxcnt
[
2
]
=
0
;
UE
->
slsch_rxcnt
[
3
]
=
0
;
pscch_errors
=
0
;
pscch_errors
=
0
;
UE
->
sl_fep_done
=
0
;
for
(
trials
=
0
;
trials
<
n_trials
;
trials
++
)
{
for
(
trials
=
0
;
trials
<
n_trials
;
trials
++
)
{
UE
->
pscch_coded
=
0
;
UE
->
pscch_coded
=
0
;
UE
->
pscch_generated
=
0
;
UE
->
pscch_generated
=
0
;
UE
->
psdch_generated
=
0
;
for
(
int
absSF
=
0
;
absSF
<
10240
;
absSF
++
)
{
for
(
int
absSF
=
0
;
absSF
<
10240
;
absSF
++
)
{
frame
=
absSF
/
10
;
frame
=
absSF
/
10
;
subframe
=
absSF
%
10
;
subframe
=
absSF
%
10
;
check_and_generate_psdch
(
UE
,
frame
,
subframe
);
UE
->
slsch_active
=
1
;
UE
->
slsch_active
=
1
;
check_and_generate_pscch
(
UE
,
frame
,
subframe
);
check_and_generate_pscch
(
UE
,
frame
,
subframe
);
proc
.
subframe_tx
=
subframe
;
proc
.
subframe_tx
=
subframe
;
proc
.
frame_tx
=
frame
;
proc
.
frame_tx
=
frame
;
check_and_generate_pssch
(
UE
,
&
proc
,
frame
,
subframe
);
check_and_generate_pssch
(
UE
,
&
proc
,
frame
,
subframe
);
if
(
UE
->
pscch_generated
>
0
||
UE
->
pssch_generated
>
0
)
{
if
(
UE
->
ps
dch_generated
>
0
||
UE
->
ps
cch_generated
>
0
||
UE
->
pssch_generated
>
0
)
{
AssertFatal
(
UE
->
pscch_generated
<
3
,
"Illegal pscch_generated %d
\n
"
,
UE
->
pscch_generated
);
AssertFatal
(
UE
->
pscch_generated
<
3
,
"Illegal pscch_generated %d
\n
"
,
UE
->
pscch_generated
);
// FEP
// FEP
ulsch_common_procedures
(
UE
,
&
proc
,
0
);
ulsch_common_procedures
(
UE
,
&
proc
,
0
);
...
@@ -301,12 +325,13 @@ int main(int argc, char **argv) {
...
@@ -301,12 +325,13 @@ int main(int argc, char **argv) {
// write_output("rxsig0.m","rxs0",&UE->common_vars.rxdata[0][UE->frame_parms.samples_per_tti*subframe],UE->frame_parms.samples_per_tti,1,1);
// write_output("rxsig0.m","rxs0",&UE->common_vars.rxdata[0][UE->frame_parms.samples_per_tti*subframe],UE->frame_parms.samples_per_tti,1,1);
UE
->
pscch_generated
=
0
;
UE
->
pscch_generated
=
0
;
UE
->
pssch_generated
=
0
;
UE
->
pssch_generated
=
0
;
UE
->
psdch_generated
=
0
;
}
}
rx_slcch
(
UE
,
frame
,
subframe
);
rx_slcch
(
UE
,
frame
,
subframe
);
rx_slsch
(
UE
,
&
proc
,
frame
,
subframe
);
rx_slsch
(
UE
,
&
proc
,
frame
,
subframe
);
UE
->
sl_fep_done
=
0
;
if
((
absSF
%
320
)
==
319
)
{
if
((
absSF
%
320
)
==
319
)
{
if
(
UE
->
slcch_received
==
0
)
pscch_errors
++
;
if
(
UE
->
slcch_received
==
0
)
pscch_errors
++
;
break
;
break
;
...
...
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