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
lizhongxiao
OpenXG-RAN
Commits
e56f2843
Commit
e56f2843
authored
Mar 14, 2022
by
rmagueta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Perform the channel interpolation for CSI-RS row 1
parent
670f979f
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
52 additions
and
2 deletions
+52
-2
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+1
-1
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
+14
-1
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
+6
-0
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
+31
-0
No files found.
openair1/PHY/INIT/nr_init_ue.c
View file @
e56f2843
...
@@ -373,7 +373,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
...
@@ -373,7 +373,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB)
ue
->
nr_csi_rs_info
->
csi_rs_generated_signal
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_generated_signal
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_received_signal
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_received_signal
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_ls_estimated_channel
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_ls_estimated_channel
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_estimated_channel_freq
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
samples_per_frame_wCP
*
sizeof
(
int32_t
));
ue
->
nr_csi_rs_info
->
csi_rs_estimated_channel_freq
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
ofdm_symbol_size
*
sizeof
(
int32_t
));
}
}
ue
->
nr_srs_info
=
(
nr_srs_info_t
*
)
malloc16_clear
(
sizeof
(
nr_srs_info_t
));
ue
->
nr_srs_info
=
(
nr_srs_info_t
*
)
malloc16_clear
(
sizeof
(
nr_srs_info_t
));
...
...
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
View file @
e56f2843
...
@@ -283,3 +283,16 @@ short filt16_middle4[16] = {
...
@@ -283,3 +283,16 @@ short filt16_middle4[16] = {
short
filt16_end
[
16
]
=
{
short
filt16_end
[
16
]
=
{
4096
,
8192
,
8192
,
8192
,
12288
,
16384
,
16384
,
16384
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
4096
,
8192
,
8192
,
8192
,
12288
,
16384
,
16384
,
16384
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
// CSI-RS
short
filt24_start
[
24
]
=
{
12288
,
11605
,
10923
,
10240
,
9557
,
8875
,
8192
,
7509
,
6827
,
6144
,
5461
,
4779
,
4096
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
short
filt24_end
[
24
]
=
{
4096
,
4779
,
5461
,
6144
,
6827
,
7509
,
8192
,
8875
,
9557
,
10240
,
10923
,
11605
,
16384
,
16384
,
16384
,
16384
,
16384
,
16384
,
16384
,
16384
,
16384
,
16384
,
16384
,
16384
};
short
filt24_middle
[
24
]
=
{
4096
,
4779
,
5461
,
6144
,
6827
,
7509
,
8192
,
8875
,
9557
,
10240
,
10923
,
11605
,
12288
,
11605
,
10923
,
10240
,
9557
,
8875
,
8192
,
7509
,
6827
,
6144
,
5461
,
4779
};
\ No newline at end of file
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
View file @
e56f2843
...
@@ -193,4 +193,10 @@ extern short filt8_end[8];
...
@@ -193,4 +193,10 @@ extern short filt8_end[8];
extern
short
filt16_start
[
16
];
extern
short
filt16_start
[
16
];
extern
short
filt16_middle4
[
16
];
extern
short
filt16_middle4
[
16
];
extern
short
filt16_end
[
16
];
extern
short
filt16_end
[
16
];
/*CSI-RS*/
extern
short
filt24_start
[
24
];
extern
short
filt24_end
[
24
];
extern
short
filt24_middle
[
24
];
#endif
#endif
openair1/PHY/NR_UE_TRANSPORT/csi_rx.c
View file @
e56f2843
...
@@ -37,6 +37,7 @@
...
@@ -37,6 +37,7 @@
#include "PHY/phy_extern_nr_ue.h"
#include "PHY/phy_extern_nr_ue.h"
#include "common/utils/nr/nr_common.h"
#include "common/utils/nr/nr_common.h"
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
#include "PHY/NR_UE_ESTIMATION/filt16a_32.h"
//#define NR_CSIRS_DEBUG
//#define NR_CSIRS_DEBUG
...
@@ -177,9 +178,12 @@ int nr_csi_rs_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -177,9 +178,12 @@ int nr_csi_rs_channel_estimation(PHY_VARS_NR_UE *ue,
/// Channel interpolation
/// Channel interpolation
int16_t
ls_estimated
[
2
];
int16_t
ls_estimated
[
2
];
memset
(
csi_rs_estimated_channel_freq
[
ant
],
0
,
frame_parms
->
ofdm_symbol_size
*
sizeof
(
int32_t
));
for
(
int
k_id
=
0
;
k_id
<
nr_csi_rs_info
->
k_list_length
;
k_id
++
)
{
for
(
int
k_id
=
0
;
k_id
<
nr_csi_rs_info
->
k_list_length
;
k_id
++
)
{
uint16_t
k
=
nr_csi_rs_info
->
map_list
[
k_id
];
uint16_t
k
=
nr_csi_rs_info
->
map_list
[
k_id
];
int16_t
*
csi_rs_estimated_channel16
=
(
int16_t
*
)
&
csi_rs_estimated_channel_freq
[
ant
][
k
];
// There are many possibilities to allocate the CSI-RS in time, which would take the implementation of many filters.
// There are many possibilities to allocate the CSI-RS in time, which would take the implementation of many filters.
// In this approach, the LS for each symbol would be different, and it would be necessary to interpolate each symbol
// In this approach, the LS for each symbol would be different, and it would be necessary to interpolate each symbol
...
@@ -202,9 +206,36 @@ int nr_csi_rs_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -202,9 +206,36 @@ int nr_csi_rs_channel_estimation(PHY_VARS_NR_UE *ue,
}
}
ls_estimated
[
0
]
=
(
int16_t
)
(
sum_csi_rs_ls_real
/
Nsymb
);
ls_estimated
[
0
]
=
(
int16_t
)
(
sum_csi_rs_ls_real
/
Nsymb
);
ls_estimated
[
1
]
=
(
int16_t
)
(
sum_csi_rs_ls_imag
/
Nsymb
);
ls_estimated
[
1
]
=
(
int16_t
)
(
sum_csi_rs_ls_imag
/
Nsymb
);
if
(
(
k_id
==
0
)
||
(
k_id
>
0
&&
k
<
nr_csi_rs_info
->
map_list
[
k_id
-
1
])
)
{
// First occupied subcarrier case or Start of OFDM symbol case
multadd_real_vector_complex_scalar
(
filt24_start
,
ls_estimated
,
csi_rs_estimated_channel16
,
24
);
}
else
if
(
(
k_id
<
nr_csi_rs_info
->
k_list_length
-
1
&&
nr_csi_rs_info
->
map_list
[
k_id
+
1
]
<
k
)
||
(
k_id
==
nr_csi_rs_info
->
k_list_length
-
1
)
)
{
// End of OFDM symbol case or Last occupied subcarrier case
multadd_real_vector_complex_scalar
(
filt24_end
,
ls_estimated
,
csi_rs_estimated_channel16
-
3
*
sizeof
(
uint64_t
),
24
);
}
else
{
// Middle case
multadd_real_vector_complex_scalar
(
filt24_middle
,
ls_estimated
,
csi_rs_estimated_channel16
-
3
*
sizeof
(
uint64_t
),
24
);
}
}
}
}
#ifdef NR_CSIRS_DEBUG
uint64_t
symbol_offset
=
csirs_config_pdu
->
symb_l0
*
frame_parms
->
ofdm_symbol_size
;
int16_t
*
csi_rs_ls_estimated_channel
=
(
int16_t
*
)
&
nr_csi_rs_info
->
csi_rs_ls_estimated_channel
[
ant
][
symbol_offset
];
int16_t
*
csi_rs_estimated_channel16
=
(
int16_t
*
)
&
nr_csi_rs_info
->
csi_rs_estimated_channel_freq
[
ant
][
0
];
for
(
int
k
=
0
;
k
<
frame_parms
->
ofdm_symbol_size
;
k
++
)
{
LOG_I
(
NR_PHY
,
"(%4d) |
\t
ls (%4d,%4d)
\t
int (%4d,%4d)
\n
"
,
k
,
csi_rs_ls_estimated_channel
[
k
<<
1
],
csi_rs_ls_estimated_channel
[(
k
<<
1
)
+
1
],
csi_rs_estimated_channel16
[
k
<<
1
],
csi_rs_estimated_channel16
[(
k
<<
1
)
+
1
]);
}
#endif
}
return
0
;
return
0
;
}
}
...
...
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