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
lizhongxiao
OpenXG-RAN
Commits
0517b973
Commit
0517b973
authored
3 years ago
by
sfn
Committed by
Thomas Schlichter
3 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add codebook type I precoding matrices generation function
parent
a9c03e32
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
445 additions
and
16 deletions
+445
-16
executables/nr-gnb.c
executables/nr-gnb.c
+6
-2
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+401
-1
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+3
-0
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
+2
-0
openair2/RRC/NR/rrc_gNB_reconfig.c
openair2/RRC/NR/rrc_gNB_reconfig.c
+33
-13
No files found.
executables/nr-gnb.c
View file @
0517b973
...
@@ -74,7 +74,7 @@
...
@@ -74,7 +74,7 @@
#include "UTIL/OPT/opt.h"
#include "UTIL/OPT/opt.h"
#include "enb_config.h"
#include "enb_config.h"
#include "gnb_paramdef.h"
#include "gnb_paramdef.h"
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
#include "s1ap_eNB.h"
#include "s1ap_eNB.h"
#include "SIMULATION/ETH_TRANSPORT/proto.h"
#include "SIMULATION/ETH_TRANSPORT/proto.h"
...
@@ -497,6 +497,7 @@ void print_opp_meas(void) {
...
@@ -497,6 +497,7 @@ void print_opp_meas(void) {
void
init_eNB_afterRU
(
void
)
{
void
init_eNB_afterRU
(
void
)
{
int
inst
,
ru_id
,
i
,
aa
;
int
inst
,
ru_id
,
i
,
aa
;
PHY_VARS_gNB
*
gNB
;
PHY_VARS_gNB
*
gNB
;
gNB_MAC_INST
*
mac
;
LOG_I
(
PHY
,
"%s() RC.nb_nr_inst:%d
\n
"
,
__FUNCTION__
,
RC
.
nb_nr_inst
);
LOG_I
(
PHY
,
"%s() RC.nb_nr_inst:%d
\n
"
,
__FUNCTION__
,
RC
.
nb_nr_inst
);
if
(
NFAPI_MODE
==
NFAPI_MODE_PNF
)
if
(
NFAPI_MODE
==
NFAPI_MODE_PNF
)
...
@@ -504,7 +505,10 @@ void init_eNB_afterRU(void) {
...
@@ -504,7 +505,10 @@ void init_eNB_afterRU(void) {
for
(
inst
=
0
;
inst
<
RC
.
nb_nr_inst
;
inst
++
)
{
for
(
inst
=
0
;
inst
<
RC
.
nb_nr_inst
;
inst
++
)
{
LOG_I
(
PHY
,
"RC.nb_nr_CC[inst:%d]:%p
\n
"
,
inst
,
RC
.
gNB
[
inst
]);
LOG_I
(
PHY
,
"RC.nb_nr_CC[inst:%d]:%p
\n
"
,
inst
,
RC
.
gNB
[
inst
]);
gNB
=
RC
.
gNB
[
inst
];
gNB
=
RC
.
gNB
[
inst
];
mac
=
RC
.
nrmac
[
gNB
->
UL_INFO
.
module_id
];
phy_init_nr_gNB
(
gNB
,
0
,
0
);
phy_init_nr_gNB
(
gNB
,
0
,
0
);
mac_init_codebook_gNB
(
gNB
,
mac
);
// map antennas and PRACH signals to gNB RX
// map antennas and PRACH signals to gNB RX
if
(
0
)
AssertFatal
(
gNB
->
num_RU
>
0
,
"Number of RU attached to gNB %d is zero
\n
"
,
gNB
->
Mod_id
);
if
(
0
)
AssertFatal
(
gNB
->
num_RU
>
0
,
"Number of RU attached to gNB %d is zero
\n
"
,
gNB
->
Mod_id
);
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/INIT/nr_init.c
View file @
0517b973
...
@@ -36,9 +36,10 @@
...
@@ -36,9 +36,10 @@
#include "MBSFN-SubframeConfigList.h"*/
#include "MBSFN-SubframeConfigList.h"*/
#include "openair1/PHY/defs_RU.h"
#include "openair1/PHY/defs_RU.h"
#include "openair1/PHY/CODING/nrLDPC_extern.h"
#include "openair1/PHY/CODING/nrLDPC_extern.h"
#include "LAYER2/NR_MAC_gNB/nr_mac_gNB.h"
#include "assertions.h"
#include "assertions.h"
#include <math.h>
#include <math.h>
#include <complex.h>
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
#include "PHY/NR_REFSIG/nr_refsig.h"
#include "PHY/NR_REFSIG/nr_refsig.h"
#include "SCHED_NR/fapi_nr_l1.h"
#include "SCHED_NR/fapi_nr_l1.h"
...
@@ -71,6 +72,405 @@ int l1_north_init_gNB() {
...
@@ -71,6 +72,405 @@ int l1_north_init_gNB() {
return
(
0
);
return
(
0
);
}
}
int
mac_init_codebook_gNB
(
PHY_VARS_gNB
*
gNB
,
gNB_MAC_INST
*
mac
)
{
//get RRC Codebook configuration
struct
NR_CSI_ReportConfig
*
csi_reportconfig
=
mac
->
UE_info
.
CellGroup
[
0
]
->
spCellConfig
->
spCellConfigDedicated
->
csi_MeasConfig
->
choice
.
setup
->
csi_ReportConfigToAddModList
->
list
.
array
[
0
];
//int rrc_count = mac->UE_info.CellGroup[0]->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup->csi_ReportConfigToAddModList->list.count;
if
(
csi_reportconfig
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
present
==
NR_CodebookConfig__codebookType__type1__subType_PR_typeI_SinglePanel
)
{
int
N1
=
1
;
int
N2
=
1
;
int
O1
=
0
;
int
O2
=
0
;
int
CSI_RS_antenna_ports
=
1
;
//Uniform Planner Array: UPA
// X X X X ... X
// X X X X ... X
// N2 . . . . ... .
// X X X X ... X
// |<-----N1---->|
printf
(
"NR Codebook Config: codebookType, type1, subType_PR_typeI_SinglePanel
\n
"
);
struct
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel
*
type1single
=
csi_reportconfig
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
;
if
(
type1single
->
nrOfAntennaPorts
.
present
==
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
)
{
N1
=
1
;
N2
=
1
;
O1
=
1
;
O2
=
1
;
CSI_RS_antenna_ports
=
2
;
}
else
if
(
type1single
->
nrOfAntennaPorts
.
present
==
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_moreThanTwo
)
{
//Type 1 Single Panel : Based on 38.214 v15.3-Table 5.2.2.2.1-2: Supported configurations of (N1,N2) and (O1,O2)
switch
(
type1single
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
)
{
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_two_one_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_two_one
\n
"
);
N1
=
2
;
N2
=
1
;
O1
=
4
;
O2
=
1
;
CSI_RS_antenna_ports
=
4
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_two_two_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_two_two_TypeI
\n
"
);
N1
=
2
;
N2
=
2
;
O1
=
4
;
O2
=
4
;
CSI_RS_antenna_ports
=
8
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_four_one_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_four_one
\n
"
);
N1
=
4
;
N2
=
1
;
O1
=
4
;
O2
=
1
;
CSI_RS_antenna_ports
=
8
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_three_two_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_three_two
\n
"
);
N1
=
3
;
N2
=
2
;
O1
=
4
;
O2
=
4
;
CSI_RS_antenna_ports
=
12
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_six_one_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_six_one
\n
"
);
N1
=
6
;
N2
=
1
;
O1
=
4
;
O2
=
1
;
CSI_RS_antenna_ports
=
12
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_four_two_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_four_two
\n
"
);
N1
=
4
;
N2
=
2
;
O1
=
4
;
O2
=
4
;
CSI_RS_antenna_ports
=
16
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_eight_one_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_eight_one
\n
"
);
N1
=
8
;
N2
=
1
;
O1
=
4
;
O2
=
1
;
CSI_RS_antenna_ports
=
16
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_four_three_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_four_three
\n
"
);
N1
=
4
;
N2
=
3
;
O1
=
4
;
O2
=
4
;
CSI_RS_antenna_ports
=
24
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_six_two_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_six_two_
\n
"
);
N1
=
6
;
N2
=
2
;
O1
=
4
;
O2
=
4
;
CSI_RS_antenna_ports
=
24
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_twelve_one_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_twelve_one
\n
"
);
N1
=
12
;
N2
=
1
;
O1
=
4
;
O2
=
1
;
CSI_RS_antenna_ports
=
24
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_four_four_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_four_four
\n
"
);
N1
=
4
;
N2
=
4
;
O1
=
4
;
O2
=
4
;
CSI_RS_antenna_ports
=
32
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_eight_two_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_eight_two
\n
"
);
N1
=
8
;
N2
=
2
;
O1
=
4
;
O2
=
4
;
CSI_RS_antenna_ports
=
32
;
break
;
case
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_sixteen_one_TypeI_SinglePanel_Restriction
:
printf
(
"NR Codebook Config: codebookType, type1, n1_n2_PR_sixteen_one
\n
"
);
N1
=
16
;
N2
=
1
;
O1
=
4
;
O2
=
1
;
CSI_RS_antenna_ports
=
32
;
break
;
default:
printf
(
"n1 n2 is %d
\n
"
,
type1single
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
);
N1
=
1
;
N2
=
1
;
O1
=
1
;
O2
=
1
;
CSI_RS_antenna_ports
=
2
;
break
;
}
}
if
(
csi_reportconfig
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
==
1
){
if
(
CSI_RS_antenna_ports
<
16
)
{
//Generate DFT vertical beams
//ll: index of a vertical beams vector (represented by i1_1 in TS 38.214)
double
complex
v
[
N1
*
O1
][
N1
];
for
(
int
ll
=
0
;
ll
<
N1
*
O1
;
ll
++
)
//i1_1
for
(
int
nn
=
0
;
nn
<
N1
;
nn
++
){
v
[
ll
][
nn
]
=
cexp
(
I
*
(
2
*
M_PI
*
nn
*
ll
)
/
(
N1
*
O1
));
//printf("v[%d][%d] = %f +j %f\n", ll,nn, creal(v[ll][nn]),cimag(v[ll][nn]));
}
//Generate DFT Horizontal beams
//mm: index of a Horizontal beams vector (represented by i1_2 in TS 38.214)
double
complex
u
[
N2
*
O2
][
N2
];
for
(
int
mm
=
0
;
mm
<
N2
*
O2
;
mm
++
)
//i1_2
for
(
int
nn
=
0
;
nn
<
N2
;
nn
++
){
u
[
mm
][
nn
]
=
cexp
(
I
*
(
2
*
M_PI
*
nn
*
mm
)
/
(
N2
*
O2
));
//printf("u[%d][%d] = %f +j %f\n", mm,nn, creal(u[mm][nn]),cimag(u[mm][nn]));
}
//Generate co-phasing angles
//i_2: index of a co-phasing vector
//i1_1, i1_2, and i_2 are reported from UEs
double
complex
theta_n
[
4
];
for
(
int
nn
=
0
;
nn
<
4
;
nn
++
){
theta_n
[
nn
]
=
cexp
(
I
*
M_PI
*
nn
/
2
);
//printf("theta_n[%d] = %f +j %f\n", nn, creal(theta_n[nn]),cimag(theta_n[nn]));
}
//Kronecker product v_lm
double
complex
v_lm
[
N1
*
O1
][
N2
*
O2
][
N2
*
N1
];
//v_ll_mm_codebook denotes the elements of a precoding matrix W_i1,1_i_1,2
for
(
int
ll
=
0
;
ll
<
N1
*
O1
;
ll
++
)
//i_1_1
for
(
int
mm
=
0
;
mm
<
N2
*
O2
;
mm
++
)
//i_1_2
for
(
int
nn1
=
0
;
nn1
<
N1
;
nn1
++
)
for
(
int
nn2
=
0
;
nn2
<
N2
;
nn2
++
){
printf
(
"indx %d
\n
"
,
nn1
*
N2
+
nn2
);
v_lm
[
ll
][
mm
][
nn1
*
N2
+
nn2
]
=
v
[
ll
][
nn1
]
*
u
[
mm
][
nn2
];
printf
(
"v_lm[%d][%d][%d] = %f +j %f
\n
"
,
ll
,
mm
,
nn1
*
N2
+
nn2
,
creal
(
v_lm
[
ll
][
mm
][
nn1
*
N2
+
nn2
]),
cimag
(
v_lm
[
ll
][
mm
][
nn1
*
N2
+
nn2
]));
}
int
pmi_size
=
1
;
if
(
CSI_RS_antenna_ports
==
2
)
pmi_size
=
(
N1
*
O1
)
*
N2
*
O2
*
(
4
)
+
(
N1
*
O1
-
1
)
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
(
N2
*
O2
-
1
)
*
N1
*
O1
*
N2
*
O2
*
2
+
(
N1
*
O1
-
1
)
*
N2
*
O2
*
2
+
(
N2
*
O2
-
1
)
*
2
+
2
;
else
if
(
CSI_RS_antenna_ports
>=
4
)
pmi_size
=
N1
*
O1
*
N2
*
O2
*
(
4
)
+
N1
*
O1
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
N1
*
O1
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
(
N1
*
O1
-
1
)
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
(
N2
*
O2
-
1
)
*
N1
*
O1
*
N2
*
O2
*
2
+
(
N1
*
O1
-
1
)
*
N2
*
O2
*
2
+
(
N2
*
O2
-
1
)
*
2
+
2
;
gNB
->
nr_mimo_precoding_matrix
=
(
int32_t
**
)
malloc16
(
pmi_size
*
sizeof
(
int32_t
));
int32_t
**
mat
=
gNB
->
nr_mimo_precoding_matrix
;
double
complex
res_code
;
//Table 5.2.2.2.1-5:
//Codebook for 1-layer CSI reporting using antenna ports 3000 to 2999+PCSI-RS
for
(
int
ll
=
0
;
ll
<
N1
*
O1
;
ll
++
)
//i_1_1
for
(
int
mm
=
0
;
mm
<
N2
*
O2
;
mm
++
)
//i_1_2
for
(
int
nn
=
0
;
nn
<
4
;
nn
++
){
int
pmiq
=
ll
*
N2
*
O2
*
4
+
mm
*
4
+
nn
;
mat
[
pmiq
]
=
(
int32_t
*
)
malloc16
((
2
*
N1
*
N2
)
*
1
*
sizeof
(
int32_t
));
printf
(
"layer 1 pmiq = %d
\n
"
,
pmiq
);
for
(
int
len
=
0
;
len
<
N1
*
N2
;
len
++
)
{
res_code
=
sqrt
(
1
/
(
double
)
CSI_RS_antenna_ports
)
*
v_lm
[
ll
][
mm
][
len
];
if
(
creal
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
len
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
len
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
if
(
cimag
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
len
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
len
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
printf
(
"%d %d result = %f+j %f FIXED POINT %d+j %d
\n
"
,
pmiq
,
len
,
creal
(
res_code
),
cimag
(
res_code
),((
short
*
)
&
mat
[
pmiq
][
len
])[
0
],((
short
*
)
&
mat
[
pmiq
][
len
])[
1
]);
}
for
(
int
len
=
N1
*
N2
;
len
<
2
*
N1
*
N2
;
len
++
)
{
res_code
=
sqrt
(
1
/
(
double
)
CSI_RS_antenna_ports
)
*
theta_n
[
nn
]
*
v_lm
[
ll
][
mm
][
len
-
N1
*
N2
];
if
(
creal
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
len
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
len
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
if
(
cimag
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
len
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
len
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
printf
(
"%d %d result = %f+j %f FIXED POINT %d+j %d
\n
"
,
pmiq
,
len
,
creal
(
res_code
),
cimag
(
res_code
),((
short
*
)
&
mat
[
pmiq
][
len
])[
0
],((
short
*
)
&
mat
[
pmiq
][
len
])[
1
]);
}
}
int
llc
;
int
mmc
;
double
complex
phase_sign
;
//Table 5.2.2.2.1-6:
//Codebook for 2-layer CSI reporting using antenna ports 3000 to 2999+PCSI-RS
for
(
int
llb
=
0
;
llb
<
N1
*
O1
;
llb
++
)
//i_1_1
for
(
int
mmb
=
0
;
mmb
<
N2
*
O2
;
mmb
++
)
//i_1_2
for
(
int
ll
=
0
;
ll
<
N1
*
O1
;
ll
++
)
//i_1_1
for
(
int
mm
=
0
;
mm
<
N2
*
O2
;
mm
++
)
//i_1_2
for
(
int
nn
=
0
;
nn
<
2
;
nn
++
){
int
pmiq
=
N1
*
O1
*
N2
*
O2
*
(
4
)
+
llb
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
mmb
*
N1
*
O1
*
N2
*
O2
*
2
+
ll
*
N2
*
O2
*
2
+
mm
*
2
+
nn
;
mat
[
pmiq
]
=
(
int32_t
*
)
malloc16
((
2
*
N1
*
N2
)
*
(
2
)
*
sizeof
(
int32_t
));
printf
(
"layer 2 pmiq = %d
\n
"
,
pmiq
);
for
(
int
j_col
=
0
;
j_col
<
2
;
j_col
++
)
{
if
(
j_col
==
0
)
{
llc
=
llb
;
mmc
=
mmb
;
phase_sign
=
1
;
}
if
(
j_col
==
1
)
{
llc
=
ll
;
mmc
=
mm
;
phase_sign
=
-
1
;
}
for
(
int
i_rows
=
0
;
i_rows
<
N1
*
N2
;
i_rows
++
)
{
res_code
=
sqrt
(
1
/
(
double
)(
2
*
CSI_RS_antenna_ports
))
*
v_lm
[
llc
][
mmc
][
i_rows
];
if
(
creal
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
if
(
cimag
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
printf
(
"%d %d result = %f+j %f FIXED POINT %d+j %d
\n
"
,
pmiq
,
i_rows
,
creal
(
res_code
),
cimag
(
res_code
),((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
0
],((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
1
]);
}
for
(
int
i_rows
=
N1
*
N2
;
i_rows
<
2
*
N1
*
N2
;
i_rows
++
)
{
res_code
=
sqrt
(
1
/
(
double
)(
2
*
CSI_RS_antenna_ports
))
*
(
phase_sign
)
*
theta_n
[
nn
]
*
v_lm
[
llc
][
mmc
][
i_rows
-
N1
*
N2
];
if
(
creal
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
if
(
cimag
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
printf
(
"%d %d result = %f+j %f FIXED POINT %d+j %d
\n
"
,
pmiq
,
i_rows
,
creal
(
res_code
),
cimag
(
res_code
),((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
0
],((
short
*
)
&
mat
[
pmiq
][
i_rows
*
2
+
j_col
])[
1
]);
}
}
}
//Table 5.2.2.2.1-7:
//Codebook for 3-layer CSI reporting using antenna ports 3000 to 2999+PCSI-RS
if
(
CSI_RS_antenna_ports
>=
3
)
for
(
int
llb
=
0
;
llb
<
N1
*
O1
;
llb
++
)
//i_1_1
for
(
int
mmb
=
0
;
mmb
<
N2
*
O2
;
mmb
++
)
//i_1_2
for
(
int
ll
=
0
;
ll
<
N1
*
O1
;
ll
++
)
//i_1_1
for
(
int
mm
=
0
;
mm
<
N2
*
O2
;
mm
++
)
//i_1_2
for
(
int
nn
=
0
;
nn
<
2
;
nn
++
){
int
pmiq
=
N1
*
O1
*
N2
*
O2
*
(
4
)
+
N1
*
O1
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
llb
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
mmb
*
N1
*
O1
*
N2
*
O2
*
2
+
ll
*
N2
*
O2
*
2
+
mm
*
2
+
nn
;
mat
[
pmiq
]
=
(
int32_t
*
)
malloc16
((
2
*
N1
*
N2
)
*
(
3
)
*
sizeof
(
int32_t
));
printf
(
"layer 3 pmiq = %d
\n
"
,
pmiq
);
for
(
int
j_col
=
0
;
j_col
<
3
;
j_col
++
)
{
if
(
j_col
==
0
)
{
llc
=
llb
;
mmc
=
mmb
;
phase_sign
=
1
;
}
if
(
j_col
==
1
)
{
llc
=
ll
;
mmc
=
mm
;
phase_sign
=
1
;
}
if
(
j_col
==
3
)
{
llc
=
llb
;
mmc
=
mmb
;
phase_sign
=
-
1
;
}
for
(
int
i_rows
=
0
;
i_rows
<
N1
*
N2
;
i_rows
++
)
{
res_code
=
sqrt
(
1
/
(
double
)(
3
*
CSI_RS_antenna_ports
))
*
v_lm
[
llc
][
mmc
][
i_rows
];
if
(
creal
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
if
(
cimag
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
printf
(
"%d %d result = %f+j %f FIXED POINT %d+j %d
\n
"
,
pmiq
,
i_rows
,
creal
(
res_code
),
cimag
(
res_code
),((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
0
],((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
1
]);
}
for
(
int
i_rows
=
N1
*
N2
;
i_rows
<
2
*
N1
*
N2
;
i_rows
++
)
{
res_code
=
sqrt
(
1
/
(
double
)(
3
*
CSI_RS_antenna_ports
))
*
(
phase_sign
)
*
theta_n
[
nn
]
*
v_lm
[
llc
][
mmc
][
i_rows
-
N1
*
N2
];
if
(
creal
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
if
(
cimag
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
printf
(
"%d %d result = %f+j %f FIXED POINT %d+j %d
\n
"
,
pmiq
,
i_rows
,
creal
(
res_code
),
cimag
(
res_code
),((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
0
],((
short
*
)
&
mat
[
pmiq
][
i_rows
*
3
+
j_col
])[
1
]);
}
}
}
//Table 5.2.2.2.1-8:
//Codebook for 4-layer CSI reporting using antenna ports 3000 to 2999+PCSI-RS
if
(
CSI_RS_antenna_ports
>=
4
)
for
(
int
llb
=
0
;
llb
<
N1
*
O1
;
llb
++
)
//i_1_1
for
(
int
mmb
=
0
;
mmb
<
N2
*
O2
;
mmb
++
)
//i_1_2
for
(
int
ll
=
0
;
ll
<
N1
*
O1
;
ll
++
)
//i_1_1
for
(
int
mm
=
0
;
mm
<
N2
*
O2
;
mm
++
)
//i_1_2
for
(
int
nn
=
0
;
nn
<
2
;
nn
++
){
int
pmiq
=
N1
*
O1
*
N2
*
O2
*
(
4
)
+
N1
*
O1
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
N1
*
O1
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
llb
*
N2
*
O2
*
N1
*
O1
*
N2
*
O2
*
2
+
mmb
*
N1
*
O1
*
N2
*
O2
*
2
+
ll
*
N2
*
O2
*
2
+
mm
*
2
+
nn
;
mat
[
pmiq
]
=
(
int32_t
*
)
malloc16
((
2
*
N1
*
N2
)
*
4
*
sizeof
(
int32_t
));
printf
(
"layer 4 pmiq = %d
\n
"
,
pmiq
);
for
(
int
j_col
=
0
;
j_col
<
4
;
j_col
++
)
{
if
(
j_col
==
0
)
{
llc
=
llb
;
mmc
=
mmb
;
phase_sign
=
1
;
}
if
(
j_col
==
1
)
{
llc
=
ll
;
mmc
=
mm
;
phase_sign
=
1
;
}
if
(
j_col
==
3
)
{
llc
=
llb
;
mmc
=
mmb
;
phase_sign
=
-
1
;
}
if
(
j_col
==
4
)
{
llc
=
ll
;
mmc
=
mm
;
phase_sign
=
-
1
;
}
for
(
int
i_rows
=
0
;
i_rows
<
N1
*
N2
;
i_rows
++
)
{
res_code
=
sqrt
(
1
/
(
double
)(
4
*
CSI_RS_antenna_ports
))
*
v_lm
[
llc
][
mmc
][
i_rows
];
if
(
creal
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
if
(
cimag
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q1else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
printf
(
"%d %d result = %f+j %f FIXED POINT %d+j %d
\n
"
,
pmiq
,
i_rows
,
creal
(
res_code
),
cimag
(
res_code
),((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
0
],((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
1
]);
}
for
(
int
i_rows
=
N1
*
N2
;
i_rows
<
2
*
N1
*
N2
;
i_rows
++
)
{
res_code
=
sqrt
(
1
/
(
double
)(
4
*
CSI_RS_antenna_ports
))
*
(
phase_sign
)
*
theta_n
[
nn
]
*
v_lm
[
llc
][
mmc
][
i_rows
-
N1
*
N2
];
if
(
creal
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
0
]
=
(
short
)
((
creal
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
if
(
cimag
(
res_code
)
>
0
)
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
+
0
.
5
);
//convert to Q15
else
((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
1
]
=
(
short
)
((
cimag
(
res_code
)
*
32768
)
-
0
.
5
);
//convert to Q15
printf
(
"%d %d result = %f+j %f FIXED POINT %d+j %d
\n
"
,
pmiq
,
i_rows
,
creal
(
res_code
),
cimag
(
res_code
),((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
0
],((
short
*
)
&
mat
[
pmiq
][
i_rows
*
4
+
j_col
])[
1
]);
}
}
}
}
}
else
{
//codebookMode 2
printf
(
"CodeBook Type 1, CodebookMode %ld is not supported
\n
"
,
csi_reportconfig
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
);
}
}
else
{
printf
(
"subType_PR_typeI %d is not supported
\n
"
,
csi_reportconfig
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
present
);
}
return
(
0
);
}
int
phy_init_nr_gNB
(
PHY_VARS_gNB
*
gNB
,
int
phy_init_nr_gNB
(
PHY_VARS_gNB
*
gNB
,
unsigned
char
is_secondary_gNB
,
unsigned
char
is_secondary_gNB
,
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/defs_gNB.h
View file @
0517b973
...
@@ -804,6 +804,9 @@ typedef struct PHY_VARS_gNB_s {
...
@@ -804,6 +804,9 @@ typedef struct PHY_VARS_gNB_s {
/// PDSCH DMRS sequence
/// PDSCH DMRS sequence
uint32_t
****
nr_gold_pdsch_dmrs
;
uint32_t
****
nr_gold_pdsch_dmrs
;
/// PDSCH codebook I precoding LUTs
int32_t
**
nr_mimo_precoding_matrix
;
/// PUSCH DMRS
/// PUSCH DMRS
uint32_t
****
nr_gold_pusch_dmrs
;
uint32_t
****
nr_gold_pusch_dmrs
;
...
...
This diff is collapsed.
Click to expand it.
openair2/LAYER2/NR_MAC_gNB/mac_proto.h
View file @
0517b973
...
@@ -38,6 +38,8 @@ void set_cset_offset(uint16_t);
...
@@ -38,6 +38,8 @@ void set_cset_offset(uint16_t);
void
mac_top_init_gNB
(
void
);
void
mac_top_init_gNB
(
void
);
int
mac_init_codebook_gNB
(
PHY_VARS_gNB
*
gNB
,
gNB_MAC_INST
*
mac
);
void
config_common
(
int
Mod_idP
,
void
config_common
(
int
Mod_idP
,
int
ssb_SubcarrierOffset
,
int
ssb_SubcarrierOffset
,
int
pdsch_AntennaPorts
,
int
pdsch_AntennaPorts
,
...
...
This diff is collapsed.
Click to expand it.
openair2/RRC/NR/rrc_gNB_reconfig.c
View file @
0517b973
...
@@ -1189,6 +1189,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
...
@@ -1189,6 +1189,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
present
=
NR_CodebookConfig__codebookType__type1__subType_PR_typeI_SinglePanel
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
present
=
NR_CodebookConfig__codebookType__type1__subType_PR_typeI_SinglePanel
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
));
if
(
dl_antenna_ports
<=
2
)
{
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
present
=
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
;
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_two
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
=
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
two
=
...
@@ -1202,6 +1203,25 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
...
@@ -1202,6 +1203,25 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
buf
=
malloc
(
1
);
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
buf
=
malloc
(
1
);
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
buf
[
0
]
=
0x03
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
typeI_SinglePanel_ri_Restriction
.
buf
[
0
]
=
0x03
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
}
else
if
(
dl_antenna_ports
<
16
)
{
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts_PR_moreThanTwo
;
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
=
calloc
(
1
,
sizeof
(
*
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
));
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
subType
.
choice
.
typeI_SinglePanel
->
nrOfAntennaPorts
.
choice
.
moreThanTwo
->
n1_n2
.
present
=
NR_CodebookConfig__codebookType__type1__subType__typeI_SinglePanel__nrOfAntennaPorts__moreThanTwo__n1_n2_PR_three_two_TypeI_SinglePanel_Restriction
;
/*csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.size=1;
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.bits_unused=1;
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.buf=malloc(1);
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel->nrOfAntennaPorts.choice.moreThanTwo->n1_n2.choice.two_one_TypeI_SinglePanel_Restriction.buf[0]=0xc0; //'00000011'B
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->size = 1;
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->bits_unused=1;
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->buf=malloc(1);
csirep1->codebookConfig->codebookType.choice.type1->subType.choice.typeI_SinglePanel->nrOfAntennaPorts.choice.moreThanTwo->typeI_SinglePanel_codebookSubsetRestriction_i2->buf[0]=0xc0;*/
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
1
;
}
else
{
//32 antennas are Not implemented yet
csirep1
->
codebookConfig
->
codebookType
.
choice
.
type1
->
codebookMode
=
2
;
}
csirep1
->
dummy
=
NULL
;
csirep1
->
dummy
=
NULL
;
csirep1
->
groupBasedBeamReporting
.
present
=
NR_CSI_ReportConfig__groupBasedBeamReporting_PR_disabled
;
csirep1
->
groupBasedBeamReporting
.
present
=
NR_CSI_ReportConfig__groupBasedBeamReporting_PR_disabled
;
csirep1
->
groupBasedBeamReporting
.
choice
.
disabled
=
calloc
(
1
,
sizeof
(
*
csirep1
->
groupBasedBeamReporting
.
choice
.
disabled
));
csirep1
->
groupBasedBeamReporting
.
choice
.
disabled
=
calloc
(
1
,
sizeof
(
*
csirep1
->
groupBasedBeamReporting
.
choice
.
disabled
));
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment