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
Michael Black
OpenXG-RAN
Commits
d79a38bf
Commit
d79a38bf
authored
Jan 25, 2022
by
Rakesh Mundlamuri
Browse files
Options
Browse Files
Download
Plain Diff
fix merge conflicts
parents
edfe8c55
55c64483
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
309 additions
and
76 deletions
+309
-76
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+6
-4
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
+28
-1
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
+18
-0
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+253
-68
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+2
-1
openair1/SCHED_NR/phy_procedures_nr_gNB.c
openair1/SCHED_NR/phy_procedures_nr_gNB.c
+1
-1
openair1/SIMULATION/NR_PHY/pbchsim.c
openair1/SIMULATION/NR_PHY/pbchsim.c
+1
-1
No files found.
openair1/PHY/INIT/nr_init_ue.c
View file @
d79a38bf
...
...
@@ -337,11 +337,13 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
// PRS channel estimates
ue
->
prs_ch_estimates
=
(
int32_t
**
)
malloc16
(
fp
->
nb_antennas_rx
*
sizeof
(
int32_t
*
)
);
AssertFatal
(
ue
->
prs_ch_estimates
!=
NULL
,
"NR UE init: PRS channel estimates malloc failed
\n
"
);
ue
->
prs_ch_estimates_time
=
(
int32_t
**
)
malloc16
(
fp
->
nb_antennas_rx
*
sizeof
(
int32_t
*
)
);
AssertFatal
(((
ue
->
prs_ch_estimates
!=
NULL
)
||
(
ue
->
prs_ch_estimates_time
!=
NULL
)),
"NR UE init: PRS channel estimates malloc failed
\n
"
);
for
(
i
=
0
;
i
<
fp
->
nb_antennas_rx
;
i
++
)
{
ue
->
prs_ch_estimates
[
i
]
=
(
int32_t
*
)
malloc16
(
2
*
fp
->
ofdm_symbol_size
*
NR_MAX_NUM_PRS_SYMB
);
AssertFatal
(
ue
->
prs_ch_estimates
[
i
]
!=
NULL
,
"NR UE init: PRS channel estimates malloc failed %d
\n
"
,
i
);
ue
->
prs_ch_estimates_time
[
i
]
=
(
int32_t
*
)
malloc16
(
2
*
fp
->
ofdm_symbol_size
*
NR_MAX_NUM_PRS_SYMB
);
AssertFatal
(((
ue
->
prs_ch_estimates
[
i
]
!=
NULL
)
||
(
ue
->
prs_ch_estimates_time
[
i
]
!=
NULL
)),
"NR UE init: PRS channel estimates malloc failed %d
\n
"
,
i
);
}
...
...
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
View file @
d79a38bf
...
...
@@ -23,6 +23,9 @@
short
filt16a_l0
[
16
]
=
{
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_mm0
[
16
]
=
{
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_r0
[
16
]
=
{
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
20480
,
24576
,
28672
,
0
,
0
,
0
,
0
};
...
...
@@ -32,6 +35,15 @@ short filt16a_m0[16] = {
short
filt16a_l1
[
16
]
=
{
20480
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_mm1
[
16
]
=
{
0
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_ml1
[
16
]
=
{
-
4096
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_mr1
[
16
]
=
{
0
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
-
4096
,
-
8192
,
0
,
0
,
0
,
0
};
short
filt16a_r1
[
16
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
20480
,
24576
,
0
,
0
,
0
,
0
};
...
...
@@ -41,6 +53,15 @@ short filt16a_m1[16] = {
short
filt16a_l2
[
16
]
=
{
24576
,
20480
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_mm2
[
16
]
=
{
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_ml2
[
16
]
=
{
-
8192
,
-
4096
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_mr2
[
16
]
=
{
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
-
4096
,
0
,
0
,
0
,
0
};
short
filt16a_r2
[
16
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
20480
,
0
,
0
,
0
,
0
};
...
...
@@ -50,6 +71,12 @@ short filt16a_m2[16] = {
short
filt16a_l3
[
16
]
=
{
28672
,
24576
,
20480
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_mm3
[
16
]
=
{
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_ml3
[
16
]
=
{
-
12288
,
-
8192
,
-
4096
,
0
,
4096
,
8192
,
12288
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
};
short
filt16a_r3
[
16
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
0
,
0
,
0
,
0
};
...
...
@@ -148,7 +175,7 @@ short filt8_dcr0_h[8]= {
0
,
4096
,
8192
,
12288
,
16384
,
0
,
0
,
0
};
short
filt8_l1
[
8
]
=
{
24576
,
16384
,
0
,
0
,
0
,
0
,
0
,
0
};
24576
,
16384
,
8192
,
0
,
0
,
0
,
0
,
0
};
short
filt8_ml1
[
8
]
=
{
-
8192
,
0
,
8192
,
16384
,
8192
,
0
,
0
,
0
};
...
...
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
View file @
d79a38bf
...
...
@@ -28,24 +28,42 @@ extern short filt16a_r0[16];
extern
short
filt16a_m0
[
16
];
extern
short
filt16a_mm0
[
16
];
extern
short
filt16a_l1
[
16
];
extern
short
filt16a_r1
[
16
];
extern
short
filt16a_m1
[
16
];
extern
short
filt16a_mm1
[
16
];
extern
short
filt16a_mr1
[
16
];
extern
short
filt16a_ml1
[
16
];
extern
short
filt16a_l2
[
16
];
extern
short
filt16a_r2
[
16
];
extern
short
filt16a_m2
[
16
];
extern
short
filt16a_mm2
[
16
];
extern
short
filt16a_mr2
[
16
];
extern
short
filt16a_ml2
[
16
];
extern
short
filt16a_l3
[
16
];
extern
short
filt16a_r3
[
16
];
extern
short
filt16a_m3
[
16
];
extern
short
filt16a_mm3
[
16
];
extern
short
filt16a_ml3
[
16
];
extern
short
filt16a_l0_dc
[
16
];
extern
short
filt16a_r0_dc
[
16
];
...
...
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
d79a38bf
...
...
@@ -34,7 +34,7 @@
//#define DEBUG_PDSCH
//#define DEBUG_PDCCH
//#define DEBUG_CH
#define DEBUG_PRS_CHEST
//
#define DEBUG_PRS_CHEST
extern
short
nr_qpsk_mod_table
[
8
];
int
nr_prs_channel_estimation
(
PHY_VARS_NR_UE
*
ue
,
...
...
@@ -52,12 +52,14 @@ int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue,
uint32_t
**
nr_gold_prs
=
ue
->
nr_gold_prs
[
proc
->
nr_slot_rx
];
prs_data_t
*
prs_cfg
=
&
ue
->
prs_cfg
;
int16_t
*
prs_chest
,
ch
[
2
]
=
{
0
},
*
rxF
,
*
pil
,
*
fl
,
*
fm
,
*
fr
,
mod_prs
[
NR_MAX_PRS_LENGTH
<<
1
];
int16_t
k_prime
=
0
,
k
=
0
;
int16_t
*
prs_chest
,
ch
[
2
]
=
{
0
},
*
rxF
,
*
pil
,
*
fl
,
*
fm
,
*
fmm
,
*
fml
,
*
fmr
,
*
fr
,
mod_prs
[
NR_MAX_PRS_LENGTH
<<
1
];
int16_t
k_prime
=
0
,
k
=
0
,
re_offset
;
uint8_t
idx
=
prs_cfg
->
NPRSID
;
uint8_t
rxAnt
=
0
;
// ant 0 rxdataF for now
int16_t
*
ch_intrp
=
(
int16_t
*
)
malloc16
(
frame_params
->
ofdm_symbol_size
*
2
*
sizeof
(
int16_t
));
AssertFatal
(
ch_intrp
!=
NULL
,
"nr_prs_channel_estimation: channel estimate buffer initialization failed!!"
);
int16_t
*
ch_init
=
ch_intrp
;
printf
(
"Inside nr_prs_channel_estimation proc->thread_id %d, proc->nr_slot_rx %d
\n
"
,
proc
->
thread_id
,
proc
->
nr_slot_rx
);
for
(
int
l
=
prs_cfg
->
SymbolStart
;
l
<
prs_cfg
->
SymbolStart
+
prs_cfg
->
NumPRSSymbols
;
l
++
)
{
int
symInd
=
l
-
prs_cfg
->
SymbolStart
;
...
...
@@ -74,29 +76,159 @@ int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue,
k_prime
=
k_prime_table
[
3
][
symInd
];
}
printf
(
"PRS config l %d k_prime %d:
\n
prs_cfg->SymbolStart %d
\n
prs_cfg->NumPRSSymbols %d
\n
prs_cfg->NumRB %d
\n
prs_cfg->CombSize %d
\n
"
,
l
,
k_prime
,
prs_cfg
->
SymbolStart
,
prs_cfg
->
NumPRSSymbols
,
prs_cfg
->
NumRB
,
prs_cfg
->
CombSize
);
//TODO currently supported only comb_size 2 and 4
//re_offset
k
=
re_offset
=
(
prs_cfg
->
REOffset
+
k_prime
)
%
prs_cfg
->
CombSize
+
frame_params
->
first_carrier_offset
;
printf
(
"PRS config l %d k_prime %d, re_offset %d :
\n
prs_cfg->SymbolStart %d
\n
prs_cfg->NumPRSSymbols %d
\n
prs_cfg->NumRB %d
\n
prs_cfg->CombSize %d
\n
"
,
l
,
k_prime
,
re_offset
,
prs_cfg
->
SymbolStart
,
prs_cfg
->
NumPRSSymbols
,
prs_cfg
->
NumRB
,
prs_cfg
->
CombSize
);
// Pilots generation and modulation
for
(
int
m
=
0
;
m
<
(
12
/
prs_cfg
->
CombSize
)
*
prs_cfg
->
NumRB
;
m
++
)
{
idx
=
(((
nr_gold_prs
[
l
][(
m
<<
1
)
>>
5
])
>>
((
m
<<
1
)
&
0x1f
))
&
3
);
mod_prs
[
m
<<
1
]
=
nr_qpsk_mod_table
[
idx
<<
1
];
mod_prs
[(
m
<<
1
)
+
1
]
=
nr_qpsk_mod_table
[(
idx
<<
1
)
+
1
];
}
// Channel estimation and interpolation
pil
=
(
int16_t
*
)
&
mod_prs
[
0
];
rxF
=
(
int16_t
*
)
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
prs_chest
=
(
int16_t
*
)
&
ue
->
prs_ch_estimates
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
];
memset
(
prs_chest
,
0
,
4
*
(
ue
->
frame_parms
.
ofdm_symbol_size
));
memset
(
ch_intrp
,
0
,
4
*
(
ue
->
frame_parms
.
ofdm_symbol_size
));
if
(
prs_cfg
->
CombSize
==
2
)
{
// Choose the interpolation filters
switch
(
k_prime
)
{
case
0
:
fl
=
filt8_l0
;
fml
=
filt8_m0
;
fmm
=
filt8_mm0
;
fmr
=
filt8_mr0
;
fm
=
filt8_m0
;
fr
=
filt8_r0
;
break
;
case
1
:
fl
=
filt8_l1
;
fmm
=
filt8_mm1
;
fml
=
filt8_ml1
;
fmr
=
fmm
;
fm
=
filt8_m1
;
fr
=
filt8_r1
;
break
;
default:
printf
(
"nr=prs channel_estimation: k_prime=%d -> ERROR
\n
"
,
k_prime
);
return
(
-
1
);
break
;
}
//Start pilot
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
rxF
[
0
]
*
pil
[
0
]
+
(
int32_t
)
rxF
[
1
]
*
pil
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
rxF
[
1
]
*
pil
[
0
]
-
(
int32_t
)
rxF
[
0
]
*
pil
[
1
])
>>
15
);
multadd_real_vector_complex_scalar
(
fl
,
ch
,
ch_intrp
,
8
);
pil
+=
2
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
//Middle pilots
for
(
int
pIdx
=
1
;
pIdx
<
prs_cfg
->
NumRB
*
(
12
/
prs_cfg
->
CombSize
)
-
1
;
pIdx
+=
2
)
{
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
rxF
[
0
]
*
pil
[
0
]
+
(
int32_t
)
rxF
[
1
]
*
pil
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
rxF
[
1
]
*
pil
[
0
]
-
(
int32_t
)
rxF
[
0
]
*
pil
[
1
])
>>
15
);
if
(
pIdx
==
1
)
// 2nd pilot
{
multadd_real_vector_complex_scalar
(
fml
,
ch
,
ch_intrp
,
8
);
}
else
{
multadd_real_vector_complex_scalar
(
fm
,
ch
,
ch_intrp
,
8
);
}
pil
+=
2
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
rxF
[
0
]
*
pil
[
0
]
+
(
int32_t
)
rxF
[
1
]
*
pil
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
rxF
[
1
]
*
pil
[
0
]
-
(
int32_t
)
rxF
[
0
]
*
pil
[
1
])
>>
15
);
if
(
pIdx
==
(
prs_cfg
->
NumRB
*
(
12
/
prs_cfg
->
CombSize
)
-
3
))
// 2nd last pilot
{
multadd_real_vector_complex_scalar
(
fmr
,
ch
,
ch_intrp
,
8
);
}
else
{
multadd_real_vector_complex_scalar
(
fmm
,
ch
,
ch_intrp
,
8
);
}
pil
+=
2
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
ch_intrp
+=
8
;
}
//End pilot
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
rxF
[
0
]
*
pil
[
0
]
+
(
int32_t
)
rxF
[
1
]
*
pil
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
rxF
[
1
]
*
pil
[
0
]
-
(
int32_t
)
rxF
[
0
]
*
pil
[
1
])
>>
15
);
multadd_real_vector_complex_scalar
(
fr
,
ch
,
ch_intrp
,
8
);
}
else
if
(
prs_cfg
->
CombSize
==
4
)
{
// Choose the interpolation filters
switch
(
k_prime
)
{
case
0
:
fl
=
filt16a_l0
;
fml
=
filt16a_mm0
;
fmm
=
filt16a_mm0
;
fmr
=
filt16a_m0
;
fm
=
filt16a_m0
;
fr
=
filt16a_r0
;
break
;
case
1
:
fl
=
filt16a_l1
;
fml
=
filt16a_ml1
;
fmm
=
filt16a_mm1
;
fmr
=
filt16a_mr1
;
fm
=
filt16a_m1
;
fr
=
filt16a_r1
;
break
;
case
2
:
fl
=
filt16a_l2
;
fml
=
filt16a_ml2
;
fmm
=
filt16a_mm2
;
fmr
=
filt16a_mr2
;
fm
=
filt16a_m2
;
fr
=
filt16a_r2
;
break
;
case
3
:
fl
=
filt16a_l3
;
fml
=
filt16a_ml3
;
fmm
=
filt16a_mm3
;
fmr
=
filt16a_mm3
;
fm
=
filt16a_m3
;
fr
=
filt16a_r3
;
break
;
...
...
@@ -107,73 +239,129 @@ int nr_prs_channel_estimation(PHY_VARS_NR_UE *ue,
break
;
}
//re_offset
k
=
(
prs_cfg
->
REOffset
+
k_prime
)
%
prs_cfg
->
CombSize
+
frame_params
->
first_carrier_offset
;
//Start pilot
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
rxF
[
0
]
*
pil
[
0
]
+
(
int32_t
)
rxF
[
1
]
*
pil
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
rxF
[
1
]
*
pil
[
0
]
-
(
int32_t
)
rxF
[
0
]
*
pil
[
1
])
>>
15
);
// Pilots generation and modulation
for
(
int
m
=
0
;
m
<
(
12
/
prs_cfg
->
CombSize
)
*
prs_cfg
->
NumRB
;
m
++
)
{
idx
=
(((
nr_gold_prs
[
l
][(
m
<<
1
)
>>
5
])
>>
((
m
<<
1
)
&
0x1f
))
&
3
);
mod_prs
[
m
<<
1
]
=
nr_qpsk_mod_table
[
idx
<<
1
];
mod_prs
[(
m
<<
1
)
+
1
]
=
nr_qpsk_mod_table
[(
idx
<<
1
)
+
1
];
}
multadd_real_vector_complex_scalar
(
fl
,
ch
,
ch_intrp
,
16
);
pil
=
(
int16_t
*
)
&
mod_prs
[
0
];
pil
+=
2
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
prs_chest
=
(
int16_t
*
)
&
ue
->
prs_ch_estimates
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
];
memset
(
prs_chest
,
0
,
4
*
(
ue
->
frame_parms
.
ofdm_symbol_size
));
for
(
int
pIdx
=
0
;
pIdx
<
prs_cfg
->
NumRB
*
(
12
/
prs_cfg
->
CombSize
);
pIdx
+=
3
)
{
//pilot 0
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
rxF
[
0
]
*
pil
[
0
]
+
(
int32_t
)
rxF
[
1
]
*
pil
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
rxF
[
1
]
*
pil
[
0
]
-
(
int32_t
)
rxF
[
0
]
*
pil
[
1
])
>>
15
);
#ifdef DEBUG_PRS_CHEST
printf
(
"pilIdx %d at k %d of l %d reIdx %d rxF %d %d ch[0] %d ch[1] %d
\n
"
,
pIdx
,
k
,
l
,
(
l
*
frame_params
->
ofdm_symbol_size
+
k
),
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fl
,
multadd_real_vector_complex_scalar
(
fml
,
ch
,
prs_chest
,
ch_intrp
,
16
);
pil
+=
2
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
ch_intrp
+=
8
;
//pilot 1
//Middle pilots
for
(
int
pIdx
=
2
;
pIdx
<
prs_cfg
->
NumRB
*
(
12
/
prs_cfg
->
CombSize
)
-
2
;
pIdx
++
)
{
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
rxF
[
0
]
*
pil
[
0
]
+
(
int32_t
)
rxF
[
1
]
*
pil
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
rxF
[
1
]
*
pil
[
0
]
-
(
int32_t
)
rxF
[
0
]
*
pil
[
1
])
>>
15
);
multadd_real_vector_complex_scalar
(
f
m
,
multadd_real_vector_complex_scalar
(
fm
m
,
ch
,
prs_chest
,
ch_intrp
,
16
);
pil
+=
2
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
ch_intrp
+=
8
;
}
//
pilot 2
//
End pilot
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
rxF
[
0
]
*
pil
[
0
]
+
(
int32_t
)
rxF
[
1
]
*
pil
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
rxF
[
1
]
*
pil
[
0
]
-
(
int32_t
)
rxF
[
0
]
*
pil
[
1
])
>>
15
);
multadd_real_vector_complex_scalar
(
fr
,
multadd_real_vector_complex_scalar
(
f
m
r
,
ch
,
prs_chest
,
ch_intrp
,
16
);
pil
+=
2
;
k
=
(
k
+
prs_cfg
->
CombSize
)
%
frame_params
->
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
for
(
int
re
=
0
;
re
<
12
;
re
++
)
printf
(
"prs_ch[%d] %d %d
\n
"
,
re
,
prs_chest
[
re
<<
1
],
prs_chest
[(
re
<<
1
)
+
1
]);
prs_chest
+=
24
;
}
//for m
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
rxF
[
0
]
*
pil
[
0
]
+
(
int32_t
)
rxF
[
1
]
*
pil
[
1
])
>>
15
);
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
rxF
[
1
]
*
pil
[
0
]
-
(
int32_t
)
rxF
[
0
]
*
pil
[
1
])
>>
15
);
multadd_real_vector_complex_scalar
(
fr
,
ch
,
ch_intrp
,
16
);
}
ch_intrp
=
ch_init
;
for
(
int
re
=
0
;
re
<
prs_cfg
->
NumRB
*
12
;
re
++
)
{
prs_chest
[
re_offset
]
=
ch_intrp
[
re
<<
1
];
prs_chest
[
re_offset
+
1
]
=
ch_intrp
[(
re
<<
1
)
+
1
];
printf
(
"prs_ch[%d] %d %d
\n
"
,
re_offset
,
ch_intrp
[
re
<<
1
],
ch_intrp
[(
re
<<
1
)
+
1
]);
re_offset
=
(
re_offset
+
1
)
%
frame_params
->
ofdm_symbol_size
;
}
// Time domain IMPULSE response
idft_size_idx_t
idftsizeidx
;
switch
(
frame_params
->
ofdm_symbol_size
)
{
case
128
:
idftsizeidx
=
IDFT_128
;
break
;
case
256
:
idftsizeidx
=
IDFT_256
;
break
;
case
512
:
idftsizeidx
=
IDFT_512
;
break
;
case
1024
:
idftsizeidx
=
IDFT_1024
;
break
;
case
1536
:
idftsizeidx
=
IDFT_1536
;
break
;
case
2048
:
idftsizeidx
=
IDFT_2048
;
break
;
case
3072
:
idftsizeidx
=
IDFT_3072
;
break
;
case
4096
:
idftsizeidx
=
IDFT_4096
;
break
;
default:
printf
(
"unsupported ofdm symbol size
\n
"
);
assert
(
0
);
}
idft
(
idftsizeidx
,
(
int16_t
*
)
&
ue
->
prs_ch_estimates
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
],
(
int16_t
*
)
&
ue
->
prs_ch_estimates_time
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
],
1
);
}
//for l
LOG_M
(
"prsEst.m"
,
"prs_chest"
,
&
ue
->
prs_ch_estimates
[
rxAnt
][
prs_cfg
->
SymbolStart
*
frame_params
->
ofdm_symbol_size
],
prs_cfg
->
NumRB
*
12
,
1
,
1
);
LOG_M
(
"prsEst.m"
,
"prs_chest"
,
&
ue
->
prs_ch_estimates
[
rxAnt
][
prs_cfg
->
SymbolStart
*
frame_params
->
ofdm_symbol_size
],
frame_params
->
ofdm_symbol_size
,
1
,
1
);
LOG_M
(
"prsEst_time.m"
,
"prs_chest_time"
,
&
ue
->
prs_ch_estimates_time
[
rxAnt
][
prs_cfg
->
SymbolStart
*
frame_params
->
ofdm_symbol_size
],
frame_params
->
ofdm_symbol_size
,
1
,
1
);
return
(
0
);
}
...
...
@@ -538,10 +726,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
ch
,
dl_ch
,
16
);
#ifdef DEBUG_CH
for
(
int
re
=
0
;
re
<
12
;
re
++
)
printf
(
"dl_ch[%d] %d %d
\n
"
,
re
,
dl_ch
[
re
<<
1
],
dl_ch
[(
re
<<
1
)
+
1
]);
#endif
pil
+=
2
;
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
...
...
openair1/PHY/defs_nr_UE.h
View file @
d79a38bf
...
...
@@ -824,6 +824,8 @@ typedef struct {
NR_UE_DLSCH_t
*
dlsch_p
[
NUMBER_OF_CONNECTED_gNB_MAX
];
NR_UE_DLSCH_t
*
dlsch_MCH
[
NUMBER_OF_CONNECTED_gNB_MAX
];
prs_data_t
prs_cfg
;
int32_t
**
prs_ch_estimates
;
int32_t
**
prs_ch_estimates_time
;
//Paging parameters
uint32_t
IMSImod1024
;
...
...
@@ -846,7 +848,6 @@ typedef struct {
#endif
int32_t
**
prs_ch_estimates
;
/// PBCH DMRS sequence
uint32_t
nr_gold_pbch
[
2
][
64
][
NR_PBCH_DMRS_LENGTH_DWORD
];
...
...
openair1/SCHED_NR/phy_procedures_nr_gNB.c
View file @
d79a38bf
...
...
@@ -105,7 +105,7 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
prs_data
.
PRSResourceSetPeriod
[
0
]
=
40
;
// PRS resource slot period
prs_data
.
PRSResourceSetPeriod
[
1
]
=
0
;
// resource slot offset
prs_data
.
SymbolStart
=
7
;
prs_data
.
NumPRSSymbols
=
6
;
prs_data
.
NumPRSSymbols
=
4
;
prs_data
.
NumRB
=
fp
->
N_RB_DL
;
prs_data
.
RBOffset
=
0
;
prs_data
.
CombSize
=
4
;
...
...
openair1/SIMULATION/NR_PHY/pbchsim.c
View file @
d79a38bf
...
...
@@ -739,7 +739,7 @@ int main(int argc, char **argv)
UE
->
prs_cfg
.
PRSResourceSetPeriod
[
0
]
=
40
;
// PRS resource slot period
UE
->
prs_cfg
.
PRSResourceSetPeriod
[
1
]
=
0
;
// resource slot offset
UE
->
prs_cfg
.
SymbolStart
=
7
;
UE
->
prs_cfg
.
NumPRSSymbols
=
6
;
UE
->
prs_cfg
.
NumPRSSymbols
=
4
;
UE
->
prs_cfg
.
NumRB
=
273
;
UE
->
prs_cfg
.
RBOffset
=
0
;
UE
->
prs_cfg
.
CombSize
=
4
;
...
...
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