Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
sneltved
openairinterface5G
Commits
669c8eb9
Commit
669c8eb9
authored
Dec 08, 2014
by
knopp
Browse files
Additions for TM3 in eNB and partially in UE - RK
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@6182
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
c753e7bc
Changes
28
Expand all
Hide whitespace changes
Inline
Side-by-side
openair1/PHY/CODING/lte_rate_matching.c
View file @
669c8eb9
...
...
@@ -661,7 +661,8 @@ int lte_rate_matching_turbo_rx(uint32_t RTC,
int
nulled
=
0
;
#endif
if
(
Kmimo
==
0
||
Mdlharq
==
0
||
C
==
0
||
Qm
==
0
||
Nl
==
0
)
{
msg
(
"lte_rate_matching.c: invalid paramters
\n
"
);
msg
(
"lte_rate_matching.c: invalid parameters (Kmimo %d, Mdlharq %d, C %d, Qm %d, Nl %d
\n
"
,
Kmimo
,
Mdlharq
,
C
,
Qm
,
Nl
);
return
(
-
1
);
}
...
...
openair1/PHY/INIT/lte_init.c
View file @
669c8eb9
...
...
@@ -1098,10 +1098,13 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_ext
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp1
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
for
(
j
=
0
;
j
<
4
;
j
++
){
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp1
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
}
// printf("rxdataF_comp[0] %p\n",ue_pdsch_vars[eNB_id]->rxdataF_comp[0]);
ue_pdcch_vars
[
eNB_id
]
->
rxdataF_comp
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
...
...
@@ -1130,15 +1133,21 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
ue_pdsch_vars
[
eNB_id
]
->
pmi_ext
=
(
unsigned
char
*
)
malloc16
(
frame_parms
->
N_RB_DL
);
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag1
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
for
(
j
=
0
;
j
<
4
;
j
++
)
{
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag1
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
}
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb1
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
for
(
j
=
0
;
j
<
4
;
j
++
)
{
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb1
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
}
ue_pdsch_vars
[
eNB_id
]
->
rho
=
(
int
**
)
malloc16
(
frame_parms
->
nb_antennas_rx
*
sizeof
(
int
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
...
...
@@ -1206,13 +1215,13 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_SI
[
eNB_id
]
->
rxdataF_ext
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_SI
[
eNB_id
]
->
rxdataF_comp
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
ue_pdsch_vars_SI
[
eNB_id
]
->
rxdataF_comp
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
ue_pdsch_vars_SI
[
eNB_id
]
->
pmi_ext
=
(
unsigned
char
*
)
malloc16
(
frame_parms
->
N_RB_DL
);
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_SI
[
eNB_id
]
->
rxdataF_comp
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_SI
[
eNB_id
]
->
rxdataF_comp
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_SI
[
eNB_id
]
->
rho
=
(
int
**
)
malloc16
(
frame_parms
->
nb_antennas_rx
*
sizeof
(
int
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
...
...
@@ -1228,10 +1237,10 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_ra
[
eNB_id
]
->
rxdataF_ext
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_ra
[
eNB_id
]
->
rxdataF_comp
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
ue_pdsch_vars_ra
[
eNB_id
]
->
rxdataF_comp
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_ra
[
eNB_id
]
->
rxdataF_comp
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_ra
[
eNB_id
]
->
rxdataF_comp
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_ra
[
eNB_id
]
->
rho
=
(
int
**
)
malloc16
(
frame_parms
->
nb_antennas_rx
*
sizeof
(
int
*
));
...
...
@@ -1250,10 +1259,10 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_mch
[
eNB_id
]
->
rxdataF_ext
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_mch
[
eNB_id
]
->
rxdataF_comp
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
ue_pdsch_vars_mch
[
eNB_id
]
->
rxdataF_comp
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_mch
[
eNB_id
]
->
rxdataF_comp
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
2
+
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_mch
[
eNB_id
]
->
rxdataF_comp
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
2
+
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_mch
[
eNB_id
]
->
rho
=
(
int
**
)
malloc16
(
frame_parms
->
nb_antennas_rx
*
sizeof
(
int
*
));
...
...
@@ -1282,15 +1291,15 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_SI
[
eNB_id
]
->
dl_ch_rho_ext
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_SI
[
eNB_id
]
->
dl_ch_mag
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars_SI
[
eNB_id
]
->
dl_ch_mag
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_SI
[
eNB_id
]
->
dl_ch_mag
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_SI
[
eNB_id
]
->
dl_ch_mag
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_SI
[
eNB_id
]
->
dl_ch_magb
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars_SI
[
eNB_id
]
->
dl_ch_magb
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_SI
[
eNB_id
]
->
dl_ch_magb
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_SI
[
eNB_id
]
->
dl_ch_magb
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_SI
[
eNB_id
]
->
llr
[
0
]
=
(
short
*
)
malloc16
((
8
*
((
3
*
8
*
6144
)
+
12
))
*
sizeof
(
short
));
/***/
...
...
@@ -1307,15 +1316,15 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_ra
[
eNB_id
]
->
dl_ch_rho_ext
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_ra
[
eNB_id
]
->
dl_ch_mag
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars_ra
[
eNB_id
]
->
dl_ch_mag
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_ra
[
eNB_id
]
->
dl_ch_mag
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_ra
[
eNB_id
]
->
dl_ch_mag
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_ra
[
eNB_id
]
->
dl_ch_magb
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars_ra
[
eNB_id
]
->
dl_ch_magb
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_ra
[
eNB_id
]
->
dl_ch_magb
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_ra
[
eNB_id
]
->
dl_ch_magb
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
// ue_pdsch_vars_ra[eNB_id]->llr[0] = (short *)malloc16((8*((3*8*6144)+12))*sizeof(short));
ue_pdsch_vars_ra
[
eNB_id
]
->
llr128
=
(
short
**
)
malloc16
(
sizeof
(
short
**
));
...
...
@@ -1332,15 +1341,15 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_mch
[
eNB_id
]
->
dl_ch_rho_ext
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_mch
[
eNB_id
]
->
dl_ch_mag
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars_mch
[
eNB_id
]
->
dl_ch_mag
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_mch
[
eNB_id
]
->
dl_ch_mag
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_mch
[
eNB_id
]
->
dl_ch_mag
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_mch
[
eNB_id
]
->
dl_ch_magb
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars_mch
[
eNB_id
]
->
dl_ch_magb
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
ue_pdsch_vars_mch
[
eNB_id
]
->
dl_ch_magb
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_mch
[
eNB_id
]
->
dl_ch_magb
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
// ue_pdsch_vars_mch[eNB_id]->llr[0] = (short *)malloc16((8*((3*8*6144)+12))*sizeof(short));
ue_pdsch_vars_mch
[
eNB_id
]
->
llr128
=
(
short
**
)
malloc16
(
sizeof
(
short
**
));
...
...
@@ -1419,13 +1428,13 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
}
}
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
int
*
));
ue_pdsch_vars_flp
[
eNB_id
]
->
rxdataF_comp
=
(
double
**
)
malloc16
(
8
*
sizeof
(
int
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
{
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
{
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars
[
eNB_id
]
->
rxdataF_comp
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
ue_pdsch_vars_flp
[
eNB_id
]
->
rxdataF_comp
[(
j
<<
1
)
+
i
]
=
(
double
*
)
malloc16
(
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
*
14
));
}
}
...
...
@@ -1456,23 +1465,23 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
ue_pdsch_vars
[
eNB_id
]
->
pmi_ext
=
(
unsigned
char
*
)
malloc16
(
frame_parms
->
N_RB_DL
);
ue_pdsch_vars_flp
[
eNB_id
]
->
pmi_ext
=
(
unsigned
char
*
)
malloc16
(
frame_parms
->
N_RB_DL
);
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars_flp
[
eNB_id
]
->
dl_ch_mag
=
(
double
**
)
malloc16
(
8
*
sizeof
(
double
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
{
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
{
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_mag
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_flp
[
eNB_id
]
->
dl_ch_mag
[(
j
<<
1
)
+
i
]
=
(
double
*
)
malloc16
(
7
*
2
*
sizeof
(
double
)
*
(
frame_parms
->
N_RB_DL
*
12
));
}
}
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb
0
=
(
int
**
)
malloc16
(
8
*
sizeof
(
short
*
));
ue_pdsch_vars_flp
[
eNB_id
]
->
dl_ch_magb
=
(
double
**
)
malloc16
(
8
*
sizeof
(
double
*
));
for
(
i
=
0
;
i
<
frame_parms
->
nb_antennas_rx
;
i
++
)
{
for
(
j
=
0
;
j
<
4
;
j
++
)
//frame_parms->nb_antennas_tx; j++)
{
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars
[
eNB_id
]
->
dl_ch_magb
0
[(
j
<<
1
)
+
i
]
=
(
int
*
)
malloc16
(
7
*
2
*
sizeof
(
int
)
*
(
frame_parms
->
N_RB_DL
*
12
));
ue_pdsch_vars_flp
[
eNB_id
]
->
dl_ch_magb
[(
j
<<
1
)
+
i
]
=
(
double
*
)
malloc16
(
7
*
2
*
sizeof
(
double
)
*
(
frame_parms
->
N_RB_DL
*
12
));
}
}
...
...
@@ -1504,6 +1513,10 @@ int phy_init_lte_ue(PHY_VARS_UE *phy_vars_ue,
phy_vars_ue
->
pdsch_config_dedicated
->
p_a
=
PDSCH_ConfigDedicated__p_a_dB0
;
//defaul value until overwritten by RRCConnectionReconfiguration
// set channel estimation to do linear interpolation in time
phy_vars_ue
->
high_speed_flag
=
1
;
phy_vars_ue
->
ch_est_alpha
=
24576
;
init_prach_tables
(
839
);
return
(
0
);
...
...
openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c
View file @
669c8eb9
...
...
@@ -45,7 +45,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
int
pilot
[
2
][
200
]
__attribute__
((
aligned
(
16
)));
unsigned
char
nu
,
aarx
,
aa
;
unsigned
char
nu
,
aarx
;
unsigned
short
k
;
unsigned
int
rb
,
pilot_cnt
;
short
ch
[
2
],
*
pil
,
*
rxF
,
*
dl_ch
,
*
dl_ch_prev
,
*
f
,
*
f2
,
*
fl
,
*
f2l2
,
*
fr
,
*
f2r2
,
*
f2_dc
,
*
f_dc
;
...
...
@@ -88,7 +88,10 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
//ch_offset = (l*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size));
ch_offset
=
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
*
symbol
;
if
(
phy_vars_ue
->
high_speed_flag
==
0
)
// use second channel estimate position for temporary storage
ch_offset
=
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
;
else
ch_offset
=
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
*
symbol
;
symbol_offset
=
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
*
symbol
;
k
=
(
nu
+
nushift
)
%
6
;
...
...
@@ -185,9 +188,15 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
rxF
=
(
short
*
)
&
rxdataF
[
aarx
][((
symbol_offset
+
k
+
phy_vars_ue
->
lte_frame_parms
.
first_carrier_offset
))];
dl_ch
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
ch_offset
];
// if (eNb_id==0)
memset
(
dl_ch
,
0
,
4
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
));
if
(
phy_vars_ue
->
high_speed_flag
==
0
)
// multiply previous channel estimate by ch_est_alpha
multadd_complex_vector_real_scalar
(
dl_ch
-
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
<<
1
),
phy_vars_ue
->
ch_est_alpha
,
dl_ch
-
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
<<
1
),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
if
((
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
==
6
)
||
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
==
50
)
||
(
phy_vars_ue
->
lte_frame_parms
.
N_RB_DL
==
100
))
{
...
...
@@ -610,75 +619,83 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
#ifndef PERFECT_CE
// Temporal Interpolation
// printf("ch_offset %d\n",ch_offset);
dl_ch
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
ch_offset
];
if
(
symbol
==
0
)
{
// printf("Interpolating %d->0\n",4-phy_vars_ue->lte_frame_parms.Ncp);
// dl_ch_prev = (short *)&dl_ch_estimates[(p<<1)+aarx][(4-phy_vars_ue->lte_frame_parms.Ncp)*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
dl_ch_prev
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
pilot3
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)];
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
10923
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
if
(
phy_vars_ue
->
high_speed_flag
==
0
)
{
multadd_complex_vector_real_scalar
(
dl_ch
,
32767
-
phy_vars_ue
->
ch_est_alpha
,
dl_ch
-
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
<<
1
),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
else
{
// high_speed_flag == 1
if
(
symbol
==
0
)
{
// printf("Interpolating %d->0\n",4-phy_vars_ue->lte_frame_parms.Ncp);
// dl_ch_prev = (short *)&dl_ch_estimates[(p<<1)+aarx][(4-phy_vars_ue->lte_frame_parms.Ncp)*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)];
dl_ch_prev
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
pilot3
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)];
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
10923
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
10923
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
21845
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
// this is 1/3,2/3 combination for pilots spaced by 3 symbols
else
if
(
symbol
==
pilot1
)
{
dl_ch_prev
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
0
];
if
(
phy_vars_ue
->
lte_frame_parms
.
Ncp
==
0
)
{
// pilot spacing 4 symbols (1/4,1/2,3/4 combination)
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
24576
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
8192
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
16384
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
16384
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
8192
,
dl_ch_prev
+
(
3
*
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
24576
,
dl_ch_prev
+
(
3
*
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
10923
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
21845
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
// this is 1/3,2/3 combination for pilots spaced by 3 symbols
else
if
(
symbol
==
pilot1
)
{
dl_ch_prev
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
0
];
if
(
phy_vars_ue
->
lte_frame_parms
.
Ncp
==
0
)
{
// pilot spacing 4 symbols (1/4,1/2,3/4 combination)
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
24576
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
8192
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
16384
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
16384
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
8192
,
dl_ch_prev
+
(
3
*
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
24576
,
dl_ch_prev
+
(
3
*
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
else
{
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
10923
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
10923
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
// pilot spacing 3 symbols (1/3,2/3 combination)
}
else
{
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
10923
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
10923
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
// pilot spacing 3 symbols (1/3,2/3 combination)
}
else
if
(
symbol
==
pilot2
)
{
dl_ch_prev
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
pilot1
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)];
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
10923
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
else
if
(
symbol
==
pilot2
)
{
dl_ch_prev
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
pilot1
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)];
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
10923
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
21845
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
else
{
// symbol == pilot3
// printf("Interpolating 0->%d\n",4-phy_vars_ue->lte_frame_parms.Ncp);
dl_ch_prev
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
pilot2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)];
if
(
phy_vars_ue
->
lte_frame_parms
.
Ncp
==
0
)
{
// pilot spacing 4 symbols (1/4,1/2,3/4 combination)
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
24576
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
8192
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
16384
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
16384
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
10923
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
8
192
,
dl_ch_prev
+
(
3
*
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
245
76
,
dl_ch_prev
+
(
3
*
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
1
0
92
3
,
dl_ch_prev
+
(
2
*
(
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)
),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
2
18
45
,
dl_ch_prev
+
(
2
*
(
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)
),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
else
{
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
10923
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
10923
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
// pilot spacing 3 symbols (1/3,2/3 combination)
else
{
// symbol == pilot3
// printf("Interpolating 0->%d\n",4-phy_vars_ue->lte_frame_parms.Ncp);
dl_ch_prev
=
(
short
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
pilot2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)];
if
(
phy_vars_ue
->
lte_frame_parms
.
Ncp
==
0
)
{
// pilot spacing 4 symbols (1/4,1/2,3/4 combination)
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
24576
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
8192
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
16384
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
16384
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
8192
,
dl_ch_prev
+
(
3
*
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
24576
,
dl_ch_prev
+
(
3
*
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
else
{
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
10923
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch_prev
,
21845
,
dl_ch_prev
+
(
2
*
(
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
),
1
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
multadd_complex_vector_real_scalar
(
dl_ch
,
10923
,
dl_ch_prev
+
(
2
*
((
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
)
<<
1
)),
0
,
phy_vars_ue
->
lte_frame_parms
.
ofdm_symbol_size
);
}
// pilot spacing 3 symbols (1/3,2/3 combination)
}
}
#endif
}
void
(
*
idft
)(
int16_t
*
,
int16_t
*
,
int
);
switch
(
phy_vars_ue
->
lte_frame_parms
.
log2_symbol_size
)
{
case
7
:
idft
=
idft128
;
...
...
@@ -705,7 +722,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue,
if
(
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_offset
][(
p
<<
1
)
+
aarx
])
idft
((
int16_t
*
)
&
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates
[
eNB_offset
][(
p
<<
1
)
+
aarx
][
8
],
(
int16_t
*
)
phy_vars_ue
->
lte_ue_common_vars
.
dl_ch_estimates_time
[
eNB_offset
][(
p
<<
1
)
+
aarx
],
1
);
}
}
return
(
0
);
}
openair1/PHY/LTE_TRANSPORT/dci.c
View file @
669c8eb9
...
...
@@ -254,6 +254,11 @@ uint8_t *generate_dci0(uint8_t *dci,
dci_flip
[
5
]
=
dci
[
2
];
dci_flip
[
6
]
=
dci
[
1
];
dci_flip
[
7
]
=
dci
[
0
];
#ifdef DEBUG_DCI_ENCODING
msg
(
"DCI => %x,%x,%x,%x,%x,%x,%x,%x
\n
"
,
dci_flip
[
0
],
dci_flip
[
1
],
dci_flip
[
2
],
dci_flip
[
3
],
dci_flip
[
4
],
dci_flip
[
5
],
dci_flip
[
6
],
dci_flip
[
7
]);
#endif
}
dci_encoding
(
dci_flip
,
DCI_LENGTH
,
coded_bits
,
e
,
rnti
);
...
...
@@ -812,6 +817,7 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
int32_t
**
rxdataF_ext
,
int32_t
**
dl_ch_estimates_ext
,
uint8_t
symbol
,
uint32_t
high_speed_flag
,
LTE_DL_FRAME_PARMS
*
frame_parms
)
{
...
...
@@ -828,8 +834,11 @@ void pdcch_extract_rbs_single(int32_t **rxdataF,
msg
(
"[PHY] extract_rbs_single: symbol_mod %d
\n
"
,
symbol_mod
);
#endif
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
5
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
if
(
high_speed_flag
==
1
)
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
5
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
else
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
5
];
dl_ch0_ext
=
&
dl_ch_estimates_ext
[
aarx
][
symbol
*
(
frame_parms
->
N_RB_DL
*
12
)];
rxF_ext
=
&
rxdataF_ext
[
aarx
][
symbol
*
(
frame_parms
->
N_RB_DL
*
12
)];
...
...
@@ -1013,6 +1022,7 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
int32_t
**
rxdataF_ext
,
int32_t
**
dl_ch_estimates_ext
,
uint8_t
symbol
,
uint32_t
high_speed_flag
,
LTE_DL_FRAME_PARMS
*
frame_parms
)
{
...
...
@@ -1025,10 +1035,16 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF,
symbol_mod
=
(
symbol
>=
(
7
-
frame_parms
->
Ncp
))
?
symbol
-
(
7
-
frame_parms
->
Ncp
)
:
symbol
;
for
(
aarx
=
0
;
aarx
<
frame_parms
->
nb_antennas_rx
;
aarx
++
)
{
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
5
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
if
(
high_speed_flag
==
1
)
{
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
5
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
dl_ch1
=
&
dl_ch_estimates
[
2
+
aarx
][
5
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
}
else
{
dl_ch0
=
&
dl_ch_estimates
[
aarx
][
5
];
dl_ch1
=
&
dl_ch_estimates
[
2
+
aarx
][
5
];
}
dl_ch0_ext
=
&
dl_ch_estimates_ext
[
aarx
][
symbol
*
(
frame_parms
->
N_RB_DL
*
12
)];
dl_ch1
=
&
dl_ch_estimates
[
2
+
aarx
][
5
+
(
symbol
*
(
frame_parms
->
ofdm_symbol_size
))];
dl_ch1_ext
=
&
dl_ch_estimates_ext
[
2
+
aarx
][
symbol
*
(
frame_parms
->
N_RB_DL
*
12
)];
// msg("pdcch extract_rbs: rxF_ext pos %d\n",symbol*(frame_parms->N_RB_DL*12));
...
...
@@ -1524,6 +1540,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
uint8_t
subframe
,
uint8_t
eNB_id
,
MIMO_mode_t
mimo_mode
,
uint32_t
high_speed_flag
,
uint8_t
is_secondary_ue
)
{
uint8_t
log2_maxh
,
aatx
,
aarx
;
...
...
@@ -1543,6 +1560,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
lte_ue_pdcch_vars
[
eNB_id
]
->
rxdataF_ext
,
lte_ue_pdcch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
s
,
high_speed_flag
,
frame_parms
);
#ifdef MU_RECEIVER
pdcch_extract_rbs_single
(
lte_ue_common_vars
->
rxdataF
,
...
...
@@ -1550,6 +1568,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
lte_ue_pdcch_vars
[
eNB_id_i
]
->
rxdataF_ext
,
//shift by two to simulate transmission from a second antenna
lte_ue_pdcch_vars
[
eNB_id_i
]
->
dl_ch_estimates_ext
,
//shift by two to simulate transmission from a second antenna
s
,
high_speed_flag
,
frame_parms
);
#endif //MU_RECEIVER
}
else
if
(
frame_parms
->
nb_antennas_tx_eNB
>
1
)
{
...
...
@@ -1558,6 +1577,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
lte_ue_pdcch_vars
[
eNB_id
]
->
rxdataF_ext
,
lte_ue_pdcch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
s
,
high_speed_flag
,
frame_parms
);
}
else
{
pdcch_extract_rbs_single
(
lte_ue_common_vars
->
rxdataF
,
...
...
@@ -1565,6 +1585,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars,
lte_ue_pdcch_vars
[
eNB_id
]
->
rxdataF_ext
,
lte_ue_pdcch_vars
[
eNB_id
]
->
dl_ch_estimates_ext
,
s
,
high_speed_flag
,
frame_parms
);
}
}
...
...
@@ -1832,13 +1853,13 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci,
}
uint8_t
generate_dci_top
(
uint8_t
num_ue_spec_dci
,
uint8_t
num_common_dci
,
DCI_ALLOC_t
*
dci_alloc
,
uint32_t
n_rnti
,
int16_t
amp
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
mod_sym_t
**
txdataF
,
uint32_t
subframe
)
{
uint8_t
num_common_dci
,
DCI_ALLOC_t
*
dci_alloc
,
uint32_t
n_rnti
,
int16_t
amp
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
mod_sym_t
**
txdataF
,
uint32_t
subframe
)
{
uint8_t
*
e_ptr
,
num_pdcch_symbols
;
int8_t
L
;
...
...
@@ -2451,6 +2472,11 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **lte_ue_pdcch_vars,int do_common,uint
dci_alloc
[
*
dci_cnt
].
dci_pdu
[
2
]
=
dci_decoded_output
[
5
];
dci_alloc
[
*
dci_cnt
].
dci_pdu
[
1
]
=
dci_decoded_output
[
6
];
dci_alloc
[
*
dci_cnt
].
dci_pdu
[
0
]
=
dci_decoded_output
[
7
];
#ifdef DEBUG_DCI_DECODING
msg
(
"DCI => %x,%x,%x,%x,%x,%x,%x,%x
\n
"
,
dci_decoded_output
[
0
],
dci_decoded_output
[
1
],
dci_decoded_output
[
2
],
dci_decoded_output
[
3
],
dci_decoded_output
[
4
],
dci_decoded_output
[
5
],
dci_decoded_output
[
6
],
dci_decoded_output
[
7
]);
#endif
}
if
(
crc
==
si_rnti
)
{
...
...
@@ -2540,6 +2566,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
uint8_t
format0_size_bits
,
format0_size_bytes
;
uint8_t
format1_size_bits
,
format1_size_bytes
;
uint8_t
format2_size_bits
,
format2_size_bytes
;
uint8_t
format2A_size_bits
,
format2A_size_bytes
;
switch
(
frame_parms
->
N_RB_DL
)
{
case
6
:
...
...
@@ -2550,13 +2577,17 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue,
format0_size_bytes
=
sizeof
(
DCI0_1_5MHz_TDD_1_6_t
);
format1_size_bits
=
sizeof_DCI1_1_5MHz_TDD_t
;
format1_size_bytes
=
sizeof
(
DCI1_1_5MHz_TDD_t
);
if
(
frame_parms
->
nb_antennas_tx
==
2
)
{
if
(
frame_parms
->
nb_antennas_tx
_eNB
==
2
)
{