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
zzha zzha
OpenXG-RAN
Commits
31d5682d
Commit
31d5682d
authored
Jul 10, 2018
by
Hongzhi Wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ue adding nr pdsch channel est
parent
8ee10be2
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
284 additions
and
15 deletions
+284
-15
openair1/PHY/MODULATION/slot_fep.c
openair1/PHY/MODULATION/slot_fep.c
+24
-0
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
+6
-4
openair1/PHY/NR_REFSIG/nr_gold_ue.c
openair1/PHY/NR_REFSIG/nr_gold_ue.c
+5
-5
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
+9
-3
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
+25
-0
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+192
-1
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
+10
-0
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+1
-1
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+12
-1
No files found.
openair1/PHY/MODULATION/slot_fep.c
View file @
31d5682d
...
...
@@ -52,6 +52,8 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
//NR_UE_PDCCH *pdcch_vars = ue->pdcch_vars[ue->current_thread_id[Ns>>1]][0];
uint16_t
coreset_start_subcarrier
=
frame_parms
->
first_carrier_offset
;
uint16_t
nb_rb_coreset
=
24
;
uint16_t
bwp_start_subcarrier
=
frame_parms
->
first_carrier_offset
;
uint16_t
nb_rb_pdsch
=
100
;
/*LTE_UE_DLSCH_t **dlsch_ue = phy_vars_ue->dlsch_ue[eNB_id];
unsigned char harq_pid = dlsch_ue[0]->current_harq_pid;
...
...
@@ -255,6 +257,28 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
}
break
;
case
NR_PDSCH_EST
:
for
(
aa
=
0
;
aa
<
frame_parms
->
nb_antenna_ports_eNB
;
aa
++
)
{
#ifdef DEBUG_FEP
printf
(
"Channel estimation eNB %d, aatx %d, slot %d, symbol %d
\n
"
,
eNB_id
,
aa
,
Ns
,
l
);
#endif
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
nr_pdsch_channel_estimation
(
ue
,
eNB_id
,
0
,
Ns
,
aa
,
l
,
symbol
,
bwp_start_subcarrier
,
nb_rb_pdsch
);
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
dlsch_channel_estimation_stats
);
#endif
}
break
;
case
NR_SSS_EST
:
break
;
...
...
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
View file @
31d5682d
...
...
@@ -53,8 +53,9 @@ int wt2[12][2] = {{1,1},{1,1},{1,1},{1,1},{1,1},{1,1},{1,-1},{1,-1},{1,-1},{1,-1
short
nr_mod_table
[
14
]
=
{
0
,
0
,
23170
,
-
23170
,
-
23170
,
23170
,
23170
,
-
23170
,
23170
,
23170
,
-
23170
,
-
23170
,
-
23170
,
23170
};
int
nr_pdcch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
unsigned
int
Ns
,
unsigned
int
nr_gold_pdcch
[
2
][
20
][
3
][
10
],
unsigned
int
nr_gold_pdcch
[
7
][
20
][
3
][
10
],
int32_t
*
output
,
unsigned
short
p
,
int
length_dmrs
,
...
...
@@ -87,7 +88,7 @@ int nr_pdcch_dmrs_rx(PHY_VARS_NR_UE *ue,
ind_dword
=
ind
>>
4
;
ind_qpsk_symb
=
ind
&
0xf
;
output
[
k
]
=
qpsk
[(
ue
->
nr_gold_pdcch
[
0
][
Ns
][
l
][
ind_dword
]
>>
(
2
*
ind_qpsk_symb
))
&
3
];
output
[
k
]
=
qpsk
[(
nr_gold_pdcch
[
eNB_offset
][
Ns
][
l
][
ind_dword
]
>>
(
2
*
ind_qpsk_symb
))
&
3
];
#ifdef DEBUG_DL_DMRS
LOG_I
(
PHY
,
"Ns %d, p %d, ind_dword %d, ind_qpsk_symbol %d
\n
"
,
...
...
@@ -107,8 +108,9 @@ int nr_pdcch_dmrs_rx(PHY_VARS_NR_UE *ue,
}
int
nr_pdsch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
unsigned
int
Ns
,
unsigned
int
nr_gold_pdsch
[
2
][
20
][
2
][
21
],
unsigned
int
nr_gold_pdsch
[
7
][
20
][
2
][
21
],
int32_t
*
output
,
unsigned
short
p
,
int
length_dmrs
,
...
...
@@ -166,7 +168,7 @@ int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
ind_dword
=
ind
>>
4
;
ind_qpsk_symb
=
ind
&
0xf
;
output
[
k
]
=
qpsk_p
[(
ue
->
nr_gold_pdsch
[
0
][
Ns
][
lp
][
ind_dword
]
>>
(
2
*
ind_qpsk_symb
))
&
3
];
output
[
k
]
=
qpsk_p
[(
nr_gold_pdsch
[
0
][
Ns
][
lp
][
ind_dword
]
>>
(
2
*
ind_qpsk_symb
))
&
3
];
#ifdef DEBUG_DL_DMRS
...
...
openair1/PHY/NR_REFSIG/nr_gold_ue.c
View file @
31d5682d
...
...
@@ -64,7 +64,7 @@ void nr_gold_pbch(PHY_VARS_NR_UE* ue)
}
void
nr_gold_pdcch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
int
nr_gold_pdcch
[
20
][
2
][
10
],
unsigned
int
Nid_cell
,
unsigned
short
n_idDMRS
,
unsigned
short
length_dmrs
)
void
nr_gold_pdcch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
int
Nid_cell
,
unsigned
short
n_idDMRS
,
unsigned
short
length_dmrs
)
{
unsigned
char
ns
,
l
;
...
...
@@ -101,14 +101,14 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue,unsigned int nr_gold_pdcch[20][2][10],unsi
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
x2
=
x2
^
(
x2
<<
31
)
^
(
x2
<<
30
)
^
(
x2
<<
29
)
^
(
x2
<<
28
);
nr_gold_pdcch
[
ns
][
l
][
n
]
=
x1
^
x2
;
ue
->
nr_gold_pdcch
[
0
]
[
ns
][
l
][
n
]
=
x1
^
x2
;
//printf("n=%d : c %x\n",n,x1^x2);
}
}
}
}
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
lbar
,
unsigned
int
nr_gold_pdsch
[
2
][
20
][
2
][
21
],
unsigned
int
Nid_cell
,
unsigned
short
*
n_idDMRS
,
unsigned
short
length_dmrs
)
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
lbar
,
unsigned
int
Nid_cell
,
unsigned
short
*
n_idDMRS
,
unsigned
short
length_dmrs
)
{
unsigned
char
ns
,
l
;
...
...
@@ -130,7 +130,7 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,unsigned short lbar,unsigned int nr_gold_p
for
(
l
=
0
;
l
<
length_dmrs
;
l
++
)
{
x2tmp0
=
((
14
*
ns
+
(
lbar
+
l
)
+
1
)
*
((
nid
<<
1
)
+
1
))
<<
17
;
x2
=
(
x2tmp0
+
(
nid
<<
1
))
%
(
1
<<
31
);
//cinit
x2
=
(
x2tmp0
+
(
nid
<<
1
)
+
nscid
)
%
(
1
<<
31
);
//cinit
x1
=
1
+
(
1
<<
31
);
x2
=
x2
^
((
x2
^
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
))
<<
31
);
...
...
@@ -149,7 +149,7 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,unsigned short lbar,unsigned int nr_gold_p
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
x2
=
x2
^
(
x2
<<
31
)
^
(
x2
<<
30
)
^
(
x2
<<
29
)
^
(
x2
<<
28
);
nr_gold_pdsch
[
nscid
][
ns
][
l
][
n
]
=
x1
^
x2
;
ue
->
nr_gold_pdsch
[
nscid
][
ns
][
l
][
n
]
=
x1
^
x2
;
//printf("n=%d : c %x\n",n,x1^x2);
}
...
...
openair1/PHY/NR_REFSIG/refsig_defs_ue.h
View file @
31d5682d
...
...
@@ -35,16 +35,18 @@ int nr_pbch_dmrs_rx(unsigned int *nr_gold_pbch, int32_t *output );
@param PHY_VARS_NR_UE* ue structure provides configuration, frame parameters and the pointers to the 32 bits sequence storage tables
*/
int
nr_pdcch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
unsigned
int
Ns
,
unsigned
int
nr_gold_pdcch
[
2
][
20
][
3
][
10
],
unsigned
int
nr_gold_pdcch
[
7
][
20
][
3
][
10
],
int32_t
*
output
,
unsigned
short
p
,
int
length_dmrs
,
unsigned
short
nb_rb_corset
);
int
nr_pdsch_dmrs_rx
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_offset
,
unsigned
int
Ns
,
unsigned
int
nr_gold_pdsch
[
2
][
20
][
2
][
21
],
unsigned
int
nr_gold_pdsch
[
7
][
20
][
2
][
21
],
int32_t
*
output
,
unsigned
short
p
,
int
length_dmrs
,
...
...
@@ -52,9 +54,13 @@ int nr_pdsch_dmrs_rx(PHY_VARS_NR_UE *ue,
void
nr_gold_pbch
(
PHY_VARS_NR_UE
*
ue
);
void
nr_gold_pdcch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
int
Nid_cell
,
unsigned
short
n_idDMRS
,
unsigned
short
length_dmrs
);
void
nr_gold_pdsch
(
PHY_VARS_NR_UE
*
ue
,
unsigned
short
lbar
,
unsigned
int
nr_gold_pdsch
[
2
][
20
][
2
][
21
],
unsigned
int
Nid_cell
,
unsigned
short
*
n_idDMRS
,
unsigned
short
length_dmrs
);
...
...
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
View file @
31d5682d
...
...
@@ -84,3 +84,28 @@ short filt16a_2l1[16] = {
short
filt16a_2r1
[
16
]
=
{
-
4096
,
0
,
4096
,
8192
,
12288
,
16384
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
/*filter8*/
short
filt8_l0
[
8
]
=
{
16384
,
8192
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt8_mr0
[
8
]
=
{
0
,
8192
,
16384
,
8192
,
0
,
-
8192
,
0
,
0
};
short
filt8_r0
[
8
]
=
{
0
,
8192
,
16384
,
24576
,
0
,
0
,
0
,
0
};
short
filt8_m0
[
8
]
=
{
0
,
8192
,
16384
,
8192
,
0
,
0
,
0
,
0
};
short
filt8_l1
[
8
]
=
{
24576
,
16384
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt8_ml1
[
8
]
=
{
-
8192
,
0
,
8192
,
16384
,
8192
,
0
,
0
,
0
};
short
filt8_r1
[
8
]
=
{
0
,
0
,
8192
,
16384
,
0
,
0
,
0
,
0
};
short
filt8_m1
[
8
]
=
{
0
,
0
,
8192
,
16384
,
8192
,
0
,
0
,
0
};
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
31d5682d
...
...
@@ -267,7 +267,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
fr
=
filt16a_r1
;
// generate pilot
nr_pdcch_dmrs_rx
(
ue
->
nr_gold_pdcch
[
0
][
Ns
][
symbol
],
&
pilot
[
p
][
0
]
);
nr_pdcch_dmrs_rx
(
ue
,
eNB_offset
,
Ns
,
ue
->
nr_gold_pdcch
[
eNB_offset
][
Ns
][
symbol
],
&
pilot
[
p
][
0
],
2000
,
symbol
,
nb_rb_coreset
);
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
...
...
@@ -392,3 +392,194 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
return
(
0
);
}
int
nr_pdsch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_id
,
uint8_t
eNB_offset
,
unsigned
char
Ns
,
unsigned
char
p
,
unsigned
char
l
,
unsigned
char
symbol
,
unsigned
short
bwp_start_subcarrier
,
unsigned
short
nb_rb_pdsch
)
{
int
pilot
[
2
][
200
]
__attribute__
((
aligned
(
16
)));
unsigned
char
aarx
;
unsigned
short
k
;
unsigned
int
pilot_cnt
;
int16_t
ch
[
2
],
*
pil
,
*
rxF
,
*
dl_ch
,
*
fl
,
*
fm
,
*
fr
,
*
fml
,
*
fmr
;
int
ch_offset
,
symbol_offset
;
//uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
uint8_t
nushift
;
int
**
dl_ch_estimates
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
Ns
>>
1
]].
dl_ch_estimates
[
eNB_offset
];
int
**
rxdataF
=
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
Ns
>>
1
]].
rxdataF
;
nushift
=
(
p
>>
1
)
&
1
;
ue
->
frame_parms
.
nushift
=
nushift
;
if
(
ue
->
high_speed_flag
==
0
)
// use second channel estimate position for temporary storage
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
;
else
ch_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
symbol
;
symbol_offset
=
ue
->
frame_parms
.
ofdm_symbol_size
*
symbol
;
k
=
bwp_start_subcarrier
;
#ifdef DEBUG_CH
printf
(
"PBCH Channel Estimation : ThreadId %d, eNB_offset %d cell_id %d ch_offset %d, OFDM size %d, Ncp=%d, l=%d, Ns=%d, k=%d symbol %d
\n
"
,
ue
->
current_thread_id
[
Ns
>>
1
],
eNB_offset
,
Nid_cell
,
ch_offset
,
ue
->
frame_parms
.
ofdm_symbol_size
,
ue
->
frame_parms
.
Ncp
,
l
,
Ns
,
k
,
symbol
);
#endif
switch
(
nushift
)
{
case
0
:
fl
=
filt8_l0
;
fm
=
filt8_m0
;
fr
=
filt8_r0
;
fml
=
filt8_m0
;
fmr
=
filt8_mr0
;
break
;
case
1
:
fl
=
filt8_l1
;
fm
=
filt8_m1
;
fr
=
filt8_r1
;
fml
=
filt8_ml1
;
fmr
=
filt8_m1
;
break
;
default:
msg
(
"pdsch_channel_estimation: nushift=%d -> ERROR
\n
"
,
nushift
);
return
(
-
1
);
break
;
}
// generate pilot
nr_pdsch_dmrs_rx
(
ue
,
eNB_offset
,
Ns
,
ue
->
nr_gold_pdsch
[
eNB_offset
][
Ns
][
symbol
],
&
pilot
[
p
][
0
],
1000
,
1
,
nb_rb_pdsch
);
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
pil
=
(
int16_t
*
)
&
pilot
[
p
][
0
];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
nushift
)];
dl_ch
=
(
int16_t
*
)
&
dl_ch_estimates
[(
p
<<
1
)
+
aarx
][
ch_offset
];
memset
(
dl_ch
,
0
,
4
*
(
ue
->
frame_parms
.
ofdm_symbol_size
));
if
(
ue
->
high_speed_flag
==
0
)
// multiply previous channel estimate by ch_est_alpha
multadd_complex_vector_real_scalar
(
dl_ch
-
(
ue
->
frame_parms
.
ofdm_symbol_size
<<
1
),
ue
->
ch_est_alpha
,
dl_ch
-
(
ue
->
frame_parms
.
ofdm_symbol_size
<<
1
),
1
,
ue
->
frame_parms
.
ofdm_symbol_size
);
#ifdef DEBUG_CH
printf
(
"ch est pilot addr %p RB_DL %d
\n
"
,
&
pilot
[
p
][
0
],
ue
->
frame_parms
.
N_RB_DL
);
printf
(
"k %d, first_carrier %d
\n
"
,
k
,
ue
->
frame_parms
.
first_carrier_offset
);
printf
(
"rxF addr %p
\n
"
,
rxF
);
printf
(
"dl_ch addr %p
\n
"
,
dl_ch
);
#endif
if
((
ue
->
frame_parms
.
N_RB_DL
&
1
)
==
0
)
{
// Treat first 2 pilots specially (left edge)
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_CH
printf
(
"ch 0 %d
\n
"
,((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
]));
printf
(
"pilot 0 : rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
&
rxF
[
0
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fl
,
ch
,
dl_ch
,
8
);
pil
+=
2
;
rxF
+=
4
;
//for (int i= 0; i<8; i++)
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_CH
printf
(
"pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fml
,
ch
,
dl_ch
,
8
);
pil
+=
2
;
rxF
+=
4
;
dl_ch
+=
4
;
k
+=
4
;
for
(
pilot_cnt
=
2
;
pilot_cnt
<
(
6
*
(
nb_rb_pdsch
-
1
)
+
4
);
pilot_cnt
+=
2
)
{
if
((
pilot_cnt
%
6
)
==
0
)
dl_ch
+=
4
;
if
(
k
>=
ue
->
frame_parms
.
ofdm_symbol_size
){
k
-=
ue
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
nushift
)];}
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_CH
printf
(
"pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fm
,
ch
,
dl_ch
,
8
);
pil
+=
2
;
rxF
+=
4
;
dl_ch
+=
4
;
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_CH
printf
(
"pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fm
,
ch
,
dl_ch
,
8
);
pil
+=
2
;
rxF
+=
4
;
dl_ch
+=
4
;
k
+=
4
;
}
// Treat first 2 pilots specially (right edge)
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_CH
printf
(
"ch 0 %d
\n
"
,((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
]));
printf
(
"pilot 0 : rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
&
rxF
[
0
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fmr
,
ch
,
dl_ch
,
8
);
pil
+=
2
;
rxF
+=
4
;
//for (int i= 0; i<8; i++)
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_CH
printf
(
"pilot 1 : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fr
,
ch
,
dl_ch
,
8
);
pil
+=
2
;
rxF
+=
4
;
dl_ch
+=
4
;
k
+=
4
;
}
}
return
(
0
);
}
openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h
View file @
31d5682d
...
...
@@ -59,4 +59,14 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
unsigned
char
p
,
unsigned
char
l
,
unsigned
char
symbol
);
int
nr_pdsch_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
uint8_t
eNB_id
,
uint8_t
eNB_offset
,
unsigned
char
Ns
,
unsigned
char
p
,
unsigned
char
l
,
unsigned
char
symbol
,
unsigned
short
bwp_start_subcarrier
,
unsigned
short
nb_rb_pdsch
);
#endif
openair1/PHY/defs_nr_UE.h
View file @
31d5682d
...
...
@@ -995,7 +995,7 @@ typedef struct {
uint32_t
nr_gold_pdsch
[
2
][
20
][
2
][
21
];
/// PDCCH DMRS
uint32_t
nr_gold_pdcch
[
2
][
20
][
3
][
10
];
uint32_t
nr_gold_pdcch
[
7
][
20
][
3
][
10
];
uint32_t
X_u
[
64
][
839
];
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
31d5682d
...
...
@@ -5944,6 +5944,7 @@ int phy_procedures_UE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eNB_
LOG_D
(
PHY
,
" ------ --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_tti_rx
);
nr_gold_pdcch
(
ue
,
ue
->
frame_parms
.
Nid_cell
,
0
,
3
);
for
(;
l
<=
3
;
l
++
)
{
if
(
abstraction_flag
==
0
)
{
...
...
@@ -6014,6 +6015,17 @@ int phy_procedures_UE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eNB_
#endif
LOG_D
(
PHY
,
" ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------
\n
"
,
frame_rx
%
1024
,
nr_tti_rx
);
//to update from pdsch config
nr_gold_pdsch
(
ue
,
0
,
ue
->
frame_parms
.
Nid_cell
,
0
,
1
);
nr_slot_fep
(
ue
,
2
,
//to be updated from higher layer
(
nr_tti_rx
<<
1
),
0
,
0
,
0
,
NR_PDSCH_EST
);
#if UE_TIMING_TRACE
start_meas
(
&
ue
->
generic_stat
);
#endif
...
...
@@ -6038,7 +6050,6 @@ int phy_procedures_UE_RX(PHY_VARS_NR_UE *ue,UE_nr_rxtx_proc_t *proc,uint8_t eNB_
if
((
ue
->
dlsch_SI
[
eNB_id
])
&&
(
ue
->
dlsch_SI
[
eNB_id
]
->
active
==
1
))
{
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI
,
VCD_FUNCTION_IN
);
ue_pdsch_procedures
(
ue
,
proc
,
eNB_id
,
SI_PDSCH
,
...
...
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