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
canghaiwuhen
OpenXG-RAN
Commits
496eae67
Commit
496eae67
authored
Oct 11, 2018
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
minor changes in initial synchronization
parent
a780c31d
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
67 additions
and
45 deletions
+67
-45
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+2
-2
openair1/PHY/INIT/nr_init.c
openair1/PHY/INIT/nr_init.c
+2
-0
openair1/PHY/INIT/nr_init_ue.c
openair1/PHY/INIT/nr_init_ue.c
+2
-0
openair1/PHY/MODULATION/slot_fep_nr.c
openair1/PHY/MODULATION/slot_fep_nr.c
+7
-8
openair1/PHY/NR_REFSIG/sss_nr.h
openair1/PHY/NR_REFSIG/sss_nr.h
+1
-1
openair1/PHY/NR_TRANSPORT/nr_sss.c
openair1/PHY/NR_TRANSPORT/nr_sss.c
+3
-2
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
+4
-2
openair1/PHY/NR_UE_TRANSPORT/pss_nr.c
openair1/PHY/NR_UE_TRANSPORT/pss_nr.c
+5
-0
openair1/PHY/NR_UE_TRANSPORT/sss_nr.c
openair1/PHY/NR_UE_TRANSPORT/sss_nr.c
+35
-27
openair1/PHY/TOOLS/lte_dfts.c
openair1/PHY/TOOLS/lte_dfts.c
+6
-3
No files found.
cmake_targets/CMakeLists.txt
View file @
496eae67
...
...
@@ -1297,7 +1297,7 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/NR_REFSIG/nr_gold.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/file_output.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/cadd_vv.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lte_dfts.c
#
${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/log2_approx.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/cmult_sv.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/cmult_vv.c
...
...
@@ -1334,7 +1334,7 @@ set(PHY_SRC_UE
${
OPENAIR1_DIR
}
/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/file_output.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/cadd_vv.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/lte_dfts.c
#
${OPENAIR1_DIR}/PHY/TOOLS/lte_dfts.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/log2_approx.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/cmult_sv.c
${
OPENAIR1_DIR
}
/PHY/TOOLS/cmult_vv.c
...
...
openair1/PHY/INIT/nr_init.c
View file @
496eae67
...
...
@@ -100,6 +100,8 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB,
gNB
->
check_for_MUMIMO_transmissions
=
0
;
while
(
gNB
->
configured
==
0
)
usleep
(
10000
);
init_dfts
();
/*
LOG_I(PHY,"[gNB %"PRIu8"] Initializing DL_FRAME_PARMS : N_RB_DL %"PRIu8", PHICH Resource %d, PHICH Duration %d nb_antennas_tx:%u nb_antennas_rx:%u PRACH[rootSequenceIndex:%u prach_Config_enabled:%u configIndex:%u highSpeed:%u zeroCorrelationZoneConfig:%u freqOffset:%u]\n",
gNB->Mod_id,
...
...
openair1/PHY/INIT/nr_init_ue.c
View file @
496eae67
...
...
@@ -655,6 +655,8 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue,
fp
->
nb_antennas_tx
=
1
;
fp
->
nb_antennas_rx
=
1
;
init_dfts
();
printf
(
"Initializing UE vars (abstraction %"
PRIu8
") for eNB TXant %"
PRIu8
", UE RXant %"
PRIu8
"
\n
"
,
abstraction_flag
,
fp
->
nb_antennas_tx
,
fp
->
nb_antennas_rx
);
//LOG_D(PHY,"[MSC_NEW][FRAME 00000][PHY_UE][MOD %02u][]\n", ue->Mod_id+NB_eNB_INST);
...
...
openair1/PHY/MODULATION/slot_fep_nr.c
View file @
496eae67
...
...
@@ -25,17 +25,17 @@
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
#include "PHY/NR_UE_ESTIMATION/nr_estimation.h"
//
#define DEBUG_FEP
#define DEBUG_FEP
#define SOFFSET 0
int
nr_slot_fep
(
PHY_VARS_NR_UE
*
ue
,
unsigned
char
l
,
unsigned
char
Ns
,
int
sample_offset
,
int
no_prefix
,
int
reset_freq_est
,
NR_CHANNEL_EST_t
channel
)
unsigned
char
l
,
unsigned
char
Ns
,
int
sample_offset
,
int
no_prefix
,
int
reset_freq_est
,
NR_CHANNEL_EST_t
channel
)
{
NR_DL_FRAME_PARMS
*
frame_parms
=
&
ue
->
frame_parms
;
NR_UE_COMMON
*
common_vars
=
&
ue
->
common_vars
;
...
...
@@ -143,7 +143,6 @@ int nr_slot_fep(PHY_VARS_NR_UE *ue,
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
rx_dft_stats
);
#endif
}
}
else
{
rx_offset
+=
(
frame_parms
->
ofdm_symbol_size
+
nb_prefix_samples
)
*
l
;
// +
...
...
openair1/PHY/NR_REFSIG/sss_nr.h
View file @
496eae67
...
...
@@ -51,7 +51,7 @@
#define NUMBER_SSS_SEQUENCE (336)
#define INVALID_SSS_SEQUENCE (NUMBER_SSS_SEQUENCE)
#define LENGTH_SSS_NR (127)
#define SCALING_METRIC_SSS_NR (19)
#define SCALING_METRIC_SSS_NR (1
5)//(1
9)
#define N_ID_2_NUMBER (NUMBER_PSS_SEQUENCE)
#define N_ID_1_NUMBER (NUMBER_SSS_SEQUENCE)
...
...
openair1/PHY/NR_TRANSPORT/nr_sss.c
View file @
496eae67
...
...
@@ -21,7 +21,7 @@
#include "PHY/NR_TRANSPORT/nr_transport.h"
//
#define NR_SSS_DEBUG
#define NR_SSS_DEBUG
int
nr_generate_sss
(
int16_t
*
d_sss
,
int32_t
**
txdataF
,
...
...
@@ -76,6 +76,7 @@ int nr_generate_sss( int16_t *d_sss,
for
(
int
m
=
0
;
m
<
NR_SSS_LENGTH
;
m
++
)
{
((
int16_t
*
)
txdataF
[
aa
])[
2
*
(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)]
=
(
a
*
d_sss
[
m
])
>>
15
;
printf
(
"sss %d: %d
\n
"
,
m
,((
int16_t
*
)
txdataF
[
aa
])[
2
*
(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)]);
k
++
;
if
(
k
>=
frame_parms
->
ofdm_symbol_size
)
...
...
@@ -83,7 +84,7 @@ int nr_generate_sss( int16_t *d_sss,
}
}
#ifdef NR_SSS_DEBUG
write_output
(
"sss_0.m"
,
"sss_0"
,
(
void
*
)
txdataF
[
0
][
2
*
l
*
frame_parms
->
ofdm_symbol_size
],
frame_parms
->
ofdm_symbol_size
,
1
,
1
);
// write_output("sss_0.m", "sss_0", (void*)txdataF[0][
l*frame_parms->ofdm_symbol_size], frame_parms->ofdm_symbol_size, 1, 1);
#endif
return
0
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c
View file @
496eae67
...
...
@@ -567,7 +567,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
#ifdef DEBUG_PBCH
//printf("address dataf %p",nr_ue_common_vars->common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF);
write_output
(
"rxdataF0_pbch.m"
,
"rxF0pbch"
,
nr_ue_common_vars
->
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
subframe_rx
]].
rxdataF
,
frame_parms
->
ofdm_symbol_size
*
4
,
2
,
1
);
write_output
(
"rxdataF0_pbch.m"
,
"rxF0pbch"
,
nr_ue_common_vars
->
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
subframe_rx
]].
rxdataF
,
frame_parms
->
ofdm_symbol_size
*
4
,
1
,
1
);
#endif
nr_pbch_extract
(
nr_ue_common_vars
->
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
subframe_rx
]].
rxdataF
,
...
...
@@ -718,6 +718,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
printf
(
"[PBCH] decoder payload[%d] = %x
\n
"
,
i
,
decoded_output
[
i
]);
}
//#endif
ue
->
dl_indication
.
rx_ind
=
&
ue
->
rx_ind
;
// hang on rx_ind instance
//ue->rx_ind.sfn_slot = 0; //should be set by higher-1-layer, i.e. clean_and_set_if_instance()
ue
->
rx_ind
.
number_pdus
=
ue
->
rx_ind
.
number_pdus
+
1
;
...
...
@@ -729,7 +730,8 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue,
ue
->
rx_ind
.
rx_indication_body
->
mib_pdu
.
ssb_length
=
Lmax
;
// confirm with TCL
ue
->
rx_ind
.
rx_indication_body
->
mib_pdu
.
cell_id
=
frame_parms
->
Nid_cell
;
// confirm with TCL
ue
->
if_inst
->
dl_indication
(
&
ue
->
dl_indication
);
if
(
ue
->
if_inst
&&
ue
->
if_inst
->
dl_indication
)
ue
->
if_inst
->
dl_indication
(
&
ue
->
dl_indication
);
return
0
;
}
...
...
openair1/PHY/NR_UE_TRANSPORT/pss_nr.c
View file @
496eae67
...
...
@@ -269,6 +269,8 @@ void generate_pss_nr(int N_ID_2, int ofdm_symbol_size)
#ifdef DBG_PSS_NR
if
(
N_ID_2
==
0
)
{
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"f %d: %d,%d
\n
"
,
i
,
synchroF_tmp
[
i
<<
1
],
synchroF_tmp
[
1
+
(
i
<<
1
)]);
for
(
int
i
=
0
;
i
<
16
;
i
++
)
printf
(
"t %d: %d,%d
\n
"
,
i
,
primary_synchro_time
[
i
<<
1
],
primary_synchro_time
[
1
+
(
i
<<
1
)]);
char
output_file
[
255
];
char
sequence_name
[
255
];
sprintf
(
output_file
,
"%s%d_%d%s"
,
"pss_seq_t_"
,
N_ID_2
,
length
,
".m"
);
...
...
@@ -277,6 +279,9 @@ void generate_pss_nr(int N_ID_2, int ofdm_symbol_size)
printf
(
"file %s sequence %s
\n
"
,
output_file
,
sequence_name
);
write_output
(
output_file
,
sequence_name
,
primary_synchro_time
,
length
,
1
,
1
);
sprintf
(
output_file
,
"%s%d_%d%s"
,
"pss_seq_f_"
,
N_ID_2
,
length
,
".m"
);
sprintf
(
sequence_name
,
"%s%d_%d"
,
"pss_seq_f_"
,
N_ID_2
,
length
);
write_output
(
output_file
,
sequence_name
,
synchroF_tmp
,
length
,
1
,
1
);
}
#endif
...
...
openair1/PHY/NR_UE_TRANSPORT/sss_nr.c
View file @
496eae67
...
...
@@ -96,7 +96,8 @@ void init_context_sss_nr(int amp)
/* Modulation of SSS is a BPSK TS 36.211 chapter 5.1.2 BPSK */
#if 1
d_sss
[
N_ID_2
][
N_ID_1
][
n
]
=
dss_current
*
amp
;
d_sss
[
N_ID_2
][
N_ID_1
][
n
]
=
dss_current
;
// * amp;
(
void
)
amp
;
#else
(
void
)
amp
;
d_sss
[
N_ID_2
][
N_ID_1
][
n
]
=
(
dss_current
*
SHRT_MAX
)
>>
SCALING_PSS_NR
;
...
...
@@ -126,6 +127,8 @@ void init_context_sss_nr(int amp)
*
*********************************************************************/
#define DEBUG_SSS_NR
#define DEBUG_PLOT_SSS
void
insert_sss_nr
(
int16_t
*
sss_time
,
NR_DL_FRAME_PARMS
*
frame_parms
)
{
...
...
@@ -425,21 +428,21 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, int32_t *tot_metric,uint8_t *phase_max)
// Do FFTs for SSS/PSS
// SSS
nr_slot_fep
(
ue
,
SSS_SYMBOL_NB
,
// symbol number
0
,
// Ns slot number
ue
->
rx_offset
,
// sample_offset of int16_t
0
,
// no_prefix
1
,
// reset frequency estimation
NR_SSS_EST
);
SSS_SYMBOL_NB
,
// symbol number
0
,
// Ns slot number
ue
->
rx_offset
,
// sample_offset of int16_t
0
,
// no_prefix
1
,
// reset frequency estimation
NR_SSS_EST
);
// PSS
nr_slot_fep
(
ue
,
PSS_SYMBOL_NB
,
0
,
ue
->
rx_offset
,
0
,
1
,
NR_SSS_EST
);
PSS_SYMBOL_NB
,
0
,
ue
->
rx_offset
,
0
,
1
,
NR_SSS_EST
);
frame_parms
->
nb_prefix_samples0
=
nb_prefix_samples0
;
...
...
@@ -452,17 +455,11 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, int32_t *tot_metric,uint8_t *phase_max)
#ifdef DEBUG_PLOT_SSS
write_output
(
"rxsig0.m"
,
"rxs0"
,
&
ue
->
common_vars
.
rxdata
[
0
][
0
],
ue
->
frame_parms
.
samples_per_tti
,
1
,
1
);
write_output
(
"rxdataF0.m"
,
"rxF0"
,
&
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
0
]].
rxdataF
[
0
],
frame_parms
->
ofdm_symbol_size
,
2
,
1
);
write_output
(
"rxdataF0.m"
,
"rxF0"
,
&
ue
->
common_vars
.
common_vars_rx_data_per_thread
[
ue
->
current_thread_id
[
0
]].
rxdataF
[
0
]
[
frame_parms
->
ofdm_symbol_size
*
SSS_SYMBOL_NB
]
,
frame_parms
->
ofdm_symbol_size
,
2
,
1
);
write_output
(
"pss_ext.m"
,
"pss_ext"
,
pss_ext
,
LENGTH_PSS_NR
,
1
,
1
);
#endif
#if 0
write_output("sss_ext.m","sss_ext",sss_ext,LENGTH_SSS_NR,1,1);
write_output("sss_ref.m","sss_ref", d_sss,LENGTH_SSS_NR,1,1);
#endif
#if 0
int16_t *p = (int16_t *)sss_ext[0];
...
...
@@ -489,6 +486,14 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, int32_t *tot_metric,uint8_t *phase_max)
sss
=
(
int16_t
*
)
&
sss_ext
[
0
][
0
];
#ifdef DEBUG_PLOT_SSS
write_output
(
"sss_ext.m"
,
"sss_ext"
,
sss_ext
[
0
],
LENGTH_SSS_NR
,
1
,
1
);
write_output
(
"sss_ref.m"
,
"sss_ref"
,
d_sss
,
LENGTH_SSS_NR
,
1
,
1
);
#endif
#if 0
/* simulate of a phase shift on the signal */
...
...
@@ -499,11 +504,11 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, int32_t *tot_metric,uint8_t *phase_max)
#endif
#if
0
#if
1
int16_t
*
ps
=
(
int16_t
*
)
pss_ext
;
for
(
int
i
=
0
;
i
<
LENGTH_SSS_NR
;
i
++
)
{
printf("sss ref [%i] : %d
%d \n", i, d_sss[0][0][i]
, d_sss[0][0][i]);
printf
(
"sss ref [%i] : %d
\n
"
,
i
,
d_sss
[
0
][
0
][
i
]);
printf
(
"sss ext [%i] : %d %d
\n
"
,
i
,
sss
[
2
*
i
],
sss
[
2
*
i
+
1
]);
printf
(
"pss ref [%i] : %d %d
\n
"
,
i
,
primary_synchro_nr
[
0
][
2
*
i
],
primary_synchro_nr
[
0
][
2
*
i
+
1
]);
...
...
@@ -528,8 +533,11 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, int32_t *tot_metric,uint8_t *phase_max)
// This is the inner product using one particular value of each unknown parameter
for
(
i
=
0
;
i
<
LENGTH_SSS_NR
;
i
++
)
{
metric_re
+=
d
[
i
]
*
(((
phase_re_nr
[
phase
]
*
sss
[
2
*
i
])
>>
SCALING_METRIC_SSS_NR
)
-
((
phase_im_nr
[
phase
]
*
sss
[
2
*
i
+
1
])
>>
SCALING_METRIC_SSS_NR
))
+
d
[
i
]
*
(((
phase_im_nr
[
phase
]
*
sss
[
2
*
i
])
>>
SCALING_METRIC_SSS_NR
)
+
((
phase_re_nr
[
phase
]
*
sss
[
2
*
i
+
1
])
>>
SCALING_METRIC_SSS_NR
));
if
(
Nid1
==
0
&&
phase
==
3
)
printf
(
"i %d, phase %d/%d: metric %d, phase (%d,%d) sss (%d,%d) d %d
\n
"
,
i
,
phase
,
PHASE_HYPOTHESIS_NUMBER
,
metric_re
,
phase_re_nr
[
phase
],
phase_im_nr
[
phase
],
sss
[
2
*
i
],
sss
[
1
+
(
2
*
i
)],
d
[
i
]);
}
metric
=
metric_re
;
...
...
@@ -550,14 +558,14 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, int32_t *tot_metric,uint8_t *phase_max)
}
//#ifdef DEBUG_SSS_NR
#define SSS_METRIC_FLOOR_NR (30000)
if
(
*
tot_metric
>
SSS_METRIC_FLOOR_NR
)
{
if
(
*
tot_metric
>
SSS_METRIC_FLOOR_NR
)
{
Nid2
=
GET_NID2
(
frame_parms
->
Nid_cell
);
Nid1
=
GET_NID1
(
frame_parms
->
Nid_cell
);
printf
(
"Nid2 %d Nid1 %d tot_metric %d, phase_max %d
\n
"
,
Nid2
,
Nid1
,
*
tot_metric
,
*
phase_max
);
}
//#endif
}
//#endif
return
(
0
);
}
openair1/PHY/TOOLS/lte_dfts.c
View file @
496eae67
...
...
@@ -74,7 +74,7 @@ static inline void cmac(__m128i a,__m128i b, __m128i *re32, __m128i *im32)
cmac_tmp
=
_mm_sign_epi16
(
b
,
*
(
__m128i
*
)
reflip
);
cmac_tmp_re32
=
_mm_madd_epi16
(
a
,
cmac_tmp
);
// cmac_tmp = _mm_shufflelo_epi16(b,_MM_SHUFFLE(2,3,0,1));
// cmac_tmp = _mm_shufflehi_epi16(cmac_tmp,_MM_SHUFFLE(2,3,0,1));
cmac_tmp
=
_mm_shuffle_epi8
(
b
,
_mm_set_epi8
(
13
,
12
,
15
,
14
,
9
,
8
,
11
,
10
,
5
,
4
,
7
,
6
,
1
,
0
,
3
,
2
));
...
...
@@ -4464,6 +4464,7 @@ void dft2048(int16_t *x,int16_t *y,int scale)
_mm_empty
();
_m_empty
();
}
void
idft2048
(
int16_t
*
x
,
int16_t
*
y
,
int
scale
)
...
...
@@ -4567,6 +4568,8 @@ void dft2048(int16_t *x,int16_t *y,int scale)
int
i
;
simd256_q15_t
ONE_OVER_SQRT2_Q15_128
=
set1_int16_simd256
(
ONE_OVER_SQRT2_Q15
);
write_output
(
"dftin.m"
,
"dftin"
,
x
,
2048
,
1
,
1
);
xtmpp
=
xtmp
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
...
...
@@ -4645,7 +4648,7 @@ void dft2048(int16_t *x,int16_t *y,int scale)
_mm_empty
();
_m_empty
();
write_output
(
"dftout.m"
,
"dftout"
,
y
,
2048
,
1
,
1
);
}
void
idft2048
(
int16_t
*
x
,
int16_t
*
y
,
int
scale
)
...
...
@@ -4658,7 +4661,7 @@ void idft2048(int16_t *x,int16_t *y,int scale)
simd256_q15_t
ONE_OVER_SQRT2_Q15_128
=
set1_int16_simd256
(
ONE_OVER_SQRT2_Q15
);
xtmpp
=
xtmp
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
transpose4_ooff_simd256
(
x256
,
xtmpp
,
128
);
transpose4_ooff_simd256
(
x256
+
2
,
xtmpp
+
1
,
128
);
...
...
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