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
wangjie
OpenXG-RAN
Commits
b8a37a34
Commit
b8a37a34
authored
Sep 17, 2016
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pucch format 2/2a/2b UE TX
parent
2d73663b
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
302 additions
and
144 deletions
+302
-144
openair1/PHY/CODING/lte_rate_matching.c
openair1/PHY/CODING/lte_rate_matching.c
+2
-1
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+1
-0
openair1/PHY/LTE_TRANSPORT/pmch.c
openair1/PHY/LTE_TRANSPORT/pmch.c
+2
-2
openair1/PHY/LTE_TRANSPORT/proto.h
openair1/PHY/LTE_TRANSPORT/proto.h
+10
-11
openair1/PHY/LTE_TRANSPORT/pucch.c
openair1/PHY/LTE_TRANSPORT/pucch.c
+254
-64
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+20
-22
openair1/SIMULATION/LTE_PHY/pucchsim.c
openair1/SIMULATION/LTE_PHY/pucchsim.c
+13
-44
No files found.
openair1/PHY/CODING/lte_rate_matching.c
View file @
b8a37a34
...
...
@@ -518,7 +518,8 @@ uint32_t lte_rate_matching_turbo(uint32_t RTC,
// if (rvidx==3)
// for (cnt=0;cnt<Ncb;cnt++)
// counter_buffer[rvidx][cnt]=0;
AssertFatal
(
Ncb
>=
(
3
*
RTC
<<
5
),
"Exiting, RM condition (Ncb %d, Nir/C %d, Nsoft %d, Kw %d
\n
"
,
Ncb
,
Nir
/
C
,
Nsoft
,
3
*
(
RTC
<<
5
));
if
(
Ncb
>
(
3
*
(
RTC
<<
5
)))
AssertFatal
(
1
==
0
,
"Exiting, RM condition (Ncb %d, RTC %d, Nir/C %d, Nsoft %d, Kw %d)
\n
"
,
Ncb
,
RTC
,
Nir
/
C
,
Nsoft
,
3
*
(
RTC
<<
5
));
Gp
=
G
/
Nl
/
Qm
;
...
...
openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
View file @
b8a37a34
...
...
@@ -1679,6 +1679,7 @@ inline int check_skip_dc(int rb,LTE_DL_FRAME_PARMS *frame_parms) {
return
(
0
);
}
int
dlsch_modulation
(
int32_t
**
txdataF
,
int16_t
amp
,
uint32_t
subframe_offset
,
...
...
openair1/PHY/LTE_TRANSPORT/pmch.c
View file @
b8a37a34
...
...
@@ -319,8 +319,8 @@ void generate_mch(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,uint8_t *a)
AMP
);
if
(
dlsch_encoding
(
a
,
&
eNB
->
frame_parms
,
if
(
dlsch_encoding
(
eNB
,
a
,
1
,
eNB
->
dlsch_MCH
,
proc
->
frame_tx
,
...
...
openair1/PHY/LTE_TRANSPORT/proto.h
View file @
b8a37a34
...
...
@@ -1709,17 +1709,16 @@ void dlsch_unscrambling(LTE_DL_FRAME_PARMS *frame_parms,
void
init_ncs_cell
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
ncs_cell
[
20
][
7
]);
void
generate_pucch
(
int32_t
**
txdataF
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
ncs_cell
[
20
][
7
],
PUCCH_FMT_t
fmt
,
PUCCH_CONFIG_DEDICATED
*
pucch_config_dedicated
,
uint16_t
n1_pucch
,
uint16_t
n2_pucch
,
uint8_t
shortened_format
,
uint8_t
*
payload
,
int16_t
amp
,
uint8_t
subframe
);
void
generate_pucch1x
(
int32_t
**
txdataF
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
ncs_cell
[
20
][
7
],
PUCCH_FMT_t
fmt
,
PUCCH_CONFIG_DEDICATED
*
pucch_config_dedicated
,
uint16_t
n1_pucch
,
uint8_t
shortened_format
,
uint8_t
*
payload
,
int16_t
amp
,
uint8_t
subframe
);
void
generate_pucch_emul
(
PHY_VARS_UE
*
phy_vars_ue
,
UE_rxtx_proc_t
*
proc
,
...
...
openair1/PHY/LTE_TRANSPORT/pucch.c
View file @
b8a37a34
...
...
@@ -38,7 +38,7 @@
* \warning
*/
#include "PHY/defs.h"
#include "PHY/extern.h"
#include "PHY/extern.h"
#include "LAYER2/MAC/extern.h"
#include "UTIL/LOG/log.h"
...
...
@@ -97,7 +97,7 @@ void init_ncs_cell(LTE_DL_FRAME_PARMS *frame_parms,uint8_t ncs_cell[20][7])
}
#ifdef DEBUG_PUCCH_TX
msg
(
"[PHY] PUCCH ncs_cell init (j %d): Ns %d, l %d => ncs_cell %d
\n
"
,
j
,
ns
,
l
,
ncs_cell
[
ns
][
l
]);
printf
(
"[PHY] PUCCH ncs_cell init (j %d): Ns %d, l %d => ncs_cell %d
\n
"
,
j
,
ns
,
l
,
ncs_cell
[
ns
][
l
]);
#endif
}
...
...
@@ -123,17 +123,16 @@ int16_t W3_im[3][6] = {{0 ,0 ,0 },
char
pucch_format_string
[
6
][
20
]
=
{
"format 1
\0
"
,
"format 1a
\0
"
,
"format 1b
\0
"
,
"format 2
\0
"
,
"format 2a
\0
"
,
"format 2b
\0
"
};
void
generate_pucch
(
int32_t
**
txdataF
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
ncs_cell
[
20
][
7
],
PUCCH_FMT_t
fmt
,
PUCCH_CONFIG_DEDICATED
*
pucch_config_dedicated
,
uint16_t
n1_pucch
,
uint16_t
n2_pucch
,
uint8_t
shortened_format
,
uint8_t
*
payload
,
int16_t
amp
,
uint8_t
subframe
)
void
generate_pucch1x
(
int32_t
**
txdataF
,
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint8_t
ncs_cell
[
20
][
7
],
PUCCH_FMT_t
fmt
,
PUCCH_CONFIG_DEDICATED
*
pucch_config_dedicated
,
uint16_t
n1_pucch
,
uint8_t
shortened_format
,
uint8_t
*
payload
,
int16_t
amp
,
uint8_t
subframe
)
{
uint32_t
u
,
v
,
n
;
...
...
@@ -152,7 +151,8 @@ void generate_pucch(int32_t **txdataF,
uint8_t
deltaPUCCH_Shift
=
frame_parms
->
pucch_config_common
.
deltaPUCCH_Shift
;
uint8_t
NRB2
=
frame_parms
->
pucch_config_common
.
nRB_CQI
;
uint8_t
Ncs1_div_deltaPUCCH_Shift
=
frame_parms
->
pucch_config_common
.
nCS_AN
;
uint8_t
Ncs1
=
frame_parms
->
pucch_config_common
.
nCS_AN
;
uint8_t
Ncs1_div_deltaPUCCH_Shift
=
Ncs1
/
deltaPUCCH_Shift
;
uint32_t
u0
=
(
frame_parms
->
Nid_cell
+
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
subframe
<<
1
])
%
30
;
uint32_t
u1
=
(
frame_parms
->
Nid_cell
+
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
1
+
(
subframe
<<
1
)])
%
30
;
...
...
@@ -160,12 +160,12 @@ void generate_pucch(int32_t **txdataF,
uint32_t
v1
=
frame_parms
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
1
+
(
subframe
<<
1
)];
if
((
deltaPUCCH_Shift
==
0
)
||
(
deltaPUCCH_Shift
>
3
))
{
msg
(
"[PHY] generate_pucch: Illegal deltaPUCCH_shift %d (should be 1,2,3)
\n
"
,
deltaPUCCH_Shift
);
printf
(
"[PHY] generate_pucch: Illegal deltaPUCCH_shift %d (should be 1,2,3)
\n
"
,
deltaPUCCH_Shift
);
return
;
}
if
(
Ncs1_div_deltaPUCCH_Shift
>
7
)
{
msg
(
"[PHY] generate_pucch: Illegal Ncs1_div_deltaPUCCH_Shift %d (should be 0...7)
\n
"
,
Ncs1_div_deltaPUCCH_Shift
);
printf
(
"[PHY] generate_pucch: Illegal Ncs1_div_deltaPUCCH_Shift %d (should be 0...7)
\n
"
,
Ncs1_div_deltaPUCCH_Shift
);
return
;
}
...
...
@@ -175,7 +175,7 @@ void generate_pucch(int32_t **txdataF,
Nprime
=
Nprime_div_deltaPUCCH_Shift
*
deltaPUCCH_Shift
;
#ifdef DEBUG_PUCCH_TX
msg
(
"[PHY] PUCCH: cNcs1/deltaPUCCH_Shift %d, Nprime %d, n1_pucch %d
\n
"
,
thres
,
Nprime
,
n1_pucch
);
printf
(
"[PHY] PUCCH: cNcs1/deltaPUCCH_Shift %d, Nprime %d, n1_pucch %d
\n
"
,
thres
,
Nprime
,
n1_pucch
);
#endif
N_UL_symb
=
(
frame_parms
->
Ncp
==
0
)
?
7
:
6
;
...
...
@@ -194,7 +194,7 @@ void generate_pucch(int32_t **txdataF,
}
#ifdef DEBUG_PUCCH_TX
msg
(
"[PHY] PUCCH: nprime0 %d nprime1 %d, %s, payload (%d,%d)
\n
"
,
nprime0
,
nprime1
,
pucch_format_string
[
fmt
],
payload
[
0
],
payload
[
1
]);
printf
(
"[PHY] PUCCH: nprime0 %d nprime1 %d, %s, payload (%d,%d)
\n
"
,
nprime0
,
nprime1
,
pucch_format_string
[
fmt
],
payload
[
0
],
payload
[
1
]);
#endif
n_oc0
=
nprime0
/
Nprime_div_deltaPUCCH_Shift
;
...
...
@@ -208,7 +208,7 @@ void generate_pucch(int32_t **txdataF,
n_oc1
<<=
1
;
#ifdef DEBUG_PUCCH_TX
msg
(
"[PHY] PUCCH: noc0 %d noc11 %d
\n
"
,
n_oc0
,
n_oc1
);
printf
(
"[PHY] PUCCH: noc0 %d noc11 %d
\n
"
,
n_oc0
,
n_oc1
);
#endif
nprime
=
nprime0
;
...
...
@@ -280,7 +280,7 @@ void generate_pucch(int32_t **txdataF,
}
#ifdef DEBUG_PUCCH_TX
msg
(
"[PHY] PUCCH: ncs[%d][%d]=%d, W_re %d, W_im %d, S %d, refs %d
\n
"
,
ns
,
l
,
n_cs
,
W_re
,
W_im
,
S
,
refs
);
printf
(
"[PHY] PUCCH: ncs[%d][%d]=%d, W_re %d, W_im %d, S %d, refs %d
\n
"
,
ns
,
l
,
n_cs
,
W_re
,
W_im
,
S
,
refs
);
#endif
alpha_ind
=
0
;
// compute output sequence
...
...
@@ -329,15 +329,9 @@ void generate_pucch(int32_t **txdataF,
break
;
case
pucch_format2
:
msg
(
"[PHY] PUCCH format 2 not implemented
\n
"
);
break
;
case
pucch_format2a
:
msg
(
"[PHY] PUCCH format 2a not implemented
\n
"
);
break
;
case
pucch_format2b
:
msg
(
"[PHY] PUCCH format 2b not implemented
\n
"
);
AssertFatal
(
1
==
0
,
"should not go here
\n
"
);
break
;
}
// switch fmt
}
else
{
// These are PUCCH reference symbols
...
...
@@ -348,7 +342,7 @@ void generate_pucch(int32_t **txdataF,
}
#ifdef DEBUG_PUCCH_TX
msg
(
"[PHY] PUCCH subframe %d z(%d,%d) => %d,%d, alpha(%d) => %d,%d
\n
"
,
subframe
,
l
,
n
,((
int16_t
*
)
&
zptr
[
n
])[
0
],((
int16_t
*
)
&
zptr
[
n
])[
1
],
printf
(
"[PHY] PUCCH subframe %d z(%d,%d) => %d,%d, alpha(%d) => %d,%d
\n
"
,
subframe
,
l
,
n
,((
int16_t
*
)
&
zptr
[
n
])[
0
],((
int16_t
*
)
&
zptr
[
n
])[
1
],
alpha_ind
,
alpha_re
[
alpha_ind
],
alpha_im
[
alpha_ind
]);
#endif
alpha_ind
=
(
alpha_ind
+
n_cs
)
%
12
;
...
...
@@ -366,13 +360,12 @@ void generate_pucch(int32_t **txdataF,
m
=
(
n1_pucch
<
thres
)
?
NRB2
:
(((
n1_pucch
-
thres
)
/
(
12
*
c
/
deltaPUCCH_Shift
))
+
NRB2
+
((
deltaPUCCH_Shift
*
Ncs1_div_deltaPUCCH_Shift
)
>>
3
)
+
rem
);
#ifdef DEBUG_PUCCH_TX
msg
(
"[PHY] PUCCH: m %d
\n
"
,
m
);
printf
(
"[PHY] PUCCH: m %d
\n
"
,
m
);
#endif
nsymb
=
N_UL_symb
<<
1
;
//for (j=0,l=0;l<(nsymb-1);l++) {
for
(
j
=
0
,
l
=
0
;
l
<
(
nsymb
);
l
++
)
{
if
((
l
<
(
nsymb
>>
1
))
&&
((
m
&
1
)
==
0
))
re_offset
=
(
m
*
6
)
+
frame_parms
->
first_carrier_offset
;
else
if
((
l
<
(
nsymb
>>
1
))
&&
((
m
&
1
)
==
1
))
...
...
@@ -395,7 +388,7 @@ void generate_pucch(int32_t **txdataF,
re_offset
=
0
;
#ifdef DEBUG_PUCCH_TX
msg
(
"[PHY] PUCCH subframe %d (%d,%d,%d,%d) => %d,%d
\n
"
,
subframe
,
l
,
i
,
re_offset
-
1
,
m
,((
int16_t
*
)
&
z
[
j
])[
0
],((
int16_t
*
)
&
z
[
j
])[
1
]);
printf
(
"[PHY] PUCCH subframe %d (%d,%d,%d,%d) => %d,%d
\n
"
,
subframe
,
l
,
i
,
re_offset
-
1
,
m
,((
int16_t
*
)
&
z
[
j
])[
0
],((
int16_t
*
)
&
z
[
j
])[
1
]);
#endif
}
}
...
...
@@ -431,13 +424,210 @@ void generate_pucch_emul(PHY_VARS_UE *ue,
ue
->
pucch_payload
[
0
]
=
pucch_payload
[
0
]
+
(
pucch_payload
[
1
]
<<
1
);
UE_transport_info
[
ue
->
Mod_id
][
ue
->
CC_id
].
cntl
.
pucch_payload
=
pucch_payload
[
0
]
+
(
pucch_payload
[
1
]
<<
1
);
}
else
if
(
format
==
pucch_format1
)
{
LOG_D
(
PHY
,
"[UE %d] Frame %d subframe %d Generating PUCCH for SR %d
\n
"
,
ue
->
Mod_id
,
proc
->
frame_tx
,
subframe
,
sr
);
//
LOG_D(PHY,"[UE %d] Frame %d subframe %d Generating PUCCH for SR %d\n",ue->Mod_id,proc->frame_tx,subframe,sr);
}
ue
->
sr
[
subframe
]
=
sr
;
}
inline
void
pucch2x_scrambling
(
LTE_DL_FRAME_PARMS
*
fp
,
int
subframe
,
uint16_t
rnti
,
uint32_t
B
,
uint8_t
*
btilde
)
__attribute__
((
always_inline
));
inline
void
pucch2x_scrambling
(
LTE_DL_FRAME_PARMS
*
fp
,
int
subframe
,
uint16_t
rnti
,
uint32_t
B
,
uint8_t
*
btilde
)
{
uint32_t
x1
,
x2
,
s
=
0
;
int
i
;
uint8_t
c
;
x2
=
(
rnti
<<
14
)
+
((
1
+
subframe
)
<<
16
)
*
(
1
+
(
fp
->
Nid_cell
<<
1
));
//this is c_init in 36.211 Sec 6.3.1
s
=
lte_gold_generic
(
&
x1
,
&
x2
,
1
);
for
(
i
=
0
;
i
<
19
;
i
++
)
{
c
=
(
uint8_t
)((
s
>>
i
)
&
1
);
btilde
[
i
]
=
(((
B
>>
i
)
&
1
)
^
c
);
}
}
inline
void
pucch2x_modulation
(
uint8_t
*
btilde
,
int16_t
*
d
,
int16_t
amp
)
__attribute__
((
always_inline
));
inline
void
pucch2x_modulation
(
uint8_t
*
btilde
,
int16_t
*
d
,
int16_t
amp
)
{
int
i
;
for
(
i
=
0
;
i
<
20
;
i
++
)
d
[
i
]
=
btilde
[
i
]
==
1
?
amp
:
-
amp
;
}
uint32_t
pucch_code
[
13
]
=
{
0xFFFFF
,
0x5A933
,
0x10E5A
,
0x6339C
,
0x73CE0
,
0xFFC00
,
0xD8E64
,
0x4F6B0
,
0x218EC
,
0x1B746
,
0x0FFFF
,
0x33FFF
,
0x3FFFC
};
void
generate_pucch2x
(
int32_t
**
txdataF
,
LTE_DL_FRAME_PARMS
*
fp
,
uint8_t
ncs_cell
[
20
][
7
],
PUCCH_FMT_t
fmt
,
PUCCH_CONFIG_DEDICATED
*
pucch_config_dedicated
,
uint16_t
n2_pucch
,
uint8_t
shortened_format
,
uint32_t
*
payload
,
int
A
,
int
B2
,
int16_t
amp
,
uint8_t
subframe
,
uint16_t
rnti
)
{
int
i
,
j
;
uint32_t
B
=
0
;
uint8_t
btilde
[
20
];
int16_t
d
[
22
];
uint8_t
deltaPUCCH_Shift
=
fp
->
pucch_config_common
.
deltaPUCCH_Shift
;
uint8_t
NRB2
=
fp
->
pucch_config_common
.
nRB_CQI
;
uint8_t
Ncs1
=
fp
->
pucch_config_common
.
nCS_AN
;
uint32_t
u0
=
(
fp
->
Nid_cell
+
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
subframe
<<
1
])
%
30
;
uint32_t
u1
=
(
fp
->
Nid_cell
+
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
grouphop
[
1
+
(
subframe
<<
1
)])
%
30
;
uint32_t
v0
=
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
subframe
<<
1
];
uint32_t
v1
=
fp
->
pusch_config_common
.
ul_ReferenceSignalsPUSCH
.
seqhop
[
1
+
(
subframe
<<
1
)];
uint32_t
z
[
12
*
14
],
*
zptr
;
uint32_t
u
,
v
,
n
;
uint8_t
ns
,
N_UL_symb
,
nsymb
;
uint32_t
nprime
,
l
,
n_cs
;
int
alpha_ind
,
data_ind
;
int16_t
ref_re
,
ref_im
;
int
m
,
re_offset
,
symbol_offset
;
int32_t
*
txptr
;
if
((
deltaPUCCH_Shift
==
0
)
||
(
deltaPUCCH_Shift
>
3
))
{
printf
(
"[PHY] generate_pucch: Illegal deltaPUCCH_shift %d (should be 1,2,3)
\n
"
,
deltaPUCCH_Shift
);
return
;
}
if
(
Ncs1
>
7
)
{
printf
(
"[PHY] generate_pucch: Illegal Ncs1 %d (should be 0...7)
\n
"
,
Ncs1
);
return
;
}
// pucch2x_encoding
for
(
i
=
0
;
i
<
A
;
i
++
)
if
((
*
payload
&
(
1
<<
i
))
>
0
)
B
=
B
^
pucch_code
[
i
];
// scrambling
pucch2x_scrambling
(
fp
,
subframe
,
rnti
,
B
,
btilde
);
// modulation
pucch2x_modulation
(
btilde
,
d
,
amp
);
// add extra symbol for 2a/2b
d
[
20
]
=
0
;
d
[
21
]
=
0
;
if
(
fmt
==
pucch_format2a
)
d
[
20
]
=
(
B2
==
0
)
?
amp
:
-
amp
;
else
if
(
fmt
==
pucch_format2b
)
{
switch
(
B2
)
{
case
0
:
d
[
20
]
=
amp
;
break
;
case
1
:
d
[
21
]
=
-
amp
;
break
;
case
2
:
d
[
21
]
=
amp
;
break
;
case
3
:
d
[
20
]
=
-
amp
;
break
;
default:
AssertFatal
(
1
==
0
,
"Illegal modulation symbol %d for PUCCH %s
\n
"
,
B2
,
pucch_format_string
[
fmt
]);
break
;
}
}
zptr
=
z
;
#ifdef DEBUG_PUCCH_TX
printf
(
"[PHY] PUCCH2x: n2_pucch %d
\n
"
,
n2_pucch
);
#endif
N_UL_symb
=
(
fp
->
Ncp
==
0
)
?
7
:
6
;
for
(
ns
=
(
subframe
<<
1
),
u
=
u0
,
v
=
v0
;
ns
<
(
2
+
(
subframe
<<
1
));
ns
++
,
u
=
u1
,
v
=
v1
)
{
if
((
ns
&
1
)
==
0
)
nprime
=
(
n2_pucch
<
12
*
NRB2
)
?
n2_pucch
%
12
:
(
n2_pucch
+
Ncs1
+
1
)
%
12
;
else
nprime
=
(
n2_pucch
<
12
*
NRB2
)
?
((
12
*
(
nprime
+
1
))
%
13
)
-
1
:
(
10
-
n2_pucch
)
%
12
;
//loop over symbols in slot
for
(
l
=
0
;
l
<
N_UL_symb
;
l
++
)
{
// Compute n_cs (36.211 p. 18)
n_cs
=
(
ncs_cell
[
ns
][
l
]
+
nprime
)
%
12
;
alpha_ind
=
n_cs
;
data_ind
=
0
;
for
(
n
=
0
;
n
<
12
;
n
++
)
{
// this is r_uv^alpha(n)
ref_re
=
(
int16_t
)(((
int32_t
)
alpha_re
[
alpha_ind
]
*
ul_ref_sigs
[
u
][
v
][
0
][
n
<<
1
]
-
(
int32_t
)
alpha_im
[
alpha_ind
]
*
ul_ref_sigs
[
u
][
v
][
0
][
1
+
(
n
<<
1
)])
>>
15
);
ref_im
=
(
int16_t
)(((
int32_t
)
alpha_re
[
alpha_ind
]
*
ul_ref_sigs
[
u
][
v
][
0
][
1
+
(
n
<<
1
)]
+
(
int32_t
)
alpha_im
[
alpha_ind
]
*
ul_ref_sigs
[
u
][
v
][
0
][
n
<<
1
])
>>
15
);
if
((
l
<
2
)
||
(
l
>=
(
N_UL_symb
-
2
)))
{
//these are PUCCH data symbols
((
int16_t
*
)
&
zptr
[
n
])[
0
]
=
((
int32_t
)
d
[
data_ind
]
*
ref_re
-
(
int32_t
)
d
[
data_ind
+
1
]
*
ref_im
)
>>
15
;
((
int16_t
*
)
&
zptr
[
n
])[
1
]
=
((
int32_t
)
d
[
data_ind
]
*
ref_im
+
(
int32_t
)
d
[
data_ind
+
1
]
*
ref_re
)
>>
15
;
}
else
{
((
int16_t
*
)
&
zptr
[
n
])[
0
]
=
ref_re
;
((
int16_t
*
)
&
zptr
[
n
])[
1
]
=
ref_im
;
}
}
// n
if
((
l
<
2
)
||
(
l
>=
(
N_UL_symb
-
2
)))
//these are PUCCH data symbols so increment data index
data_ind
+=
2
;
}
// l
}
//ns
m
=
n2_pucch
/
12
;
#ifdef DEBUG_PUCCH_TX
printf
(
"[PHY] PUCCH: m %d
\n
"
,
m
);
#endif
nsymb
=
N_UL_symb
<<
1
;
//for (j=0,l=0;l<(nsymb-1);l++) {
for
(
j
=
0
,
l
=
0
;
l
<
(
nsymb
);
l
++
)
{
if
((
l
<
(
nsymb
>>
1
))
&&
((
m
&
1
)
==
0
))
re_offset
=
(
m
*
6
)
+
fp
->
first_carrier_offset
;
else
if
((
l
<
(
nsymb
>>
1
))
&&
((
m
&
1
)
==
1
))
re_offset
=
fp
->
first_carrier_offset
+
(
fp
->
N_RB_DL
-
(
m
>>
1
)
-
1
)
*
12
;
else
if
((
m
&
1
)
==
0
)
re_offset
=
fp
->
first_carrier_offset
+
(
fp
->
N_RB_DL
-
(
m
>>
1
)
-
1
)
*
12
;
else
re_offset
=
((
m
-
1
)
*
6
)
+
fp
->
first_carrier_offset
;
if
(
re_offset
>
fp
->
ofdm_symbol_size
)
re_offset
-=
(
fp
->
ofdm_symbol_size
);
symbol_offset
=
(
unsigned
int
)
fp
->
ofdm_symbol_size
*
(
l
+
(
subframe
*
nsymb
));
txptr
=
&
txdataF
[
0
][
symbol_offset
];
for
(
i
=
0
;
i
<
12
;
i
++
,
j
++
)
{
txptr
[
re_offset
++
]
=
z
[
j
];
if
(
re_offset
==
fp
->
ofdm_symbol_size
)
re_offset
=
0
;
#ifdef DEBUG_PUCCH_TX
printf
(
"[PHY] PUCCH subframe %d (%d,%d,%d,%d) => %d,%d
\n
"
,
subframe
,
l
,
i
,
re_offset
-
1
,
m
,((
int16_t
*
)
&
z
[
j
])[
0
],((
int16_t
*
)
&
z
[
j
])[
1
]);
#endif
}
}
}
uint32_t
rx_pucch
(
PHY_VARS_eNB
*
eNB
,
PUCCH_FMT_t
fmt
,
uint8_t
UE_id
,
...
...
@@ -535,7 +725,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
Nprime
=
Nprime_div_deltaPUCCH_Shift
*
deltaPUCCH_Shift
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH: cNcs1/deltaPUCCH_Shift %d, Nprime %d, n1_pucch %d
\n
"
,
thres
,
Nprime
,
n1_pucch
);
printf
(
"[eNB] PUCCH: cNcs1/deltaPUCCH_Shift %d, Nprime %d, n1_pucch %d
\n
"
,
thres
,
Nprime
,
n1_pucch
);
#endif
N_UL_symb
=
(
frame_parms
->
Ncp
==
NORMAL
)
?
7
:
6
;
...
...
@@ -554,7 +744,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
}
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"PUCCH: nprime0 %d nprime1 %d
\n
"
,
nprime0
,
nprime1
);
printf
(
"PUCCH: nprime0 %d nprime1 %d
\n
"
,
nprime0
,
nprime1
);
#endif
n_oc0
=
nprime0
/
Nprime_div_deltaPUCCH_Shift
;
...
...
@@ -568,7 +758,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
n_oc1
<<=
1
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH: noc0 %d noc11 %d
\n
"
,
n_oc0
,
n_oc1
);
printf
(
"[eNB] PUCCH: noc0 %d noc11 %d
\n
"
,
n_oc0
,
n_oc1
);
#endif
nprime
=
nprime0
;
...
...
@@ -647,7 +837,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
}
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH: ncs[%d][%d]=%d, W_re %d, W_im %d, S %d, refs %d
\n
"
,
ns
,
l
,
n_cs
,
W_re
,
W_im
,
S
,
refs
);
printf
(
"[eNB] PUCCH: ncs[%d][%d]=%d, W_re %d, W_im %d, S %d, refs %d
\n
"
,
ns
,
l
,
n_cs
,
W_re
,
W_im
,
S
,
refs
);
#endif
alpha_ind
=
0
;
// compute output sequence
...
...
@@ -663,7 +853,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
zptr
[
1
+
(
n
<<
1
)]
=
-
(
tmp_re
*
W_im
+
tmp_im
*
W_re
)
>>
15
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d z(%d,%d) => %d,%d, alpha(%d) => %d,%d
\n
"
,
subframe
,
l
,
n
,
zptr
[
n
<<
1
],
zptr
[(
n
<<
1
)
+
1
],
printf
(
"[eNB] PUCCH subframe %d z(%d,%d) => %d,%d, alpha(%d) => %d,%d
\n
"
,
subframe
,
l
,
n
,
zptr
[
n
<<
1
],
zptr
[(
n
<<
1
)
+
1
],
alpha_ind
,
alpha_re
[
alpha_ind
],
alpha_im
[
alpha_ind
]);
#endif
...
...
@@ -682,7 +872,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
m
=
(
n1_pucch
<
thres
)
?
NRB2
:
(((
n1_pucch
-
thres
)
/
(
12
*
c
/
deltaPUCCH_Shift
))
+
NRB2
+
((
deltaPUCCH_Shift
*
Ncs1_div_deltaPUCCH_Shift
)
>>
3
)
+
rem
);
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH: m %d
\n
"
,
m
);
printf
(
"[eNB] PUCCH: m %d
\n
"
,
m
);
#endif
nsymb
=
N_UL_symb
<<
1
;
...
...
@@ -716,7 +906,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
re_offset
=
0
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d,%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
i
,
re_offset
,
m
,
j
,
printf
(
"[eNB] PUCCH subframe %d (%d,%d,%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
i
,
re_offset
,
m
,
j
,
rxptr
[
re_offset
<<
1
],
rxptr
[
1
+
(
re_offset
<<
1
)],
zptr
[
j
],
zptr
[
1
+
j
],
rxcomp
[
aa
][
j
],
rxcomp
[
aa
][
1
+
j
]);
...
...
@@ -731,7 +921,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
if
(
fmt
==
pucch_format1
)
{
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"Doing PUCCH detection for format 1
\n
"
);
printf
(
"Doing PUCCH detection for format 1
\n
"
);
#endif
stat_max
=
0
;
...
...
@@ -754,7 +944,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d) , stat %d
\n
"
,
subframe
,
phase
,
l
,
re
,
printf
(
"[eNB] PUCCH subframe %d (%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d) , stat %d
\n
"
,
subframe
,
phase
,
l
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l
<<
1
],
cfo
[
1
+
(
l
<<
1
)],
stat_re
,
stat_im
,
stat
);
...
...
@@ -767,7 +957,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d), stat %d
\n
"
,
subframe
,
phase
,
l2
,
re
,
printf
(
"[eNB] PUCCH subframe %d (%d,%d,%d) => (%d,%d) x (%d,%d) : (%d,%d), stat %d
\n
"
,
subframe
,
phase
,
l2
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l2
<<
1
],
cfo
[
1
+
(
l2
<<
1
)],
stat_re
,
stat_im
,
stat
);
...
...
@@ -791,7 +981,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
stat_max
*=
nsymb
;
// normalize to energy per symbol
stat_max
/=
(
frame_parms
->
N_RB_UL
*
12
);
//
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH: stat %d, stat_max %d, phase_max %d
\n
"
,
stat
,
stat_max
,
phase_max
);
printf
(
"[eNB] PUCCH: stat %d, stat_max %d, phase_max %d
\n
"
,
stat
,
stat_max
,
phase_max
);
#endif
#ifdef DEBUG_PUCCH_RX
...
...
@@ -825,7 +1015,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
*
payload
=
0
;
*
Po_PUCCH1_below
=
((
*
Po_PUCCH1_below
<<
9
)
+
(
stat_max
<<
9
)
+
1024
)
>>
10
;
}
LOG_D
(
PHY
,
"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (I0 %d dBm, thres %d), Po_PUCCH1_below/above : %d / %d
\n
"
,
dB_fixed
(
stat_max
),
sigma2_dB
,
eNB
->
measurements
[
0
].
n0_subband_power_tot_dBm
[
6
],
pucch1_thres
,
dB_fixed
(
*
Po_PUCCH1_below
),
dB_fixed
(
*
Po_PUCCH1_above
));
printf
(
"[eNB] PUCCH fmt1: stat_max : %d, sigma2_dB %d (I0 %d dBm, thres %d), Po_PUCCH1_below/above : %d / %d
\n
"
,
dB_fixed
(
stat_max
),
sigma2_dB
,
eNB
->
measurements
[
0
].
n0_subband_power_tot_dBm
[
6
],
pucch1_thres
,
dB_fixed
(
*
Po_PUCCH1_below
),
dB_fixed
(
*
Po_PUCCH1_above
));
*
Po_PUCCH_update
=
1
;
if
(
UE_id
==
0
)
{
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_UE0_SR_ENERGY
,
dB_fixed
(
stat_max
));
...
...
@@ -861,7 +1051,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
printf
(
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l
<<
1
],
cfo
[
1
+
(
l
<<
1
)],
stat_re
,
stat_im
);
...
...
@@ -882,7 +1072,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l2
,
re
,
printf
(
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l2
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l2
<<
1
],
cfo
[
1
+
(
l2
<<
1
)],
stat_re
,
stat_im
);
...
...
@@ -891,7 +1081,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
}
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"aa%d re %d : phase %d : stat %d
\n
"
,
aa
,
re
,
phase
,
stat
);
printf
(
"aa%d re %d : phase %d : stat %d
\n
"
,
aa
,
re
,
phase
,
stat
);
#endif
stat
+=
((((
stat_re
*
stat_re
))
+
((
stat_im
*
stat_im
))
+
...
...
@@ -911,23 +1101,23 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
}
//phase
stat_max
/=
(
12
);
//normalize to energy per symbol and RE
//
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH fmt1a/b: stat_max : %d, phase_max : %d
\n
"
,
stat_max
,
phase_max
);
//
#endif
#ifdef DEBUG_PUCCH_RX
printf
(
"[eNB] PUCCH fmt1a/b: stat_max : %d, phase_max : %d
\n
"
,
stat_max
,
phase_max
);
#endif
stat_re
=
0
;
stat_im
=
0
;
LOG_D
(
PHY
,
"PUCCH1A : Po_PUCCH before %d dB (%d)
\n
"
,
dB_fixed
(
*
Po_PUCCH
),
*
Po_PUCCH
);
printf
(
"PUCCH1A : Po_PUCCH before %d dB (%d)
\n
"
,
dB_fixed
(
*
Po_PUCCH
),
*
Po_PUCCH
);
*
Po_PUCCH
=
((
*
Po_PUCCH
>>
1
)
+
((
stat_max
)
>>
1
));
*
Po_PUCCH_dBm
=
dB_fixed
(
*
Po_PUCCH
/
frame_parms
->
N_RB_UL
)
-
eNB
->
rx_total_gain_dB
;
*
Po_PUCCH_update
=
1
;
LOG_D
(
PHY
,
"PUCCH1A : stat_max %d (%d,%d,%d) => Po_PUCCH %d
\n
"
,
dB_fixed
(
stat_max
),
pucch1_thres
+
sigma2_dB
,
pucch1_thres
,
sigma2_dB
,
dB_fixed
(
*
Po_PUCCH
));
printf
(
"PUCCH1A : stat_max %d (%d,%d,%d) => Po_PUCCH %d
\n
"
,
dB_fixed
(
stat_max
),
pucch1_thres
+
sigma2_dB
,
pucch1_thres
,
sigma2_dB
,
dB_fixed
(
*
Po_PUCCH
));
// Do detection now
if
(
sigma2_dB
<
(
dB_fixed
(
stat_max
)
-
pucch1_thres
))
{
//
...
...
@@ -951,7 +1141,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
}
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d l %d re %d chest1 => (%d,%d)
\n
"
,
subframe
,
l
,
re
,
printf
(
"[eNB] PUCCH subframe %d l %d re %d chest1 => (%d,%d)
\n
"
,
subframe
,
l
,
re
,
chest_re
,
chest_im
);
#endif
...
...
@@ -963,7 +1153,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
stat_im
+=
(((
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
))
/
4
;
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
printf
(
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l
<<
1
],
cfo
[
1
+
(
l
<<
1
)],
stat_re
,
stat_im
);
...
...
@@ -978,7 +1168,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
stat_im
+=
(((
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
)
/
4
);
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
printf
(
"[eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l
<<
1
],
cfo
[
1
+
(
l
<<
1
)],
stat_re
,
stat_im
);
...
...
@@ -996,7 +1186,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
}
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[eNB] PUCCH subframe %d l %d re %d chest2 => (%d,%d)
\n
"
,
subframe
,
l
,
re
,
printf
(
"[eNB] PUCCH subframe %d l %d re %d chest2 => (%d,%d)
\n
"
,
subframe
,
l
,
re
,
chest_re
,
chest_im
);
#endif
...
...
@@ -1008,7 +1198,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
stat_im
+=
(((
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
))
/
4
;
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
printf
(
"[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l
<<
1
],
cfo
[
1
+
(
l
<<
1
)],
stat_re
,
stat_im
);
...
...
@@ -1023,7 +1213,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
stat_im
+=
(((
tmp_re
*
chest_im
)
>>
15
)
-
((
tmp_im
*
chest_re
)
>>
15
))
/
4
;
off
+=
2
;
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
printf
(
"[PHY][eNB] PUCCH subframe %d (%d,%d) => (%d,%d) x (%d,%d) : (%d,%d)
\n
"
,
subframe
,
l
,
re
,
rxcomp
[
aa
][
off
],
rxcomp
[
aa
][
1
+
off
],
cfo
[
l
<<
1
],
cfo
[
1
+
(
l
<<
1
)],
stat_re
,
stat_im
);
...
...
@@ -1031,7 +1221,7 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB,
}
#ifdef DEBUG_PUCCH_RX
LOG_D
(
PHY
,
"aa%d re %d : stat %d,%d
\n
"
,
aa
,
re
,
stat_re
,
stat_im
);
printf
(
"aa%d re %d : stat %d,%d
\n
"
,
aa
,
re
,
stat_re
,
stat_im
);
#endif
}
//re
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
b8a37a34
...
...
@@ -1189,17 +1189,16 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
if
(
abstraction_flag
==
0
)
{
generate_pucch
(
ue
->
common_vars
.
txdataF
,
&
ue
->
frame_parms
,
ue
->
ncs_cell
,
format
,
&
ue
->
pucch_config_dedicated
[
eNB_id
],
n1_pucch
,
0
,
// n2_pucch
1
,
// shortened format
pucch_ack_payload
,
tx_amp
,
subframe_tx
);
generate_pucch1x
(
ue
->
common_vars
.
txdataF
,
&
ue
->
frame_parms
,
ue
->
ncs_cell
,
format
,
&
ue
->
pucch_config_dedicated
[
eNB_id
],
n1_pucch
,
1
,
// shortened format
pucch_ack_payload
,
tx_amp
,
subframe_tx
);
}
else
{
#ifdef PHY_ABSTRACTION
...
...
@@ -1240,17 +1239,16 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
if
(
abstraction_flag
==
0
)
{
generate_pucch
(
ue
->
common_vars
.
txdataF
,
&
ue
->
frame_parms
,
ue
->
ncs_cell
,
pucch_format1
,
&
ue
->
pucch_config_dedicated
[
eNB_id
],
ue
->
scheduling_request_config
[
eNB_id
].
sr_PUCCH_ResourceIndex
,
0
,
// n2_pucch
1
,
// shortened format
pucch_ack_payload
,
// this is ignored anyway, we just need a pointer
tx_amp
,
subframe_tx
);
generate_pucch1x
(
ue
->
common_vars
.
txdataF
,
&
ue
->
frame_parms
,
ue
->
ncs_cell
,
pucch_format1
,
&
ue
->
pucch_config_dedicated
[
eNB_id
],
ue
->
scheduling_request_config
[
eNB_id
].
sr_PUCCH_ResourceIndex
,
1
,
// shortened format
pucch_ack_payload
,
// this is ignored anyway, we just need a pointer
tx_amp
,
subframe_tx
);
}
else
{
LOG_D
(
PHY
,
"Calling generate_pucch_emul ...
\n
"
);
generate_pucch_emul
(
ue
,
...
...
openair1/SIMULATION/LTE_PHY/pucchsim.c
View file @
b8a37a34
...
...
@@ -66,7 +66,7 @@ int main(int argc, char **argv)
uint8_t
snr1set
=
0
;
//mod_sym_t **txdataF;
int
**
txdata
;
double
**
s_re
,
**
s_im
,
**
r_re
,
**
r_im
;
double
s_re
[
2
][
30720
],
s_im
[
2
][
30720
],
r_re
[
2
][
30720
],
r_im
[
2
][
30720
]
;
double
ricean_factor
=
0
.
0000005
,
iqim
=
0
.
0
;
int
trial
,
n_trials
,
ntrials
=
1
,
n_errors
;
...
...
@@ -325,10 +325,6 @@ int main(int argc, char **argv)
txdata
=
eNB
->
common_vars
.
txdata
[
eNB_id
];
s_re
=
malloc
(
2
*
sizeof
(
double
*
));
s_im
=
malloc
(
2
*
sizeof
(
double
*
));
r_re
=
malloc
(
2
*
sizeof
(
double
*
));
r_im
=
malloc
(
2
*
sizeof
(
double
*
));
nsymb
=
(
frame_parms
->
Ncp
==
0
)
?
14
:
12
;
printf
(
"FFT Size %d, Extended Prefix %d, Samples per subframe %d, Symbols per subframe %d
\n
"
,
NUMBER_OF_OFDM_CARRIERS
,
...
...
@@ -352,19 +348,6 @@ int main(int argc, char **argv)
exit
(
-
1
);
}
for
(
i
=
0
;
i
<
2
;
i
++
)
{
s_re
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
bzero
(
s_re
[
i
],
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
s_im
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
bzero
(
s_im
[
i
],
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
r_re
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
bzero
(
r_re
[
i
],
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
r_im
[
i
]
=
malloc
(
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
bzero
(
r_im
[
i
],
FRAME_LENGTH_COMPLEX_SAMPLES
*
sizeof
(
double
));
}
init_ncs_cell
(
&
eNB
->
frame_parms
,
eNB
->
ncs_cell
);
init_ncs_cell
(
&
UE
->
frame_parms
,
UE
->
ncs_cell
);
...
...
@@ -378,17 +361,16 @@ int main(int argc, char **argv)
pucch_payload
=
0
;
generate_pucch
(
UE
->
common_vars
.
txdataF
,
frame_parms
,
UE
->
ncs_cell
,
pucch_format
,
&
pucch_config_dedicated
,
n1_pucch
,
n2_pucch
,
0
,
//shortened_format,
&
pucch_payload
,
AMP
,
//amp,
subframe
);
//subframe
generate_pucch1x
(
UE
->
common_vars
.
txdataF
,
frame_parms
,
UE
->
ncs_cell
,
pucch_format
,
&
pucch_config_dedicated
,
n1_pucch
,
0
,
//shortened_format,
&
pucch_payload
,
AMP
,
//amp,
subframe
);
//subframe
write_output
(
"txsigF0.m"
,
"txsF0"
,
&
UE
->
common_vars
.
txdataF
[
0
][
2
*
subframe
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX
],
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX
*
nsymb
,
1
,
1
);
tx_lev
=
0
;
...
...
@@ -453,7 +435,7 @@ int main(int argc, char **argv)
multipath_channel
(
UE2eNB
,
s_re
,
s_im
,
r_re
,
r_im
,
2
*
nsymb
*
OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES
,
0
);
eNB
->
frame_parms
.
samples_per_tti
,
0
);
sigma2_dB
=
N0
;
//10*log10((double)tx_lev) - SNR;
tx_gain
=
sqrt
(
pow
(
10
.
0
,.
1
*
(
N0
+
SNR
))
/
(
double
)
tx_lev
);
...
...
@@ -509,8 +491,7 @@ int main(int argc, char **argv)
if
(
sig
==
1
)
{
((
short
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
aa
][
subframe
*
frame_parms
->
samples_per_tti
])[
2
*
i
]
=
(
short
)
(((
tx_gain
*
r_re
[
aa
][
i
])
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
((
short
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
aa
][
subframe
*
frame_parms
->
samples_per_tti
])[
2
*
i
+
1
]
=
(
short
)
(((
tx_gain
*
r_im
[
aa
][
i
])
+
(
iqim
*
r_re
[
aa
][
i
]
*
tx_gain
)
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
((
short
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
aa
][
subframe
*
frame_parms
->
samples_per_tti
])[
2
*
i
+
1
]
=
(
short
)
(((
tx_gain
*
r_im
[
aa
][
i
])
+
(
iqim
*
r_re
[
aa
][
i
]
*
tx_gain
)
+
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
}
else
{
((
short
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
aa
][
subframe
*
frame_parms
->
samples_per_tti
])[
2
*
i
]
=
(
short
)
((
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
((
short
*
)
&
eNB
->
common_vars
.
rxdata
[
0
][
aa
][
subframe
*
frame_parms
->
samples_per_tti
])[
2
*
i
+
1
]
=
(
short
)
((
sqrt
(
sigma2
/
2
)
*
gaussdouble
(
0
.
0
,
1
.
0
)));
...
...
@@ -603,18 +584,6 @@ int main(int argc, char **argv)
}
for
(
i
=
0
;
i
<
2
;
i
++
)
{
free
(
s_re
[
i
]);
free
(
s_im
[
i
]);
free
(
r_re
[
i
]);
free
(
r_im
[
i
]);
}
free
(
s_re
);
free
(
s_im
);
free
(
r_re
);
free
(
r_im
);
lte_sync_time_free
();
return
(
n_errors
);
...
...
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