Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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 UE
Commits
5eb4716a
Commit
5eb4716a
authored
Nov 26, 2019
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/develop-nr' into develop-nr_cppcheck
parents
4ab2dd0c
9916aec4
Changes
18
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
306 additions
and
107 deletions
+306
-107
ci-scripts/Jenkinsfile-gitlab
ci-scripts/Jenkinsfile-gitlab
+21
-2
ci-scripts/buildOnVM.sh
ci-scripts/buildOnVM.sh
+5
-1
ci-scripts/main.py
ci-scripts/main.py
+2
-2
ci-scripts/oai-ci-vm-tool
ci-scripts/oai-ci-vm-tool
+1
-1
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+20
-17
common/utils/LOG/log.c
common/utils/LOG/log.c
+4
-0
executables/nr-uesoftmodem.c
executables/nr-uesoftmodem.c
+1
-1
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+84
-12
openair1/PHY/NR_REFSIG/dmrs_nr.h
openair1/PHY/NR_REFSIG/dmrs_nr.h
+1
-1
openair1/PHY/NR_REFSIG/nr_gold_ue.c
openair1/PHY/NR_REFSIG/nr_gold_ue.c
+1
-1
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
+37
-1
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
+24
-1
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+97
-46
openair1/PHY/NR_UE_TRANSPORT/dmrs_nr.c
openair1/PHY/NR_UE_TRANSPORT/dmrs_nr.c
+1
-1
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
+2
-2
openair1/PHY/defs_nr_UE.h
openair1/PHY/defs_nr_UE.h
+1
-1
openair1/SIMULATION/NR_PHY/dlsim.c
openair1/SIMULATION/NR_PHY/dlsim.c
+2
-10
targets/RT/USER/lte-ru.c
targets/RT/USER/lte-ru.c
+2
-7
No files found.
ci-scripts/Jenkinsfile-gitlab
View file @
5eb4716a
...
@@ -44,7 +44,7 @@ pipeline {
...
@@ -44,7 +44,7 @@ pipeline {
disableConcurrentBuilds
()
disableConcurrentBuilds
()
timestamps
()
timestamps
()
gitLabConnection
(
'OAI GitLab'
)
gitLabConnection
(
'OAI GitLab'
)
gitlabBuilds
(
builds:
[
"Build gNB-USRP"
,
"Build nr-UE-USRP"
,
"Build eNB-USRP"
,
"Build basic-sim"
,
"Build phy-sim"
,
"Build eNB-ethernet"
,
"Build UE-ethernet"
,
"Analysis with cppcheck"
,
"Test phy-sim"
,
"Test basic-sim"
,
"Test L2-sim"
,
"Test-Mono-FDD-Band7"
,
"Test-Mono-TDD-Band40"
,
"Test-IF4p5-FDD-Band7"
,
"Test-IF4p5-TDD-Band40"
,
"Test-Mono-FDD-Band13"
,
"Test-Mono-FDD-Band13-X2-HO"
,
"Test-TDD-Band78-gNB-NR-UE"
])
gitlabBuilds
(
builds:
[
"Build gNB-USRP"
,
"Build nr-UE-USRP"
,
"Build eNB-USRP"
,
"Build basic-sim"
,
"Build phy-sim"
,
"Build eNB-ethernet"
,
"Build UE-ethernet"
,
"Analysis with cppcheck"
,
"Test phy-sim"
,
"Test basic-sim"
,
"Test L2-sim"
,
"Test-Mono-FDD-Band7"
,
"Test-Mono-TDD-Band40"
,
"Test-IF4p5-FDD-Band7"
,
"Test-IF4p5-TDD-Band40"
,
"Test-Mono-FDD-Band13"
,
"Test-
IF4p5-TDD-Band38-Multi-RRU"
,
"Test-
Mono-FDD-Band13-X2-HO"
,
"Test-TDD-Band78-gNB-NR-UE"
])
ansiColor
(
'xterm'
)
ansiColor
(
'xterm'
)
}
}
...
@@ -131,8 +131,8 @@ pipeline {
...
@@ -131,8 +131,8 @@ pipeline {
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.FlexRanRtcGitLabRepository_Credentials}"
,
usernameVariable:
'git_username'
,
passwordVariable:
'git_password'
]
[
$class
:
'UsernamePasswordMultiBinding'
,
credentialsId:
"${params.FlexRanRtcGitLabRepository_Credentials}"
,
usernameVariable:
'git_username'
,
passwordVariable:
'git_password'
]
])
{
])
{
sh
"git clone https://${git_username}:${git_password}@gitlab.eurecom.fr/flexran/flexran-rtc.git . > ../git_clone.log 2>&1"
sh
"git clone https://${git_username}:${git_password}@gitlab.eurecom.fr/flexran/flexran-rtc.git . > ../git_clone.log 2>&1"
sh
"git checkout develop >> ../git_clone.log 2>&1"
}
}
sh
"sed -i -e 's#add-apt-repository.*cleishm.*neo4j#add-apt-repository ppa:cleishm/neo4j -y#' -e 's#libneo4j-client-dev#libneo4j-client-dev -y#' tools/install_dependencies"
sh
"zip -r -qq flexran.zip ."
sh
"zip -r -qq flexran.zip ."
}
}
}
}
...
@@ -578,6 +578,25 @@ pipeline {
...
@@ -578,6 +578,25 @@ pipeline {
}
}
}
}
}
}
stage
(
"Test IF4p5 - TDD - Band 38 - B210 - MultiRRU"
)
{
steps
{
script
{
triggerSlaveJob
(
'eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210'
,
'Test-IF4p5-TDD-Band38-Multi-RRU'
)
}
}
post
{
always
{
script
{
finalizeSlaveJob
(
'eNB-CI-IF4p5-TDD-Band38-MultiRRU-B210'
)
}
}
failure
{
script
{
currentBuild
.
result
=
'FAILURE'
}
}
}
}
stage
(
"Test OAI UE - FDD - Band 20 - B200"
)
{
stage
(
"Test OAI UE - FDD - Band 20 - B200"
)
{
steps
{
steps
{
script
{
script
{
...
...
ci-scripts/buildOnVM.sh
View file @
5eb4716a
...
@@ -179,8 +179,12 @@ function build_on_vm {
...
@@ -179,8 +179,12 @@ function build_on_vm {
echo
"cp /home/ubuntu/zip-install.txt cmake_targets/log"
>>
$VM_CMDS
echo
"cp /home/ubuntu/zip-install.txt cmake_targets/log"
>>
$VM_CMDS
echo
"echo
\"
./tools/install_dependencies
\"
"
>>
$VM_CMDS
echo
"echo
\"
./tools/install_dependencies
\"
"
>>
$VM_CMDS
echo
"./tools/install_dependencies > cmake_targets/log/install-build.txt 2>&1"
>>
$VM_CMDS
echo
"./tools/install_dependencies > cmake_targets/log/install-build.txt 2>&1"
>>
$VM_CMDS
echo
"echo
\"
mkdir build
\"
"
>>
$VM_CMDS
echo
"mkdir build"
>>
$VM_CMDS
echo
"echo
\"
cd build
\"
"
>>
$VM_CMDS
echo
"cd build"
>>
$VM_CMDS
echo
"echo
\"
$BUILD_OPTIONS
\"
"
>>
$VM_CMDS
echo
"echo
\"
$BUILD_OPTIONS
\"
"
>>
$VM_CMDS
echo
"
$BUILD_OPTIONS
> cmake_targets/log/rt_controller.Rel15.txt 2>&1"
>>
$VM_CMDS
echo
"
$BUILD_OPTIONS
>
../
cmake_targets/log/rt_controller.Rel15.txt 2>&1"
>>
$VM_CMDS
fi
fi
if
[[
"
$VM_NAME
"
!=
*
"-cppcheck"
*
]]
&&
[[
"
$VM_NAME
"
!=
*
"-flexran-rtc"
*
]]
if
[[
"
$VM_NAME
"
!=
*
"-cppcheck"
*
]]
&&
[[
"
$VM_NAME
"
!=
*
"-flexran-rtc"
*
]]
then
then
...
...
ci-scripts/main.py
View file @
5eb4716a
...
@@ -379,7 +379,7 @@ class SSHConnection():
...
@@ -379,7 +379,7 @@ class SSHConnection():
self
.
air_interface
=
'lte'
self
.
air_interface
=
'lte'
self
.
command
(
'mkdir -p '
+
lSourcePath
,
'\$'
,
5
)
self
.
command
(
'mkdir -p '
+
lSourcePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
lSourcePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
lSourcePath
,
'\$'
,
5
)
self
.
command
(
'if [ ! -e .git ]; then stdbuf -o0 git clone '
+
self
.
ranRepository
+
' .; else stdbuf -o0 git fetch; fi'
,
'\$'
,
600
)
self
.
command
(
'if [ ! -e .git ]; then stdbuf -o0 git clone '
+
self
.
ranRepository
+
' .; else stdbuf -o0 git fetch
--prune
; fi'
,
'\$'
,
600
)
# Raphael: here add a check if git clone or git fetch went smoothly
# Raphael: here add a check if git clone or git fetch went smoothly
self
.
command
(
'git config user.email "jenkins@openairinterface.org"'
,
'\$'
,
5
)
self
.
command
(
'git config user.email "jenkins@openairinterface.org"'
,
'\$'
,
5
)
self
.
command
(
'git config user.name "OAI Jenkins"'
,
'\$'
,
5
)
self
.
command
(
'git config user.name "OAI Jenkins"'
,
'\$'
,
5
)
...
@@ -544,7 +544,7 @@ class SSHConnection():
...
@@ -544,7 +544,7 @@ class SSHConnection():
ue_prefix
=
''
ue_prefix
=
''
self
.
command
(
'mkdir -p '
+
self
.
UESourceCodePath
,
'\$'
,
5
)
self
.
command
(
'mkdir -p '
+
self
.
UESourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
UESourceCodePath
,
'\$'
,
5
)
self
.
command
(
'cd '
+
self
.
UESourceCodePath
,
'\$'
,
5
)
self
.
command
(
'if [ ! -e .git ]; then stdbuf -o0 git clone '
+
self
.
ranRepository
+
' .; else stdbuf -o0 git fetch; fi'
,
'\$'
,
600
)
self
.
command
(
'if [ ! -e .git ]; then stdbuf -o0 git clone '
+
self
.
ranRepository
+
' .; else stdbuf -o0 git fetch
--prune
; fi'
,
'\$'
,
600
)
# here add a check if git clone or git fetch went smoothly
# here add a check if git clone or git fetch went smoothly
self
.
command
(
'git config user.email "jenkins@openairinterface.org"'
,
'\$'
,
5
)
self
.
command
(
'git config user.email "jenkins@openairinterface.org"'
,
'\$'
,
5
)
self
.
command
(
'git config user.name "OAI Jenkins"'
,
'\$'
,
5
)
self
.
command
(
'git config user.name "OAI Jenkins"'
,
'\$'
,
5
)
...
...
ci-scripts/oai-ci-vm-tool
View file @
5eb4716a
...
@@ -222,7 +222,7 @@ function variant__v8__ue_ethernet {
...
@@ -222,7 +222,7 @@ function variant__v8__ue_ethernet {
function
variant__v10__flexran_rtc
{
function
variant__v10__flexran_rtc
{
ARCHIVES_LOC
=
flexran
ARCHIVES_LOC
=
flexran
NB_PATTERN_FILES
=
1
NB_PATTERN_FILES
=
1
BUILD_OPTIONS
=
"cmake . && make -j2"
BUILD_OPTIONS
=
"cmake .
.
&& make -j2"
VARIANT_INFO
=
"non-OSA"
VARIANT_INFO
=
"non-OSA"
}
}
...
...
cmake_targets/autotests/test_case_list.xml
View file @
5eb4716a
...
@@ -1084,33 +1084,32 @@
...
@@ -1084,33 +1084,32 @@
(Test3: 273 PRB),
(Test3: 273 PRB),
(Test4: 106 PRB 12 CSET-Offset),
(Test4: 106 PRB 12 CSET-Offset),
(Test5: 217 PRB 48 CSET-Offset),
(Test5: 217 PRB 48 CSET-Offset),
<!--
(Test6: 106 PRB 25 PDSCH-Offset),
(Test6: 106 PRB 25 PDSCH-Offset),
(Test7: 106 PRB 51 PDSCH-Offset),
(Test7: 106 PRB 51 PDSCH-Offset),
(Test8: 217 PRB 100 PDSCH-PRBs),
(Test8: 217 PRB 100 PDSCH-PRBs),
(Test9: 217 PRB 80 PDSCH-Offset),
(Test9: 217 PRB 80 PDSCH-Offset),
(Test10: 217 PRB 100 PDSCH-PRBs 80 PDSCH-Offset),
(Test10: 217 PRB 100 PDSCH-PRBs 80 PDSCH-Offset),
(Test6: 106 PRB 0 MCS),-->
(Test11: 106 PRBs 50 PDSCH-PRBs MCS Index 28
</desc>
(Test7: 273 PRB 28 MCS)
</desc>
<pre_compile_prog></pre_compile_prog>
<pre_compile_prog></pre_compile_prog>
<compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai
</compile_prog>
<compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai
</compile_prog>
<compile_prog_args>
--phy_simulators -c
</compile_prog_args>
<compile_prog_args>
--phy_simulators -c
</compile_prog_args>
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec_args></pre_exec_args>
<pre_exec_args></pre_exec_args>
<main_exec>
$OPENAIR_DIR/targets/bin/nr_dlsim.Rel15
</main_exec>
<main_exec>
$OPENAIR_DIR/targets/bin/nr_dlsim.Rel15
</main_exec>
<main_exec_args>
-n100 -R106
<main_exec_args>
-n100 -R106
-b106
-n100 -R217
-n100 -R217
-b217
-n100 -R273
-n100 -R273
-b273
-n100 -R106 -o12
-n100 -R106 -o12
-n100 -R217 -o48
-n100 -R217 -o48
<!--
-n100 -R106 -a25
-n100 -R106 -a25
-n100 -R106 -a51
-n100 -R106 -a51
-n100 -R217 -b100
-n100 -R217 -b100
-n100 -R217 -a80
-n100 -R217 -a80
-n100 -R217 -a80 -b100
-n100 -R217 -a80 -b100
-n100 -
R106 -e0--
>
-n100 -
e28
</main_exec_args
>
-n100 -R273 -e28
</main_exec_args>
<tags>
nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5 nr_dlsim.test6 nr_dlsim.test7
<tags>
nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3 nr_dlsim.test4 nr_dlsim.test5
<!--nr_dlsim.test6 nr_dlsim.test7 nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10-->
nr_dlsim.test6 nr_dlsim.test7
</tags>
nr_dlsim.test8 nr_dlsim.test9 nr_dlsim.test10 nr_dlsim.test11
</tags>
<search_expr_true>
"PDCCH test OK" "PDSCH test OK"
</search_expr_true>
<search_expr_true>
PDSCH test OK
</search_expr_true>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
<nruns>
3
</nruns>
<nruns>
3
</nruns>
</testCase>
</testCase>
...
@@ -1240,19 +1239,23 @@
...
@@ -1240,19 +1239,23 @@
<testCase
id=
"015111"
>
<testCase
id=
"015111"
>
<class>
execution
</class>
<class>
execution
</class>
<desc>
nr_ulsim Test cases. (Test1: MCS 9),
<desc>
nr_ulsim Test cases. (Test1: MCS 9 106 PRBs),
(Test2: MCS 16),
(Test2: MCS 16 50 PRBs),
(Test3: MCS 28)
</desc>
(Test3: MCS 28 50 PRBs),
(Test4: MCS 9 217 PRBs),
(Test5: MCS 9 273 PRBs)
</desc>
<pre_compile_prog></pre_compile_prog>
<pre_compile_prog></pre_compile_prog>
<compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai
</compile_prog>
<compile_prog>
$OPENAIR_DIR/cmake_targets/build_oai
</compile_prog>
<compile_prog_args>
--phy_simulators -c
</compile_prog_args>
<compile_prog_args>
--phy_simulators -c
</compile_prog_args>
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec>
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
</pre_exec>
<pre_exec_args></pre_exec_args>
<pre_exec_args></pre_exec_args>
<main_exec>
$OPENAIR_DIR/targets/bin/nr_ulsim.Rel15
</main_exec>
<main_exec>
$OPENAIR_DIR/targets/bin/nr_ulsim.Rel15
</main_exec>
<main_exec_args>
-f100 -m9 -s10
<main_exec_args>
-f100 -m9 -
r106 -
s10
-f100 -m16 -s20
-f100 -m16 -s20
-f100 -m28 -s30
</main_exec_args>
-f100 -m28 -s30
<tags>
nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3
</tags>
-f100 -m9 -R217 -r217 -s10
-f100 -m9 -R273 -r273 -s10
</main_exec_args>
<tags>
nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5
</tags>
<search_expr_true>
PUSCH test OK
</search_expr_true>
<search_expr_true>
PUSCH test OK
</search_expr_true>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
<nruns>
3
</nruns>
<nruns>
3
</nruns>
...
...
common/utils/LOG/log.c
View file @
5eb4716a
...
@@ -434,6 +434,10 @@ int logInit (void)
...
@@ -434,6 +434,10 @@ int logInit (void)
register_log_component
(
"ASN"
,
"log"
,
ASN
);
register_log_component
(
"ASN"
,
"log"
,
ASN
);
register_log_component
(
"NFAPI_VNF"
,
"log"
,
NFAPI_VNF
);
register_log_component
(
"NFAPI_VNF"
,
"log"
,
NFAPI_VNF
);
register_log_component
(
"NFAPI_PNF"
,
"log"
,
NFAPI_PNF
);
register_log_component
(
"NFAPI_PNF"
,
"log"
,
NFAPI_PNF
);
register_log_component
(
"GNB_APP"
,
"log"
,
GNB_APP
);
register_log_component
(
"NR_RRC"
,
"log"
,
NR_RRC
);
register_log_component
(
"NR_MAC"
,
"log"
,
NR_MAC
);
register_log_component
(
"NR_PHY"
,
"log"
,
NR_PHY
);
for
(
int
i
=
0
;
log_level_names
[
i
].
name
!=
NULL
;
i
++
)
for
(
int
i
=
0
;
log_level_names
[
i
].
name
!=
NULL
;
i
++
)
g_log
->
level2string
[
i
]
=
toupper
(
log_level_names
[
i
].
name
[
0
]);
// uppercased first letter of level name
g_log
->
level2string
[
i
]
=
toupper
(
log_level_names
[
i
].
name
[
0
]);
// uppercased first letter of level name
...
...
executables/nr-uesoftmodem.c
View file @
5eb4716a
...
@@ -671,7 +671,7 @@ int main( int argc, char **argv ) {
...
@@ -671,7 +671,7 @@ int main( int argc, char **argv ) {
logInit
();
logInit
();
// get options and fill parameters from configuration file
// get options and fill parameters from configuration file
get_options
();
//Command-line options, enb_properties
get_options
();
//Command-line options, enb_properties
get_common_options
();
//
get_common_options();
#if T_TRACER
#if T_TRACER
T_Config_Init
();
T_Config_Init
();
#endif
#endif
...
...
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
View file @
5eb4716a
...
@@ -37,11 +37,12 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -37,11 +37,12 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
unsigned
short
bwp_start_subcarrier
,
unsigned
short
bwp_start_subcarrier
,
unsigned
short
nb_rb_pusch
)
unsigned
short
nb_rb_pusch
)
{
{
int
pilot
[
132
0
]
__attribute__
((
aligned
(
16
)));
int
pilot
[
328
0
]
__attribute__
((
aligned
(
16
)));
unsigned
char
aarx
;
unsigned
char
aarx
;
unsigned
short
k
;
unsigned
short
k
;
unsigned
int
pilot_cnt
;
unsigned
int
pilot_cnt
;
int16_t
ch
[
2
],
*
pil
,
*
rxF
,
*
ul_ch
,
*
fl
,
*
fm
,
*
fr
,
*
fml
,
*
fmr
,
*
fmm
;
int16_t
ch
[
2
],
*
pil
,
*
rxF
,
*
ul_ch
;
int16_t
*
fl
,
*
fm
,
*
fr
,
*
fml
,
*
fmr
,
*
fmm
,
*
fdcl
,
*
fdcr
,
*
fdclh
,
*
fdcrh
;
int
ch_offset
,
symbol_offset
,
length_dmrs
,
UE_id
=
0
;
int
ch_offset
,
symbol_offset
,
length_dmrs
,
UE_id
=
0
;
unsigned
short
n_idDMRS
[
2
]
=
{
0
,
1
};
//to update from pusch config
unsigned
short
n_idDMRS
[
2
]
=
{
0
,
1
};
//to update from pusch config
int32_t
temp_in_ifft_0
[
8192
*
2
]
__attribute__
((
aligned
(
16
)));
int32_t
temp_in_ifft_0
[
8192
*
2
]
__attribute__
((
aligned
(
16
)));
...
@@ -82,6 +83,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -82,6 +83,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
fmm
=
filt8_mm0
;
fmm
=
filt8_mm0
;
fml
=
filt8_m0
;
fml
=
filt8_m0
;
fmr
=
filt8_mr0
;
fmr
=
filt8_mr0
;
fdcl
=
filt8_dcl0
;
fdcr
=
filt8_dcr0
;
fdclh
=
filt8_dcl0_h
;
fdcrh
=
filt8_dcr0_h
;
break
;
break
;
case
1
:
case
1
:
...
@@ -91,6 +96,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -91,6 +96,10 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
fmm
=
filt8_mm1
;
fmm
=
filt8_mm1
;
fml
=
filt8_ml1
;
fml
=
filt8_ml1
;
fmr
=
filt8_m1
;
fmr
=
filt8_m1
;
fdcl
=
filt8_dcl1
;
fdcr
=
filt8_dcr1
;
fdclh
=
filt8_dcl1_h
;
fdcrh
=
filt8_dcr1_h
;
break
;
break
;
default:
default:
...
@@ -119,12 +128,12 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -119,12 +128,12 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
memset
(
ul_ch
,
0
,
4
*
(
gNB
->
frame_parms
.
ofdm_symbol_size
));
memset
(
ul_ch
,
0
,
4
*
(
gNB
->
frame_parms
.
ofdm_symbol_size
));
#ifdef DEBUG_PUSCH
#ifdef DEBUG_PUSCH
printf
(
"ch est pilot addr %p RB_DL %d
\n
"
,
&
pilot
[
0
],
gNB
->
frame_parms
.
N_RB_
D
L
);
printf
(
"ch est pilot addr %p RB_DL %d
\n
"
,
&
pilot
[
0
],
gNB
->
frame_parms
.
N_RB_
U
L
);
printf
(
"k %d, first_carrier %d
\n
"
,
k
,
gNB
->
frame_parms
.
first_carrier_offset
);
printf
(
"k %d, first_carrier %d
\n
"
,
k
,
gNB
->
frame_parms
.
first_carrier_offset
);
printf
(
"rxF addr %p p %d
\n
"
,
rxF
,
p
);
printf
(
"rxF addr %p p %d
\n
"
,
rxF
,
p
);
printf
(
"ul_ch addr %p nushift %d
\n
"
,
ul_ch
,
nushift
);
printf
(
"ul_ch addr %p nushift %d
\n
"
,
ul_ch
,
nushift
);
#endif
#endif
//if ((gNB->frame_parms.N_RB_
D
L&1)==0) {
//if ((gNB->frame_parms.N_RB_
U
L&1)==0) {
// Treat first 2 pilots specially (left edge)
// 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
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
@@ -140,7 +149,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -140,7 +149,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
ul_ch
,
ul_ch
,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
gNB
->
frame_parms
.
ofdm_symbol_size
-
1
)
;
re_offset
=
(
re_offset
+
2
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
//for (int i= 0; i<8; i++)
//for (int i= 0; i<8; i++)
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
...
@@ -156,7 +165,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -156,7 +165,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
ul_ch
,
ul_ch
,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
gNB
->
frame_parms
.
ofdm_symbol_size
-
1
)
;
re_offset
=
(
re_offset
+
2
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
//printf("ul_ch addr %p\n",ul_ch);
//printf("ul_ch addr %p\n",ul_ch);
...
@@ -175,7 +184,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -175,7 +184,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
gNB
->
frame_parms
.
ofdm_symbol_size
-
1
)
;
re_offset
=
(
re_offset
+
2
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
ul_ch
+=
8
;
ul_ch
+=
8
;
...
@@ -193,7 +202,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -193,7 +202,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
gNB
->
frame_parms
.
ofdm_symbol_size
-
1
)
;
re_offset
=
(
re_offset
+
2
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
@@ -206,7 +215,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -206,7 +215,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
ul_ch
,
ul_ch
,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
gNB
->
frame_parms
.
ofdm_symbol_size
-
1
)
;
re_offset
=
(
re_offset
+
2
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
ul_ch
+=
8
;
ul_ch
+=
8
;
...
@@ -227,7 +236,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -227,7 +236,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
//printf("ul_ch addr %p %d\n", ul_ch+i, *(ul_ch+i));
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
gNB
->
frame_parms
.
ofdm_symbol_size
-
1
)
;
re_offset
=
(
re_offset
+
2
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
@@ -242,7 +251,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -242,7 +251,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
gNB
->
frame_parms
.
ofdm_symbol_size
-
1
)
;
re_offset
=
(
re_offset
+
2
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
ul_ch
+=
8
;
ul_ch
+=
8
;
...
@@ -256,6 +265,69 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
...
@@ -256,6 +265,69 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
ul_ch
,
ul_ch
,
8
);
8
);
// check if PRB crosses DC and improve estimates around DC
if
((
bwp_start_subcarrier
>=
gNB
->
frame_parms
.
ofdm_symbol_size
/
2
)
&&
(
bwp_start_subcarrier
+
nb_rb_pusch
*
12
>=
gNB
->
frame_parms
.
ofdm_symbol_size
))
{
ul_ch
=
(
int16_t
*
)
&
ul_ch_estimates
[
aarx
][
ch_offset
];
uint16_t
idxDC
=
2
*
(
gNB
->
frame_parms
.
ofdm_symbol_size
-
bwp_start_subcarrier
);
uint16_t
idxPil
=
idxDC
/
2
;
re_offset
=
k
;
pil
=
(
int16_t
*
)
&
pilot
[
0
];
pil
+=
(
idxPil
-
2
);
ul_ch
+=
(
idxDC
-
4
);
ul_ch
=
memset
(
ul_ch
,
0
,
sizeof
(
int16_t
)
*
10
);
re_offset
=
(
re_offset
+
idxDC
/
2
-
2
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
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
);
// for proper allignment of SIMD vectors
if
((
gNB
->
frame_parms
.
N_RB_UL
&
1
)
==
0
)
{
multadd_real_vector_complex_scalar
(
fdcl
,
ch
,
ul_ch
-
4
,
8
);
pil
+=
4
;
re_offset
=
(
re_offset
+
4
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
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
);
multadd_real_vector_complex_scalar
(
fdcr
,
ch
,
ul_ch
-
4
,
8
);
}
else
{
multadd_real_vector_complex_scalar
(
fdclh
,
ch
,
ul_ch
,
8
);
pil
+=
4
;
re_offset
=
(
re_offset
+
4
)
%
gNB
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
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
);
multadd_real_vector_complex_scalar
(
fdcrh
,
ch
,
ul_ch
,
8
);
}
}
#ifdef DEBUG_PDSCH
ul_ch
=
(
int16_t
*
)
&
ul_ch_estimates
[
aarx
][
ch_offset
];
for
(
uint16_t
idxP
=
0
;
idxP
<
ceil
((
float
)
nb_rb_pusch
*
12
/
8
);
idxP
++
)
{
for
(
uint8_t
idxI
=
0
;
idxI
<
16
;
idxI
+=
2
)
{
printf
(
"%d
\t
%d
\t
"
,
ul_ch
[
idxP
*
16
+
idxI
],
ul_ch
[
idxP
*
16
+
idxI
+
1
]);
}
printf
(
"%d
\n
"
,
idxP
);
}
#endif
// Convert to time domain
// Convert to time domain
memset
(
temp_in_ifft_0
,
0
,
gNB
->
frame_parms
.
ofdm_symbol_size
*
sizeof
(
int32_t
));
memset
(
temp_in_ifft_0
,
0
,
gNB
->
frame_parms
.
ofdm_symbol_size
*
sizeof
(
int32_t
));
memcpy
(
temp_in_ifft_0
,
&
ul_ch_estimates
[
aarx
][
symbol_offset
],
nb_rb_pusch
*
NR_NB_SC_PER_RB
*
sizeof
(
int32_t
));
memcpy
(
temp_in_ifft_0
,
&
ul_ch_estimates
[
aarx
][
symbol_offset
],
nb_rb_pusch
*
NR_NB_SC_PER_RB
*
sizeof
(
int32_t
));
...
...
openair1/PHY/NR_REFSIG/dmrs_nr.h
View file @
5eb4716a
...
@@ -55,7 +55,7 @@ int pseudo_random_sequence(int M_PN, uint32_t *c, uint32_t cinit);
...
@@ -55,7 +55,7 @@ int pseudo_random_sequence(int M_PN, uint32_t *c, uint32_t cinit);
void
lte_gold_new
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_table
[
20
][
2
][
14
],
uint16_t
Nid_cell
);
void
lte_gold_new
(
LTE_DL_FRAME_PARMS
*
frame_parms
,
uint32_t
lte_gold_table
[
20
][
2
][
14
],
uint16_t
Nid_cell
);
void
generate_dmrs_pbch
(
uint32_t
dmrs_pbch_bitmap
[
DMRS_PBCH_I_SSB
][
DMRS_PBCH_N_HF
][
DMRS_BITMAP_SIZE
],
uint16_t
Nid_cell
);
void
generate_dmrs_pbch
(
uint32_t
dmrs_pbch_bitmap
[
DMRS_PBCH_I_SSB
][
DMRS_PBCH_N_HF
][
DMRS_BITMAP_SIZE
],
uint16_t
Nid_cell
);
uint8_t
get_l0_ul
(
uint8_t
mapping_type
,
uint8_t
dmrs_typeA_position
);
uint8_t
get_l0_ul
(
uint8_t
mapping_type
,
uint8_t
dmrs_typeA_position
);
uint16_t
get_dmrs_freq_idx_ul
(
uint
8
_t
n
,
uint8_t
k_prime
,
uint8_t
delta
,
uint8_t
dmrs_type
);
uint16_t
get_dmrs_freq_idx_ul
(
uint
16
_t
n
,
uint8_t
k_prime
,
uint8_t
delta
,
uint8_t
dmrs_type
);
#undef EXTERN
#undef EXTERN
...
...
openair1/PHY/NR_REFSIG/nr_gold_ue.c
View file @
5eb4716a
...
@@ -148,7 +148,7 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,
...
@@ -148,7 +148,7 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue,
//printf("x1 : %x, x2 : %x\n",x1,x2);
//printf("x1 : %x, x2 : %x\n",x1,x2);
}
}
for
(
n
=
0
;
n
<
52
;
n
++
)
{
for
(
n
=
0
;
n
<
NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD
;
n
++
)
{
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
(
x1
>>
1
)
^
(
x1
>>
4
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x1
=
x1
^
(
x1
<<
31
)
^
(
x1
<<
28
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
x2
=
(
x2
>>
1
)
^
(
x2
>>
2
)
^
(
x2
>>
3
)
^
(
x2
>>
4
);
...
...
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.c
View file @
5eb4716a
...
@@ -123,6 +123,30 @@ short filt8_m0[8] = {
...
@@ -123,6 +123,30 @@ short filt8_m0[8] = {
short
filt8_mm0
[
8
]
=
{
short
filt8_mm0
[
8
]
=
{
0
,
0
,
0
,
8192
,
16384
,
8192
,
0
,
0
};
0
,
0
,
0
,
8192
,
16384
,
8192
,
0
,
0
};
short
filt8_dcma
[
8
]
=
{
16384
,
12288
,
8192
,
4096
,
4096
,
0
,
0
,
0
};
short
filt8_dcmb
[
8
]
=
{
0
,
4096
,
8192
,
4096
,
4096
,
0
,
0
,
0
};
short
filt8_dcmc
[
8
]
=
{
0
,
0
,
0
,
4096
,
4096
,
8192
,
4096
,
0
};
short
filt8_dcmd
[
8
]
=
{
0
,
0
,
0
,
4096
,
4096
,
8192
,
12288
,
16384
};
short
filt8_dcl0
[
8
]
=
{
0
,
0
,
16384
,
12288
,
8192
,
4096
,
0
,
0
};
short
filt8_dcr0
[
8
]
=
{
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
,
0
};
short
filt8_dcl0_h
[
8
]
=
{
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
,
0
};
short
filt8_dcr0_h
[
8
]
=
{
0
,
4096
,
8192
,
12288
,
16384
,
0
,
0
,
0
};
short
filt8_l1
[
8
]
=
{
short
filt8_l1
[
8
]
=
{
24576
,
16384
,
0
,
0
,
0
,
0
,
0
,
0
};
24576
,
16384
,
0
,
0
,
0
,
0
,
0
,
0
};
...
@@ -137,3 +161,15 @@ short filt8_m1[8] = {
...
@@ -137,3 +161,15 @@ short filt8_m1[8] = {
short
filt8_mm1
[
8
]
=
{
short
filt8_mm1
[
8
]
=
{
0
,
0
,
0
,
0
,
8192
,
16384
,
8192
,
0
};
0
,
0
,
0
,
0
,
8192
,
16384
,
8192
,
0
};
short
filt8_dcl1
[
8
]
=
{
0
,
0
,
0
,
16384
,
12288
,
8192
,
4096
,
0
};
short
filt8_dcr1
[
8
]
=
{
0
,
0
,
0
,
0
,
4096
,
8192
,
12288
,
16384
};
short
filt8_dcl1_h
[
8
]
=
{
0
,
16384
,
12288
,
8192
,
4096
,
0
,
0
,
0
};
short
filt8_dcr1_h
[
8
]
=
{
0
,
0
,
4096
,
8192
,
12288
,
16384
,
0
,
0
};
openair1/PHY/NR_UE_ESTIMATION/filt16a_32.h
View file @
5eb4716a
...
@@ -91,6 +91,22 @@ extern short filt8_m0[8];
...
@@ -91,6 +91,22 @@ extern short filt8_m0[8];
extern
short
filt8_mm0
[
8
];
extern
short
filt8_mm0
[
8
];
extern
short
filt8_dcma
[
8
];
extern
short
filt8_dcmb
[
8
];
extern
short
filt8_dcmc
[
8
];
extern
short
filt8_dcmd
[
8
];
extern
short
filt8_dcl0
[
8
];
extern
short
filt8_dcr0
[
8
];
extern
short
filt8_dcl0_h
[
8
];
extern
short
filt8_dcr0_h
[
8
];
extern
short
filt8_l1
[
8
];
extern
short
filt8_l1
[
8
];
extern
short
filt8_ml1
[
8
];
extern
short
filt8_ml1
[
8
];
...
@@ -101,4 +117,11 @@ extern short filt8_m1[8];
...
@@ -101,4 +117,11 @@ extern short filt8_m1[8];
extern
short
filt8_mm1
[
8
];
extern
short
filt8_mm1
[
8
];
extern
short
filt8_dcl1
[
8
];
extern
short
filt8_dcr1
[
8
];
extern
short
filt8_dcl1_h
[
8
];
extern
short
filt8_dcr1_h
[
8
];
#endif
#endif
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
5eb4716a
...
@@ -98,8 +98,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
...
@@ -98,8 +98,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
#endif
#endif
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
...
@@ -114,8 +113,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
...
@@ -114,8 +113,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
#endif
#endif
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
current_ssb
->
c_re
+=
ch
[
0
];
current_ssb
->
c_re
+=
ch
[
0
];
...
@@ -126,8 +124,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
...
@@ -126,8 +124,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
#endif
#endif
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
for
(
pilot_cnt
=
3
;
pilot_cnt
<
(
3
*
20
);
pilot_cnt
+=
3
)
{
for
(
pilot_cnt
=
3
;
pilot_cnt
<
(
3
*
20
);
pilot_cnt
+=
3
)
{
...
@@ -138,8 +135,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
...
@@ -138,8 +135,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
// in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS)
// in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS)
if
(
dmrss
==
1
&&
pilot_cnt
==
12
)
{
if
(
dmrss
==
1
&&
pilot_cnt
==
12
)
{
pilot_cnt
=
48
;
pilot_cnt
=
48
;
//re_offset = (re_offset+144)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
144
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
144
)
:
(
re_offset
+
144
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
}
}
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
@@ -153,8 +149,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
...
@@ -153,8 +149,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
#endif
#endif
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
...
@@ -168,8 +163,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
...
@@ -168,8 +163,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
printf
(
"pilot %u : 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
]);
printf
(
"pilot %u : 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
#endif
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
...
@@ -184,8 +178,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
...
@@ -184,8 +178,7 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue,
#endif
#endif
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
}
}
...
@@ -314,8 +307,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -314,8 +307,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
dl_ch
,
dl_ch
,
16
);
16
);
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
//for (int i= 0; i<8; i++)
//for (int i= 0; i<8; i++)
...
@@ -333,8 +325,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -333,8 +325,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
dl_ch
,
dl_ch
,
16
);
16
);
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
@@ -349,8 +340,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -349,8 +340,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
dl_ch
,
dl_ch
,
16
);
16
);
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
dl_ch
+=
24
;
dl_ch
+=
24
;
...
@@ -362,8 +352,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -362,8 +352,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
// in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS)
// in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS)
if
(
dmrss
==
1
&&
pilot_cnt
==
12
)
{
if
(
dmrss
==
1
&&
pilot_cnt
==
12
)
{
pilot_cnt
=
48
;
pilot_cnt
=
48
;
//re_offset = (re_offset+144)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
144
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
144
)
:
(
re_offset
+
144
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
dl_ch
+=
288
;
dl_ch
+=
288
;
}
}
...
@@ -382,8 +371,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -382,8 +371,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
// printf("pilot_cnt %d dl_ch %d %d\n", pilot_cnt, dl_ch+i, *(dl_ch+i));
// printf("pilot_cnt %d dl_ch %d %d\n", pilot_cnt, dl_ch+i, *(dl_ch+i));
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
...
@@ -398,8 +386,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -398,8 +386,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
dl_ch
,
dl_ch
,
16
);
16
);
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
...
@@ -415,8 +402,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -415,8 +402,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
dl_ch
,
dl_ch
,
16
);
16
);
pil
+=
2
;
pil
+=
2
;
//re_offset = (re_offset+4)&(ue->frame_parms.ofdm_symbol_size-1);
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
re_offset
=
(
re_offset
>=
ue
->
frame_parms
.
ofdm_symbol_size
)
?
(
re_offset
-
ue
->
frame_parms
.
ofdm_symbol_size
+
4
)
:
(
re_offset
+
4
);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
re_offset
)];
dl_ch
+=
24
;
dl_ch
+=
24
;
...
@@ -666,11 +652,12 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -666,11 +652,12 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
unsigned
short
bwp_start_subcarrier
,
unsigned
short
bwp_start_subcarrier
,
unsigned
short
nb_rb_pdsch
)
unsigned
short
nb_rb_pdsch
)
{
{
int
pilot
[
132
0
]
__attribute__
((
aligned
(
16
)));
int
pilot
[
328
0
]
__attribute__
((
aligned
(
16
)));
unsigned
char
aarx
;
unsigned
char
aarx
;
unsigned
short
k
;
unsigned
short
k
;
unsigned
int
pilot_cnt
;
unsigned
int
pilot_cnt
;
int16_t
ch
[
2
],
*
pil
,
*
rxF
,
*
dl_ch
,
*
fl
,
*
fm
,
*
fr
,
*
fml
,
*
fmr
,
*
fmm
;
int16_t
ch
[
2
],
*
pil
,
*
rxF
,
*
dl_ch
;
int16_t
*
fl
,
*
fm
,
*
fr
,
*
fml
,
*
fmr
,
*
fmm
,
*
fdcl
,
*
fdcr
,
*
fdclh
,
*
fdcrh
;
int
ch_offset
,
symbol_offset
;
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];
//uint16_t Nid_cell = (eNB_offset == 0) ? ue->frame_parms.Nid_cell : ue->measurements.adj_cell_id[eNB_offset-1];
...
@@ -705,6 +692,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -705,6 +692,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
fmm
=
filt8_mm0
;
fmm
=
filt8_mm0
;
fml
=
filt8_m0
;
fml
=
filt8_m0
;
fmr
=
filt8_mr0
;
fmr
=
filt8_mr0
;
fdcl
=
filt8_dcl0
;
fdcr
=
filt8_dcr0
;
fdclh
=
filt8_dcl0_h
;
fdcrh
=
filt8_dcr0_h
;
break
;
break
;
case
1
:
case
1
:
...
@@ -714,6 +705,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -714,6 +705,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
fmm
=
filt8_mm1
;
fmm
=
filt8_mm1
;
fml
=
filt8_ml1
;
fml
=
filt8_ml1
;
fmr
=
filt8_m1
;
fmr
=
filt8_m1
;
fdcl
=
filt8_dcl1
;
fdcr
=
filt8_dcr1
;
fdclh
=
filt8_dcl1_h
;
fdcrh
=
filt8_dcr1_h
;
break
;
break
;
default:
default:
...
@@ -731,7 +726,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -731,7 +726,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
for
(
aarx
=
0
;
aarx
<
ue
->
frame_parms
.
nb_antennas_rx
;
aarx
++
)
{
pil
=
(
int16_t
*
)
&
pilot
[
rb_offset
*
((
config_type
==
0
)
?
6
:
4
)];
pil
=
(
int16_t
*
)
&
pilot
[
rb_offset
*
((
config_type
==
0
)
?
6
:
4
)];
k
=
k
&
(
ue
->
frame_parms
.
ofdm_symbol_size
-
1
)
;
k
=
k
%
ue
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
nushift
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
k
+
nushift
)];
dl_ch
=
(
int16_t
*
)
&
dl_ch_estimates
[
aarx
][
ch_offset
];
dl_ch
=
(
int16_t
*
)
&
dl_ch_estimates
[
aarx
][
ch_offset
];
...
@@ -761,8 +756,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -761,8 +756,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
dl_ch
,
dl_ch
,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
ue
->
frame_parms
.
ofdm_symbol_size
-
1
);
re_offset
=
(
re_offset
+
2
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
//re_offset = (re_offset >= ue->frame_parms.ofdm_symbol_size) ? (re_offset - ue->frame_parms.ofdm_symbol_size + 2) : (re_offset+2);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
//for (int i= 0; i<8; i++)
//for (int i= 0; i<8; i++)
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
...
@@ -777,8 +771,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -777,8 +771,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
dl_ch
,
dl_ch
,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
ue
->
frame_parms
.
ofdm_symbol_size
-
1
);
re_offset
=
(
re_offset
+
2
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
//re_offset = (re_offset >= ue->frame_parms.ofdm_symbol_size) ? (re_offset - ue->frame_parms.ofdm_symbol_size + 2) : (re_offset+2);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
//printf("dl_ch addr %p\n",dl_ch);
//printf("dl_ch addr %p\n",dl_ch);
...
@@ -796,8 +789,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -796,8 +789,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
ue
->
frame_parms
.
ofdm_symbol_size
-
1
);
re_offset
=
(
re_offset
+
2
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
//re_offset = (re_offset >= ue->frame_parms.ofdm_symbol_size) ? (re_offset - ue->frame_parms.ofdm_symbol_size + 2) : (re_offset+2);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
dl_ch
+=
8
;
dl_ch
+=
8
;
...
@@ -817,8 +809,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -817,8 +809,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
ue
->
frame_parms
.
ofdm_symbol_size
-
1
);
re_offset
=
(
re_offset
+
2
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
//re_offset = (re_offset >= ue->frame_parms.ofdm_symbol_size) ? (re_offset - ue->frame_parms.ofdm_symbol_size + 2) : (re_offset+2);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
@@ -831,8 +822,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -831,8 +822,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
dl_ch
,
dl_ch
,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
ue
->
frame_parms
.
ofdm_symbol_size
-
1
);
re_offset
=
(
re_offset
+
2
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
//re_offset = (re_offset >= ue->frame_parms.ofdm_symbol_size) ? (re_offset - ue->frame_parms.ofdm_symbol_size + 2) : (re_offset+2);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
dl_ch
+=
8
;
dl_ch
+=
8
;
...
@@ -853,8 +843,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -853,8 +843,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
//printf("dl_ch addr %p %d\n", dl_ch+i, *(dl_ch+i));
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
ue
->
frame_parms
.
ofdm_symbol_size
-
1
);
re_offset
=
(
re_offset
+
2
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
//re_offset = (re_offset >= ue->frame_parms.ofdm_symbol_size) ? (re_offset - ue->frame_parms.ofdm_symbol_size + 2) : (re_offset+2);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
ch
[
0
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
])
>>
15
);
...
@@ -869,8 +858,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -869,8 +858,7 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
8
);
8
);
pil
+=
2
;
pil
+=
2
;
re_offset
=
(
re_offset
+
2
)
&
(
ue
->
frame_parms
.
ofdm_symbol_size
-
1
);
re_offset
=
(
re_offset
+
2
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
//re_offset = (re_offset >= ue->frame_parms.ofdm_symbol_size) ? (re_offset - ue->frame_parms.ofdm_symbol_size + 2) : (re_offset+2);
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
dl_ch
+=
8
;
dl_ch
+=
8
;
...
@@ -885,6 +873,69 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
...
@@ -885,6 +873,69 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue,
8
);
8
);
//}
//}
// check if PRB crosses DC and improve estimates around DC
if
((
bwp_start_subcarrier
>=
ue
->
frame_parms
.
ofdm_symbol_size
/
2
)
&&
(
bwp_start_subcarrier
+
nb_rb_pdsch
*
12
>=
ue
->
frame_parms
.
ofdm_symbol_size
))
{
dl_ch
=
(
int16_t
*
)
&
dl_ch_estimates
[
aarx
][
ch_offset
];
uint16_t
idxDC
=
2
*
(
ue
->
frame_parms
.
ofdm_symbol_size
-
bwp_start_subcarrier
);
uint16_t
idxPil
=
idxDC
/
2
;
re_offset
=
k
;
pil
=
(
int16_t
*
)
&
pilot
[
rb_offset
*
((
config_type
==
0
)
?
6
:
4
)];
pil
+=
(
idxPil
-
2
);
dl_ch
+=
(
idxDC
-
4
);
dl_ch
=
memset
(
dl_ch
,
0
,
sizeof
(
int16_t
)
*
10
);
re_offset
=
(
re_offset
+
idxDC
/
2
-
2
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
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
);
// for proper allignment of SIMD vectors
if
((
ue
->
frame_parms
.
N_RB_DL
&
1
)
==
0
)
{
multadd_real_vector_complex_scalar
(
fdcl
,
ch
,
dl_ch
-
4
,
8
);
pil
+=
4
;
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
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
);
multadd_real_vector_complex_scalar
(
fdcr
,
ch
,
dl_ch
-
4
,
8
);
}
else
{
multadd_real_vector_complex_scalar
(
fdclh
,
ch
,
dl_ch
,
8
);
pil
+=
4
;
re_offset
=
(
re_offset
+
4
)
%
ue
->
frame_parms
.
ofdm_symbol_size
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
aarx
][(
symbol_offset
+
nushift
+
re_offset
)];
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
);
multadd_real_vector_complex_scalar
(
fdcrh
,
ch
,
dl_ch
,
8
);
}
}
#ifdef DEBUG_PDSCH
dl_ch
=
(
int16_t
*
)
&
dl_ch_estimates
[
aarx
][
ch_offset
];
for
(
uint16_t
idxP
=
0
;
idxP
<
ceil
((
float
)
nb_rb_pdsch
*
12
/
8
);
idxP
++
)
{
for
(
uint8_t
idxI
=
0
;
idxI
<
16
;
idxI
+=
2
)
{
printf
(
"%d
\t
%d
\t
"
,
dl_ch
[
idxP
*
16
+
idxI
],
dl_ch
[
idxP
*
16
+
idxI
+
1
]);
}
printf
(
"%d
\n
"
,
idxP
);
}
#endif
}
}
return
(
0
);
return
(
0
);
...
...
openair1/PHY/NR_UE_TRANSPORT/dmrs_nr.c
View file @
5eb4716a
...
@@ -258,7 +258,7 @@ uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position) {
...
@@ -258,7 +258,7 @@ uint8_t get_l0_ul(uint8_t mapping_type, uint8_t dmrs_typeA_position) {
*
*
*********************************************************************/
*********************************************************************/
uint16_t
get_dmrs_freq_idx_ul
(
uint
8
_t
n
,
uint8_t
k_prime
,
uint8_t
delta
,
uint8_t
dmrs_type
)
{
uint16_t
get_dmrs_freq_idx_ul
(
uint
16
_t
n
,
uint8_t
k_prime
,
uint8_t
delta
,
uint8_t
dmrs_type
)
{
uint16_t
dmrs_idx
;
uint16_t
dmrs_idx
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c
View file @
5eb4716a
...
@@ -564,13 +564,13 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
...
@@ -564,13 +564,13 @@ uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue,
// Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int
// Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int
if
(
check_crc
((
uint8_t
*
)
llrProcBuf
,
length_dec
,
harq_process
->
F
,
crc_type
))
{
if
(
check_crc
((
uint8_t
*
)
llrProcBuf
,
length_dec
,
harq_process
->
F
,
crc_type
))
{
printf
(
"
\x1B
[34m"
"Segment %d CRC OK
\n
"
,
r
);
printf
(
"
\x1B
[34m"
"Segment %d CRC OK
\n
\033
[0m
"
,
r
);
//Temporary hack
//Temporary hack
no_iteration_ldpc
=
dlsch
->
max_ldpc_iterations
;
no_iteration_ldpc
=
dlsch
->
max_ldpc_iterations
;
ret
=
no_iteration_ldpc
;
ret
=
no_iteration_ldpc
;
}
}
else
{
else
{
printf
(
"
\x1B
[33m"
"CRC NOK
\n
"
);
printf
(
"
\x1B
[33m"
"CRC NOK
\n
\033
[0m
"
);
ret
=
1
+
dlsch
->
max_ldpc_iterations
;
ret
=
1
+
dlsch
->
max_ldpc_iterations
;
}
}
...
...
openair1/PHY/defs_nr_UE.h
View file @
5eb4716a
...
@@ -994,7 +994,7 @@ typedef struct {
...
@@ -994,7 +994,7 @@ typedef struct {
uint32_t
nr_gold_pbch
[
2
][
64
][
NR_PBCH_DMRS_LENGTH_DWORD
];
uint32_t
nr_gold_pbch
[
2
][
64
][
NR_PBCH_DMRS_LENGTH_DWORD
];
/// PDSCH DMRS
/// PDSCH DMRS
uint32_t
nr_gold_pdsch
[
2
][
20
][
2
][
52
];
uint32_t
nr_gold_pdsch
[
2
][
20
][
2
][
NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD
];
/// PDCCH DMRS
/// PDCCH DMRS
uint32_t
nr_gold_pdcch
[
7
][
20
][
3
][
52
];
uint32_t
nr_gold_pdcch
[
7
][
20
][
3
][
52
];
...
...
openair1/SIMULATION/NR_PHY/dlsim.c
View file @
5eb4716a
...
@@ -875,26 +875,18 @@ int main(int argc, char **argv)
...
@@ -875,26 +875,18 @@ int main(int argc, char **argv)
printf
(
"*****************************************
\n
"
);
printf
(
"*****************************************
\n
"
);
printf
(
"SNR %f, (false positive %f)
\n
"
,
SNR
,
printf
(
"SNR %f, (false positive %f)
\n
"
,
SNR
,
(
float
)
n_
false_positive
/
(
float
)
n_trials
);
(
float
)
n_
errors
/
(
float
)
n_trials
);
printf
(
"*****************************************
\n
"
);
printf
(
"*****************************************
\n
"
);
printf
(
"
\n
"
);
printf
(
"
\n
"
);
if
(
errors_bit
==
0
)
{
printf
(
"PDSCH test OK
\n
"
);
printf
(
"
\n
"
);
}
printf
(
"SNR %f : n_errors (negative CRC) = %d/%d
\n
"
,
SNR
,
n_errors
,
n_trials
);
printf
(
"SNR %f : n_errors (negative CRC) = %d/%d
\n
"
,
SNR
,
n_errors
,
n_trials
);
printf
(
"
\n
"
);
printf
(
"
\n
"
);
if
((
float
)
n_errors
/
(
float
)
n_trials
<=
target_error_rate
)
{
if
((
float
)
n_errors
/
(
float
)
n_trials
<=
target_error_rate
)
{
printf
(
"PD
C
CH test OK
\n
"
);
printf
(
"PD
S
CH test OK
\n
"
);
break
;
break
;
}
}
if
(
n_trials
==
1
)
break
;
}
// NSR
}
// NSR
for
(
i
=
0
;
i
<
2
;
i
++
)
{
for
(
i
=
0
;
i
<
2
;
i
++
)
{
...
...
targets/RT/USER/lte-ru.c
View file @
5eb4716a
...
@@ -2713,11 +2713,6 @@ void init_RU(char *rf_config_file, clock_source_t clock_source, clock_source_t t
...
@@ -2713,11 +2713,6 @@ void init_RU(char *rf_config_file, clock_source_t clock_source, clock_source_t t
else
else
ru
->
generate_dmrs_sync
=
0
;
ru
->
generate_dmrs_sync
=
0
;
if
(
ru
->
generate_dmrs_sync
==
1
)
{
generate_ul_ref_sigs
();
ru
->
dmrssync
=
(
int16_t
*
)
malloc16_clear
(
ru
->
frame_parms
->
ofdm_symbol_size
*
2
*
sizeof
(
int16_t
));
}
ru
->
wakeup_L1_sleeptime
=
2000
;
ru
->
wakeup_L1_sleeptime
=
2000
;
ru
->
wakeup_L1_sleep_cnt_max
=
3
;
ru
->
wakeup_L1_sleep_cnt_max
=
3
;
...
...
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