Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
9d9d8124
Commit
9d9d8124
authored
Jun 18, 2018
by
Cedric Roux
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/311-encapsulate-lte_gold_generic-functionality' into develop
parents
7d76b714
2a04c6d3
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
87 additions
and
77 deletions
+87
-77
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-0
openair1/PHY/LTE_REFSIG/lte_gold.c
openair1/PHY/LTE_REFSIG/lte_gold.c
+2
-38
openair1/PHY/LTE_REFSIG/lte_refsig.h
openair1/PHY/LTE_REFSIG/lte_refsig.h
+2
-3
openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
+7
-34
openair1/PHY/LTE_TRANSPORT/lte_gold_generic.c
openair1/PHY/LTE_TRANSPORT/lte_gold_generic.c
+75
-0
openair1/PHY/defs_common.h
openair1/PHY/defs_common.h
+0
-2
No files found.
cmake_targets/CMakeLists.txt
View file @
9d9d8124
...
@@ -1097,6 +1097,7 @@ set(PHY_SRC_COMMON
...
@@ -1097,6 +1097,7 @@ set(PHY_SRC_COMMON
${
OPENAIR1_DIR
}
/PHY/LTE_TRANSPORT/prach_common.c
${
OPENAIR1_DIR
}
/PHY/LTE_TRANSPORT/prach_common.c
${
OPENAIR1_DIR
}
/PHY/LTE_TRANSPORT/pucch_common.c
${
OPENAIR1_DIR
}
/PHY/LTE_TRANSPORT/pucch_common.c
${
OPENAIR1_DIR
}
/PHY/LTE_TRANSPORT/dlsch_scrambling.c
${
OPENAIR1_DIR
}
/PHY/LTE_TRANSPORT/dlsch_scrambling.c
${
OPENAIR1_DIR
}
/PHY/LTE_TRANSPORT/lte_gold_generic.c
${
OPENAIR1_DIR
}
/PHY/LTE_UE_TRANSPORT/srs_modulation.c
${
OPENAIR1_DIR
}
/PHY/LTE_UE_TRANSPORT/srs_modulation.c
${
OPENAIR1_DIR
}
/PHY/MODULATION/ofdm_mod.c
${
OPENAIR1_DIR
}
/PHY/MODULATION/ofdm_mod.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_sync_time.c
${
OPENAIR1_DIR
}
/PHY/LTE_ESTIMATION/lte_sync_time.c
...
...
openair1/PHY/LTE_REFSIG/lte_gold.c
View file @
9d9d8124
...
@@ -44,7 +44,6 @@ N_{ID}^{cell = 0..503
...
@@ -44,7 +44,6 @@ N_{ID}^{cell = 0..503
void
lte_gold
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_table
[
20
][
2
][
14
],
uint16_t
Nid_cell
)
void
lte_gold
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_table
[
20
][
2
][
14
],
uint16_t
Nid_cell
)
{
{
unsigned
char
ns
,
l
,
Ncp
=
1
-
frame_parms
->
Ncp
;
unsigned
char
ns
,
l
,
Ncp
=
1
-
frame_parms
->
Ncp
;
unsigned
int
n
,
x1
,
x2
;
//,x1tmp,x2tmp;
unsigned
int
n
,
x1
,
x2
;
//,x1tmp,x2tmp;
...
@@ -54,7 +53,7 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14]
...
@@ -54,7 +53,7 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14]
x2
=
Ncp
+
x2
=
Ncp
+
(
Nid_cell
<<
1
)
+
(
Nid_cell
<<
1
)
+
(((
1
+
(
Nid_cell
<<
1
))
*
(
1
+
(((
frame_parms
->
Ncp
==
0
)
?
4
:
3
)
*
l
)
+
(
7
*
(
1
+
ns
))))
<<
10
);
//cinit
(((
1
+
(
Nid_cell
<<
1
))
*
(
1
+
(((
frame_parms
->
Ncp
==
0
)
?
4
:
3
)
*
l
)
+
(
7
*
(
1
+
ns
))))
<<
10
);
//cinit
//x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit
//x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit
//n = 0
//n = 0
x1
=
1
+
(
1
<<
31
);
x1
=
1
+
(
1
<<
31
);
...
@@ -81,7 +80,7 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14]
...
@@ -81,7 +80,7 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14]
}
}
}
}
void
lte_gold_ue_spec
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
21
],
uint16_t
Nid_cell
,
uint16_t
*
n_idDMRS
)
void
lte_gold_ue_spec
(
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
21
],
uint16_t
Nid_cell
,
uint16_t
*
n_idDMRS
)
{
{
unsigned
char
ns
,
l
;
unsigned
char
ns
,
l
;
...
@@ -169,41 +168,6 @@ void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_
...
@@ -169,41 +168,6 @@ void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_
}
}
}
}
/*! \brief gold sequenquence generator
\param x1
\param x2 this should be set to c_init if reset=1
\param reset resets the generator
\return 32 bits of the gold sequence
*/
unsigned
int
lte_gold_generic
(
unsigned
int
*
x1
,
unsigned
int
*
x2
,
unsigned
char
reset
)
{
int
n
;
if
(
reset
)
{
*
x1
=
1
+
(
1
<<
31
);
*
x2
=*
x2
^
((
*
x2
^
(
*
x2
>>
1
)
^
(
*
x2
>>
2
)
^
(
*
x2
>>
3
))
<<
31
);
// skip first 50 double words (1600 bits)
// printf("n=0 : x1 %x, x2 %x\n",x1,x2);
for
(
n
=
1
;
n
<
50
;
n
++
)
{
*
x1
=
(
*
x1
>>
1
)
^
(
*
x1
>>
4
);
*
x1
=
*
x1
^
(
*
x1
<<
31
)
^
(
*
x1
<<
28
);
*
x2
=
(
*
x2
>>
1
)
^
(
*
x2
>>
2
)
^
(
*
x2
>>
3
)
^
(
*
x2
>>
4
);
*
x2
=
*
x2
^
(
*
x2
<<
31
)
^
(
*
x2
<<
30
)
^
(
*
x2
<<
29
)
^
(
*
x2
<<
28
);
}
}
*
x1
=
(
*
x1
>>
1
)
^
(
*
x1
>>
4
);
*
x1
=
*
x1
^
(
*
x1
<<
31
)
^
(
*
x1
<<
28
);
*
x2
=
(
*
x2
>>
1
)
^
(
*
x2
>>
2
)
^
(
*
x2
>>
3
)
^
(
*
x2
>>
4
);
*
x2
=
*
x2
^
(
*
x2
<<
31
)
^
(
*
x2
<<
30
)
^
(
*
x2
<<
29
)
^
(
*
x2
<<
28
);
return
(
*
x1
^*
x2
);
// printf("n=%d : c %x\n",n,x1^x2);
}
#ifdef LTE_GOLD_MAIN
#ifdef LTE_GOLD_MAIN
main
()
main
()
{
{
...
...
openair1/PHY/LTE_REFSIG/lte_refsig.h
View file @
9d9d8124
...
@@ -36,7 +36,7 @@
...
@@ -36,7 +36,7 @@
\param reset resets the generator
\param reset resets the generator
\return 32 bits of the gold sequence
\return 32 bits of the gold sequence
*/
*/
u
nsigned
int
lte_gold_generic
(
unsigned
int
*
x1
,
unsigned
int
*
x2
,
unsigned
char
reset
);
u
int32_t
lte_gold_generic
(
uint32_t
*
x1
,
uint32_t
*
x2
,
uint8_t
reset
);
/*!\brief This function generates the LTE Gold sequence (36-211, Sec 7.2), specifically for DL reference signals.
/*!\brief This function generates the LTE Gold sequence (36-211, Sec 7.2), specifically for DL reference signals.
...
@@ -45,8 +45,7 @@ unsigned int lte_gold_generic(unsigned int *x1, unsigned int *x2, unsigned char
...
@@ -45,8 +45,7 @@ unsigned int lte_gold_generic(unsigned int *x1, unsigned int *x2, unsigned char
@param Nid_cell Cell Id (to compute sequences for local and adjacent cells) */
@param Nid_cell Cell Id (to compute sequences for local and adjacent cells) */
void
lte_gold
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_table
[
20
][
2
][
14
],
uint16_t
Nid_cell
);
void
lte_gold
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_table
[
20
][
2
][
14
],
uint16_t
Nid_cell
);
void
lte_gold_ue_spec
(
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
21
],
uint16_t
Nid_cell
,
uint16_t
*
n_idDMRS
);
void
lte_gold_ue_spec
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
21
],
uint16_t
Nid_cell
,
uint16_t
*
n_idDMRS
);
void
lte_gold_ue_spec_port5
(
uint32_t
lte_gold_uespec_port5_table
[
20
][
38
],
uint16_t
Nid_cell
,
uint16_t
n_rnti
);
void
lte_gold_ue_spec_port5
(
uint32_t
lte_gold_uespec_port5_table
[
20
][
38
],
uint16_t
Nid_cell
,
uint16_t
n_rnti
);
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_scrambling.c
View file @
9d9d8124
...
@@ -34,47 +34,20 @@
...
@@ -34,47 +34,20 @@
#include "PHY/defs_eNB.h"
#include "PHY/defs_eNB.h"
#include "PHY/defs_UE.h"
#include "PHY/defs_UE.h"
#include "PHY/LTE_REFSIG/lte_refsig.h"
#include "PHY/CODING/coding_extern.h"
#include "PHY/CODING/coding_extern.h"
#include "PHY/CODING/lte_interleaver_inline.h"
#include "PHY/CODING/lte_interleaver_inline.h"
#include "transport_eNB.h"
#include "transport_eNB.h"
#include "PHY/phy_extern.h"
#include "PHY/phy_extern.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
static
inline
unsigned
int
lte_gold_scram
(
unsigned
int
*
x1
,
unsigned
int
*
x2
,
unsigned
char
reset
)
__attribute__
((
always_inline
));
static
inline
unsigned
int
lte_gold_scram
(
unsigned
int
*
x1
,
unsigned
int
*
x2
,
unsigned
char
reset
)
{
int
n
;
if
(
reset
)
{
*
x1
=
1
+
(
1
<<
31
);
*
x2
=*
x2
^
((
*
x2
^
(
*
x2
>>
1
)
^
(
*
x2
>>
2
)
^
(
*
x2
>>
3
))
<<
31
);
// skip first 50 double words (1600 bits)
// printf("n=0 : x1 %x, x2 %x\n",x1,x2);
for
(
n
=
1
;
n
<
50
;
n
++
)
{
*
x1
=
(
*
x1
>>
1
)
^
(
*
x1
>>
4
);
*
x1
=
*
x1
^
(
*
x1
<<
31
)
^
(
*
x1
<<
28
);
*
x2
=
(
*
x2
>>
1
)
^
(
*
x2
>>
2
)
^
(
*
x2
>>
3
)
^
(
*
x2
>>
4
);
*
x2
=
*
x2
^
(
*
x2
<<
31
)
^
(
*
x2
<<
30
)
^
(
*
x2
<<
29
)
^
(
*
x2
<<
28
);
}
}
*
x1
=
(
*
x1
>>
1
)
^
(
*
x1
>>
4
);
*
x1
=
*
x1
^
(
*
x1
<<
31
)
^
(
*
x1
<<
28
);
*
x2
=
(
*
x2
>>
1
)
^
(
*
x2
>>
2
)
^
(
*
x2
>>
3
)
^
(
*
x2
>>
4
);
*
x2
=
*
x2
^
(
*
x2
<<
31
)
^
(
*
x2
<<
30
)
^
(
*
x2
<<
29
)
^
(
*
x2
<<
28
);
return
(
*
x1
^*
x2
);
// printf("n=%d : c %x\n",n,x1^x2);
}
void
dlsch_scrambling
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
void
dlsch_scrambling
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
int
mbsfn_flag
,
int
mbsfn_flag
,
LTE_eNB_DLSCH_t
*
dlsch
,
LTE_eNB_DLSCH_t
*
dlsch
,
int
harq_pid
,
int
harq_pid
,
int
G
,
int
G
,
uint8_t
q
,
uint8_t
q
,
uint16_t
frame
,
uint16_t
frame
,
uint8_t
Ns
)
uint8_t
Ns
)
{
{
...
@@ -148,7 +121,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -148,7 +121,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
printf
(
"scrambling: rnti %x, q %d, Ns %d, Nid_cell %d, G %d x2 %x
\n
"
,
dlsch
->
rnti
,
q
,
Ns
,
frame_parms
->
Nid_cell
,
G
,
x2
);
printf
(
"scrambling: rnti %x, q %d, Ns %d, Nid_cell %d, G %d x2 %x
\n
"
,
dlsch
->
rnti
,
q
,
Ns
,
frame_parms
->
Nid_cell
,
G
,
x2
);
#endif
#endif
#endif
#endif
s
=
lte_gold_
scram
(
&
x1
,
&
x2
,
1
);
s
=
lte_gold_
generic
(
&
x1
,
&
x2
,
1
);
for
(
n
=
0
;
n
<
(
1
+
(
G
>>
5
));
n
++
)
{
for
(
n
=
0
;
n
<
(
1
+
(
G
>>
5
));
n
++
)
{
...
@@ -197,7 +170,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -197,7 +170,7 @@ void dlsch_scrambling(LTE_DL_FRAME_PARMS *frame_parms,
s
=
lte_gold_
scram
(
&
x1
,
&
x2
,
0
);
s
=
lte_gold_
generic
(
&
x1
,
&
x2
,
0
);
e
+=
32
;
e
+=
32
;
}
}
...
@@ -243,7 +216,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -243,7 +216,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
#ifdef DEBUG_SCRAMBLING
#ifdef DEBUG_SCRAMBLING
printf
(
"unscrambling: rnti %x, q %d, Ns %d, Nid_cell %d G %d, x2 %x
\n
"
,
dlsch
->
rnti
,
q
,
Ns
,
frame_parms
->
Nid_cell
,
G
,
x2
);
printf
(
"unscrambling: rnti %x, q %d, Ns %d, Nid_cell %d G %d, x2 %x
\n
"
,
dlsch
->
rnti
,
q
,
Ns
,
frame_parms
->
Nid_cell
,
G
,
x2
);
#endif
#endif
s
=
lte_gold_
scram
(
&
x1
,
&
x2
,
1
);
s
=
lte_gold_
generic
(
&
x1
,
&
x2
,
1
);
for
(
i
=
0
;
i
<
(
1
+
(
G
>>
5
));
i
++
)
{
for
(
i
=
0
;
i
<
(
1
+
(
G
>>
5
));
i
++
)
{
for
(
j
=
0
;
j
<
32
;
j
++
,
k
++
)
{
for
(
j
=
0
;
j
<
32
;
j
++
,
k
++
)
{
...
@@ -256,7 +229,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
...
@@ -256,7 +229,7 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
#endif
#endif
}
}
s
=
lte_gold_
scram
(
&
x1
,
&
x2
,
0
);
s
=
lte_gold_
generic
(
&
x1
,
&
x2
,
0
);
}
}
}
}
...
...
openair1/PHY/LTE_TRANSPORT/lte_gold_generic.c
0 → 100644
View file @
9d9d8124
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include "PHY/types.h"
/**
\brief Gold Sequence Generation defined in 3x.211
\param x1 x1 shift register
\param x2 x2 shift register / cinit if reset is set
\param reset Reset flag / reinitialize the generator
\return c 32 bits of gold output
*/
extern
inline
uint32_t
lte_gold_generic
(
uint32_t
*
x1
,
uint32_t
*
x2
,
uint8_t
reset
)
{
int32_t
n
;
// 3GPP 3x.211
// Nc = 1600
// c(n) = [x1(n+Nc) + x2(n+Nc)]mod2
// x1(n+31) = [x1(n+3) + x1(n)]mod2
// x2(n+31) = [x2(n+3) + x2(n+2) + x2(n+1) + x2(n)]mod2
if
(
reset
)
{
// Init value for x1: x1(0) = 1, x1(n) = 0, n=1,2,...,30
// x1(31) = [x1(3) + x1(0)]mod2 = 1
*
x1
=
1
+
(
1
<<
31
);
// Init value for x2: cinit = sum_{i=0}^30 x2*2^i
// x2(31) = [x2(3) + x2(2) + x2(1) + x2(0)]mod2
// = (*x2>>3) ^ (*x2>>2) + (*x2>>1) + *x2
*
x2
=
*
x2
^
((
*
x2
^
(
*
x2
>>
1
)
^
(
*
x2
>>
2
)
^
(
*
x2
>>
3
))
<<
31
);
// x1 and x2 contain bits n = 0,1,...,31
// Nc = 1600 bits are skipped at the beginning
// i.e., 1600 / 32 = 50 32bit words
for
(
n
=
1
;
n
<
50
;
n
++
)
{
// Compute x1(0),...,x1(27)
*
x1
=
(
*
x1
>>
1
)
^
(
*
x1
>>
4
);
// Compute x1(28),..,x1(31) and xor
*
x1
=
*
x1
^
(
*
x1
<<
31
)
^
(
*
x1
<<
28
);
// Compute x2(0),...,x2(27)
*
x2
=
(
*
x2
>>
1
)
^
(
*
x2
>>
2
)
^
(
*
x2
>>
3
)
^
(
*
x2
>>
4
);
// Compute x2(28),..,x2(31) and xor
*
x2
=
*
x2
^
(
*
x2
<<
31
)
^
(
*
x2
<<
30
)
^
(
*
x2
<<
29
)
^
(
*
x2
<<
28
);
}
}
*
x1
=
(
*
x1
>>
1
)
^
(
*
x1
>>
4
);
*
x1
=
*
x1
^
(
*
x1
<<
31
)
^
(
*
x1
<<
28
);
*
x2
=
(
*
x2
>>
1
)
^
(
*
x2
>>
2
)
^
(
*
x2
>>
3
)
^
(
*
x2
>>
4
);
*
x2
=
*
x2
^
(
*
x2
<<
31
)
^
(
*
x2
<<
30
)
^
(
*
x2
<<
29
)
^
(
*
x2
<<
28
);
// c(n) = [x1(n+Nc) + x2(n+Nc)]mod2
return
(
*
x1
^*
x2
);
}
openair1/PHY/defs_common.h
View file @
9d9d8124
...
@@ -72,13 +72,11 @@
...
@@ -72,13 +72,11 @@
#include <pthread.h>
#include <pthread.h>
#include "targets/ARCH/COMMON/common_lib.h"
#include "targets/COMMON/openairinterface5g_limits.h"
#include "targets/COMMON/openairinterface5g_limits.h"
#include "types.h"
#include "types.h"
#include "nfapi_interface.h"
#include "nfapi_interface.h"
//#include "defs.h"
//#include "defs.h"
#include "openair2/COMMON/platform_types.h"
#define RX_NB_TH_MAX 2
#define RX_NB_TH_MAX 2
#define RX_NB_TH 2
#define RX_NB_TH 2
...
...
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