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
wangjie
OpenXG-RAN
Commits
53922c13
Commit
53922c13
authored
Sep 10, 2020
by
hardy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/ptrs_ul_phase_compensation' into integration_2020_wk37
parents
0d9fc950
8f58d1ec
Changes
18
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
801 additions
and
195 deletions
+801
-195
.gitignore
.gitignore
+6
-0
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+1
-0
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+9
-3
cmake_targets/build_oai
cmake_targets/build_oai
+1
-1
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+11
-5
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+407
-0
openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
+26
-0
openair1/PHY/NR_REFSIG/dmrs_nr.c
openair1/PHY/NR_REFSIG/dmrs_nr.c
+21
-0
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
+24
-0
openair1/PHY/NR_REFSIG/nr_refsig.h
openair1/PHY/NR_REFSIG/nr_refsig.h
+3
-0
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
+0
-1
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
+88
-111
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
+3
-3
openair1/PHY/defs_gNB.h
openair1/PHY/defs_gNB.h
+9
-2
openair1/SIMULATION/NR_PHY/ulsim.c
openair1/SIMULATION/NR_PHY/ulsim.c
+140
-67
openair1/SIMULATION/TOOLS/phase_noise.c
openair1/SIMULATION/TOOLS/phase_noise.c
+42
-0
openair1/SIMULATION/TOOLS/sim.h
openair1/SIMULATION/TOOLS/sim.h
+8
-0
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
+2
-2
No files found.
.gitignore
View file @
53922c13
...
...
@@ -12,3 +12,9 @@ targets/bin/
# vscode
.vscode
# Tags for vim/global
GPATH
GRTAGS
GTAGS
tags
cmake_targets/CMakeLists.txt
View file @
53922c13
...
...
@@ -2377,6 +2377,7 @@ add_library(LFDS7
add_library
(
SIMU_COMMON
${
OPENAIR1_DIR
}
/SIMULATION/TOOLS/random_channel.c
${
OPENAIR1_DIR
}
/SIMULATION/TOOLS/rangen_double.c
${
OPENAIR1_DIR
}
/SIMULATION/TOOLS/phase_noise.c
)
# Simulation library
...
...
cmake_targets/autotests/test_case_list.xml
View file @
53922c13
...
...
@@ -1276,7 +1276,10 @@
(Test2: MCS 16 50 PRBs),
(Test3: MCS 28 50 PRBs),
(Test4: MCS 9 217 PRBs),
(Test5: MCS 9 273 PRBs)
</desc>
(Test5: MCS 9 273 PRBs),
(Test6: DMRS Type A, 3 DMRS, 4 PTRS, 5 Interpolated Symbols),
(Test7: DMRS Type B, 3 DMRS, 2 PTRS, 7 Interpolated Symbols),
(Test8: DMRS Type B, 3 DMRS, 2 PTRS, 3 Interpolated Symbols)
</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>
...
...
@@ -1287,8 +1290,11 @@
-n100 -m16 -s10
-n100 -m28 -s20
-n100 -m9 -R217 -r217 -s5
-n100 -m9 -R273 -r273 -s5
</main_exec_args>
<tags>
nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5
</tags>
-n100 -m9 -R273 -r273 -s5
-n100 -s5 -T 2 1 2 -U 2 0 2
-n100 -s5 -T 2 2 2 -U 2 1 2
-n100 -s5 -a4 -b8 -T 2 1 2 -U 2 1 3
</main_exec_args>
<tags>
nr_ulsim.test1 nr_ulsim.test2 nr_ulsim.test3 nr_ulsim.test4 nr_ulsim.test5 nr_ulsim.test6 nr_ulsim.test7 nr_ulsim.test8
</tags>
<search_expr_true>
PUSCH test OK
</search_expr_true>
<search_expr_false>
segmentation fault|assertion|exiting|fatal
</search_expr_false>
<nruns>
3
</nruns>
...
...
cmake_targets/build_oai
View file @
53922c13
...
...
@@ -211,7 +211,7 @@ function main() {
GDB
=
0
CMAKE_BUILD_TYPE
=
"RelWithDebInfo"
echo_info
"Will Compile with gdb symbols"
CMAKE_CMD
=
"
$CMAKE_CMD
-DCMAKE_BUILD_TYPE=RelWithDebInfo"
CMAKE_CMD
=
"
$CMAKE_CMD
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DCMAKE_EXPORT_COMPILE_COMMANDS=1
"
shift
;;
"MinSizeRel"
)
...
...
openair1/PHY/INIT/nr_init.c
View file @
53922c13
...
...
@@ -251,6 +251,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
pusch_vars
[
ULSCH_id
]
->
ul_ch_estimates_ext
=
(
int32_t
**
)
malloc16
(
Prx
*
sizeof
(
int32_t
*
)
);
pusch_vars
[
ULSCH_id
]
->
ul_ch_ptrs_estimates
=
(
int32_t
**
)
malloc16
(
Prx
*
sizeof
(
int32_t
*
)
);
pusch_vars
[
ULSCH_id
]
->
ul_ch_ptrs_estimates_ext
=
(
int32_t
**
)
malloc16
(
Prx
*
sizeof
(
int32_t
*
)
);
pusch_vars
[
ULSCH_id
]
->
ptrs_phase_per_slot
=
(
int32_t
**
)
malloc16
(
Prx
*
sizeof
(
int32_t
*
)
);
pusch_vars
[
ULSCH_id
]
->
ul_ch_estimates_time
=
(
int32_t
**
)
malloc16
(
Prx
*
sizeof
(
int32_t
*
)
);
pusch_vars
[
ULSCH_id
]
->
rxdataF_comp
=
(
int32_t
**
)
malloc16
(
Prx
*
sizeof
(
int32_t
*
)
);
pusch_vars
[
ULSCH_id
]
->
ul_ch_mag0
=
(
int32_t
**
)
malloc16
(
Prx
*
sizeof
(
int32_t
*
)
);
...
...
@@ -268,6 +269,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
pusch_vars
[
ULSCH_id
]
->
ul_ch_estimates_time
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
2
*
sizeof
(
int32_t
)
*
fp
->
ofdm_symbol_size
);
pusch_vars
[
ULSCH_id
]
->
ul_ch_ptrs_estimates
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
fp
->
ofdm_symbol_size
*
2
*
fp
->
symbols_per_slot
);
// max intensity in freq is 1 sc every 2 RBs
pusch_vars
[
ULSCH_id
]
->
ul_ch_ptrs_estimates_ext
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
fp
->
ofdm_symbol_size
*
2
*
fp
->
symbols_per_slot
);
pusch_vars
[
ULSCH_id
]
->
ptrs_phase_per_slot
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
fp
->
symbols_per_slot
);
// symbols per slot
pusch_vars
[
ULSCH_id
]
->
rxdataF_comp
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
sizeof
(
int32_t
)
*
N_RB_UL
*
12
*
fp
->
symbols_per_slot
);
pusch_vars
[
ULSCH_id
]
->
ul_ch_mag0
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
symbols_per_slot
*
sizeof
(
int32_t
)
*
N_RB_UL
*
12
);
pusch_vars
[
ULSCH_id
]
->
ul_ch_magb0
[
i
]
=
(
int32_t
*
)
malloc16_clear
(
fp
->
symbols_per_slot
*
sizeof
(
int32_t
)
*
N_RB_UL
*
12
);
...
...
@@ -278,6 +280,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
printf
(
"ULSCH_id %d (before llr alloc) : %p
\n
"
,
ULSCH_id
,
gNB
->
dlsch
[
0
][
0
]
->
harq_processes
[
0
]);
pusch_vars
[
ULSCH_id
]
->
llr
=
(
int16_t
*
)
malloc16_clear
(
(
8
*
((
3
*
8
*
6144
)
+
12
))
*
sizeof
(
int16_t
)
);
// [hna] 6144 is LTE and (8*((3*8*6144)+12)) is not clear
printf
(
"ULSCH_id %d (after llr alloc) : %p
\n
"
,
ULSCH_id
,
gNB
->
dlsch
[
0
][
0
]
->
harq_processes
[
0
]);
pusch_vars
[
ULSCH_id
]
->
ul_valid_re_per_slot
=
(
int16_t
*
)
malloc16_clear
(
sizeof
(
int16_t
)
*
fp
->
symbols_per_slot
);
}
//ulsch_id
/*
for (ulsch_id=0; ulsch_id<NUMBER_OF_UE_MAX; ulsch_id++)
...
...
@@ -338,6 +341,7 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_estimates_time
[
i
]);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_ptrs_estimates
[
i
]);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_ptrs_estimates_ext
[
i
]);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ptrs_phase_per_slot
[
i
]);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
rxdataF_comp
[
i
]);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_mag0
[
i
]);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_magb0
[
i
]);
...
...
@@ -353,6 +357,8 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_ptrs_estimates
);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_ptrs_estimates_ext
);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_estimates_time
);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ptrs_phase_per_slot
);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_valid_re_per_slot
);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
rxdataF_comp
);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_mag0
);
free_and_zero
(
pusch_vars
[
ULSCH_id
]
->
ul_ch_magb0
);
...
...
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
View file @
53922c13
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_ESTIMATION/nr_ul_estimation.h
View file @
53922c13
...
...
@@ -51,4 +51,30 @@ void gNB_I0_measurements(PHY_VARS_gNB *gNB);
int
nr_est_timing_advance_pusch
(
PHY_VARS_gNB
*
phy_vars_gNB
,
int
UE_id
);
void
nr_pusch_ptrs_processing
(
PHY_VARS_gNB
*
gNB
,
nfapi_nr_pusch_pdu_t
*
rel15_ul
,
uint8_t
ulsch_id
,
uint8_t
nr_tti_rx
,
uint8_t
dmrs_symbol_flag
,
unsigned
char
symbol
,
uint32_t
nb_re_pusch
);
void
nr_pusch_phase_estimation
(
NR_DL_FRAME_PARMS
*
frame_parms
,
nfapi_nr_pusch_pdu_t
*
rel15_ul
,
int16_t
*
ptrs_ch_p
,
unsigned
char
Ns
,
unsigned
char
symbol
,
int16_t
*
rxF_comp
,
uint32_t
***
ptrs_gold_seq
,
int16_t
*
error_est
,
uint16_t
*
ptrs_sc
);
void
nr_pusch_phase_interpolation
(
int16_t
*
error_est
,
uint8_t
start_symbol
,
uint8_t
end_symbol
);
int
nr_ptrs_find_next_estimate
(
int16_t
*
error_est
,
uint8_t
counter
,
uint8_t
end_symbol
);
#endif
openair1/PHY/NR_REFSIG/dmrs_nr.c
View file @
53922c13
...
...
@@ -362,4 +362,25 @@ void generate_dmrs_pbch(uint32_t dmrs_pbch_bitmap[DMRS_PBCH_I_SSB][DMRS_PBCH_N_H
free
(
dmrs_sequence
);
#endif
}
/* return the position of next dmrs symbol in a slot */
int
get_next_dmrs_symbol_in_slot
(
uint16_t
ul_dmrs_symb_pos
,
uint8_t
counter
,
uint8_t
end_symbol
)
{
for
(
uint8_t
symbol
=
counter
;
symbol
<
end_symbol
;
symbol
++
)
if
((
ul_dmrs_symb_pos
>>
symbol
)
&
0x01
)
{
return
symbol
;
}
return
0
;
}
/* return the total number of dmrs symbol in a slot */
uint8_t
get_dmrs_symbols_in_slot
(
uint16_t
l_prime_mask
,
uint16_t
nb_symb
)
{
uint8_t
tmp
=
0
;
for
(
int
i
=
0
;
i
<
nb_symb
;
i
++
)
{
tmp
+=
(
l_prime_mask
>>
i
)
&
0x01
;
}
return
tmp
;
}
openair1/PHY/NR_REFSIG/nr_dmrs_rx.c
View file @
53922c13
...
...
@@ -223,3 +223,27 @@ int nr_pbch_dmrs_rx(int symbol,
return
(
0
);
}
/*!
\brief This function generate gold ptrs sequence for each OFDM symbol
\param *in gold sequence for ptrs per OFDM symbol
\param length is number of RE in a OFDM symbol
\param *output pointer to all ptrs RE in a OFDM symbol
*/
void
nr_gen_ref_conj_symbols
(
uint32_t
*
in
,
uint32_t
length
,
int16_t
*
output
,
uint16_t
offset
,
int
mod_order
)
{
uint8_t
idx
,
b_idx
;
for
(
int
i
=
0
;
i
<
length
/
mod_order
;
i
++
)
{
idx
=
0
;
for
(
int
j
=
0
;
j
<
mod_order
;
j
++
)
{
b_idx
=
(
i
*
mod_order
+
j
)
&
0x1f
;
if
(
i
&&
(
!
b_idx
))
in
++
;
idx
^=
(((
*
in
)
>>
b_idx
)
&
1
)
<<
(
mod_order
-
j
-
1
);
}
output
[
i
<<
1
]
=
nr_rx_mod_table
[(
offset
+
idx
)
<<
1
];
output
[(
i
<<
1
)
+
1
]
=
nr_rx_mod_table
[((
offset
+
idx
)
<<
1
)
+
1
];
}
}
openair1/PHY/NR_REFSIG/nr_refsig.h
View file @
53922c13
...
...
@@ -52,6 +52,9 @@ int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB,
uint8_t
dmrs_type
);
void
init_scrambling_luts
(
void
);
void
nr_gen_ref_conj_symbols
(
uint32_t
*
in
,
uint32_t
length
,
int16_t
*
output
,
uint16_t
offset
,
int
mod_order
);
uint8_t
get_next_dmrs_symbol_in_slot
(
uint16_t
ul_dmrs_symb_pos
,
uint8_t
counter
,
uint8_t
end_symbol
);
uint8_t
get_dmrs_symbols_in_slot
(
uint16_t
l_prime_mask
,
uint16_t
nb_symb
);
void
nr_generate_modulation_table
(
void
);
...
...
openair1/PHY/NR_TRANSPORT/nr_transport_proto.h
View file @
53922c13
...
...
@@ -157,7 +157,6 @@ void nr_ulsch_extract_rbs_single(int32_t **rxdataF,
NR_gNB_PUSCH
*
pusch_vars
,
unsigned
char
symbol
,
uint8_t
is_dmrs_symbol
,
uint8_t
is_ptrs_symbol
,
nfapi_nr_pusch_pdu_t
*
pusch_pdu
,
NR_DL_FRAME_PARMS
*
frame_parms
);
...
...
openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
View file @
53922c13
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c
View file @
53922c13
...
...
@@ -226,12 +226,12 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
/////////////////////////PTRS parameters' initialization/////////////////////////
///////////
int16_t
mod_ptrs
[
(
nb_rb
/
2
)
*
(
NR_SYMBOLS_PER_SLOT
-
1
)
*
2
]
;
// assume maximum number of PTRS per pusch allocation
int16_t
mod_ptrs
[
nb_rb
]
__attribute
((
aligned
(
16
)))
;
// assume maximum number of PTRS per pusch allocation
K_ptrs
=
0
;
// just to avoid a warning
if
(
harq_process_ul_ue
->
pusch_pdu
.
pdu_bit_map
&
PUSCH_PDU_BITMAP_PUSCH_PTRS
)
{
K_ptrs
=
(
harq_process_ul_ue
->
pusch_pdu
.
pusch_ptrs
.
ptrs_freq_density
)
?
4
:
2
;
K_ptrs
=
harq_process_ul_ue
->
pusch_pdu
.
pusch_ptrs
.
ptrs_freq_density
;
L_ptrs
=
1
<<
harq_process_ul_ue
->
pusch_pdu
.
pusch_ptrs
.
ptrs_time_density
;
beta_ptrs
=
1
;
// temp value until power control is implemented
...
...
@@ -322,7 +322,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE,
uint16_t
m
=
0
,
n
=
0
,
dmrs_idx
=
0
,
ptrs_idx
=
0
;
for
(
l
=
start_symbol
;
l
<
start_symbol
+
number_of_symbols
;
l
++
)
{
ptrs_idx
=
0
;
// every PTRS symbol has a new gold sequence
k
=
start_sc
;
n
=
0
;
dmrs_idx
=
0
;
...
...
openair1/PHY/defs_gNB.h
View file @
53922c13
...
...
@@ -397,8 +397,6 @@ typedef struct {
/// - first index: rx antenna id [0..nb_antennas_rx[
/// - second index (definition from phy_init_lte_eNB()): ? [0..12*N_RB_UL*frame_parms->symbols_per_tti[
int32_t
**
rxdataF_ext2
;
/// \brief Offset for calculating the index of rxdataF_ext for the current symbol
uint32_t
rxdataF_ext_offset
;
/// \brief Hold the channel estimates in time domain based on DRS.
/// - first index: rx antenna id [0..nb_antennas_rx[
/// - second index: ? [0..4*ofdm_symbol_size[
...
...
@@ -466,6 +464,13 @@ typedef struct {
uint16_t
ptrs_symbols
;
// PTRS subcarriers per OFDM symbol
uint16_t
ptrs_sc_per_ofdm_symbol
;
/// \brief Estimated phase error based upon PTRS on each symbol .
/// - first index: ? [0..7] Number of Antenna
/// - second index: ? [0...14] smybol per slot
int32_t
**
ptrs_phase_per_slot
;
/// \brief Total RE count after DMRS/PTRS RE's are extracted from respective symbol.
/// - first index: ? [0...14] smybol per slot
int16_t
*
ul_valid_re_per_slot
;
/// flag to verify if channel level computation is done
uint8_t
cl_done
;
}
NR_gNB_PUSCH
;
...
...
@@ -807,10 +812,12 @@ typedef struct PHY_VARS_gNB_s {
time_stats_t
ulsch_deinterleaving_stats
;
time_stats_t
ulsch_unscrambling_stats
;
time_stats_t
ulsch_channel_estimation_stats
;
time_stats_t
ulsch_ptrs_processing_stats
;
time_stats_t
ulsch_channel_compensation_stats
;
time_stats_t
ulsch_rbs_extraction_stats
;
time_stats_t
ulsch_mrc_stats
;
time_stats_t
ulsch_llr_stats
;
/*
time_stats_t rx_dft_stats;
time_stats_t ulsch_freq_offset_estimation_stats;
...
...
openair1/SIMULATION/NR_PHY/ulsim.c
View file @
53922c13
This diff is collapsed.
Click to expand it.
openair1/SIMULATION/TOOLS/phase_noise.c
0 → 100644
View file @
53922c13
/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "sim.h"
/* linear phase noise model */
void
phase_noise
(
double
ts
,
int16_t
*
InRe
,
int16_t
*
InIm
)
{
double
fd
=
300
;
//0.01*30000
static
double
i
=
0
;
double
real
,
imag
,
x
,
y
;
i
++
;
real
=
cos
(
fd
*
2
*
M_PI
*
i
*
ts
);
imag
=
sin
(
fd
*
2
*
M_PI
*
i
*
ts
);
x
=
((
real
*
(
double
)
InRe
[
0
])
-
(
imag
*
(
double
)
InIm
[
0
]))
;
y
=
((
real
*
(
double
)
InIm
[
0
])
+
(
imag
*
(
double
)
InRe
[
0
]))
;
InRe
[
0
]
=
(
int16_t
)(
x
);
InIm
[
0
]
=
(
int16_t
)(
y
);
}
openair1/SIMULATION/TOOLS/sim.h
View file @
53922c13
...
...
@@ -460,6 +460,14 @@ void init_channelmod(void) ;
double
N_RB2sampling_rate
(
uint16_t
N_RB
);
double
N_RB2channel_bandwidth
(
uint16_t
N_RB
);
/* Linear phase noise model */
/*!
\brief This function produce phase noise and add to input signal
\param ts Sampling time
\param *Re *Im Real and Imag part of the signal
*/
void
phase_noise
(
double
ts
,
int16_t
*
InRe
,
int16_t
*
InIm
);
#include "targets/RT/USER/rfsim.h"
void
do_DL_sig
(
sim_t
*
sim
,
...
...
openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c
View file @
53922c13
...
...
@@ -1940,9 +1940,9 @@ uint8_t get_K_ptrs(uint16_t nrb0, uint16_t nrb1, uint16_t N_RB) {
LOG_I
(
PHY
,
"PUSH PT-RS is not present.
\n
"
);
return
-
1
;
}
else
if
(
N_RB
>=
nrb0
&&
N_RB
<
nrb1
)
return
0
;
return
2
;
else
return
1
;
return
4
;
}
uint16_t
nr_dci_size
(
NR_ServingCellConfigCommon_t
*
scc
,
...
...
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