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
canghaiwuhen
OpenXG-RAN
Commits
2167d2c0
Commit
2167d2c0
authored
Aug 30, 2017
by
Florian Kaltenberger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
some bugfixes to the uespec pilot generation for TM8
parent
6ab9229b
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
42 additions
and
21 deletions
+42
-21
openair1/PHY/LTE_REFSIG/defs.h
openair1/PHY/LTE_REFSIG/defs.h
+2
-2
openair1/PHY/LTE_REFSIG/lte_gold.c
openair1/PHY/LTE_REFSIG/lte_gold.c
+4
-4
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+14
-4
openair1/PHY/LTE_TRANSPORT/defs.h
openair1/PHY/LTE_TRANSPORT/defs.h
+2
-0
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+14
-6
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+2
-1
openair1/PHY/defs.h
openair1/PHY/defs.h
+4
-4
No files found.
openair1/PHY/LTE_REFSIG/defs.h
View file @
2167d2c0
...
...
@@ -45,10 +45,10 @@ unsigned int lte_gold_generic(unsigned int *x1, unsigned int *x2, unsigned char
void
lte_gold
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_table
[
20
][
2
][
14
],
uint16_t
Nid_cell
);
/*! \brief This function generates the LTE Gold sequence for DL UE-specific pilots for antenna ports 7,...,14 (transmission modes 8/9) */
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
(
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
100
],
uint16_t
Nid_cell
,
uint16_t
*
n_idDMRS
);
/*! \brief This function generates the LTE Gold sequence for DL UE-specific pilots for antenna port 5 (transmission mode 7) */
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
][
75
],
uint16_t
Nid_cell
,
uint16_t
n_rnti
);
/*!\brief This function generates the LTE Gold sequence (36-211, Sec 7.2), specifically for DL UE-specific reference signals for antenna ports 7..14.
@param frame_parms LTE DL Frame parameters
...
...
openair1/PHY/LTE_REFSIG/lte_gold.c
View file @
2167d2c0
...
...
@@ -81,7 +81,7 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14]
}
}
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
(
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
100
],
uint16_t
Nid_cell
,
uint16_t
*
n_idDMRS
)
{
unsigned
char
ns
,
l
;
...
...
@@ -117,7 +117,7 @@ void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_
// printf("x1 : %x, x2 : %x\n",x1,x2);
}
for
(
n
=
0
;
n
<
1
4
;
n
++
)
{
for
(
n
=
0
;
n
<
1
00
;
n
++
)
{
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
...
...
@@ -131,7 +131,7 @@ void lte_gold_ue_spec(uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_
}
}
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
][
75
],
uint16_t
Nid_cell
,
uint16_t
n_rnti
)
{
unsigned
char
ns
;
...
...
@@ -157,7 +157,7 @@ void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_
//printf("x1 : %x, x2 : %x\n",x1,x2);
}
for
(
n
=
0
;
n
<
38
;
n
++
)
{
for
(
n
=
0
;
n
<
75
;
n
++
)
{
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
2167d2c0
...
...
@@ -886,6 +886,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
uint8_t
TPC
=
0
;
uint8_t
TB0_active
=
0
,
TB1_active
=
0
;
uint8_t
ndi1
=
0
,
ndi2
=
0
;
uint8_t
nscid
;
LTE_DL_eNB_HARQ_t
*
dlsch0_harq
=
NULL
,
*
dlsch1_harq
=
NULL
;
// printf("Generate eNB DCI, format %d, rnti %x (pdu %p)\n",dci_format,rnti,dci_pdu);
...
...
@@ -2134,9 +2135,10 @@ int generate_eNB_dlsch_params_from_dci(int frame,
rballoc
=
((
DCI2B_1_5MHz_TDD_t
*
)
dci_pdu
)
->
rballoc
;
rv1
=
((
DCI2B_1_5MHz_TDD_t
*
)
dci_pdu
)
->
rv1
;
rv2
=
((
DCI2B_1_5MHz_TDD_t
*
)
dci_pdu
)
->
rv2
;
ndi1
=
((
DCI2B_1_5MHz_TDD_t
*
)
dci_pdu
)
->
ndi1
;
ndi2
=
((
DCI2B_1_5MHz_TDD_t
*
)
dci_pdu
)
->
ndi2
;
ndi1
=
((
DCI2B_1_5MHz_TDD_t
*
)
dci_pdu
)
->
ndi1
;
ndi2
=
((
DCI2B_1_5MHz_TDD_t
*
)
dci_pdu
)
->
ndi2
;
harq_pid
=
((
DCI2B_1_5MHz_TDD_t
*
)
dci_pdu
)
->
harq_pid
;
nscid
=
((
DCI2B_1_5MHz_TDD_t
*
)
dci_pdu
)
->
scrambling_id
;
}
else
{
mcs1
=
((
DCI2B_1_5MHz_FDD_t
*
)
dci_pdu
)
->
mcs1
;
mcs2
=
((
DCI2B_1_5MHz_FDD_t
*
)
dci_pdu
)
->
mcs2
;
...
...
@@ -2146,6 +2148,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1
=
((
DCI2B_1_5MHz_FDD_t
*
)
dci_pdu
)
->
ndi1
;
ndi2
=
((
DCI2B_1_5MHz_FDD_t
*
)
dci_pdu
)
->
ndi2
;
harq_pid
=
((
DCI2B_1_5MHz_FDD_t
*
)
dci_pdu
)
->
harq_pid
;
nscid
=
((
DCI2B_1_5MHz_FDD_t
*
)
dci_pdu
)
->
scrambling_id
;
}
break
;
...
...
@@ -2161,6 +2164,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1
=
((
DCI2B_5MHz_TDD_t
*
)
dci_pdu
)
->
ndi1
;
ndi2
=
((
DCI2B_5MHz_TDD_t
*
)
dci_pdu
)
->
ndi2
;
harq_pid
=
((
DCI2B_5MHz_TDD_t
*
)
dci_pdu
)
->
harq_pid
;
nscid
=
((
DCI2B_5MHz_TDD_t
*
)
dci_pdu
)
->
scrambling_id
;
}
else
{
mcs1
=
((
DCI2B_5MHz_FDD_t
*
)
dci_pdu
)
->
mcs1
;
mcs2
=
((
DCI2B_5MHz_FDD_t
*
)
dci_pdu
)
->
mcs2
;
...
...
@@ -2171,6 +2175,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1
=
((
DCI2B_5MHz_FDD_t
*
)
dci_pdu
)
->
ndi1
;
ndi2
=
((
DCI2B_5MHz_FDD_t
*
)
dci_pdu
)
->
ndi2
;
harq_pid
=
((
DCI2B_5MHz_FDD_t
*
)
dci_pdu
)
->
harq_pid
;
nscid
=
((
DCI2B_5MHz_FDD_t
*
)
dci_pdu
)
->
scrambling_id
;
}
break
;
...
...
@@ -2186,6 +2191,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1
=
((
DCI2B_10MHz_TDD_t
*
)
dci_pdu
)
->
ndi1
;
ndi2
=
((
DCI2B_10MHz_TDD_t
*
)
dci_pdu
)
->
ndi2
;
harq_pid
=
((
DCI2B_10MHz_TDD_t
*
)
dci_pdu
)
->
harq_pid
;
nscid
=
((
DCI2B_10MHz_TDD_t
*
)
dci_pdu
)
->
scrambling_id
;
}
else
{
mcs1
=
((
DCI2B_10MHz_FDD_t
*
)
dci_pdu
)
->
mcs1
;
mcs2
=
((
DCI2B_10MHz_FDD_t
*
)
dci_pdu
)
->
mcs2
;
...
...
@@ -2196,6 +2202,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1
=
((
DCI2B_10MHz_FDD_t
*
)
dci_pdu
)
->
ndi1
;
ndi2
=
((
DCI2B_10MHz_FDD_t
*
)
dci_pdu
)
->
ndi2
;
harq_pid
=
((
DCI2B_10MHz_FDD_t
*
)
dci_pdu
)
->
harq_pid
;
nscid
=
((
DCI2B_10MHz_FDD_t
*
)
dci_pdu
)
->
scrambling_id
;
}
break
;
...
...
@@ -2211,6 +2218,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1
=
((
DCI2B_20MHz_TDD_t
*
)
dci_pdu
)
->
ndi1
;
ndi2
=
((
DCI2B_20MHz_TDD_t
*
)
dci_pdu
)
->
ndi2
;
harq_pid
=
((
DCI2B_20MHz_TDD_t
*
)
dci_pdu
)
->
harq_pid
;
nscid
=
((
DCI2B_20MHz_TDD_t
*
)
dci_pdu
)
->
scrambling_id
;
}
else
{
mcs1
=
((
DCI2B_20MHz_FDD_t
*
)
dci_pdu
)
->
mcs1
;
mcs2
=
((
DCI2B_20MHz_FDD_t
*
)
dci_pdu
)
->
mcs2
;
...
...
@@ -2221,6 +2229,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
ndi1
=
((
DCI2B_20MHz_FDD_t
*
)
dci_pdu
)
->
ndi1
;
ndi2
=
((
DCI2B_20MHz_FDD_t
*
)
dci_pdu
)
->
ndi2
;
harq_pid
=
((
DCI2B_20MHz_FDD_t
*
)
dci_pdu
)
->
harq_pid
;
nscid
=
((
DCI2B_20MHz_TDD_t
*
)
dci_pdu
)
->
scrambling_id
;
}
break
;
...
...
@@ -2327,8 +2336,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
frame_parms
->
N_RB_DL
);
if
(
dlsch1
!=
NULL
)
{
// fixme (need to copy more fields of rb_alloc)
dlsch1_harq
->
rb_alloc
[
0
]
=
dlsch0_harq
->
rb_alloc
[
0
];
memcpy
(
dlsch1_harq
->
rb_alloc
,
dlsch0_harq
->
rb_alloc
,
4
*
sizeof
(
uint32_t
));
dlsch1_harq
->
nb_rb
=
dlsch0_harq
->
nb_rb
;
}
}
else
if
((
dlsch0
==
NULL
)
&&
(
dlsch1
!=
NULL
))
{
...
...
@@ -2350,6 +2358,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
dlsch0_harq
->
dl_power_off
=
1
;
dlsch0_harq
->
mimo_mode
=
TM8
;
//this DCI can only be used in TM8
dlsch0_harq
->
Nlayers
=
1
;
dlsch0_harq
->
nscid
=
nscid
;
}
if
(
dlsch1_harq
!=
NULL
)
{
...
...
@@ -2363,6 +2372,7 @@ int generate_eNB_dlsch_params_from_dci(int frame,
dlsch1_harq
->
dl_power_off
=
1
;
dlsch1_harq
->
mimo_mode
=
TM8
;
//this DCI can only be used in TM8
dlsch1_harq
->
Nlayers
=
1
;
dlsch1_harq
->
nscid
=
nscid
;
}
break
;
...
...
openair1/PHY/LTE_TRANSPORT/defs.h
View file @
2167d2c0
...
...
@@ -166,6 +166,8 @@ typedef struct {
uint8_t
first_layer
;
/// codeword this transport block is mapped to
uint8_t
codeword
;
/// nscid
uint8_t
nscid
;
}
LTE_DL_eNB_HARQ_t
;
typedef
struct
{
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
View file @
2167d2c0
...
...
@@ -590,7 +590,8 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB,
uint8_t
mprime
,
uint8_t
Ns
,
int
*
P1_SHIFT
,
int
*
P2_SHIFT
)
int
*
P2_SHIFT
,
uint8_t
nscid
)
{
LTE_DL_FRAME_PARMS
*
frame_parms
=
&
phy_vars_eNB
->
frame_parms
;
...
...
@@ -1585,7 +1586,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB,
if
(
is_not_UEspecRS
(
lprime
,
re
,
frame_parms
->
nushift
,
frame_parms
->
Ncp
,
8
,
Ns
))
{
//LOG_D(PHY,"TM8 tti_offset %d, jj %d, jj2 %d, x0 %p, x1 %p\n",tti_offset,*jj,*jj2,x0,x1);
/*
switch (mod_order0) {
case 2: //QPSK
...
...
@@ -1726,12 +1727,13 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB,
break;
}
*/
}
else
{
for
(
p
=
7
;
p
<
9
;
p
++
)
{
if
(
p
==
first_layer0
||
p
==
first_layer1
)
{
if
(
frame_parms
->
Ncp
==
0
)
{
//normal CP
ind
=
3
*
lprime
*
dlsch0_harq
->
nb_rb
+
3
*
rb
+
mprime2
;
ind
=
3
*
lprime
*
frame_parms
->
N_RB_DL
+
3
*
rb
+
mprime2
;
ind_dword
=
ind
>>
4
;
ind_qpsk_symb
=
ind
&
0xf
;
...
...
@@ -1756,7 +1758,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB,
qpsk_p
=
(
w
==
1
)
?
qpsk
:
nqpsk
;
/* pointer to the frequency domain Tx signal */
txdataF
[
p
][
tti_offset
]
=
qpsk_p
[(
phy_vars_eNB
->
lte_gold_uespec_table
[
0
][
Ns
][
lprime
][
ind_dword
]
>>
(
2
*
ind_qpsk_symb
))
&
3
]
;
txdataF
[
p
][
tti_offset
]
=
qpsk_p
[(
phy_vars_eNB
->
lte_gold_uespec_table
[
nscid
][
Ns
][
0
][
ind_dword
]
>>
(
2
*
ind_qpsk_symb
))
&
3
]
;
}
}
mprime2
++
;
...
...
@@ -2160,7 +2162,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
uint8_t
mprime
=
0
,
Ns
;
int8_t
lprime
=-
1
;
int
aa
=
0
;
uint8_t
nscid
=
0
;
#ifdef DEBUG_DLSCH_MODULATION
uint8_t
Nl0
=
0
;
//= dlsch0_harq->Nl;
...
...
@@ -2185,6 +2187,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
Nl1
=
dlsch1_harq
->
Nl
;
#endif
nscid
=
dlsch0_harq
->
nscid
;
}
else
if
((
dlsch0
!=
NULL
)
&&
(
dlsch1
==
NULL
)){
harq_pid
=
dlsch0
->
current_harq_pid
;
...
...
@@ -2202,6 +2206,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
Nl1
=
0
;
#endif
nscid
=
dlsch0_harq
->
nscid
;
}
else
if
((
dlsch0
==
NULL
)
&&
(
dlsch1
!=
NULL
)){
harq_pid
=
dlsch1
->
current_harq_pid
;
...
...
@@ -2219,6 +2225,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
Nl1
=
0
;
#endif
nscid
=
dlsch1_harq
->
nscid
;
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_MODULATION
,
VCD_FUNCTION_IN
);
...
...
@@ -2575,7 +2582,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB,
mprime
,
Ns
,
P1_SHIFT
,
P2_SHIFT
);
P2_SHIFT
,
nscid
);
if
((
mimo_mode
==
TM7
)
&&
(
lprime
>=
0
))
mprime
+=
3
+
frame_parms
->
Ncp
;
...
...
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
2167d2c0
...
...
@@ -269,7 +269,8 @@ int32_t allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB,
uint8_t
mprime
,
uint8_t
Ns
,
int
*
P1_SHIFT
,
int
*
P2_SHIFT
);
int
*
P2_SHIFT
,
uint8_t
nscid
);
/** \fn int32_t dlsch_modulation(int32_t **txdataF,
...
...
openair1/PHY/defs.h
View file @
2167d2c0
...
...
@@ -476,10 +476,10 @@ typedef struct PHY_VARS_eNB_s {
uint32_t
lte_gold_table
[
20
][
2
][
14
];
/// UE-specific reference symbols (p=5), TM 7
uint32_t
lte_gold_uespec_port5_table
[
NUMBER_OF_UE_MAX
][
20
][
38
];
uint32_t
lte_gold_uespec_port5_table
[
NUMBER_OF_UE_MAX
][
20
][
75
];
/// UE-specific reference symbols (p=7...14), TM 8/9/10
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
21
];
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
100
];
/// mbsfn reference symbols
uint32_t
lte_gold_mbsfn_table
[
10
][
3
][
42
];
...
...
@@ -739,10 +739,10 @@ typedef struct {
uint32_t
lte_gold_table
[
7
][
20
][
2
][
14
];
/// UE-specific reference symbols (p=5), TM 7
uint32_t
lte_gold_uespec_port5_table
[
20
][
38
];
uint32_t
lte_gold_uespec_port5_table
[
20
][
75
];
/// ue-specific reference symbols
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
21
];
uint32_t
lte_gold_uespec_table
[
2
][
20
][
2
][
100
];
/// mbsfn reference symbols
uint32_t
lte_gold_mbsfn_table
[
10
][
3
][
42
];
...
...
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