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
promise
OpenXG-RAN
Commits
d42485d7
Commit
d42485d7
authored
Oct 23, 2018
by
Khodr Saaifan
Committed by
Thomas Schlichter
Dec 17, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Enable UE PDCCH format2 blind search +Fix UE PUCCH Tx for SR/Ack
parent
3506e52f
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
344 additions
and
45 deletions
+344
-45
openair1/PHY/LTE_TRANSPORT/dci.c
openair1/PHY/LTE_TRANSPORT/dci.c
+137
-0
openair1/PHY/LTE_TRANSPORT/dci_tools.c
openair1/PHY/LTE_TRANSPORT/dci_tools.c
+128
-15
openair1/PHY/LTE_TRANSPORT/pucch.c
openair1/PHY/LTE_TRANSPORT/pucch.c
+36
-21
openair1/SCHED/phy_procedures_lte_ue.c
openair1/SCHED/phy_procedures_lte_ue.c
+40
-6
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+3
-3
No files found.
openair1/PHY/LTE_TRANSPORT/dci.c
View file @
d42485d7
...
...
@@ -3862,6 +3862,143 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *ue,
return
(
dci_cnt
);
//#endif //ALL_AGGREGATION
/* sfn: Enable Format2 seaching in UE space
*aggregation 1,2,4, and 8
*/
// Now check UE_SPEC format 2_2A search spaces at aggregation 1
old_dci_cnt
=
dci_cnt
;
dci_decoding_procedure0
(
pdcch_vars
,
0
,
mode
,
subframe
,
dci_alloc
,
eNB_id
,
ue
->
current_thread_id
[
subframe
],
frame_parms
,
mi
,
((
ue
->
decode_SIB
==
1
)
?
SI_RNTI
:
0
),
ra_rnti
,
P_RNTI
,
0
,
format1A
,
format1A
,
format1A
,
format2
,
format2_size_bits
,
format2_size_bytes
,
&
dci_cnt
,
&
format0_found
,
&
format_c_found
,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
if
(
dci_cnt
>
old_dci_cnt
)
return
(
dci_cnt
);
// Now check UE_SPEC format 2 search spaces at aggregation 2
old_dci_cnt
=
dci_cnt
;
dci_decoding_procedure0
(
pdcch_vars
,
0
,
mode
,
subframe
,
dci_alloc
,
eNB_id
,
ue
->
current_thread_id
[
subframe
],
frame_parms
,
mi
,
((
ue
->
decode_SIB
==
1
)
?
SI_RNTI
:
0
),
ra_rnti
,
P_RNTI
,
1
,
format1A
,
format1A
,
format1A
,
format2
,
format2_size_bits
,
format2_size_bytes
,
&
dci_cnt
,
&
format0_found
,
&
format_c_found
,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
if
(
dci_cnt
>
old_dci_cnt
)
return
(
dci_cnt
);
// Now check UE_SPEC format 2_2A search spaces at aggregation 4
old_dci_cnt
=
dci_cnt
;
dci_decoding_procedure0
(
pdcch_vars
,
0
,
mode
,
subframe
,
dci_alloc
,
eNB_id
,
ue
->
current_thread_id
[
subframe
],
frame_parms
,
mi
,
((
ue
->
decode_SIB
==
1
)
?
SI_RNTI
:
0
),
ra_rnti
,
P_RNTI
,
2
,
format1A
,
format1A
,
format1A
,
format2
,
format2_size_bits
,
format2_size_bytes
,
&
dci_cnt
,
&
format0_found
,
&
format_c_found
,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
if
(
dci_cnt
>
old_dci_cnt
)
return
(
dci_cnt
);
//#ifdef ALL_AGGREGATION
// Now check UE_SPEC format 2_2A search spaces at aggregation 8
old_dci_cnt
=
dci_cnt
;
dci_decoding_procedure0
(
pdcch_vars
,
0
,
mode
,
subframe
,
dci_alloc
,
eNB_id
,
ue
->
current_thread_id
[
subframe
],
frame_parms
,
mi
,
((
ue
->
decode_SIB
==
1
)
?
SI_RNTI
:
0
),
ra_rnti
,
P_RNTI
,
3
,
format1A
,
format1A
,
format1A
,
format2
,
format2_size_bits
,
format2_size_bytes
,
&
dci_cnt
,
&
format0_found
,
&
format_c_found
,
&
CCEmap0
,
&
CCEmap1
,
&
CCEmap2
);
//#endif
if
((
CCEmap0
==
0xffff
)
||
((
format0_found
==
1
)
&&
(
format_c_found
==
1
)))
return
(
dci_cnt
);
if
(
dci_cnt
>
old_dci_cnt
)
return
(
dci_cnt
);
}
else
if
(
tmode
==
3
)
{
...
...
openair1/PHY/LTE_TRANSPORT/dci_tools.c
View file @
d42485d7
...
...
@@ -5049,13 +5049,16 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
}
}
/*SFN: remove channel 2 from the test
*
*/
if
(
mcs2
>
28
)
{
if
(
pdlsch1_harq
->
round
==
0
)
/*
if(pdlsch1_harq->round == 0)
{
LOG_I(PHY,"bad mcs2\n");
return(0);
}
}
*/
}
...
...
@@ -5067,12 +5070,12 @@ int check_dci_format2_2a_coherency(DCI_format_t dci_format,
return
(
0
);
}
if
((
pdlsch1_harq
->
round
==
0
)
&&
(
rv2
>
0
)
&&
(
mcs2
!=
0
))
/*
if((pdlsch1_harq->round == 0) && (rv2 > 0) && (mcs2 != 0))
{
// DCI false detection
LOG_I(PHY,"bad rv2\n");
return(0);
}
}
*/
switch
(
N_RB_DL
)
{
...
...
@@ -5772,6 +5775,99 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
uint8_t
ndi1
=
pdci_info_extarcted
->
ndi1
;
uint8_t
ndi2
=
pdci_info_extarcted
->
ndi2
;
uint8_t
NPRB
=
0
;
uint8_t
nb_rb_alloc
=
0
;
NPRB
=
conv_nprb
(
rah
,
rballoc
,
25
);
nb_rb_alloc
=
NPRB
;
pdlsch0
->
current_harq_pid
=
harq_pid
;
pdlsch0
->
active
=
1
;
pdlsch0
->
rnti
=
rnti
;
/*if (rnti == tc_rnti) {
//fix for standalone Contention Resolution Id
dlsch0_harq->DCINdi = (uint8_t)-1;
LOG_D(PHY,"UE (%x/%d): Format1A DCI: C-RNTI is temporary. Set NDI = %d and to be ignored\n",
rnti,harq_pid,dlsch0_harq->DCINdi);
}*/
// NDI has been toggled or this is the first transmission
if
((
ndi1
!=
dlsch0_harq
->
DCINdi
)
||
(
dlsch0_harq
->
first_tx
==
1
))
{
dlsch0_harq
->
round
=
0
;
dlsch0_harq
->
first_tx
=
0
;
dlsch0_harq
->
status
=
ACTIVE
;
}
//NDI has not been toggled but rv was increased by eNB: retransmission
else
if
(
rv1
!=
0
)
{
if
(
dlsch0_harq
->
status
==
SCH_IDLE
)
//packet was actually decoded in previous transmission (ACK was missed by eNB)
//However, the round is not a good check as it might have been decoded in a retransmission prior to this one.
{
LOG_D
(
PHY
,
"skip pdsch decoding and report ack
\n
"
);
// skip pdsch decoding and report ack
//pdlsch0_harq->status = SCH_IDLE;
pdlsch0
->
active
=
0
;
pdlsch0
->
harq_ack
[
subframe
].
ack
=
1
;
pdlsch0
->
harq_ack
[
subframe
].
harq_id
=
harq_pid
;
pdlsch0
->
harq_ack
[
subframe
].
send_harq_status
=
1
;
//pdlsch0_harq->first_tx = 0;
}
else
//normal retransmission
{
// nothing special to do
}
}
else
{
dlsch0_harq
->
status
=
ACTIVE
;
}
dlsch0_harq
->
DCINdi
=
ndi1
;
dlsch0_harq
->
mcs
=
mcs1
;
dlsch0_harq
->
rvidx
=
rv1
;
dlsch0_harq
->
nb_rb
=
NPRB
;
dlsch0_harq
->
codeword
=
0
;
dlsch0_harq
->
Nl
=
1
;
dlsch0_harq
->
mimo_mode
=
frame_parms
->
mode1_flag
==
1
?
SISO
:
ALAMOUTI
;
dlsch0_harq
->
dl_power_off
=
1
;
//no power offset
dlsch0_harq
->
delta_PUCCH
=
delta_PUCCH_lut
[
TPC
&
3
];
conv_rballoc
(
rah
,
rballoc
,
frame_parms
->
N_RB_DL
,
dlsch0_harq
->
rb_alloc_even
);
dlsch0_harq
->
rb_alloc_odd
[
0
]
=
dlsch0_harq
->
rb_alloc_even
[
0
];
dlsch0_harq
->
rb_alloc_odd
[
1
]
=
dlsch0_harq
->
rb_alloc_even
[
1
];
dlsch0_harq
->
rb_alloc_odd
[
2
]
=
dlsch0_harq
->
rb_alloc_even
[
2
];
dlsch0_harq
->
rb_alloc_odd
[
3
]
=
dlsch0_harq
->
rb_alloc_even
[
3
];
if
(
mcs1
<
29
)
{
dlsch0_harq
->
TBS
=
TBStable
[
get_I_TBS
(
mcs1
)][
NPRB
-
1
];
dlsch0_harq
->
Qm
=
get_Qm
(
mcs1
);
}
compute_llr_offset
(
frame_parms
,
pdcch_vars
,
pdsch_vars
,
dlsch0_harq
,
nb_rb_alloc
,
subframe
);
#ifdef SFN_Disable
uint8_t
TB0_active
=
1
;
uint8_t
TB1_active
=
1
;
...
...
@@ -6040,6 +6136,7 @@ void prepare_dl_decoding_format2_2A(DCI_format_t dci_format,
else if (dlsch0 != NULL && dlsch1 == NULL)
printf("[DCI UE] dlsch1_harq NULL dlsch0_harq status = %d\n", dlsch0_harq->status);
#endif*/
#endif
}
int
generate_ue_dlsch_params_from_dci
(
int
frame
,
...
...
@@ -6240,8 +6337,13 @@ int generate_ue_dlsch_params_from_dci(int frame,
printf
(
"bad DCI 1 !!!
\n
"
);
return
(
-
1
);
}
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"/////////////////////////
\n
"
);
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"Frame %d Subframe %d
\n
"
,
frame
%
1024
,
subframe
);
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"Detect DCI format 1
\n
"
);
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"harq_pid %d NDI1 %d
\n
"
,
dci_info_extarcted
.
harq_pid
,
dci_info_extarcted
.
ndi1
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_PHY
);
#endif
// dci is correct ==> update internal structure and prepare dl decoding
#ifdef DEBUG_DCI
LOG_I
(
PHY
,
"[DCI-FORMAT-1] AbsSubframe %d.%d prepare dl decoding
\n
"
,
frame
,
subframe
);
...
...
@@ -6275,14 +6377,14 @@ int generate_ue_dlsch_params_from_dci(int frame,
// check dci content
dlsch
[
0
]
->
active
=
1
;
dlsch
[
1
]
->
active
=
1
;
dlsch
[
0
]
->
active
=
0
;
//
dlsch[1]->active = 1;
dlsch0
=
dlsch
[
0
];
dlsch1
=
dlsch
[
1
];
//
dlsch1 = dlsch[1];
dlsch0_harq
=
dlsch0
->
harq_processes
[
dci_info_extarcted
.
harq_pid
];
dlsch1_harq
=
dlsch1
->
harq_processes
[
dci_info_extarcted
.
harq_pid
];
//
dlsch1_harq = dlsch1->harq_processes[dci_info_extarcted.harq_pid];
// printf("before coherency dlsch[1]->pmi_alloc %d\n",dlsch[1]->pmi_alloc);
// printf("before coherency dlsch1->pmi_alloc %d\n",dlsch1->pmi_alloc);
// printf("before coherency dlsch1_harq->pmi_alloc %d\n",dlsch1_harq->pmi_alloc);
...
...
@@ -6296,10 +6398,21 @@ int generate_ue_dlsch_params_from_dci(int frame,
ra_rnti
,
p_rnti
,
dlsch0_harq
,
dlsch
1_harq
);
dlsch
0_harq
);
//dlsch0_harq
if
(
status
==
0
)
{
printf
(
"bad DCI 2 !!!
\n
"
);
LOG_I
(
PHY
,
"[DCI-format2] frame.subframe %d.%d bad dci infomation
\n
"
,
frame
,
subframe
);
return
(
-
1
);
}
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"/////////////////////////
\n
"
);
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"Frame %d Subframe %d
\n
"
,
frame
%
1024
,
subframe
);
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"Detect DCI format 2
\n
"
);
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"harq_pid %d NDI1 %d
\n
"
,
dci_info_extarcted
.
harq_pid
,
dci_info_extarcted
.
ndi1
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_PHY
);
#endif
// dci is correct ==> update internal structure and prepare dl decoding
//LOG_I(PHY,"[DCI-format2] update internal structure and prepare dl decoding \n");
...
...
@@ -6311,9 +6424,9 @@ int generate_ue_dlsch_params_from_dci(int frame,
rnti
,
subframe
,
dlsch0_harq
,
dlsch
1_harq
,
dlsch
0_harq
,
// dlsch1_harq
dlsch0
,
dlsch
1
);
dlsch
0
);
//dlsch1
}
break
;
...
...
openair1/PHY/LTE_TRANSPORT/pucch.c
View file @
d42485d7
...
...
@@ -35,6 +35,8 @@
#include "UTIL/LOG/log.h"
#include "UTIL/LOG/vcd_signal_dumper.h"
//SFN
#include "sudas_tm4.h"
#include "T.h"
...
...
@@ -306,7 +308,8 @@ void generate_pucch1x(int32_t **txdataF,
{
uint32_t
u
,
v
,
n
;
uint32_t
z
[
12
*
14
],
*
zptr
;
uint32_t
z
[
12
*
14
];
int16_t
*
zptr
;
int16_t
d0
;
uint8_t
ns
,
N_UL_symb
,
nsymb
,
n_oc
,
n_oc0
,
n_oc1
;
uint8_t
c
=
(
frame_parms
->
Ncp
==
0
)
?
3
:
2
;
...
...
@@ -342,7 +345,7 @@ void generate_pucch1x(int32_t **txdataF,
return
;
}
zptr
=
z
;
zptr
=
(
int16_t
*
)
z
;
thres
=
(
c
*
Ncs1_div_deltaPUCCH_Shift
);
Nprime_div_deltaPUCCH_Shift
=
(
n1_pucch
<
thres
)
?
Ncs1_div_deltaPUCCH_Shift
:
(
12
/
deltaPUCCH_Shift
);
Nprime
=
Nprime_div_deltaPUCCH_Shift
*
deltaPUCCH_Shift
;
...
...
@@ -473,38 +476,39 @@ void generate_pucch1x(int32_t **txdataF,
tmp_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
);
// this is S(ns)*w_noc(m)*r_uv^alpha(n)
ref_re
=
(
tmp_re
*
W_re
-
tmp_im
*
W_im
)
>>
15
;
ref_im
=
(
tmp_re
*
W_im
+
tmp_im
*
W_re
)
>>
15
;
ref_re
=
(
int16_t
)(((
int32_t
)
tmp_re
*
W_re
-
(
int32_t
)
tmp_im
*
W_im
)
>>
15
);
ref_im
=
(
int16_t
)(((
int32_t
)
tmp_re
*
W_im
+
(
int32_t
)
tmp_im
*
W_re
)
>>
15
);
if
((
l
<
2
)
||
(
l
>=
(
N_UL_symb
-
2
)))
{
//these are PUCCH data symbols
switch
(
fmt
)
{
case
pucch_format1
:
//OOK 1-bit
((
int16_t
*
)
&
zptr
[
n
])[
0
]
=
((
int32_t
)
amp
*
ref_re
)
>>
15
;
((
int16_t
*
)
&
zptr
[
n
])[
1
]
=
((
int32_t
)
amp
*
ref_im
)
>>
15
;
zptr
[
n
<<
1
]
=
(
int16_t
)(((
int32_t
)
amp
*
ref_re
));
//amp is not fixed point
zptr
[
1
+
(
n
<<
1
)]
=
(
int16_t
)(((
int32_t
)
amp
*
ref_im
))
;
break
;
case
pucch_format1a
:
//BPSK 1-bit
d0
=
(
payload
[
0
]
&
1
)
==
0
?
amp
:
-
amp
;
((
int16_t
*
)
&
zptr
[
n
])[
0
]
=
((
int32_t
)
d0
*
ref_re
)
>>
15
;
((
int16_t
*
)
&
zptr
[
n
])[
1
]
=
((
int32_t
)
d0
*
ref_im
)
>>
15
;
zptr
[
n
<<
1
]
=
(
int16_t
)(((
int32_t
)
d0
*
ref_re
))
;
zptr
[
1
+
(
n
<<
1
)]
=
(
int16_t
)(((
int32_t
)
d0
*
ref_im
))
;
// printf("d0 %d\n",d0);
break
;
case
pucch_format1b
:
//QPSK 2-bits (Table 5.4.1-1 from 36.211, pg. 18)
if
(((
payload
[
0
]
&
1
)
==
0
)
&&
((
payload
[
1
]
&
1
)
==
0
))
{
// 1
((
int16_t
*
)
&
zptr
[
n
])[
0
]
=
((
int32_t
)
amp
*
ref_re
)
>>
15
;
((
int16_t
*
)
&
zptr
[
n
])[
1
]
=
((
int32_t
)
amp
*
ref_im
)
>>
15
;
zptr
[
n
<<
1
]
=
((
int32_t
)
amp
*
ref_re
)
;
zptr
[
1
+
(
n
<<
1
)]
=
((
int32_t
)
amp
*
ref_im
)
;
}
else
if
(((
payload
[
0
]
&
1
)
==
0
)
&&
((
payload
[
1
]
&
1
)
==
1
))
{
// -j
((
int16_t
*
)
&
zptr
[
n
])[
0
]
=
((
int32_t
)
amp
*
ref_im
)
>>
15
;
((
int16_t
*
)
&
zptr
[
n
])[
1
]
=
(
-
(
int32_t
)
amp
*
ref_re
)
>>
15
;
zptr
[
n
<<
1
]
=
((
int32_t
)
amp
*
ref_im
)
;
zptr
[
1
+
(
n
<<
1
)]
=
(
-
(
int32_t
)
amp
*
ref_re
)
;
}
else
if
(((
payload
[
0
]
&
1
)
==
1
)
&&
((
payload
[
1
]
&
1
)
==
0
))
{
// j
((
int16_t
*
)
&
zptr
[
n
])[
0
]
=
(
-
(
int32_t
)
amp
*
ref_im
)
>>
15
;
((
int16_t
*
)
&
zptr
[
n
])[
1
]
=
((
int32_t
)
amp
*
ref_re
)
>>
15
;
zptr
[
n
<<
1
]
=
(
-
(
int32_t
)
amp
*
ref_im
)
;
zptr
[
1
+
(
n
<<
1
)]
=
((
int32_t
)
amp
*
ref_re
)
;
}
else
{
// -1
((
int16_t
*
)
&
zptr
[
n
])[
0
]
=
(
-
(
int32_t
)
amp
*
ref_re
)
>>
15
;
((
int16_t
*
)
&
zptr
[
n
])[
1
]
=
(
-
(
int32_t
)
amp
*
ref_im
)
>>
15
;
zptr
[
n
<<
1
]
=
(
-
(
int32_t
)
amp
*
ref_re
)
;
zptr
[
1
+
(
n
<<
1
)]
=
(
-
(
int32_t
)
amp
*
ref_im
)
;
}
break
;
...
...
@@ -521,8 +525,8 @@ void generate_pucch1x(int32_t **txdataF,
}
// switch fmt
}
else
{
// These are PUCCH reference symbols
((
int16_t
*
)
&
zptr
[
n
])[
0
]
=
((
int32_t
)
amp
*
ref_re
)
>>
15
;
((
int16_t
*
)
&
zptr
[
n
])[
1
]
=
((
int32_t
)
amp
*
ref_im
)
>>
15
;
zptr
[
n
<<
1
]
=
(
int16_t
)(((
int32_t
)
amp
*
ref_re
));
//amp is not fixed point
zptr
[
1
+
(
n
<<
1
)]
=
(
int16_t
)(((
int32_t
)
amp
*
ref_im
))
;
// printf("ref\n");
}
...
...
@@ -533,17 +537,28 @@ void generate_pucch1x(int32_t **txdataF,
alpha_ind
=
(
alpha_ind
+
n_cs
)
%
12
;
}
// n
zptr
+=
12
;
zptr
+=
24
;
}
// l
nprime
=
nprime1
;
n_oc
=
n_oc1
;
}
// ns
zptr
=
(
int16_t
*
)
z
;
/* sudas_LOG_PHY(debug_sudas_LOG_PHY,"Allocat z[12*14] sequence matrix\n");
int n_sfn=0;
for (n_sfn=0;n_sfn<(12*14);n_sfn++)
{
sudas_LOG_PHY(debug_sudas_LOG_PHY," z[%d]_Re= %d z[%d]_Im= %d\n",n_sfn,zptr[n_sfn<<1],n_sfn,zptr[1+(n_sfn<<1)]);
}*/
rem
=
((((
12
*
Ncs1_div_deltaPUCCH_Shift
)
>>
3
)
&
7
)
>
0
)
?
1
:
0
;
rem
=
(((
deltaPUCCH_Shift
*
Ncs1_div_deltaPUCCH_Shift
)
&
7
)
>
0
)
?
1
:
0
;
m
=
(
n1_pucch
<
thres
)
?
NRB2
:
(((
n1_pucch
-
thres
)
/
(
12
*
c
/
deltaPUCCH_Shift
))
+
NRB2
+
((
deltaPUCCH_Shift
*
Ncs1_div_deltaPUCCH_Shift
)
>>
3
)
+
rem
);
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"Allocat PUCCH amp %d m %d nprime0 %d nprime1 %d n_oc0 %d n_oc1 %d
\n
"
,
amp
,
m
,
nprime0
,
nprime1
,
n_oc0
,
n_oc1
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_PHY
);
#endif
#ifdef DEBUG_PUCCH_TX
printf
(
"[PHY] PUCCH: m %d
\n
"
,
m
);
#endif
...
...
openair1/SCHED/phy_procedures_lte_ue.c
View file @
d42485d7
...
...
@@ -1689,8 +1689,13 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
// compute CQI/RI resources
compute_cqi_ri_resources
(
ue
,
ue
->
ulsch
[
eNB_id
],
eNB_id
,
ue
->
ulsch
[
eNB_id
]
->
rnti
,
P_RNTI
,
CBA_RNTI
,
cqi_status
,
ri_status
);
if
(
ack_status_cw0
>
0
)
{
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"Generating PUSCH (frame_tx %d subframe_tx %d): o_ACK %d ack_status_cw0 %d
\n
"
,
frame_tx
,
subframe_tx
,
ue
->
ulsch
[
eNB_id
]
->
o_ACK
[
0
],
ack_status_cw0
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_PHY
);
#endif
if
(
ack_status_cw0
>
0
)
{
// check if we received a PDSCH at subframe_tx - 4
// ==> send ACK/NACK on PUSCH
if
(
ue
->
frame_parms
.
frame_type
==
FDD
)
...
...
@@ -2110,6 +2115,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
uint8_t
nb_cw
=
0
;
uint8_t
cqi_status
=
0
;
uint8_t
ri_status
=
0
;
uint8_t
N_kbundled
=
0
;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH
,
VCD_FUNCTION_IN
);
...
...
@@ -2169,18 +2175,20 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
}
}
ack_status_cw0
=
g
et_ack
(
&
ue
->
frame_parms
,
ack_status_cw0
=
res
et_ack
(
&
ue
->
frame_parms
,
ue
->
dlsch
[
ue
->
current_thread_id
[
proc
->
subframe_rx
]][
eNB_id
][
0
]
->
harq_ack
,
subframe_tx
,
proc
->
subframe_rx
,
pucch_ack_payload
,
&
N_kbundled
,
0
);
ack_status_cw1
=
g
et_ack
(
&
ue
->
frame_parms
,
ack_status_cw1
=
res
et_ack
(
&
ue
->
frame_parms
,
ue
->
dlsch
[
ue
->
current_thread_id
[
proc
->
subframe_rx
]][
eNB_id
][
1
]
->
harq_ack
,
subframe_tx
,
proc
->
subframe_rx
,
pucch_ack_payload
,
&
N_kbundled
,
1
);
nb_cw
=
(
(
ack_status_cw0
!=
0
)
?
1
:
0
)
+
(
(
ack_status_cw1
!=
0
)
?
1
:
0
);
...
...
@@ -2229,6 +2237,12 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
// Generate PUCCH signal
ue
->
generate_ul_signal
[
eNB_id
]
=
1
;
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"PUCCH Format:: %d SR %d ACK_status %d CQI_status %d RI_status %d
\n
"
,
format
,
SR_payload
,
ack_status_cw0
,
cqi_status
,
ri_status
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_PHY
);
#endif
switch
(
format
)
{
case
pucch_format1
:
case
pucch_format1a
:
...
...
@@ -2324,7 +2338,10 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
pucch_payload
,
tx_amp
,
subframe_tx
);
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"PUCCH Format %d pucch_resource %d isShortenPucch %d
\n
"
,
format
,
pucch_resource
,
isShortenPucch
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_PHY
);
#endif
}
else
{
#ifdef PHY_ABSTRACTION
LOG_D
(
PHY
,
"Calling generate_pucch_emul ... (ACK %d %d, SR %d)
\n
"
,
pucch_ack_payload
[
0
],
pucch_ack_payload
[
1
],
SR_payload
);
...
...
@@ -2457,6 +2474,10 @@ void phy_procedures_UE_TX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,ui
}
if
(
ue
->
UE_mode
[
eNB_id
]
==
PUSCH
)
{
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"****** start TX-Chain Check if PUCCH is active for AbsSubframe %d.%d ******
\n
"
,
frame_tx
,
subframe_tx
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_PHY
);
#endif
// check if we need to use PUCCH 1a/1b
ue_pucch_procedures
(
ue
,
proc
,
eNB_id
,
abstraction_flag
);
// check if we need to use SRS
...
...
@@ -3983,6 +4004,17 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
pdsch
==
PDSCH
?
1
:
0
,
dlsch0
->
harq_processes
[
harq_pid
]
->
TBS
>
256
?
1
:
0
);
if
(
pdsch
==
PDSCH
)
{
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"ret %d HARQinfo status %d round %d harq_pid %d ack %d
\n
"
,
ret
,
dlsch0
->
harq_processes
[
harq_pid
]
->
status
,
dlsch0
->
harq_processes
[
harq_pid
]
->
round
,
dlsch0
->
harq_ack
[
subframe_rx
].
harq_id
,
dlsch0
->
harq_ack
[
subframe_rx
].
ack
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_PHY
);
#endif
}
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_decoding_stats
[
ue
->
current_thread_id
[
subframe_rx
]]);
#if DISABLE_LOG_X
...
...
@@ -5328,8 +5360,6 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
ue_pbch_procedures
(
eNB_id
,
ue
,
proc
,
abstraction_flag
);
}
// do procedures for C-RNTI
LOG_D
(
PHY
,
" ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------
\n
"
,
frame_rx
%
1024
,
subframe_rx
);
if
(
ue
->
dlsch
[
ue
->
current_thread_id
[
subframe_rx
]][
eNB_id
][
0
]
->
active
==
1
)
{
...
...
@@ -5351,6 +5381,10 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
pdsch_procedures_stat
[
ue
->
current_thread_id
[
subframe_rx
]]);
start_meas
(
&
ue
->
dlsch_procedures_stat
[
ue
->
current_thread_id
[
subframe_rx
]]);
#endif
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
" ------ --> PDSCH ue_dlsch_procedures AbsSubframe %d.%d ------
\n
"
,
frame_rx
%
1024
,
subframe_rx
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_PHY
);
#endif
ue_dlsch_procedures
(
ue
,
proc
,
...
...
targets/RT/USER/lte-softmodem.c
View file @
d42485d7
...
...
@@ -1395,9 +1395,9 @@ int main( int argc, char **argv ) {
debug_sudas_LOG_PHY
=
fopen
(
"debug_sudas_LOG_PHY.txt"
,
"w"
);
debug_sudas_LOG_MAC
=
fopen
(
"debug_sudas_LOG_MAC.txt"
,
"w"
);
sudas_LOG_MAC
(
debug_sudas_LOG_MAC
,
"main();
\n
"
);
sudas_LOG_PHY
(
debug_sudas_LOG_PHY
,
"main();
\n
"
);
#ifdef FHG_LOG
fflush
(
debug_sudas_LOG_MAC
);
fflush
(
debug_sudas_LOG_PHY
);
#endif
...
...
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