Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Balaji Kolla
openairinterface5G
Commits
bad87bd1
Commit
bad87bd1
authored
Feb 21, 2019
by
Guy De Souza
Browse files
Merge remote-tracking branch 'origin/develop-nr' into nr_pdcch_updates
parents
bb398adb
f7583ef4
Changes
41
Expand all
Hide whitespace changes
Inline
Side-by-side
ci-scripts/Jenkinsfile-gitlab
View file @
bad87bd1
...
...
@@ -212,7 +212,7 @@ pipeline {
steps
{
gitlabCommitStatus
(
name:
"Build eNb-ethernet"
)
{
timeout
(
time:
20
,
unit:
'MINUTES'
)
{
sh
"./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}
--keep-vm-alive
"
sh
"./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
}
}
}
...
...
@@ -221,7 +221,7 @@ pipeline {
steps
{
gitlabCommitStatus
(
name:
"Build UE-ethernet"
)
{
timeout
(
time:
20
,
unit:
'MINUTES'
)
{
sh
"./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}
--keep-vm-alive
"
sh
"./ci-scripts/oai-ci-vm-tool wait --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
}
}
}
...
...
ci-scripts/buildOnVM.sh
View file @
bad87bd1
...
...
@@ -94,14 +94,21 @@ function build_on_vm {
echo
"############################################################"
echo
"Creating VM (
$VM_NAME
) on Ubuntu Cloud Image base"
echo
"############################################################"
acquire_vm_create_lock
uvt-kvm create
$VM_NAME
release
=
xenial
--memory
$VM_MEMORY
--cpu
$VM_CPU
--unsafe-caching
--template
ci-scripts/template-host.xml
fi
echo
"Waiting for VM to be started"
uvt-kvm
wait
$VM_NAME
--insecure
echo
"Waiting for VM to be started"
uvt-kvm
wait
$VM_NAME
--insecure
VM_IP_ADDR
=
`
uvt-kvm ip
$VM_NAME
`
echo
"
$VM_NAME
has for IP addr =
$VM_IP_ADDR
"
release_vm_create_lock
else
echo
"Waiting for VM to be started"
uvt-kvm
wait
$VM_NAME
--insecure
VM_IP_ADDR
=
`
uvt-kvm ip
$VM_NAME
`
echo
"
$VM_NAME
has for IP addr =
$VM_IP_ADDR
"
VM_IP_ADDR
=
`
uvt-kvm ip
$VM_NAME
`
echo
"
$VM_NAME
has for IP addr =
$VM_IP_ADDR
"
fi
echo
"############################################################"
echo
"Copying GIT repo into VM (
$VM_NAME
)"
...
...
ci-scripts/createVM.sh
View file @
bad87bd1
...
...
@@ -49,6 +49,35 @@ function create_usage {
echo
""
}
function
acquire_vm_create_lock
{
local
FlockFile
=
"/tmp/vmclone.lck"
local
unlocked
=
"0"
touch
${
FlockFile
}
2>/dev/null
if
[[
$?
-ne
0
]]
then
echo
"Cannot access lock file
${
FlockFile
}
"
exit
2
fi
while
[
$unlocked
-eq
0
]
do
exec
5>
${
FlockFile
}
flock
-nx
5
if
[[
$?
-ne
0
]]
then
echo
"Another instance of VM creation is running"
sleep
10
else
unlocked
=
"1"
fi
done
chmod
666
${
FlockFile
}
2>/dev/null
}
function
release_vm_create_lock
{
local
FlockFile
=
"/tmp/vmclone.lck"
rm
-Rf
${
FlockFile
}
}
function
create_vm
{
echo
"############################################################"
echo
"OAI CI VM script"
...
...
@@ -60,10 +89,12 @@ function create_vm {
echo
"############################################################"
echo
"Creating VM (
$VM_NAME
) on Ubuntu Cloud Image base"
echo
"############################################################"
acquire_vm_create_lock
uvt-kvm create
$VM_NAME
release
=
xenial
--memory
$VM_MEMORY
--cpu
$VM_CPU
--unsafe-caching
--template
ci-scripts/template-host.xml
echo
"Waiting for VM to be started"
uvt-kvm
wait
$VM_NAME
--insecure
VM_IP_ADDR
=
`
uvt-kvm ip
$VM_NAME
`
echo
"
$VM_NAME
has for IP addr =
$VM_IP_ADDR
"
release_vm_create_lock
}
ci-scripts/oai-ci-vm-tool
View file @
bad87bd1
...
...
@@ -252,8 +252,9 @@ case $key in
VM_NAME
=
ci-phy-sim
ARCHIVES_LOC
=
phy_sim
LOG_PATTERN
=
.Rel15.txt
NB_PATTERN_FILES
=
7
NB_PATTERN_FILES
=
8
BUILD_OPTIONS
=
"--phy_simulators"
VM_MEMORY
=
4096
RUN_OPTIONS
=
"./run_exec_autotests.bash -g
\"
01510*
\"
-q -np -b"
NBARGS
=
$[$NBARGS
+256]
shift
...
...
@@ -330,8 +331,9 @@ case $key in
VM_NAME
=
ci-phy-sim
ARCHIVES_LOC
=
phy_sim
LOG_PATTERN
=
.Rel15.txt
NB_PATTERN_FILES
=
7
NB_PATTERN_FILES
=
8
BUILD_OPTIONS
=
"--phy_simulators"
VM_MEMORY
=
4096
RUN_OPTIONS
=
"./run_exec_autotests.bash -g
\"
01510*
\"
-q -np -b"
NBARGS
=
$[$NBARGS
+256]
;;
...
...
ci-scripts/runTestOnVM.sh
View file @
bad87bd1
...
...
@@ -441,10 +441,16 @@ function run_test_on_vm {
echo
"############################################################"
echo
"Creating test EPC VM (
$EPC_VM_NAME
) on Ubuntu Cloud Image base"
echo
"############################################################"
acquire_vm_create_lock
uvt-kvm create
$EPC_VM_NAME
release
=
xenial
--unsafe-caching
echo
"Waiting for VM to be started"
uvt-kvm
wait
$EPC_VM_NAME
--insecure
release_vm_create_lock
else
echo
"Waiting for VM to be started"
uvt-kvm
wait
$EPC_VM_NAME
--insecure
fi
uvt-kvm
wait
$EPC_VM_NAME
--insecure
EPC_VM_IP_ADDR
=
`
uvt-kvm ip
$EPC_VM_NAME
`
echo
"
$EPC_VM_NAME
has for IP addr =
$EPC_VM_IP_ADDR
"
scp
-o
StrictHostKeyChecking
=
no /etc/apt/apt.conf.d/01proxy ubuntu@
$EPC_VM_IP_ADDR
:/home/ubuntu
...
...
ci-scripts/waitBuildOnVM.sh
View file @
bad87bd1
...
...
@@ -165,6 +165,10 @@ function check_on_vm_build {
fi
done
if
[
$NB_PATTERN_FILES
-ne
$NB_FOUND_FILES
]
;
then
STATUS
=
-1
;
fi
if
[
$NB_PATTERN_FILES
-ne
$NB_FOUND_FILES
]
then
echo
"Expecting
$NB_PATTERN_FILES
log files and found
$NB_FOUND_FILES
"
STATUS
=
-1
fi
}
cmake_targets/autotests/test_case_list.xml
View file @
bad87bd1
...
...
@@ -1057,26 +1057,65 @@
(Test2: PBCH and synchronization, 106PBR),
(Test3: PBCH-only, 217 PRB),
(Test4: PBCH and synchronization, 217 RPB),
(Test5: PBCH-only, 2
1
7 PRB),
(Test6: PBCH and synchronization, 2
1
7 PRB)</desc>
(Test5: PBCH-only, 27
3
PRB),
(Test6: PBCH and synchronization, 27
3
PRB)</desc>
<pre_compile_prog></pre_compile_prog>
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
<compile_prog_args> --phy_simulators -c </compile_prog_args>
<pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec>
<pre_exec_args></pre_exec_args>
<main_exec> $OPENAIR_DIR/targets/bin/nr_pbchsim.Rel15</main_exec>
<main_exec_args>-s
-11 -S-10
-n1000 -R106
-s
-11 -S-10
-n10 -I -R106
-s
-11 -S-10
-n1000 -R217
-N10
-s
-11 -S-10
-n10 -I -R217
-N10
-s
-11 -S-10
-n1000 -R273
-N20
-s
-11 -S-10
-n10 -I -R273
-N20
</main_exec_args>
<tags>nr_pbchsim.test1 nr_pbchsim.test2</tags>
<main_exec_args>-s
0 -S1
-n1000 -R106
-s
0 -S1
-n10 -I -R106
-s
0 -S1
-n1000 -R217
-s
0 -S1
-n10 -I -R217
-s
0 -S1
-n1000 -R273
-s
0 -S1
-n10 -I -R273</main_exec_args>
<tags>nr_pbchsim.test1 nr_pbchsim.test2
nr_pbchsim.test3 nr_pbchsim.test4 nr_pbchsim.test5 nr_pbchsim.test6
</tags>
<search_expr_true>PBCH test OK</search_expr_true>
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
<nruns>3</nruns>
</testCase>
<testCase id="015105">
<class>execution</class>
<desc>nr_dlsim Test cases. (Test1: 106 PRB),
(Test2: 217 PRB),
(Test3: 273 PRB)</desc>
<pre_compile_prog></pre_compile_prog>
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
<compile_prog_args> --phy_simulators -c </compile_prog_args>
<pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec>
<pre_exec_args></pre_exec_args>
<main_exec> $OPENAIR_DIR/targets/bin/nr_dlsim.Rel15</main_exec>
<main_exec_args>-n100 -R106
-n100 -R217
-n100 -R273</main_exec_args>
<tags>nr_dlsim.test1 nr_dlsim.test2 nr_dlsim.test3</tags>
<search_expr_true>PDCCH test OK</search_expr_true>
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
<nruns>3</nruns>
</testCase>
<testCase id="015106">
<class>execution</class>
<desc>nr_dlschsim Test cases. (Test1: 106 PRB),
(Test2: 217 PRB),
(Test3: 273 PRB)</desc>
<pre_compile_prog></pre_compile_prog>
<compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog>
<compile_prog_args> --phy_simulators -c </compile_prog_args>
<pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec>
<pre_exec_args></pre_exec_args>
<main_exec> $OPENAIR_DIR/targets/bin/nr_dlschsim.Rel15</main_exec>
<main_exec_args>-R 106 -m9 -s13 -n100
-R 217 -m15 -s15 -n100
-R 273 -m19 -s20 -n100</main_exec_args>
<tags>nr_dlschsim.test1 nr_dlschsim.test2 nr_dlschsim.test3</tags>
<search_expr_true>PDSCH test OK</search_expr_true>
<search_expr_false>segmentation fault|assertion|exiting|fatal</search_expr_false>
<nruns>3</nruns>
</testCase>
<testCase id="015110">
<class>execution</class>
...
...
cmake_targets/build_oai
View file @
bad87bd1
...
...
@@ -696,7 +696,7 @@ function main() {
echo_info
"Compiling unitary tests simulators"
# TODO: fix: dlsim_tm4 pucchsim prachsim pdcchsim pbchsim mbmssim
#simlist="dlsim_tm4 dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim"
simlist
=
"dlsim ulsim polartest ldpctest nr_pbchsim nr_dlschsim"
simlist
=
"dlsim ulsim polartest ldpctest nr_pbchsim nr_dlschsim
nr_dlsim
"
for
f
in
$simlist
;
do
compilations
\
phy_simulators
$f
\
...
...
openair1/PHY/CODING/coding_defs.h
View file @
bad87bd1
...
...
@@ -467,33 +467,26 @@ void nr_interleaving_ldpc(uint32_t E, uint8_t Qm, uint8_t *e,uint8_t *f);
void
nr_deinterleaving_ldpc
(
uint32_t
E
,
uint8_t
Qm
,
int16_t
*
e
,
int16_t
*
f
);
uint32_t
nr_rate_matching_ldpc
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint32_t
G
,
uint8_t
*
w
,
uint8_t
*
e
,
uint8_t
C
,
uint8_t
rvidx
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
);
int
nr_rate_matching_ldpc
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint8_t
*
w
,
uint8_t
*
e
,
uint8_t
C
,
uint8_t
rvidx
,
uint32_t
E
);
int
nr_rate_matching_ldpc_rx
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint32_t
G
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
int16_t
*
w
,
int16_t
*
soft_input
,
uint8_t
C
,
uint8_t
rvidx
,
uint8_t
clear
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
,
uint32_t
*
E_out
);
uint32_t
E
);
decoder_if_t
phy_threegpplte_turbo_decoder
;
decoder_if_t
phy_threegpplte_turbo_decoder8
;
...
...
openair1/PHY/CODING/nr_rate_matching.c
View file @
bad87bd1
...
...
@@ -63,55 +63,39 @@ void nr_deinterleaving_ldpc(uint32_t E, uint8_t Qm, int16_t *e,int16_t *f)
}
uint32_t
nr_rate_matching_ldpc
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint32_t
G
,
uint8_t
*
w
,
uint8_t
*
e
,
uint8_t
C
,
uint8_t
rvidx
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
)
int
nr_rate_matching_ldpc
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint8_t
*
w
,
uint8_t
*
e
,
uint8_t
C
,
uint8_t
rvidx
,
uint32_t
E
)
{
uint8_t
Cprime
;
uint32_t
Ncb
,
E
,
ind
,
k
,
Nref
,
N
;
//uint8_t *e2;
uint32_t
Ncb
,
ind
,
k
,
Nref
,
N
;
AssertFatal
(
Nl
>
0
,
"Nl is 0
\n
"
);
AssertFatal
(
Qm
>
0
,
"Qm is 0
\n
"
);
if
(
C
==
0
)
{
printf
(
"nr_rate_matching: invalid parameters (C %d
\n
"
,
C
);
return
-
1
;
}
//Bit selection
N
=
(
BG
==
1
)
?
(
66
*
Z
)
:
(
50
*
Z
);
if
(
Ilbrm
==
0
)
Ncb
=
N
;
Ncb
=
N
;
else
{
Nref
=
3
*
Tbslbrm
/
(
2
*
C
);
//R_LBRM = 2/3
Ncb
=
min
(
N
,
Nref
);
}
#ifdef RM_DEBUG
printf
(
"nr_rate_matching: Ncb %d, rvidx %d, G %d, Qm %d, Nl%d, r %d
\n
"
,
Ncb
,
rvidx
,
G
,
Qm
,
Nl
,
r
);
#endif
Cprime
=
C
;
//assume CBGTI not present
if
(
r
<=
Cprime
-
((
G
/
(
Nl
*
Qm
))
%
Cprime
)
-
1
)
E
=
Nl
*
Qm
*
(
G
/
(
Nl
*
Qm
*
Cprime
));
else
E
=
Nl
*
Qm
*
((
G
/
(
Nl
*
Qm
*
Cprime
))
+
1
);
ind
=
(
index_k0
[
BG
-
1
][
rvidx
]
*
Ncb
/
N
)
*
Z
;
#ifdef RM_DEBUG
printf
(
"nr_rate_matching: E %d, k0 %d
Cprime %d modcprime
%d
\n
"
,
E
,
ind
,
Cprime
,((
G
/
(
Nl
*
Qm
))
%
Cprime
)
);
printf
(
"nr_rate_matching
_ldpc
: E %d, k0 %d
, Ncb %d, rvidx
%d
\n
"
,
E
,
ind
,
Ncb
,
rvidx
);
#endif
//e2 = e;
k
=
0
;
for
(;
(
ind
<
Ncb
)
&&
(
k
<
E
);
ind
++
)
{
...
...
@@ -120,7 +104,6 @@ uint32_t nr_rate_matching_ldpc(uint8_t Ilbrm,
printf
(
"RM_TX k%d Ind: %d (%d)
\n
"
,
k
,
ind
,
w
[
ind
]);
#endif
//if (w[ind] != NR_NULL) e2[k++]=w[ind];
if
(
w
[
ind
]
!=
NR_NULL
)
e
[
k
++
]
=
w
[
ind
];
}
...
...
@@ -131,79 +114,60 @@ uint32_t nr_rate_matching_ldpc(uint8_t Ilbrm,
printf
(
"RM_TX k%d Ind: %d (%d)
\n
"
,
k
,
ind
,
w
[
ind
]);
#endif
//if (w[ind] != NR_NULL) e2[k++]=w[ind];
if
(
w
[
ind
]
!=
NR_NULL
)
e
[
k
++
]
=
w
[
ind
];
}
}
return
(
E
)
;
return
0
;
}
int
nr_rate_matching_ldpc_rx
(
uint8_t
Ilbrm
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
uint32_t
G
,
uint32_t
Tbslbrm
,
uint8_t
BG
,
uint16_t
Z
,
int16_t
*
w
,
int16_t
*
soft_input
,
uint8_t
C
,
uint8_t
rvidx
,
uint8_t
clear
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
,
uint32_t
*
E_out
)
uint32_t
E
)
{
uint8_t
Cprime
;
uint32_t
Ncb
,
E
,
ind
,
k
,
Nref
,
N
;
int16_t
*
soft_input2
;
uint32_t
Ncb
,
ind
,
k
,
Nref
,
N
;
#ifdef RM_DEBUG
int
nulled
=
0
;
#endif
if
(
C
==
0
||
Qm
==
0
||
Nl
==
0
)
{
printf
(
"nr_rate_matching: invalid parameters (C %d
, Qm %d, Nl %d
\n
"
,
C
,
Qm
,
Nl
);
return
(
-
1
)
;
if
(
C
==
0
)
{
printf
(
"nr_rate_matching: invalid parameters (C %d
\n
"
,
C
);
return
-
1
;
}
AssertFatal
(
Nl
>
0
,
"Nl is 0
\n
"
);
AssertFatal
(
Qm
>
0
,
"Qm is 0
\n
"
);
//Bit selection
N
=
(
BG
==
1
)
?
(
66
*
Z
)
:
(
50
*
Z
);
if
(
Ilbrm
==
0
)
Ncb
=
N
;
Ncb
=
N
;
else
{
Nref
=
(
3
*
Tbslbrm
/
(
2
*
C
));
//R_LBRM = 2/3
Ncb
=
min
(
N
,
Nref
);
}
Cprime
=
C
;
//assume CBGTI not present
if
(
r
<=
Cprime
-
((
G
/
(
Nl
*
Qm
))
%
Cprime
)
-
1
)
E
=
Nl
*
Qm
*
(
G
/
(
Nl
*
Qm
*
Cprime
));
else
E
=
Nl
*
Qm
*
((
G
/
(
Nl
*
Qm
*
Cprime
))
+
1
);
ind
=
(
index_k0
[
BG
-
1
][
rvidx
]
*
Ncb
/
N
)
*
Z
;
#ifdef RM_DEBUG
printf
(
"nr_rate_matching_ldpc_rx: Clear %d, E %d, Ncb %d,rvidx
%d, G %d, Qm %d, Nl%d, r
%d
\n
"
,
clear
,
E
,
Ncb
,
rvidx
,
G
,
Qm
,
Nl
,
r
);
printf
(
"nr_rate_matching_ldpc_rx: Clear %d, E %d,
k0 %d,
Ncb %d,
rvidx %d
\n
"
,
clear
,
E
,
ind
,
Ncb
,
rvidx
);
#endif
if
(
clear
==
1
)
memset
(
w
,
0
,
Ncb
*
sizeof
(
int16_t
));
soft_input2
=
soft_input
;
k
=
0
;
for
(;
(
ind
<
Ncb
)
&&
(
k
<
E
);
ind
++
)
{
if
(
soft_input
2
[
ind
]
!=
NR_NULL
)
{
w
[
ind
]
+=
soft_input
2
[
k
++
];
if
(
soft_input
[
ind
]
!=
NR_NULL
)
{
w
[
ind
]
+=
soft_input
[
k
++
];
#ifdef RM_DEBUG
printf
(
"RM_RX k%d Ind: %d (%d)
\n
"
,
k
-
1
,
ind
,
w
[
ind
]);
#endif
...
...
@@ -220,10 +184,10 @@ int nr_rate_matching_ldpc_rx(uint8_t Ilbrm,
while
(
k
<
E
)
{
for
(
ind
=
0
;
(
ind
<
Ncb
)
&&
(
k
<
E
);
ind
++
)
{
if
(
soft_input
2
[
ind
]
!=
NR_NULL
)
{
w
[
ind
]
+=
soft_input
2
[
k
++
];
if
(
soft_input
[
ind
]
!=
NR_NULL
)
{
w
[
ind
]
+=
soft_input
[
k
++
];
#ifdef RM_DEBUG
printf
(
"RM_RX k%d Ind: %d (%d)(soft in %d)
\n
"
,
k
-
1
,
ind
,
w
[
ind
],
soft_input
2
[
k
-
1
]);
printf
(
"RM_RX k%d Ind: %d (%d)(soft in %d)
\n
"
,
k
-
1
,
ind
,
w
[
ind
],
soft_input
[
k
-
1
]);
#endif
}
...
...
@@ -237,7 +201,5 @@ int nr_rate_matching_ldpc_rx(uint8_t Ilbrm,
}
}
*
E_out
=
E
;
return
(
0
);
return
0
;
}
openair1/PHY/MODULATION/slot_fep_nr.c
View file @
bad87bd1
...
...
@@ -56,11 +56,17 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
unsigned
int
rx_offset
;
NR_UE_PDCCH
*
pdcch_vars
=
ue
->
pdcch_vars
[
ue
->
current_thread_id
[
Ns
]][
0
];
uint16_t
coreset_start_subcarrier
=
frame_parms
->
first_carrier_offset
;
//+((int)floor(frame_parms->ssb_start_subcarrier/NR_NB_SC_PER_RB)+pdcch_vars->coreset[0].rb_offset)*NR_NB_SC_PER_RB;
uint16_t
nb_rb_coreset
=
24
;
uint16_t
nb_rb_coreset
=
0
;
uint16_t
bwp_start_subcarrier
=
frame_parms
->
first_carrier_offset
;
//+516;
uint16_t
nb_rb_pdsch
=
50
;
uint8_t
p
=
0
;
uint8_t
l0
=
2
;
uint8_t
l0
=
pdcch_vars
->
coreset
[
0
].
duration
;
uint64_t
coreset_freq_dom
=
pdcch_vars
->
coreset
[
0
].
frequencyDomainResources
;
for
(
int
i
=
0
;
i
<
45
;
i
++
)
{
if
(((
coreset_freq_dom
&
0x1FFFFFFFFFFF
)
>>
i
)
&
0x1
)
nb_rb_coreset
++
;
}
nb_rb_coreset
=
6
*
nb_rb_coreset
;
//printf("corset duration %d nb_rb_coreset %d\n", l0, nb_rb_coreset);
void
(
*
dft
)(
int16_t
*
,
int16_t
*
,
int
);
int
tmp_dft_in
[
8192
]
__attribute__
((
aligned
(
32
)));
// This is for misalignment issues for 6 and 15 PRBs
...
...
openair1/PHY/NR_REFSIG/pss_nr.h
View file @
bad87bd1
...
...
@@ -137,7 +137,9 @@ int set_pss_nr(int ofdm_symbol_size);
int
pss_synchro_nr
(
PHY_VARS_NR_UE
*
PHY_vars_UE
,
int
rate_change
);
int
pss_search_time_nr
(
int
**
rxdata
,
///rx data in time domain
NR_DL_FRAME_PARMS
*
frame_parms
,
int
*
eNB_id
);
int
fo_flag
,
int
*
eNB_id
,
int
*
f_off
);
#endif
#undef EXTERN
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
View file @
bad87bd1
...
...
@@ -90,6 +90,8 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t dlsch,
@param nb_rb, nb_symb_sch, nb_re_dmrs, length_dmrs */
uint32_t
nr_get_G
(
uint16_t
nb_rb
,
uint16_t
nb_symb_sch
,
uint8_t
nb_re_dmrs
,
uint16_t
length_dmrs
,
uint8_t
Qm
,
uint8_t
Nl
);
uint32_t
nr_get_E
(
uint32_t
G
,
uint8_t
C
,
uint8_t
Qm
,
uint8_t
Nl
,
uint8_t
r
);
void
free_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
);
void
clean_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
);
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
View file @
bad87bd1
...
...
@@ -280,7 +280,7 @@ int nr_dlsch_encoding(unsigned char *a,
uint32_t
A
,
Z
;
uint32_t
*
pz
=
&
Z
;
uint8_t
mod_order
=
rel15
.
modulation_order
;
uint16_t
Kr
=
0
,
r
,
r_offset
=
0
;
//
Kr_bytes
uint16_t
Kr
=
0
,
r
,
r_offset
=
0
,
Kr_bytes
;
uint8_t
*
d_tmp
[
MAX_NUM_DLSCH_SEGMENTS
];
uint8_t
kb
,
BG
=
1
;
uint32_t
E
;
...
...
@@ -346,7 +346,7 @@ int nr_dlsch_encoding(unsigned char *a,
}
Kr
=
dlsch
->
harq_processes
[
harq_pid
]
->
K
;
//
Kr_bytes = Kr>>3;
Kr_bytes
=
Kr
>>
3
;
//printf("segment Z %d kb %d k %d Kr %d BG %d\n", *pz,kb,dlsch->harq_processes[harq_pid]->K,Kr,BG);
...
...
@@ -403,25 +403,24 @@ int nr_dlsch_encoding(unsigned char *a,
//start_meas(rm_stats);
#ifdef DEBUG_DLSCH_CODING
printf
(
"rvidx in encoding = %d
\n
"
,
dlsch
->
harq_processes
[
harq_pid
]
->
rvidx
);
printf
(
"rvidx in encoding = %d
\n
"
,
rel15
.
redundancy_version
);
#endif
E
=
nr_rate_matching_ldpc
(
Ilbrm
,
Tbslbrm
,
BG
,
*
pz
,
G
,
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
],
dlsch
->
harq_processes
[
harq_pid
]
->
e
+
r_offset
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
rel15
.
redundancy_version
,
mod_order
,
rel15
.
nb_layers
,
r
);
E
=
nr_get_E
(
G
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
mod_order
,
rel15
.
nb_layers
,
r
);
nr_rate_matching_ldpc
(
Ilbrm
,
Tbslbrm
,
BG
,
*
pz
,
dlsch
->
harq_processes
[
harq_pid
]
->
d
[
r
],
dlsch
->
harq_processes
[
harq_pid
]
->
e
+
r_offset
,
dlsch
->
harq_processes
[
harq_pid
]
->
C
,
rel15
.
redundancy_version
,
E
);
#ifdef DEBUG_DLSCH_CODING
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"output ratematching e[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
e
[
i
],
r_offset
);
printf
(
"output ratematching e[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
e
[
i
+
r_offset
],
r_offset
);
#endif
//stop_meas(rm_stats);
...
...
@@ -432,18 +431,15 @@ int nr_dlsch_encoding(unsigned char *a,
dlsch
->
harq_processes
[
harq_pid
]
->
f
+
r_offset
);
//stop_meas(i_stats);
r_offset
+=
E
;
#ifdef DEBUG_DLSCH_CODING
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"output interleaving f[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
[
i
+
r
*
r_offset
],
r_offset
);
#endif
#ifdef DEBUG_DLSCH_CODING
printf
(
"output interleaving f[%d]= %d r_offset %d
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
[
i
+
r_offset
],
r_offset
);
if
(
r
==
dlsch
->
harq_processes
[
harq_pid
]
->
C
-
1
)
write_output
(
"enc_output.m"
,
"enc"
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
,
r_offset
,
1
,
4
);
write_output
(
"enc_output.m"
,
"enc"
,
dlsch
->
harq_processes
[
harq_pid
]
->
f
,
G
,
1
,
4
);
#endif
r_offset
+=
E
;
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING
,
VCD_FUNCTION_OUT
);
...
...
openair1/PHY/NR_TRANSPORT/nr_tbs_tools.c
View file @
bad87bd1
...
...
@@ -176,3 +176,18 @@ uint32_t nr_get_G(uint16_t nb_rb, uint16_t nb_symb_sch,uint8_t nb_re_dmrs,uint16
G
=
((
NR_NB_SC_PER_RB
*
nb_symb_sch
)
-
(
nb_re_dmrs
*
length_dmrs
))
*
nb_rb
*
Qm
*
Nl
;
return
(
G
);
}