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
6a4b923d
Commit
6a4b923d
authored
Jul 03, 2019
by
Padarthi Naga Prasanth
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
PUCCH format 1 receiver
parent
1ce0700e
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
672 additions
and
139 deletions
+672
-139
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-1
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+23
-0
openair1/PHY/NR_TRANSPORT/pucch_rx.c
openair1/PHY/NR_TRANSPORT/pucch_rx.c
+485
-5
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
+41
-39
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h
+17
-2
openair1/SIMULATION/NR_PHY/pucchsim.c
openair1/SIMULATION/NR_PHY/pucchsim.c
+105
-92
No files found.
cmake_targets/CMakeLists.txt
View file @
6a4b923d
...
...
@@ -1302,7 +1302,7 @@ set(PHY_SRC_UE
${
PHY_POLARSRC
}
${
PHY_SMALLBLOCKSRC
}
${
PHY_LDPCSRC
}
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/pucch_rx.c
# added by prasanth
${
OPENAIR1_DIR
}
/PHY/NR_TRANSPORT/pucch_rx.c
)
set
(
PHY_NR_UE_SRC
...
...
cmake_targets/autotests/test_case_list.xml
View file @
6a4b923d
...
...
@@ -1160,6 +1160,29 @@
<nruns>
3
</nruns>
</testCase>
<testCase
id=
"015109"
>
<class>
execution
</class>
<desc>
nr_nr_pucchsim Test cases. (Test1: Format 0 ACK miss 106 PRB),
(Test2: Format 1 ACK miss 106 PRB),
(Test3: Format 1 ACK miss 273 PRB),
(Test4: Format 1 NACKtoACK 106 PRB)
</desc>
<pre_compile_prog></pre_compile_prog>
<compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai
</compile_prog>
<compile_prog_args>
--phy_simulators -c
</compile_prog_args>
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec_args></pre_exec_args>
<main_exec>
$OPENAIR_DIR/targets/bin/nr_pucchsim.Rel15
</main_exec>
<main_exec_args>
-R 106 -i 1 -P 0 -b 1 -s3 -n100
-R 106 -i 14 -P 1 -b 1 -s-6 -n 100
-R 273 -i 14 -P 1 -b 1 -s-6 -n100
-R 106 -i 14 -P 1 -b 1 -s-6 -T 0.001 -n1000
</main_exec_args>
<tags>
nr_pucchsim.test1 nr_pucchsim.test2 nr_pucchsim.test3 nr_pucchsim.test4
</tags>
<search_expr_true>
PUCCH test OK
</search_expr_true>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
<nruns>
3
</nruns>
</testCase>
<testCase
id=
"015110"
>
<class>
execution
</class>
<desc>
dlsim_tm4 test cases (Test 1: 10 MHz, R2.FDD (MCS 5), EVA5, -1dB),
...
...
openair1/PHY/NR_TRANSPORT/pucch_rx.c
View file @
6a4b923d
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
View file @
6a4b923d
...
...
@@ -366,7 +366,7 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
d_im
=
-
(
int16_t
)(((
int32_t
)
amp
*
ONE_OVER_SQRT2
)
>>
15
);
}
}
// printf("d_re=%d\td_im=%d\n",(int)d_re,(int)d_im);
#ifdef DEBUG_NR_PUCCH_TX
printf
(
"
\t
[nr_generate_pucch1] sequence modulation: payload=%x
\t
de_re=%d
\t
de_im=%d
\n
"
,
payload
,
d_re
,
d_im
);
#endif
...
...
@@ -451,11 +451,13 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
+
(((
int32_t
)(
round
(
32767
*
sin
(
alpha
*
n
)))
*
table_5_2_2_2_2_Re
[
u
][
n
])
>>
15
)));
// Im part of DMRS base sequence shifted by alpha
r_u_v_alpha_delta_dmrs_re
[
n
]
=
(
int16_t
)(((
int32_t
)(
amp
*
r_u_v_alpha_delta_dmrs_re
[
n
]))
>>
15
);
r_u_v_alpha_delta_dmrs_im
[
n
]
=
(
int16_t
)(((
int32_t
)(
amp
*
r_u_v_alpha_delta_dmrs_im
[
n
]))
>>
15
);
// printf("symbol=%d\tr_u_v_re=%d\tr_u_v_im=%d\n",l,r_u_v_alpha_delta_re[n],r_u_v_alpha_delta_im[n]);
// PUCCH sequence = DM-RS sequence multiplied by d(0)
y_n_re
[
n
]
=
(
int16_t
)(((((
int32_t
)(
r_u_v_alpha_delta_re
[
n
])
*
d_re
)
>>
15
)
-
(((
int32_t
)(
r_u_v_alpha_delta_im
[
n
])
*
d_im
)
>>
15
)));
// Re part of y(n)
y_n_im
[
n
]
=
(
int16_t
)(((((
int32_t
)(
r_u_v_alpha_delta_re
[
n
])
*
d_im
)
>>
15
)
+
(((
int32_t
)(
r_u_v_alpha_delta_im
[
n
])
*
d_re
)
>>
15
)));
// Im part of y(n)
// printf("symbol=%d\tr_u_v_dmrs_re=%d\tr_u_v_dmrs_im=%d\n",l,r_u_v_alpha_delta_dmrs_re[n],r_u_v_alpha_delta_dmrs_im[n]);
#ifdef DEBUG_NR_PUCCH_TX
printf
(
"
\t
[nr_generate_pucch1] sequence generation
\t
u=%d
\t
v=%d
\t
alpha=%lf
\t
r_u_v_alpha_delta[n=%d]=(%d,%d)
\t
y_n[n=%d]=(%d,%d)
\n
"
,
u
,
v
,
alpha
,
n
,
r_u_v_alpha_delta_re
[
n
],
r_u_v_alpha_delta_im
[
n
],
n
,
y_n_re
[
n
],
y_n_im
[
n
]);
...
...
@@ -520,10 +522,10 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
for
(
int
m
=
0
;
m
<
N_SF_mprime_PUCCH_DMRS_1
;
m
++
)
{
for
(
int
n
=
0
;
n
<
12
;
n
++
)
{
z_dmrs_re
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_DMRS_1
)
+
(
m
*
12
)
+
n
]
=
(
int16_t
)((((
int32_t
)(
table_6_3_2_4_1_2_Wi_Re
[
N_SF_mprime_PUCCH_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_re
[
n
])
>>
15
)
-
(((
int32_t
)(
table_6_3_2_4_1_2_Wi_Im
[
N_SF_mprime_PUCCH_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_im
[
n
])
>>
15
));
z_dmrs_im
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_DMRS_1
)
+
(
m
*
12
)
+
n
]
=
(
int16_t
)((((
int32_t
)(
table_6_3_2_4_1_2_Wi_Re
[
N_SF_mprime_PUCCH_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_im
[
n
])
>>
15
)
+
(((
int32_t
)(
table_6_3_2_4_1_2_Wi_Im
[
N_SF_mprime_PUCCH_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_re
[
n
])
>>
15
));
z_dmrs_re
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_DMRS_1
)
+
(
m
*
12
)
+
n
]
=
(
int16_t
)((((
int32_t
)(
table_6_3_2_4_1_2_Wi_Re
[
N_SF_mprime_PUCCH_
DMRS_
1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_re
[
n
])
>>
15
)
-
(((
int32_t
)(
table_6_3_2_4_1_2_Wi_Im
[
N_SF_mprime_PUCCH_
DMRS_
1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_im
[
n
])
>>
15
));
z_dmrs_im
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_DMRS_1
)
+
(
m
*
12
)
+
n
]
=
(
int16_t
)((((
int32_t
)(
table_6_3_2_4_1_2_Wi_Re
[
N_SF_mprime_PUCCH_
DMRS_
1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_im
[
n
])
>>
15
)
+
(((
int32_t
)(
table_6_3_2_4_1_2_Wi_Im
[
N_SF_mprime_PUCCH_
DMRS_
1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_re
[
n
])
>>
15
));
#ifdef DEBUG_NR_PUCCH_TX
printf
(
"
\t
[nr_generate_pucch1] block-wise spread with wi(m) (mprime=%d, m=%d, n=%d) z[%d] = ((%d * %d - %d * %d), (%d * %d + %d * %d)) = (%d,%d)
\n
"
,
mprime
,
m
,
n
,
(
mprime
*
12
*
N_SF_mprime0_PUCCH_1
)
+
(
m
*
12
)
+
n
,
...
...
@@ -531,6 +533,7 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
table_6_3_2_4_1_2_Wi_Re
[
N_SF_mprime_PUCCH_1
][
w_index
][
m
],
r_u_v_alpha_delta_dmrs_im
[
n
],
table_6_3_2_4_1_2_Wi_Im
[
N_SF_mprime_PUCCH_1
][
w_index
][
m
],
r_u_v_alpha_delta_dmrs_re
[
n
],
z_dmrs_re
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_1
)
+
(
m
*
12
)
+
n
],
z_dmrs_im
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_1
)
+
(
m
*
12
)
+
n
]);
#endif
// printf("gNB entering l=%d\tdmrs_re=%d\tdmrs_im=%d\n",l,z_dmrs_re[(mprime*12*N_SF_mprime0_PUCCH_DMRS_1)+(m*12)+n],z_dmrs_re[(mprime*12*N_SF_mprime0_PUCCH_DMRS_1)+(m*12)+n]);
}
}
}
...
...
@@ -549,7 +552,6 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
w_index
,
N_SF_mprime_PUCCH_1
,
N_SF_mprime_PUCCH_DMRS_1
,
N_SF_mprime0_PUCCH_1
,
N_SF_mprime0_PUCCH_DMRS_1
);
#endif
for
(
int
m
=
0
;
m
<
N_SF_mprime_PUCCH_1
;
m
++
)
{
for
(
mprime
=
0
;
mprime
<
2
;
mprime
++
)
{
// mprime can get values {0,1}
for
(
int
m
=
0
;
m
<
N_SF_mprime_PUCCH_1
;
m
++
)
{
for
(
int
n
=
0
;
n
<
12
;
n
++
)
{
...
...
@@ -569,10 +571,10 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
for
(
int
m
=
0
;
m
<
N_SF_mprime_PUCCH_DMRS_1
;
m
++
)
{
for
(
int
n
=
0
;
n
<
12
;
n
++
)
{
z_dmrs_re
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_DMRS_1
)
+
(
m
*
12
)
+
n
]
=
(
int16_t
)((((
int32_t
)(
table_6_3_2_4_1_2_Wi_Re
[
N_SF_mprime_PUCCH
_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_re
[
n
])
>>
15
)
-
(((
int32_t
)(
table_6_3_2_4_1_2_Wi_Im
[
N_SF_mprime_PUCCH
_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_im
[
n
])
>>
15
));
z_dmrs_im
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_DMRS_1
)
+
(
m
*
12
)
+
n
]
=
(
int16_t
)((((
int32_t
)(
table_6_3_2_4_1_2_Wi_Re
[
N_SF_mprime_PUCCH
_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_im
[
n
])
>>
15
)
+
(((
int32_t
)(
table_6_3_2_4_1_2_Wi_Im
[
N_SF_mprime_PUCCH
_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_re
[
n
])
>>
15
));
z_dmrs_re
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_DMRS_1
)
+
(
m
*
12
)
+
n
]
=
(
int16_t
)((((
int32_t
)(
table_6_3_2_4_1_2_Wi_Re
[
N_SF_mprime_PUCCH_DMRS
_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_re
[
n
])
>>
15
)
-
(((
int32_t
)(
table_6_3_2_4_1_2_Wi_Im
[
N_SF_mprime_PUCCH_DMRS
_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_im
[
n
])
>>
15
));
z_dmrs_im
[(
mprime
*
12
*
N_SF_mprime0_PUCCH_DMRS_1
)
+
(
m
*
12
)
+
n
]
=
(
int16_t
)((((
int32_t
)(
table_6_3_2_4_1_2_Wi_Re
[
N_SF_mprime_PUCCH_DMRS
_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_im
[
n
])
>>
15
)
+
(((
int32_t
)(
table_6_3_2_4_1_2_Wi_Im
[
N_SF_mprime_PUCCH_DMRS
_1
][
w_index
][
m
])
*
r_u_v_alpha_delta_dmrs_re
[
n
])
>>
15
));
#ifdef DEBUG_NR_PUCCH_TX
printf
(
"
\t
[nr_generate_pucch1] block-wise spread with wi(m) (mprime=%d, m=%d, n=%d) z[%d] = ((%d * %d - %d * %d), (%d * %d + %d * %d)) = (%d,%d)
\n
"
,
mprime
,
m
,
n
,
(
mprime
*
12
*
N_SF_mprime0_PUCCH_1
)
+
(
m
*
12
)
+
n
,
...
...
@@ -587,7 +589,6 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
N_SF_mprime_PUCCH_DMRS_1
=
table_6_4_1_3_1_1_1_N_SF_mprime_PUCCH_1_m1Hop
[
nrofSymbols
-
1
];
// only if intra-slot hopping enabled mprime = 1 (DM-RS)
}
}
}
if
((
intraSlotFrequencyHopping
==
1
)
&&
(
l
<
floor
(
nrofSymbols
/
2
)))
{
// intra-slot hopping enabled, we need to calculate new offset PRB
startingPRB
=
startingPRB
+
startingPRB_intraSlotHopping
;
...
...
@@ -638,6 +639,7 @@ void nr_generate_pucch1(PHY_VARS_NR_UE *ue,
amp
,
frame_parms
->
ofdm_symbol_size
,
frame_parms
->
N_RB_DL
,
frame_parms
->
first_carrier_offset
,
i
+
n
,
re_offset
,
l
,
n
,((
int16_t
*
)
&
txdataF
[
0
][
re_offset
])[
0
],((
int16_t
*
)
&
txdataF
[
0
][
re_offset
])[
1
]);
#endif
// printf("gNb l=%d\ti=%d\treoffset=%d\tre=%d\tim=%d\n",l,i,re_offset,z_dmrs_re[i+n],z_dmrs_im[i+n]);
}
re_offset
++
;
...
...
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.h
View file @
6a4b923d
...
...
@@ -42,10 +42,25 @@
#include "T.h"
#define ONE_OVER_SQRT2 23170 // 32767/sqrt(2) = 23170 (ONE_OVER_SQRT2)
void
nr_decode_pucch1
(
int32_t
**
rxdataF
,
pucch_GroupHopping_t
pucch_GroupHopping
,
uint32_t
n_id
,
// hoppingID higher layer parameter
uint64_t
*
payload
,
NR_DL_FRAME_PARMS
*
frame_parms
,
int16_t
amp
,
int
nr_tti_tx
,
uint8_t
m0
,
uint8_t
nrofSymbols
,
uint8_t
startingSymbolIndex
,
uint16_t
startingPRB
,
uint16_t
startingPRB_intraSlotHopping
,
uint8_t
timeDomainOCC
,
uint8_t
nr_bit
);
void
nr_decode_pucch0
(
int32_t
**
rxdataF
,
pucch_GroupHopping_t
PUCCH_GroupHopping
,
uint32_t
n_id
,
//PHY_VARS_gNB *gNB, generally rxdataf is in gNB->common_vars
uint
8
_t
*
payload
,
uint
64
_t
*
payload
,
NR_DL_FRAME_PARMS
*
frame_parms
,
int16_t
amp
,
int
nr_tti_tx
,
...
...
openair1/SIMULATION/NR_PHY/pucchsim.c
View file @
6a4b923d
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