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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
80744f7f
Commit
80744f7f
authored
Jun 10, 2024
by
Laurent THOMAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update trace
parent
e171b4d4
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
39 additions
and
28 deletions
+39
-28
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+39
-28
No files found.
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
80744f7f
...
...
@@ -39,17 +39,33 @@ extern openair0_config_t openair0_cfg[];
// #define DEBUG_PDSCH
// #define DEBUG_PDCCH
#if 1
#define DEBUG_PDCCH_IQ(idx)
// #define DEBUG_PDCCH(idx) printf("pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",idx,
// rxF->r,rxF->i,ch.r,ch.i,pil->r,pil->i);
#else
#define DEBUG_PDCCH_IQ(idx) \
printf("pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n", idx, rxF->r, rxF->i, ch.r, ch.i, pil->r, pil->i);
#endif
// #define DEBUG_PBCH(a...) printf(a)
#define DEBUG_PBCH(a...)
// #define DEBUG_PBCH(a...) printf(a)
//#define DEBUG_PRS_CHEST // To enable PRS Matlab dumps
//#define DEBUG_PRS_PRINTS // To enable PRS channel estimation debug logs
#define PRS_PRINTS
// #define PRS_PRINTS printf("[Rx %d] pilot %3d, SNR %+2d dB: rxF - > (%+3d, %+3d) ch -> (%+3d, %+3d), pil -> (%+d, %+d) \n", rxAnt,
// 0, snr, rxF->r,rxF->i,ch.r,ch.i,pil->r,pil->i)
#if 1
#define PRS_PRINTS(IDX)
#else
#define PRS_PRINTS(IDX) \
printf("[Rx %d] pilot %3d, SNR %+2d dB: rxF - > (%+3d, %+3d) ch -> (%+3d, %+3d), pil -> (%+d, %+d) \n", \
rxAnt, \
IDX, \
snr, \
rxF->r, \
rxF->i, \
ch.r, \
ch.i, \
pil->r, \
pil->i)
#endif
#define CH_INTERP 0
#define NO_INTERP 1
...
...
@@ -205,7 +221,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
rsrp
+=
squaredMod
(
*
rxF
);
c16_t
noiseFig
=
c16sub
(
*
rxF
,
c16mulShift
(
ch
,
*
pil
,
15
));
snr
+=
10
*
log10
(
squaredMod
(
*
rxF
)
-
squaredMod
(
noiseFig
))
-
10
*
log10
(
squaredMod
(
noiseFig
));
PRS_PRINTS
;
PRS_PRINTS
(
0
)
;
pil
++
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
...
...
@@ -219,7 +235,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
rsrp
+=
squaredMod
(
*
rxF
);
c16_t
noiseFig
=
c16sub
(
*
rxF
,
c16mulShift
(
ch
,
*
pil
,
15
));
snr
+=
10
*
log10
(
squaredMod
(
*
rxF
)
-
squaredMod
(
noiseFig
))
-
10
*
log10
(
squaredMod
(
noiseFig
));
PRS_PRINTS
;
PRS_PRINTS
(
pIdx
)
;
pil
++
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
...
...
@@ -230,7 +246,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
rsrp
+=
squaredMod
(
*
rxF
);
noiseFig
=
c16sub
(
*
rxF
,
c16mulShift
(
ch
,
*
pil
,
15
));
snr
+=
10
*
log10
(
squaredMod
(
*
rxF
)
-
squaredMod
(
noiseFig
))
-
10
*
log10
(
squaredMod
(
noiseFig
));
PRS_PRINTS
;
PRS_PRINTS
(
pIdx
)
;
pil
++
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
...
...
@@ -245,7 +261,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
rsrp
+=
squaredMod
(
*
rxF
);
noiseFig
=
c16sub
(
*
rxF
,
c16mulShift
(
ch
,
*
pil
,
15
));
snr
+=
10
*
log10
(
squaredMod
(
*
rxF
)
-
squaredMod
(
noiseFig
))
-
10
*
log10
(
squaredMod
(
noiseFig
));
PRS_PRINTS
;
PRS_PRINTS
(
num_pilots
-
1
)
;
}
else
if
(
prs_cfg
->
CombSize
==
4
)
{
// Choose the interpolation filters
switch
(
k_prime
)
{
...
...
@@ -304,7 +320,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
rsrp
+=
squaredMod
(
*
rxF
);
c16_t
noiseFig
=
c16sub
(
*
rxF
,
c16mulShift
(
ch
,
*
pil
,
15
));
snr
+=
10
*
log10
(
squaredMod
(
*
rxF
)
-
squaredMod
(
noiseFig
))
-
10
*
log10
(
squaredMod
(
noiseFig
));
PRS_PRINTS
;
PRS_PRINTS
(
0
)
;
pil
++
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
...
...
@@ -314,7 +330,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
rsrp
+=
squaredMod
(
*
rxF
);
noiseFig
=
c16sub
(
*
rxF
,
c16mulShift
(
ch
,
*
pil
,
15
));
snr
+=
10
*
log10
(
squaredMod
(
*
rxF
)
-
squaredMod
(
noiseFig
))
-
10
*
log10
(
squaredMod
(
noiseFig
));
PRS_PRINTS
;
PRS_PRINTS
(
1
)
;
pil
++
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
...
...
@@ -329,7 +345,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
rsrp
+=
squaredMod
(
*
rxF
);
c16_t
noiseFig
=
c16sub
(
*
rxF
,
c16mulShift
(
ch
,
*
pil
,
15
));
snr
+=
10
*
log10
(
squaredMod
(
*
rxF
)
-
squaredMod
(
noiseFig
))
-
10
*
log10
(
squaredMod
(
noiseFig
));
PRS_PRINTS
;
PRS_PRINTS
(
pIdx
)
;
pil
++
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
...
...
@@ -343,7 +359,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
rsrp
+=
squaredMod
(
*
rxF
);
noiseFig
=
c16sub
(
*
rxF
,
c16mulShift
(
ch
,
*
pil
,
15
));
snr
+=
10
*
log10
(
squaredMod
(
*
rxF
)
-
squaredMod
(
noiseFig
))
-
10
*
log10
(
squaredMod
(
noiseFig
));
PRS_PRINTS
;
PRS_PRINTS
(
num_pilots
-
2
)
;
pil
++
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
...
...
@@ -354,7 +370,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
rsrp
+=
squaredMod
(
*
rxF
);
noiseFig
=
c16sub
(
*
rxF
,
c16mulShift
(
ch
,
*
pil
,
15
));
snr
+=
10
*
log10
(
squaredMod
(
*
rxF
)
-
squaredMod
(
noiseFig
))
-
10
*
log10
(
squaredMod
(
noiseFig
));
PRS_PRINTS
;
PRS_PRINTS
(
num_pilots
-
1
)
;
}
else
{
AssertFatal
((
prs_cfg
->
CombSize
==
2
)
||
(
prs_cfg
->
CombSize
==
4
),
"[%s] DL PRS CombSize other than 2 and 4 are NOT supported currently. Exiting!!!"
,
...
...
@@ -514,12 +530,7 @@ c32_t nr_pbch_dmrs_correlation(const NR_DL_FRAME_PARMS *fp,
unsigned
int
k
=
Nid_cell
%
4
;
DEBUG_PBCH
(
"PBCH DMRS Correlation : gNB_id %d , OFDM size %d, Ncp=%d, k=%u symbol %d
\n
"
,
proc
->
gNB_id
,
symbolSz
,
ue
->
frame_parms
.
Ncp
,
k
,
symbol
);
DEBUG_PBCH
(
"PBCH DMRS Correlation : gNB_id %d , OFDM size %d, k=%u symbol %d
\n
"
,
proc
->
gNB_id
,
symbolSz
,
k
,
symbol
);
// generate pilot
// Note: pilot returned by the following function is already the complex conjugate of the transmitted DMRS
...
...
@@ -531,8 +542,8 @@ c32_t nr_pbch_dmrs_correlation(const NR_DL_FRAME_PARMS *fp,
c16_t
*
pil
=
pilot
;
const
c16_t
*
rxF
=
&
rxdataF
[
aarx
][
symbol_offset
+
k
];
DEBUG_PBCH
(
"pbch ch est pilot RB_DL %d
\n
"
,
ue
->
frame_parms
.
N_RB_DL
);
DEBUG_PBCH
(
"k %u, first_carrier %d
\n
"
,
k
,
ue
->
frame_parms
.
first_carrier_offset
);
DEBUG_PBCH
(
"pbch ch est pilot RB_DL %d
\n
"
,
fp
->
N_RB_DL
);
DEBUG_PBCH
(
"k %u, first_carrier %d
\n
"
,
k
,
fp
->
first_carrier_offset
);
// Treat first 2 pilots specially (left edge)
computed_val
=
c32x16maddShift
(
*
pil
,
rxF
[
re_offset
],
computed_val
,
15
);
...
...
@@ -909,21 +920,21 @@ void nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue,
rxF
=
incrementK
(
base
,
&
k
,
symbolSz
);
}
#else // ELSE CH_INTERP
c32_t
ch
_sum
=
{
0
};
c32_t
ch
=
{
0
};
for
(
uint
pilot_cnt
=
0
;
pilot_cnt
<
3
*
nb_rb_coreset
;
pilot_cnt
++
)
{
DEBUG_PDCCH_IQ
(
pilot_cnt
);
ch
_sum
=
c32x16maddShift
(
*
rxF
,
*
pil
,
ch_sum
,
15
);
ch
=
c32x16maddShift
(
*
rxF
,
*
pil
,
ch
,
15
);
pil
++
;
rxF
=
incrementK
(
base
,
&
k
,
symbolSz
);
if
(
pilot_cnt
%
3
==
2
)
{
c16_t
ch
=
{
ch_sum
.
r
/
3
,
ch_sum
.
i
/
3
};
multaddRealVectorComplexScalar
((
c16_t
*
)
filt16a_1
,
ch
,
dl_ch
,
16
);
c16_t
ch
16
=
{
ch
.
r
/
3
,
ch
.
i
/
3
};
multaddRealVectorComplexScalar
((
c16_t
*
)
filt16a_1
,
ch
16
,
dl_ch
,
16
);
#ifdef DEBUG_PDCCH
for
(
int
m
=
0
;
m
<
12
;
m
++
)
printf
(
"data : dl_ch -> (%d,%d)
\n
"
,
dl_ch
[
0
+
2
*
m
],
dl_ch
[
1
+
2
*
m
]);
#endif
dl_ch
+=
12
;
ch
_sum
=
(
c32_t
){
0
};
ch
=
(
c32_t
){
0
};
}
}
#endif // END CH_INTERP
...
...
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