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
littleBu
OpenXG-RAN
Commits
f272d7d1
Commit
f272d7d1
authored
3 months ago
by
Laurent THOMAS
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
set correct type on qpsk modulation table
parent
c73353be
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
45 deletions
+31
-45
openair1/PHY/NR_REFSIG/nr_gen_mod_table.c
openair1/PHY/NR_REFSIG/nr_gen_mod_table.c
+3
-3
openair1/PHY/NR_REFSIG/nr_mod_table.h
openair1/PHY/NR_REFSIG/nr_mod_table.h
+1
-2
openair1/PHY/NR_TRANSPORT/nr_pbch.c
openair1/PHY/NR_TRANSPORT/nr_pbch.c
+22
-35
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
+5
-5
No files found.
openair1/PHY/NR_REFSIG/nr_gen_mod_table.c
View file @
f272d7d1
...
...
@@ -21,7 +21,7 @@
#include "nr_refsig.h"
#include "nr_mod_table.h"
short
nr_qpsk_mod_table
[
8
];
c16_t
nr_qpsk_mod_table
[
4
];
int32_t
nr_16qam_mod_table
[
16
];
simde__m128i
nr_qpsk_byte_mod_table
[
2048
];
...
...
@@ -43,8 +43,8 @@ void nr_generate_modulation_table() {
// QPSK
for
(
i
=
0
;
i
<
4
;
i
++
)
{
nr_qpsk_mod_table
[
i
*
2
]
=
(
short
)(
1
-
2
*
(
i
&
1
))
*
val
*
sqrt2
*
sqrt2
;
nr_qpsk_mod_table
[
i
*
2
+
1
]
=
(
short
)(
1
-
2
*
((
i
>>
1
)
&
1
))
*
val
*
sqrt2
*
sqrt2
;
nr_qpsk_mod_table
[
i
].
r
=
(
short
)(
1
-
2
*
(
i
&
1
))
*
val
*
sqrt2
*
sqrt2
;
nr_qpsk_mod_table
[
i
].
i
=
(
short
)(
1
-
2
*
((
i
>>
1
)
&
1
))
*
val
*
sqrt2
*
sqrt2
;
//printf("%d j%d\n",nr_qpsk_mod_table[i*2],nr_qpsk_mod_table[i*2+1]);
}
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_REFSIG/nr_mod_table.h
View file @
f272d7d1
...
...
@@ -24,12 +24,11 @@
#define NR_MOD_TABLE_SIZE_SHORT 686
#define NR_MOD_TABLE_BPSK_OFFSET 1
#define NR_MOD_TABLE_QPSK_OFFSET 3
#define NR_MOD_TABLE_QAM16_OFFSET 7
#define NR_MOD_TABLE_QAM64_OFFSET 23
#define NR_MOD_TABLE_QAM256_OFFSET 87
extern
short
nr_qpsk_mod_table
[
8
];
extern
c16_t
nr_qpsk_mod_table
[
4
];
extern
int32_t
nr_16qam_mod_table
[
16
];
#if defined(__SSE2__)
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_TRANSPORT/nr_pbch.c
View file @
f272d7d1
...
...
@@ -36,13 +36,13 @@
#include "PHY/sse_intrin.h"
#include "executables/softmodem-common.h"
#include "openair1/PHY/NR_REFSIG/nr_refsig_common.h"
#include "openair1/PHY/NR_REFSIG/nr_mod_table.h"
#include "openair1/PHY/TOOLS/tools_defs.h"
//#define DEBUG_PBCH
//#define DEBUG_PBCH_ENCODING
//#define DEBUG_PBCH_DMRS
extern
short
nr_qpsk_mod_table
[
8
];
const
uint8_t
nr_pbch_payload_interleaving_pattern
[
32
]
=
{
16
,
23
,
18
,
17
,
8
,
30
,
10
,
6
,
24
,
7
,
0
,
5
,
3
,
2
,
1
,
4
,
9
,
11
,
12
,
13
,
14
,
15
,
19
,
20
,
21
,
22
,
25
,
26
,
27
,
28
,
29
,
31
};
...
...
@@ -56,7 +56,7 @@ void nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
{
int
k
,
l
;
//int16_t a;
int16_t
mod_dmrs
[
NR_PBCH_DMRS_LENGTH
<<
1
];
c16_t
mod_dmrs
[
NR_PBCH_DMRS_LENGTH
];
uint8_t
idx
=
0
;
uint8_t
nushift
=
config
->
cell_config
.
phy_cell_id
.
value
&
3
;
LOG_D
(
PHY
,
"PBCH DMRS mapping started at symbol %d shift %d
\n
"
,
ssb_start_symbol
+
1
,
nushift
);
...
...
@@ -64,11 +64,16 @@ void nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
/// QPSK modulation
for
(
int
m
=
0
;
m
<
NR_PBCH_DMRS_LENGTH
;
m
++
)
{
idx
=
(((
gold_pbch_dmrs
[(
m
<<
1
)
>>
5
])
>>
((
m
<<
1
)
&
0x1f
))
&
3
);
mod_dmrs
[
m
<<
1
]
=
nr_qpsk_mod_table
[
idx
<<
1
];
mod_dmrs
[(
m
<<
1
)
+
1
]
=
nr_qpsk_mod_table
[(
idx
<<
1
)
+
1
];
mod_dmrs
[
m
]
=
nr_qpsk_mod_table
[
idx
];
#ifdef DEBUG_PBCH_DMRS
printf
(
"m %d idx %d gold seq %u b0-b1 %d-%d mod_dmrs %d %d
\n
"
,
m
,
idx
,
gold_pbch_dmrs
[(
m
<<
1
)
>>
5
],
(((
gold_pbch_dmrs
[(
m
<<
1
)
>>
5
])
>>
((
m
<<
1
)
&
0x1f
))
&
1
),
(((
gold_pbch_dmrs
[((
m
<<
1
)
+
1
)
>>
5
])
>>
(((
m
<<
1
)
+
1
)
&
0x1f
))
&
1
),
mod_dmrs
[(
m
<<
1
)],
mod_dmrs
[(
m
<<
1
)
+
1
]);
printf
(
"m %d idx %d gold seq %u b0-b1 %d-%d mod_dmrs %d %d
\n
"
,
m
,
idx
,
gold_pbch_dmrs
[(
m
<<
1
)
>>
5
],
(((
gold_pbch_dmrs
[(
m
<<
1
)
>>
5
])
>>
((
m
<<
1
)
&
0x1f
))
&
1
),
(((
gold_pbch_dmrs
[((
m
<<
1
)
+
1
)
>>
5
])
>>
(((
m
<<
1
)
+
1
)
&
0x1f
))
&
1
),
mod_dmrs
[
m
].
r
,
mod_dmrs
[
m
].
i
);
#endif
}
...
...
@@ -82,13 +87,7 @@ void nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
#ifdef DEBUG_PBCH_DMRS
printf
(
"m %d at k %d of l %d
\n
"
,
m
,
k
,
l
);
#endif
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
]
=
(
amp
*
mod_dmrs
[
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
)[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]
=
(
amp
*
mod_dmrs
[(
m
<<
1
)
+
1
])
>>
15
;
#ifdef DEBUG_PBCH_DMRS
printf
(
"(%d,%d)
\n
"
,
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
],
((
int16_t
*
)
txdataF
)[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]);
#endif
txdataF
[
l
*
frame_parms
->
ofdm_symbol_size
+
k
]
=
c16mulRealShift
(
mod_dmrs
[
m
],
amp
,
15
);
k
+=
4
;
if
(
k
>=
frame_parms
->
ofdm_symbol_size
)
...
...
@@ -103,8 +102,7 @@ void nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
#ifdef DEBUG_PBCH_DMRS
printf
(
"m %d at k %d of l %d
\n
"
,
m
,
k
,
l
);
#endif
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
]
=
(
amp
*
mod_dmrs
[
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
)[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]
=
(
amp
*
mod_dmrs
[(
m
<<
1
)
+
1
])
>>
15
;
txdataF
[
l
*
frame_parms
->
ofdm_symbol_size
+
k
]
=
c16mulRealShift
(
mod_dmrs
[
m
],
amp
,
15
);
#ifdef DEBUG_PBCH_DMRS
printf
(
"(%d,%d)
\n
"
,
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
],
...
...
@@ -124,13 +122,7 @@ void nr_generate_pbch_dmrs(uint32_t *gold_pbch_dmrs,
#ifdef DEBUG_PBCH_DMRS
printf
(
"m %d at k %d of l %d
\n
"
,
m
,
k
,
l
);
#endif
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
]
=
(
amp
*
mod_dmrs
[
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
)[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]
=
(
amp
*
mod_dmrs
[(
m
<<
1
)
+
1
])
>>
15
;
#ifdef DEBUG_PBCH_DMRS
printf
(
"(%d,%d)
\n
"
,
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
],
((
int16_t
*
)
txdataF
)[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]);
#endif
txdataF
[
l
*
frame_parms
->
ofdm_symbol_size
+
k
]
=
c16mulRealShift
(
mod_dmrs
[
m
],
amp
,
15
);
k
+=
4
;
if
(
k
>=
frame_parms
->
ofdm_symbol_size
)
...
...
@@ -346,14 +338,13 @@ void nr_generate_pbch(PHY_VARS_gNB *gNB,
printf
(
"
\n
"
);
#endif
int16_t
mod_pbch_e
[
NR_POLAR_PBCH_E
];
c16_t
mod_pbch_e
[
NR_POLAR_PBCH_E
/
2
];
/// QPSK modulation
for
(
int
i
=
0
;
i
<
NR_POLAR_PBCH_E
>>
1
;
i
++
)
{
int
idx
=
((
pbch_e
[(
i
<<
1
)
>>
5
]
>>
((
i
<<
1
)
&
0x1f
))
&
3
);
mod_pbch_e
[
i
<<
1
]
=
nr_qpsk_mod_table
[
idx
<<
1
];
mod_pbch_e
[(
i
<<
1
)
+
1
]
=
nr_qpsk_mod_table
[(
idx
<<
1
)
+
1
];
mod_pbch_e
[
i
]
=
nr_qpsk_mod_table
[
idx
];
#ifdef DEBUG_PBCH
printf
(
"i %d idx %d mod_pbch %d %d
\n
"
,
i
,
idx
,
mod_pbch_e
[
2
*
i
],
mod_pbch_e
[
2
*
i
+
1
]
);
printf
(
"i %d idx %d mod_pbch %d %d
\n
"
,
i
,
idx
,
mod_pbch_e
[
i
].
r
,
mod_pbch_e
[
i
].
i
);
#endif
}
...
...
@@ -374,8 +365,7 @@ void nr_generate_pbch(PHY_VARS_gNB *gNB,
#ifdef DEBUG_PBCH
printf
(
"m %d ssb_sc_idx %d at k %d of l %d
\n
"
,
m
,
ssb_sc_idx
,
k
,
l
);
#endif
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
]
=
(
amp
*
mod_pbch_e
[
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
)[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]
=
(
amp
*
mod_pbch_e
[(
m
<<
1
)
+
1
])
>>
15
;
txdataF
[
l
*
frame_parms
->
ofdm_symbol_size
+
k
]
=
c16mulRealShift
(
mod_pbch_e
[
m
],
amp
,
15
);
k
++
;
m
++
;
}
...
...
@@ -397,8 +387,7 @@ void nr_generate_pbch(PHY_VARS_gNB *gNB,
#ifdef DEBUG_PBCH
printf
(
"m %d ssb_sc_idx %d at k %d of l %d
\n
"
,
m
,
ssb_sc_idx
,
k
,
l
);
#endif
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
]
=
(
amp
*
mod_pbch_e
[
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
)[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]
=
(
amp
*
mod_pbch_e
[(
m
<<
1
)
+
1
])
>>
15
;
txdataF
[
l
*
frame_parms
->
ofdm_symbol_size
+
k
]
=
c16mulRealShift
(
mod_pbch_e
[
m
],
amp
,
15
);
k
++
;
m
++
;
}
...
...
@@ -422,8 +411,7 @@ void nr_generate_pbch(PHY_VARS_gNB *gNB,
#ifdef DEBUG_PBCH
printf
(
"m %d ssb_sc_idx %d at k %d of l %d
\n
"
,
m
,
ssb_sc_idx
,
k
,
l
);
#endif
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
]
=
(
amp
*
mod_pbch_e
[
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
)[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]
=
(
amp
*
mod_pbch_e
[(
m
<<
1
)
+
1
])
>>
15
;
txdataF
[
l
*
frame_parms
->
ofdm_symbol_size
+
k
]
=
c16mulRealShift
(
mod_pbch_e
[
m
],
amp
,
15
);
k
++
;
m
++
;
}
...
...
@@ -445,8 +433,7 @@ void nr_generate_pbch(PHY_VARS_gNB *gNB,
#ifdef DEBUG_PBCH
printf
(
"m %d ssb_sc_idx %d at k %d of l %d
\n
"
,
m
,
ssb_sc_idx
,
k
,
l
);
#endif
((
int16_t
*
)
txdataF
)[(
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
]
=
(
amp
*
mod_pbch_e
[
m
<<
1
])
>>
15
;
((
int16_t
*
)
txdataF
)[((
l
*
frame_parms
->
ofdm_symbol_size
+
k
)
<<
1
)
+
1
]
=
(
amp
*
mod_pbch_e
[(
m
<<
1
)
+
1
])
>>
15
;
txdataF
[
l
*
frame_parms
->
ofdm_symbol_size
+
k
]
=
c16mulRealShift
(
mod_pbch_e
[
m
],
amp
,
15
);
k
++
;
m
++
;
}
...
...
This diff is collapsed.
Click to expand it.
openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c
View file @
f272d7d1
...
...
@@ -94,7 +94,8 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
int
slot_prs
=
(
proc
->
nr_slot_rx
-
rep_num
*
prs_cfg
->
PRSResourceTimeGap
+
frame_params
->
slots_per_frame
)
%
frame_params
->
slots_per_frame
;
int16_t
*
rxF
,
*
pil
,
mod_prs
[
NR_MAX_PRS_LENGTH
<<
1
];
int16_t
*
rxF
,
*
pil
;
c16_t
mod_prs
[
NR_MAX_PRS_LENGTH
];
const
int16_t
*
fl
,
*
fm
,
*
fmm
,
*
fml
,
*
fmr
,
*
fr
;
int16_t
ch
[
2
]
=
{
0
},
noiseFig
[
2
]
=
{
0
};
int16_t
k_prime
=
0
,
k
=
0
;
...
...
@@ -138,8 +139,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
for
(
int
m
=
0
;
m
<
num_pilots
;
m
++
)
{
idx
=
(((
gold_prs
[(
m
<<
1
)
>>
5
])
>>
((
m
<<
1
)
&
0x1f
))
&
3
);
mod_prs
[
m
<<
1
]
=
nr_qpsk_mod_table
[
idx
<<
1
];
mod_prs
[(
m
<<
1
)
+
1
]
=
nr_qpsk_mod_table
[(
idx
<<
1
)
+
1
];
mod_prs
[
m
]
=
nr_qpsk_mod_table
[
idx
];
}
for
(
rxAnt
=
0
;
rxAnt
<
frame_params
->
nb_antennas_rx
;
rxAnt
++
)
...
...
@@ -152,7 +152,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
k
=
(
prs_cfg
->
REOffset
+
k_prime
)
%
prs_cfg
->
CombSize
+
prs_cfg
->
RBOffset
*
12
+
frame_params
->
first_carrier_offset
;
// Channel estimation and interpolation
pil
=
(
int16_t
*
)
&
mod_prs
[
0
]
;
pil
=
(
int16_t
*
)
mod_prs
;
rxF
=
(
int16_t
*
)
&
rxdataF
[
rxAnt
][
l
*
frame_params
->
ofdm_symbol_size
+
k
];
if
(
prs_cfg
->
CombSize
==
2
)
...
...
@@ -520,7 +520,7 @@ int nr_prs_channel_estimation(uint8_t gNB_id,
#ifdef DEBUG_PRS_CHEST
sprintf
(
filename
,
"%s%i%s"
,
"PRSpilot_"
,
rxAnt
,
".m"
);
LOG_M
(
filename
,
"prs_loc"
,
&
mod_prs
[
0
],
num_pilots
,
1
,
1
);
LOG_M
(
filename
,
"prs_loc"
,
mod_prs
,
num_pilots
,
1
,
1
);
sprintf
(
filename
,
"%s%i%s"
,
"rxSigF_"
,
rxAnt
,
".m"
);
sprintf
(
varname
,
"%s%i"
,
"rxF_"
,
rxAnt
);
LOG_M
(
filename
,
varname
,
&
rxdataF
[
rxAnt
][
0
],
prs_cfg
->
NumPRSSymbols
*
frame_params
->
ofdm_symbol_size
,
1
,
1
);
...
...
This diff is collapsed.
Click to expand it.
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