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
spbro
OpenXG-RAN
Commits
d14d3674
Commit
d14d3674
authored
Jan 10, 2022
by
rmagueta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SRS channel interpolation improved for comb_size 2
parent
af56207f
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
42 additions
and
23 deletions
+42
-23
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+23
-23
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
+13
-0
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
+6
-0
No files found.
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
View file @
d14d3674
...
...
@@ -1107,7 +1107,6 @@ int nr_srs_channel_estimation(PHY_VARS_gNB *gNB,
uint16_t
noise_real
[
frame_parms
->
nb_antennas_rx
*
nr_srs_info
->
sc_list_length
];
uint16_t
noise_imag
[
frame_parms
->
nb_antennas_rx
*
nr_srs_info
->
sc_list_length
];
int16_t
prev_ls_estimated
[
2
];
int16_t
ls_estimated
[
2
];
for
(
int
ant
=
0
;
ant
<
frame_parms
->
nb_antennas_rx
;
ant
++
)
{
...
...
@@ -1131,27 +1130,25 @@ int nr_srs_channel_estimation(PHY_VARS_gNB *gNB,
ls_estimated
[
1
]
=
(
int16_t
)(((
int32_t
)
generated_real
*
received_imag
-
(
int32_t
)
generated_imag
*
received_real
)
>>
nr_srs_info
->
srs_generated_signal_bits
);
srs_ls_estimated_channel
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]]
=
ls_estimated
[
0
]
+
(((
int32_t
)
ls_estimated
[
1
]
<<
16
)
&
0xFFFF0000
);
if
(
sc_idx
>
0
&&
nr_srs_info
->
sc_list
[
sc_idx
]
>
nr_srs_info
->
sc_list
[
sc_idx
-
1
])
{
ls_estimated
[
0
]
=
(
ls_estimated
[
0
]
+
prev_ls_estimated
[
0
])
>>
1
;
ls_estimated
[
1
]
=
(
ls_estimated
[
1
]
+
prev_ls_estimated
[
1
])
>>
1
;
}
prev_ls_estimated
[
0
]
=
(
int16_t
)(((
int32_t
)
generated_real
*
received_real
+
(
int32_t
)
generated_imag
*
received_imag
)
>>
nr_srs_info
->
srs_generated_signal_bits
);
prev_ls_estimated
[
1
]
=
(
int16_t
)(((
int32_t
)
generated_real
*
received_imag
-
(
int32_t
)
generated_imag
*
received_real
)
>>
nr_srs_info
->
srs_generated_signal_bits
);
// Channel interpolation
if
(
srs_pdu
->
comb_size
==
0
)
{
if
(
sc_idx
==
0
)
{
multadd_real_vector_complex_scalar
(
filt8_l0
,
ls_estimated
,
srs_estimated_channel16
,
8
);
}
else
if
(
nr_srs_info
->
sc_list
[
sc_idx
]
<
nr_srs_info
->
sc_list
[
sc_idx
-
1
])
{
if
(
sc_idx
==
0
)
{
// First subcarrier case
// filt8_start is {12288,8192,4096,0,0,0,0,0}
multadd_real_vector_complex_scalar
(
filt8_start
,
ls_estimated
,
srs_estimated_channel16
,
8
);
}
else
if
(
nr_srs_info
->
sc_list
[
sc_idx
]
<
nr_srs_info
->
sc_list
[
sc_idx
-
1
])
{
// Start of OFDM symbol case
// filt8_start is {12288,8192,4096,0,0,0,0,0}
srs_estimated_channel16
=
(
int16_t
*
)
&
srs_estimated_channel_freq
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
+
2
]]
-
8
;
multadd_real_vector_complex_scalar
(
filt8_l0
,
ls_estimated
,
srs_estimated_channel16
,
8
);
}
else
if
((
sc_idx
<
(
nr_srs_info
->
sc_list_length
-
1
)
&&
nr_srs_info
->
sc_list
[
sc_idx
+
1
]
<
nr_srs_info
->
sc_list
[
sc_idx
])
||
(
sc_idx
==
(
nr_srs_info
->
sc_list_length
-
1
)))
{
multadd_real_vector_complex_scalar
(
filt8_m0
,
ls_estimated
,
srs_estimated_channel16
,
8
);
srs_estimated_channel_freq
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]
+
1
]
=
srs_estimated_channel_freq
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]];
}
else
if
(
sc_idx
%
2
==
1
)
{
multadd_real_vector_complex_scalar
(
filt8_m0
,
ls_estimated
,
srs_estimated_channel16
,
8
);
}
else
if
(
sc_idx
%
2
==
0
)
{
multadd_real_vector_complex_scalar
(
filt8_mm0
,
ls_estimated
,
srs_estimated_channel16
,
8
);
multadd_real_vector_complex_scalar
(
filt8_start
,
ls_estimated
,
srs_estimated_channel16
,
8
);
}
else
if
((
sc_idx
<
(
nr_srs_info
->
sc_list_length
-
1
)
&&
nr_srs_info
->
sc_list
[
sc_idx
+
1
]
<
nr_srs_info
->
sc_list
[
sc_idx
])
||
(
sc_idx
==
(
nr_srs_info
->
sc_list_length
-
1
)))
{
// End of OFDM symbol or last subcarrier cases
// filt8_end is {4096,8192,12288,16384,0,0,0,0}
multadd_real_vector_complex_scalar
(
filt8_end
,
ls_estimated
,
srs_estimated_channel16
,
8
);
}
else
if
(
sc_idx
%
2
==
1
)
{
// 1st middle case
// filt8_middle2 is {4096,8192,8192,8192,4096,0,0,0}
multadd_real_vector_complex_scalar
(
filt8_middle2
,
ls_estimated
,
srs_estimated_channel16
,
8
);
}
else
if
(
sc_idx
%
2
==
0
)
{
// 2nd middle case
// filt8_middle4 is {0,0,4096,8192,8192,8192,4096,0}
multadd_real_vector_complex_scalar
(
filt8_middle4
,
ls_estimated
,
srs_estimated_channel16
,
8
);
srs_estimated_channel16
=
(
int16_t
*
)
&
srs_estimated_channel_freq
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]];
}
}
else
{
...
...
@@ -1173,9 +1170,6 @@ int nr_srs_channel_estimation(PHY_VARS_gNB *gNB,
}
}
noise_real
[
ant
*
nr_srs_info
->
sc_list_length
+
sc_idx
]
=
abs
(
prev_ls_estimated
[
0
]
-
(
int16_t
)(
srs_estimated_channel_freq
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]]
&
0xFFFF
));
noise_imag
[
ant
*
nr_srs_info
->
sc_list_length
+
sc_idx
]
=
abs
(
prev_ls_estimated
[
1
]
-
(
int16_t
)((
srs_estimated_channel_freq
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]]
>>
16
)
&
0xFFFF
));
#ifdef SRS_DEBUG
uint64_t
subcarrier_offset
=
frame_parms
->
first_carrier_offset
+
srs_pdu
->
bwp_start
*
12
;
int
subcarrier_log
=
nr_srs_info
->
sc_list
[
sc_idx
]
-
subcarrier_offset
;
...
...
@@ -1193,10 +1187,16 @@ int nr_srs_channel_estimation(PHY_VARS_gNB *gNB,
subcarrier_log
,
generated_real
,
generated_imag
,
received_real
,
received_imag
,
prev_ls_estimated
[
0
],
prev_
ls_estimated
[
1
]);
ls_estimated
[
0
],
ls_estimated
[
1
]);
#endif
}
// Compute noise
for
(
int
sc_idx
=
0
;
sc_idx
<
nr_srs_info
->
sc_list_length
;
sc_idx
++
)
{
noise_real
[
ant
*
nr_srs_info
->
sc_list_length
+
sc_idx
]
=
abs
((
int16_t
)((
srs_ls_estimated_channel
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]]
-
srs_estimated_channel_freq
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]])
&
0xFFFF
));
noise_imag
[
ant
*
nr_srs_info
->
sc_list_length
+
sc_idx
]
=
abs
((
int16_t
)(((
srs_ls_estimated_channel
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]]
-
srs_estimated_channel_freq
[
ant
][
nr_srs_info
->
sc_list
[
sc_idx
]])
>>
16
)
&
0xFFFF
));
}
// Convert to time domain
freq2time
(
gNB
->
frame_parms
.
ofdm_symbol_size
,
(
int16_t
*
)
srs_estimated_channel_freq
[
ant
],
...
...
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
View file @
d14d3674
...
...
@@ -260,3 +260,16 @@ short filt8_avlip5[8] = {
short
filt8_avlip6
[
8
]
=
{
13653
,
15019
,
16384
,
16384
,
16384
,
16384
,
16384
,
16384
};
// Comb size 2
short
filt8_start
[
8
]
=
{
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
,
0
};
short
filt8_middle2
[
8
]
=
{
4096
,
8192
,
8192
,
8192
,
4096
,
0
,
0
,
0
};
short
filt8_middle4
[
8
]
=
{
0
,
0
,
4096
,
8192
,
8192
,
8192
,
4096
,
0
};
short
filt8_end
[
8
]
=
{
4096
,
8192
,
12288
,
16384
,
0
,
0
,
0
,
0
};
\ No newline at end of file
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
View file @
d14d3674
...
...
@@ -182,4 +182,10 @@ extern short filt8_avlip4[8];
extern
short
filt8_avlip5
[
8
];
extern
short
filt8_avlip6
[
8
];
/*Comb size 2*/
extern
short
filt8_start
[
8
];
extern
short
filt8_middle2
[
8
];
extern
short
filt8_middle4
[
8
];
extern
short
filt8_end
[
8
];
#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