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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
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
OpenXG
OpenXG-RAN
Commits
58f62a41
Commit
58f62a41
authored
Jan 08, 2020
by
Raphael Defosseux
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/nr_fix_easycppcheck' into integration-develop-nr-2020w02
parents
cfc73e98
aaaa6d5c
Changes
23
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
23 changed files
with
394 additions
and
373 deletions
+394
-373
executables/nr-ru.c
executables/nr-ru.c
+2
-4
openair1/PHY/CODING/TESTBENCH/ldpctest.c
openair1/PHY/CODING/TESTBENCH/ldpctest.c
+1
-0
openair1/PHY/CODING/TESTBENCH/polartest.c
openair1/PHY/CODING/TESTBENCH/polartest.c
+4
-2
openair1/PHY/CODING/nrLDPC_encoder/ldpc_generate_coefficient.c
...ir1/PHY/CODING/nrLDPC_encoder/ldpc_generate_coefficient.c
+2
-1
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
+2
-0
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c
+1
-1
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
+10
-6
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
+1
-1
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
+7
-6
openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.c
openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.c
+1
-0
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
+11
-10
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
+17
-16
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
+1
-1
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
+4
-3
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
+23
-17
openair1/PHY/TOOLS/nr_phy_scope.c
openair1/PHY/TOOLS/nr_phy_scope.c
+6
-6
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
+3
-1
openair1/SIMULATION/NR_PHY/dlschsim.c
openair1/SIMULATION/NR_PHY/dlschsim.c
+1
-1
openair2/ENB_APP/enb_config.c
openair2/ENB_APP/enb_config.c
+100
-99
openair2/ENB_APP/enb_paramdef.h
openair2/ENB_APP/enb_paramdef.h
+110
-110
openair2/ENB_APP/enb_paramdef_emtc.h
openair2/ENB_APP/enb_paramdef_emtc.h
+81
-81
openair2/RRC/LTE/MESSAGES/asn1_msg.c
openair2/RRC/LTE/MESSAGES/asn1_msg.c
+5
-6
targets/RT/USER/lte-hwlat2.c
targets/RT/USER/lte-hwlat2.c
+1
-1
No files found.
executables/nr-ru.c
View file @
58f62a41
...
...
@@ -806,7 +806,6 @@ static void *ru_thread_asynch_rxtx( void *param ) {
printf
(
"devices ok (ru_thread_asynch_rx)
\n
"
);
while
(
!
oai_exit
)
{
if
(
oai_exit
)
break
;
if
(
subframe
==
9
)
{
subframe
=
0
;
...
...
@@ -854,7 +853,7 @@ static void *ru_thread_prach( void *param ) {
LOG_I
(
PHY
,
"%s() RU configured - RACH processing thread running
\n
"
,
__FUNCTION__
);
while
(
!
oai_exit
)
{
if
(
oai_exit
)
break
;
if
(
wait_on_condition
(
&
proc
->
mutex_prach
,
&
proc
->
cond_prach
,
&
proc
->
instance_cnt_prach
,
"ru_prach_thread"
)
<
0
)
break
;
...
...
@@ -1159,7 +1158,7 @@ int setup_RU_buffers(RU_t *ru) {
frame_parms
=
ru
->
nr_frame_parms
;
printf
(
"setup_RU_buffers: frame_parms = %p
\n
"
,
frame_parms
);
}
else
{
printf
(
"
RU[%d] not initialized
\n
"
,
ru
->
idx
);
printf
(
"
ru pointer is NULL
\n
"
);
return
(
-
1
);
}
...
...
@@ -1259,7 +1258,6 @@ static void *ru_thread_tx( void *param ) {
}
while
(
!
oai_exit
)
{
if
(
oai_exit
)
break
;
LOG_D
(
PHY
,
"ru_thread_tx: Waiting for TX processing
\n
"
);
// wait until eNBs are finished subframe RX n and TX n+4
...
...
openair1/PHY/CODING/TESTBENCH/ldpctest.c
View file @
58f62a41
...
...
@@ -317,6 +317,7 @@ int test_ldpc(short No_iteration,
for
(
i
=
0
;
i
<
block_length
+
(
nrows
-
no_punctured_columns
)
*
Zc
-
removed_bit
;
i
++
)
if
(
channel_input
[
j
][
i
]
!=
channel_input_optim
[
j
][
i
])
{
printf
(
"differ in seg %u pos %u (%u,%u)
\n
"
,
j
,
i
,
channel_input
[
j
][
i
],
channel_input_optim
[
j
][
i
]);
free
(
channel_output
);
return
(
-
1
);
}
//else{
...
...
openair1/PHY/CODING/TESTBENCH/polartest.c
View file @
58f62a41
...
...
@@ -215,6 +215,8 @@ if (logFlag){
free
(
encoder_outputByte
);
free
(
channel_output
);
free
(
modulated_input
);
if
(
logFlag
)
fclose
(
logFile
);
return
0
;
#endif
...
...
@@ -317,13 +319,13 @@ if (logFlag){
if
(
nBitError
>
0
)
blockErrorState
=
1
;
#ifdef DEBUG_POLARTEST
for
(
int
i
=
0
;
i
<
testArrayLength
;
i
++
)
printf
(
"[polartest/decoderState=%
d
] testInput[%d]=0x%08x, estimatedOutput[%d]=0x%08x
\n
"
,
decoderState
,
i
,
testInput
[
i
],
i
,
estimatedOutput
[
i
]);
printf
(
"[polartest/decoderState=%
u
] testInput[%d]=0x%08x, estimatedOutput[%d]=0x%08x
\n
"
,
decoderState
,
i
,
testInput
[
i
],
i
,
estimatedOutput
[
i
]);
#endif
//Iteration times are in microseconds.
timeEncoderCumulative
+=
(
timeEncoder
.
diff
/
(
cpu_freq_GHz
*
1000
.
0
));
timeDecoderCumulative
+=
(
timeDecoder
.
diff
/
(
cpu_freq_GHz
*
1000
.
0
));
if
(
logFlag
)
fprintf
(
logFile
,
",%f,%d,%
d
,%f,%f
\n
"
,
SNR
,
nBitError
,
blockErrorState
,
(
timeEncoder
.
diff
/
(
cpu_freq_GHz
*
1000
.
0
)),
(
timeDecoder
.
diff
/
(
cpu_freq_GHz
*
1000
.
0
)));
if
(
logFlag
)
fprintf
(
logFile
,
",%f,%d,%
u
,%f,%f
\n
"
,
SNR
,
nBitError
,
blockErrorState
,
(
timeEncoder
.
diff
/
(
cpu_freq_GHz
*
1000
.
0
)),
(
timeDecoder
.
diff
/
(
cpu_freq_GHz
*
1000
.
0
)));
if
(
nBitError
<
0
)
{
blockErrorCumulative
++
;
...
...
openair1/PHY/CODING/nrLDPC_encoder/ldpc_generate_coefficient.c
View file @
58f62a41
...
...
@@ -494,7 +494,8 @@ int ldpc_encoder_orig(unsigned char *test_input,unsigned char *channel_input,int
fprintf
(
fd
,
" int i2;
\n
"
);
fprintf
(
fd2
,
" int i2;
\n
"
);
fprintf
(
fd
,
" for (i2=0; i2<%d; i2++) {
\n
"
,
Zc
>>
shift
);
fprintf
(
fd2
,
" for (i2=0; i2<%d; i2++) {
\n
"
,
Zc
>>
(
shift
-
1
));
if
(
shift
>
0
)
fprintf
(
fd2
,
" for (i2=0; i2<%d; i2++) {
\n
"
,
Zc
>>
(
shift
-
1
));
for
(
i2
=
0
;
i2
<
1
;
i2
++
)
{
//t=Kb*Zc+i2;
...
...
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoder.c
View file @
58f62a41
...
...
@@ -252,6 +252,7 @@ int8_t polar_decoder(double *input,
nr_free_uint8_3D_array
(
bit
,
polarParams
->
N
,
(
polarParams
->
n
+
1
));
nr_free_double_3D_array
(
llr
,
polarParams
->
N
,
(
polarParams
->
n
+
1
));
nr_free_uint8_2D_array
(
crcChecksum
,
polarParams
->
crcParityBits
);
free
(
tempECGM
);
return
(
-
1
);
}
...
...
@@ -522,6 +523,7 @@ int8_t polar_decoder_dci(double *input,
nr_free_uint8_3D_array
(
bit
,
polarParams
->
N
,
(
polarParams
->
n
+
1
));
nr_free_double_3D_array
(
llr
,
polarParams
->
N
,
(
polarParams
->
n
+
1
));
nr_free_uint8_2D_array
(
crcChecksum
,
polarParams
->
crcParityBits
);
free
(
tempECGM
);
return
(
-
1
);
}
...
...
openair1/PHY/CODING/nrPolar_tools/nr_polar_decoding_tools.c
View file @
58f62a41
...
...
@@ -470,7 +470,7 @@ void computeBeta(const t_nrPolar_params *pp,decoder_node_t *node) {
int
ssr4len
=
node
->
Nv
/
2
/
8
;
register
__m128i
allones
=*
((
__m128i
*
)
all1
);
for
(
int
i
=
0
;
i
<
sse4len
;
i
++
)
{
((
__m256i
*
)
betav
)[
i
]
=
_mm_or_si128
(
_mm_cmpeq_epi16
(((
__m128i
*
)
betar
)[
i
],
((
__m128i
*
)
betal
)[
i
]),
allones
)
)
;
((
__m256i
*
)
betav
)[
i
]
=
_mm_or_si128
(
_mm_cmpeq_epi16
(((
__m128i
*
)
betar
)[
i
],
((
__m128i
*
)
betal
)[
i
]),
allones
);
}
}
else
if
(
sse4mod
==
4
)
{
...
...
openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c
View file @
58f62a41
...
...
@@ -103,7 +103,11 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
break
;
default:
printf
(
"pusch_channel_estimation: nushift=%d -> ERROR
\n
"
,
nushift
);
#ifdef DEBUG_CH
if
(
debug_ch_est
)
fclose
(
debug_ch_est
);
#endif
return
(
-
1
);
break
;
}
...
...
@@ -193,7 +197,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
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
);
#ifdef DEBUG_CH
fprintf
(
debug_ch_est
,
"pilot %
d
: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
fprintf
(
debug_ch_est
,
"pilot %
u
: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
//printf("pilot %d : rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d) \n",pilot_cnt,rxF[0],rxF[1],ch[0],ch[1],pil[0],pil[1]);
#endif
multadd_real_vector_complex_scalar
(
fm
,
...
...
@@ -208,7 +212,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
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
);
#ifdef DEBUG_PUSCH
printf
(
"pilot %d
: 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
multadd_real_vector_complex_scalar
(
fmm
,
ch
,
...
...
@@ -225,7 +229,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
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
);
#ifdef DEBUG_PUSCH
printf
(
"pilot %d
: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
,
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
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fm
,
ch
,
...
...
@@ -243,7 +247,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
ch
[
1
]
=
(
int16_t
)(((
int32_t
)
pil
[
0
]
*
rxF
[
1
]
+
(
int32_t
)
pil
[
1
]
*
rxF
[
0
])
>>
15
);
#ifdef DEBUG_PUSCH
printf
(
"ch 0 %d
\n
"
,((
int32_t
)
pil
[
0
]
*
rxF
[
0
]
-
(
int32_t
)
pil
[
1
]
*
rxF
[
1
]));
printf
(
"pilot %
d
: rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
0
],
rxF
[
1
],
&
rxF
[
0
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
printf
(
"pilot %
u
: rxF - > (%d,%d) addr %p ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
1
,
rxF
[
0
],
rxF
[
1
],
&
rxF
[
0
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fmr
,
ch
,
...
...
@@ -258,7 +262,7 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB,
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
);
#ifdef DEBUG_PUSCH
printf
(
"pilot %
d
: rxF - > (%d,%d) ch -> (%d,%d), pil -> (%d,%d)
\n
"
,
pilot_cnt
+
2
,
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
+
2
,
rxF
[
0
],
rxF
[
1
],
ch
[
0
],
ch
[
1
],
pil
[
0
],
pil
[
1
]);
#endif
multadd_real_vector_complex_scalar
(
fr
,
ch
,
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch.h
View file @
58f62a41
...
...
@@ -80,7 +80,7 @@ uint8_t nr_generate_pdsch(NR_gNB_DLSCH_t *dlsch,
time_stats_t
*
dlsch_modulation_stats
);
void
free_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
);
void
free_gNB_dlsch
(
NR_gNB_DLSCH_t
*
*
dlschptr
);
void
clean_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
);
...
...
openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c
View file @
58f62a41
...
...
@@ -48,11 +48,12 @@
//#define DEBUG_DLSCH_CODING
//#define DEBUG_DLSCH_FREE 1
void
free_gNB_dlsch
(
NR_gNB_DLSCH_t
*
dlsch
)
void
free_gNB_dlsch
(
NR_gNB_DLSCH_t
*
*
dlschptr
)
{
int
i
;
int
r
;
NR_gNB_DLSCH_t
*
dlsch
=
*
dlschptr
;
if
(
dlsch
)
{
#ifdef DEBUG_DLSCH_FREE
printf
(
"Freeing dlsch %p
\n
"
,
dlsch
);
...
...
@@ -232,7 +233,7 @@ NR_gNB_DLSCH_t *new_gNB_dlsch(unsigned char Kmimo,
LOG_D
(
PHY
,
"new_gNB_dlsch exit flag %d, size of %ld
\n
"
,
exit_flag
,
sizeof
(
NR_gNB_DLSCH_t
));
free_gNB_dlsch
(
dlsch
);
free_gNB_dlsch
(
&
dlsch
);
return
(
NULL
);
...
...
@@ -278,7 +279,7 @@ int nr_dlsch_encoding(unsigned char *a,
unsigned
int
G
;
unsigned
int
crc
=
1
;
uint8_t
harq_pid
=
dlsch
->
harq_ids
[
frame
%
2
][
slot
];
uint8_t
harq_pid
=
dlsch
->
harq_ids
[
frame
&
2
][
slot
];
AssertFatal
(
harq_pid
<
8
&&
harq_pid
>=
0
,
"illegal harq_pid %d
\b
"
,
harq_pid
);
nfapi_nr_dl_config_dlsch_pdu_rel15_t
rel15
=
dlsch
->
harq_processes
[
harq_pid
]
->
dlsch_pdu
.
dlsch_pdu_rel15
;
uint16_t
nb_rb
=
rel15
.
n_prb
;
...
...
@@ -458,7 +459,7 @@ int nr_dlsch_encoding(unsigned char *a,
#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
],
r_offset
);
printf
(
"output ratematching e[%d]= %d r_offset %
u
\n
"
,
i
,
dlsch
->
harq_processes
[
harq_pid
]
->
e
[
i
+
r_offset
],
r_offset
);
#endif
nr_interleaving_ldpc
(
E
,
...
...
@@ -469,7 +470,7 @@ int nr_dlsch_encoding(unsigned char *a,
#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_offset
],
r_offset
);
printf
(
"output interleaving f[%d]= %d r_offset %
u
\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
,
G
,
1
,
4
);
...
...
openair1/PHY/NR_UE_TRANSPORT/cic_filter_nr.c
View file @
58f62a41
...
...
@@ -438,6 +438,7 @@ void cic_decimator(int16_t *input_buffer, int16_t *output_buffer, int length, in
fir_filter_basic
(
input
,
output
,
new_length
,
FIR_TAPS_NUMBER
,
filter_taps
,
SHARPENED_FIR_SCALING_ACC
);
#endif
free
(
filter_taps_fixed_point
);
}
else
{
...
...
openair1/PHY/NR_UE_TRANSPORT/dci_nr.c
View file @
58f62a41
...
...
@@ -253,6 +253,7 @@ void pdcch_channel_level(int32_t **dl_ch_estimates_ext,
avg128P
=
_mm_setzero_si128
();
dl_ch128
=
(
__m128i
*
)
&
dl_ch_estimates_ext
[
aarx
][
0
];
#elif defined(__arm__)
dl_ch128
=
(
int16x8_t
*
)
&
dl_ch_estimates_ext
[
aarx
][
0
];
#endif
for
(
rb
=
0
;
rb
<
(
nb_rb
*
3
)
>>
2
;
rb
++
)
{
...
...
@@ -375,7 +376,7 @@ void nr_pdcch_extract_rbs_single(int32_t **rxdataF,
* then the IQ symbol is going to be found at the position 0+c_rb-N_RB_DL/2 in rxdataF and
* we have to point the pointer at (1+c_rb-N_RB_DL/2) in rxdataF
*/
LOG_DDD
(
"n_BWP_start=%
d, coreset_nbr_rb=%d
\n
"
,
n_BWP_start
,
coreset_nbr_rb
);
LOG_DDD
(
"n_BWP_start=%
u, coreset_nbr_rb=%u
\n
"
,
n_BWP_start
,
coreset_nbr_rb
);
for
(
c_rb
=
n_BWP_start
;
c_rb
<
(
n_BWP_start
+
coreset_nbr_rb
+
(
BIT_TO_NBR_RB_CORESET_FREQ_DOMAIN
*
offset_discontiguous
));
c_rb
++
)
{
//c_rb_tmp = 0;
...
...
@@ -762,8 +763,8 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
}
}
LOG_DD
(
"symbol_mon=(%
d) and start_symbol=(%d
)
\n
"
,
symbol_mon
,
start_symbol
);
LOG_DD
(
"coreset_freq_dom=(%l
d) n_rb_offset=(%d
) coreset_time_dur=(%d) n_shift=(%d) reg_bundle_size_L=(%d) coreset_interleaver_size_R=(%d) scrambling_ID=(%d)
\n
"
,
LOG_DD
(
"symbol_mon=(%
u) and start_symbol=(%u
)
\n
"
,
symbol_mon
,
start_symbol
);
LOG_DD
(
"coreset_freq_dom=(%l
u) n_rb_offset=(%u
) coreset_time_dur=(%d) n_shift=(%d) reg_bundle_size_L=(%d) coreset_interleaver_size_R=(%d) scrambling_ID=(%d)
\n
"
,
coreset_freq_dom
,
n_rb_offset
,
coreset_time_dur
,
n_shift
,
reg_bundle_size_L
,
coreset_interleaver_size_R
,
pdcch_DMRS_scrambling_id
);
//
// according to 38.213 v15.1.0: a PDCCH monitoring pattern within a slot,
...
...
@@ -780,7 +781,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
// for (int j=0; j < coreset_nbr_act; j++) {
// for each active CORESET (max number of active CORESETs in a BWP is 3),
// we calculate the number of RB for each CORESET bitmap
LOG_DD
(
"coreset_freq_dom=(%l
d
)
\n
"
,
coreset_freq_dom
);
LOG_DD
(
"coreset_freq_dom=(%l
u
)
\n
"
,
coreset_freq_dom
);
int
i
;
//for each bit in the coreset_freq_dom bitmap
for
(
i
=
0
;
i
<
45
;
i
++
)
{
...
...
@@ -789,8 +790,8 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
}
coreset_nbr_rb
=
6
*
coreset_nbr_rb
;
// coreset_nbr_rb has to be multiplied by 6 to indicate the number of PRB or REG(=12 RE) within the CORESET
LOG_DD
(
"coreset_freq_dom=(%l
d,%lx), coreset_nbr_rb=%d
\n
"
,
coreset_freq_dom
,
coreset_freq_dom
,
coreset_nbr_rb
);
LOG_DD
(
"coreset_nbr_rb=%
d, coreset_nbr_reg=%d, coreset_C=(%d/(%d*%d))=%d
\n
"
,
LOG_DD
(
"coreset_freq_dom=(%l
u,%lx), coreset_nbr_rb=%u
\n
"
,
coreset_freq_dom
,
coreset_freq_dom
,
coreset_nbr_rb
);
LOG_DD
(
"coreset_nbr_rb=%
u, coreset_nbr_reg=%u, coreset_C=(%u/(%d*%d))=%u
\n
"
,
coreset_nbr_rb
,
coreset_time_dur
*
coreset_nbr_rb
,
coreset_time_dur
*
coreset_nbr_rb
,
...
...
@@ -1163,9 +1164,9 @@ void nr_dci_decoding_procedure0(int s,
LOG_DDD
(
"debug1(%d)=nCCE[p]/L2 | nCCE[%d](%d) | L2(%d)
\n
"
,
nCCE
[
p
]
/
L2
,
p
,
nCCE
[
p
],
L2
);
LOG_DDD
(
"debug2(%d)=L2*m_p_s_L_max | L2(%d) | m_p_s_L_max(%d)
\n
"
,
L2
*
m_p_s_L_max
,
L2
,
m_p_s_L_max
);
CCEind
=
(((
Yk
+
(
uint16_t
)(
floor
((
m
*
nCCE
[
p
])
/
(
L2
*
m_p_s_L_max
)))
+
n_ci
)
%
(
uint16_t
)(
floor
(
nCCE
[
p
]
/
L2
)))
*
L2
);
LOG_DDD
(
"CCEind(%
d) = (((Yk(%u) + ((m(%u)*nCCE[p](%d
))/(L2(%d)*m_p_s_L_max(%d)))) %% (nCCE[p] / L2)) * L2)
\n
"
,
LOG_DDD
(
"CCEind(%
u) = (((Yk(%u) + ((m(%u)*nCCE[p](%u
))/(L2(%d)*m_p_s_L_max(%d)))) %% (nCCE[p] / L2)) * L2)
\n
"
,
CCEind
,
Yk
,
m
,
nCCE
[
p
],
L2
,
m_p_s_L_max
);
LOG_DDD
(
"n_candidate(m)=%u | CCEind=%
d
|"
,
m
,
CCEind
);
LOG_DDD
(
"n_candidate(m)=%u | CCEind=%
u
|"
,
m
,
CCEind
);
if
(
CCEind
<
32
)
CCEmap
=
CCEmap0
;
...
...
@@ -1173,7 +1174,7 @@ void nr_dci_decoding_procedure0(int s,
CCEmap
=
CCEmap1
;
else
if
(
CCEind
<
96
)
CCEmap
=
CCEmap2
;
else
AssertFatal
(
1
==
0
,
"Illegal CCEind %
d (Yk %u, m %u, nCCE %d, L2 %d
\n
"
,
CCEind
,
Yk
,
m
,
nCCE
[
p
],
L2
);
else
AssertFatal
(
1
==
0
,
"Illegal CCEind %
u (Yk %u, m %u, nCCE %u, L2 %u
\n
"
,
CCEind
,
Yk
,
m
,
nCCE
[
p
],
L2
);
switch
(
L2
)
{
case
1
:
...
...
@@ -1220,7 +1221,7 @@ void nr_dci_decoding_procedure0(int s,
LOG_DDD
(
"... we enter function dci_decoding(sizeof_bits=%d L=%d) -----
\n
"
,
sizeof_bits
,
L
);
LOG_DDD
(
"... we have to replace this part of the code by polar decoding
\n
"
);
// for (int m=0; m < (nCCE[p]*6*9*2); m++)
LOG_DDD
(
"(polar decoding)-> polar intput (with coreset_time_dur=%d, coreset_nbr_rb=%d, p=%d, CCEind=%
d
):
\n
"
,
LOG_DDD
(
"(polar decoding)-> polar intput (with coreset_time_dur=%d, coreset_nbr_rb=%d, p=%d, CCEind=%
u
):
\n
"
,
coreset_time_dur
,
coreset_nbr_rb
,
p
,
CCEind
);
/*
int reg_p=0,reg_e=0;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c
View file @
58f62a41
...
...
@@ -380,10 +380,10 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
]);
#if DISABLE_LOG_X
printf
(
"[AbsSFN %
d
.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f
\n
"
,
printf
(
"[AbsSFN %
u
.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
high_speed_flag
,
type
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_I
(
PHY
,
"[AbsSFN %
d
.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f
\n
"
,
LOG_I
(
PHY
,
"[AbsSFN %
u
.%d] Slot%d Symbol %d Flag %d type %d: Pilot/Data extraction %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
high_speed_flag
,
type
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
...
...
@@ -404,9 +404,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
]);
#if DISABLE_LOG_X
printf
(
"[AbsSFN %
d
.%d] Slot%d Symbol %d: Channel Scale %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[AbsSFN %
u
.%d] Slot%d Symbol %d: Channel Scale %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_I
(
PHY
,
"[AbsSFN %
d
.%d] Slot%d Symbol %d: Channel Scale %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_I
(
PHY
,
"[AbsSFN %
u
.%d] Slot%d Symbol %d: Channel Scale %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
...
...
@@ -483,9 +483,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
]);
#if DISABLE_LOG_X
printf
(
"[AbsSFN %
d
.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
first_symbol_flag
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[AbsSFN %
u
.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
first_symbol_flag
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_I
(
PHY
,
"[AbsSFN %
d
.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
first_symbol_flag
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_I
(
PHY
,
"[AbsSFN %
u
.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
first_symbol_flag
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
...
...
@@ -596,9 +596,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
]);
#if DISABLE_LOG_X
printf
(
"[AbsSFN %
d
.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
pdsch_vars
[
eNB_id
]
->
log2_maxh
,
proc
->
channel_level
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[AbsSFN %
u
.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
pdsch_vars
[
eNB_id
]
->
log2_maxh
,
proc
->
channel_level
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_I
(
PHY
,
"[AbsSFN %
d
.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
pdsch_vars
[
eNB_id
]
->
log2_maxh
,
proc
->
channel_level
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_I
(
PHY
,
"[AbsSFN %
u
.%d] Slot%d Symbol %d log2_maxh %d channel_level %d: Channel Comp %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
pdsch_vars
[
eNB_id
]
->
log2_maxh
,
proc
->
channel_level
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
// MRC
...
...
@@ -641,9 +641,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
]);
#if DISABLE_LOG_X
printf
(
"[AbsSFN %
d
.%d] Slot%d Symbol %d: Channel Combine %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[AbsSFN %
u
.%d] Slot%d Symbol %d: Channel Combine %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_I
(
PHY
,
"[AbsSFN %
d
.%d] Slot%d Symbol %d: Channel Combine %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_I
(
PHY
,
"[AbsSFN %
u
.%d] Slot%d Symbol %d: Channel Combine %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
...
...
@@ -1018,9 +1018,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
#if UE_TIMING_TRACE
stop_meas
(
&
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
]);
#if DISABLE_LOG_X
printf
(
"[AbsSFN %
d
.%d] Slot%d Symbol %d: LLR Computation %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
printf
(
"[AbsSFN %
u
.%d] Slot%d Symbol %d: LLR Computation %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#else
LOG_I
(
PHY
,
"[AbsSFN %
d
.%d] Slot%d Symbol %d: LLR Computation %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
LOG_I
(
PHY
,
"[AbsSFN %
u
.%d] Slot%d Symbol %d: LLR Computation %5.2f
\n
"
,
frame
,
nr_tti_rx
,
slot
,
symbol
,
ue
->
generic_stat_bis
[
ue
->
current_thread_id
[
nr_tti_rx
]][
slot
].
p_time
/
(
cpuf
*
1000
.
0
));
#endif
#endif
// Please keep it: useful for debugging
...
...
@@ -1091,7 +1091,7 @@ void nr_dlsch_deinterleaving(uint8_t symbol,
uint32_t
*
bundle_deint
=
malloc
(
N_bundle
*
sizeof
(
uint32_t
));
printf
(
"N_bundle %
d
L %d nb_rb_pdsch %d
\n
"
,
N_bundle
,
L
,
nb_rb_pdsch
);
printf
(
"N_bundle %
u
L %d nb_rb_pdsch %d
\n
"
,
N_bundle
,
L
,
nb_rb_pdsch
);
if
(
symbol
==
start_symbol
)
nb_re
=
6
;
...
...
@@ -1117,6 +1117,7 @@ void nr_dlsch_deinterleaving(uint8_t symbol,
//printf("k %d m %d bundle_deint %d llr_deint %d\n", k, m, bundle_deint[k], llr_deint[bundle_deint[k]*nb_re*L+m]);
}
}
free
(
bundle_deint
);
}
//==============================================================================================
...
...
@@ -2455,7 +2456,7 @@ unsigned short nr_dlsch_extract_rbs_dual(int **rxdataF,
int
prb
,
nb_rb
=
0
;
unsigned
short
k
;
int
i
,
j
,
aarx
;
int32_t
*
dl_ch0
=
NULL
,
*
dl_ch0
p
=
NULL
,
*
dl_ch0_ext
=
NULL
,
*
dl_ch1
=
NULL
,
*
dl_ch1p
=
NULL
,
*
dl_ch1_ext
=
NULL
,
*
rxF
=
NULL
,
*
rxF_ext
=
NULL
;
int32_t
*
dl_ch0
=
NULL
,
*
dl_ch0
_ext
=
NULL
,
*
dl_ch1
=
NULL
,
*
dl_ch1_ext
=
NULL
,
*
rxF
=
NULL
,
*
rxF_ext
=
NULL
;
k
=
frame_parms
->
first_carrier_offset
+
516
;
//0
...
...
@@ -2511,8 +2512,8 @@ unsigned short nr_dlsch_extract_rbs_dual(int **rxdataF,
if
((
i
&
1
)
!=
frame_parms
->
nushift
)
{
rxF_ext
[
j
]
=
rxF
[
i
];
// printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j]));
dl_ch0_ext
[
j
]
=
dl_ch0
p
[
i
];
dl_ch1_ext
[
j
++
]
=
dl_ch1
p
[
i
];
dl_ch0_ext
[
j
]
=
dl_ch0
[
i
];
dl_ch1_ext
[
j
++
]
=
dl_ch1
[
i
];
}
}
dl_ch0_ext
+=
6
;
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h
View file @
58f62a41
...
...
@@ -61,7 +61,7 @@ void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlsch);
NR_UE_DLSCH_t
*
new_nr_ue_dlsch
(
uint8_t
Kmimo
,
uint8_t
Mdlharq
,
uint32_t
Nsoft
,
uint8_t
max_turbo_iterations
,
uint8_t
N_RB_DL
,
uint8_t
abstraction_flag
);
void
free_nr_ue_ulsch
(
NR_UE_ULSCH_t
*
ulsch
);
void
free_nr_ue_ulsch
(
NR_UE_ULSCH_t
*
*
ulsch
);
NR_UE_ULSCH_t
*
new_nr_ue_ulsch
(
unsigned
char
N_RB_UL
,
int
number_of_harq_pids
,
uint8_t
abstraction_flag
);
...
...
openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_coding.c
View file @
58f62a41
...
...
@@ -42,9 +42,10 @@
void
free_nr_ue_ulsch
(
NR_UE_ULSCH_t
*
ulsch
)
void
free_nr_ue_ulsch
(
NR_UE_ULSCH_t
*
*
ulschptr
)
{
int
i
,
r
;
NR_UE_ULSCH_t
*
ulsch
=
*
ulschptr
;
if
(
ulsch
)
{
#ifdef DEBUG_ULSCH_FREE
...
...
@@ -80,7 +81,7 @@ void free_nr_ue_ulsch(NR_UE_ULSCH_t *ulsch)
}
}
free16
(
ulsch
,
sizeof
(
NR_UE_ULSCH_t
));
ulsch
=
NULL
;
*
ulschptr
=
NULL
;
}
}
...
...
@@ -179,7 +180,7 @@ NR_UE_ULSCH_t *new_nr_ue_ulsch(unsigned char N_RB_UL,
}
LOG_E
(
PHY
,
"new_ue_ulsch exit flag, size of %d , %zu
\n
"
,
exit_flag
,
sizeof
(
LTE_UE_ULSCH_t
));
free_nr_ue_ulsch
(
ulsch
);
free_nr_ue_ulsch
(
&
ulsch
);
return
(
NULL
);
...
...
openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
View file @
58f62a41
This diff is collapsed.
Click to expand it.
openair1/PHY/TOOLS/nr_phy_scope.c
View file @
58f62a41
...
...
@@ -345,9 +345,9 @@ void phy_scope_gNB(FD_phy_scope_gnb *form,
I_pucch
[
ind
]
=
(
float
)
pucch1ab_comp
[
2
*
(
ind
)];
Q_pucch
[
ind
]
=
(
float
)
pucch1ab_comp
[
2
*
(
ind
)
+
1
];
A_pucch
[
ind
]
=
10
*
log10
(
pucch1_comp
[
ind
])
;
A_pucch
[
ind
]
=
pucch1_comp
?
(
10
*
log10
(
pucch1_comp
[
ind
]))
:
0
;
B_pucch
[
ind
]
=
ind
;
C_pucch
[
ind
]
=
(
float
)
pucch1_thres
[
ind
]
;
C_pucch
[
ind
]
=
pucch1_thres
?
(
float
)
pucch1_thres
[
ind
]
:
0
;
}
fl_set_xyplot_data
(
form
->
pucch_comp
,
I_pucch
,
Q_pucch
,
10240
,
""
,
""
,
""
);
fl_set_xyplot_data
(
form
->
pucch_comp1
,
B_pucch
,
A_pucch
,
1024
,
""
,
""
,
""
);
...
...
@@ -840,7 +840,7 @@ void phy_scope_nrUE(FD_phy_scope_nrue *form,
free
(
bit
);
free
(
bit_pdcch
);
free
(
llr_pdcch
);
free
(
chest_t_abs
);
/*
free(chest_f_abs);
for (arx=0; arx<nb_antennas_rx; arx++) {
...
...
@@ -898,9 +898,9 @@ void reset_stats_gNB(FL_OBJECT *button,
static
void
*
scope_thread_gNB
(
void
*
arg
)
{
int
UE_id
,
CC_id
;
int
ue_cnt
=
0
;
# ifdef ENABLE_XFORMS_WRITE_STATS
FILE
*
gNB_stats
=
fopen
(
"gNB_stats.txt"
,
"w"
);
#endif
//
# ifdef ENABLE_XFORMS_WRITE_STATS
//
FILE *gNB_stats = fopen("gNB_stats.txt", "w");
//
#endif
while
(
!
oai_exit
)
{
ue_cnt
=
0
;
...
...
openair1/SCHED_NR_UE/phy_procedures_nr_ue.c
View file @
58f62a41
...
...
@@ -3351,10 +3351,12 @@ void nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int eNB
int
i_mod
,
eNB_id_i
,
dual_stream_UE
;
int
first_symbol_flag
=
0
;
if
(
!
dlsch0
)
return
;
if
(
dlsch0
->
active
==
0
)
return
;
if
(
dlsch0
&&
(
!
dlsch1
)
)
{
if
(
!
dlsch1
)
{
int
harq_pid
=
dlsch0
->
current_harq_pid
;
uint16_t
pdsch_start_rb
=
dlsch0
->
harq_processes
[
harq_pid
]
->
start_rb
;
uint16_t
pdsch_nb_rb
=
dlsch0
->
harq_processes
[
harq_pid
]
->
nb_rb
;
...
...
openair1/SIMULATION/NR_PHY/dlschsim.c
View file @
58f62a41
...
...
@@ -621,7 +621,7 @@ int main(int argc, char **argv)
for
(
i
=
0
;
i
<
2
;
i
++
)
{
printf
(
"gNB %d
\n
"
,
i
);
free_gNB_dlsch
(
gNB
->
dlsch
[
0
][
i
]
);
free_gNB_dlsch
(
&
(
gNB
->
dlsch
[
0
][
i
])
);
printf
(
"UE %d
\n
"
,
i
);
free_nr_ue_dlsch
(
&
(
UE
->
dlsch
[
0
][
0
][
i
]));
}
...
...
openair2/ENB_APP/enb_config.c
View file @
58f62a41
This diff is collapsed.
Click to expand it.
openair2/ENB_APP/enb_paramdef.h
View file @
58f62a41
...
...
@@ -539,122 +539,122 @@ typedef struct ccparams_lte_s {
}
ccparams_lte_t
;
#define CCPARAMS_CHECK { \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ .s1a= { config_check_modify_integer, UETIMER_T300_OKVALUES, UETIMER_T300_MODVALUES,8}} ,\
{ .s1a= { config_check_modify_integer, UETIMER_T301_OKVALUES, UETIMER_T301_MODVALUES,8}} ,\
{ .s1a= { config_check_modify_integer, UETIMER_T310_OKVALUES, UETIMER_T310_MODVALUES,7}} ,\
{ .s1a= { config_check_modify_integer, UETIMER_T311_OKVALUES, UETIMER_T311_MODVALUES,7}} ,\
{ .s1a= { config_check_modify_integer, UETIMER_N310_OKVALUES, UETIMER_N310_MODVALUES,8}} ,\
{ .s1a= { config_check_modify_integer, UETIMER_N311_OKVALUES, UETIMER_N311_MODVALUES,8}} ,\
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } , \
{
.s5 =
{ NULL } } \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } , \
{ { NULL } } \
}
/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
...
...
openair2/ENB_APP/enb_paramdef_emtc.h
View file @
58f62a41
...
...
@@ -258,93 +258,93 @@ typedef struct ccparams_eMTC_s {
}
#define EMTCPARAMS_CHECK { \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{ .s1a= { config_check_modify_integer, UETIMER_T300_OKVALUES, UETIMER_T300_MODVALUES,8}} , \
{ .s1a= { config_check_modify_integer, UETIMER_T301_OKVALUES, UETIMER_T301_MODVALUES,8}} , \
{ .s1a= { config_check_modify_integer, UETIMER_T310_OKVALUES, UETIMER_T310_MODVALUES,7}} , \
{ .s1a= { config_check_modify_integer, UETIMER_T311_OKVALUES, UETIMER_T311_MODVALUES,7}} , \
{ .s1a= { config_check_modify_integer, UETIMER_N310_OKVALUES, UETIMER_N310_MODVALUES,8}} , \
{ .s1a= { config_check_modify_integer, UETIMER_N311_OKVALUES, UETIMER_N311_MODVALUES,8}} , \
{
.s5= {NULL
}} , \
{
.s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{ .s5= {NULL
}} , \
{
{NULL
}} , \
{
{NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
{ {NULL
}} , \
}
#define SYSTEM_INFO_VALUE_TAG_SI_DESC(eMTCconfig) { \
...
...
openair2/RRC/LTE/MESSAGES/asn1_msg.c
View file @
58f62a41
...
...
@@ -187,9 +187,8 @@ uint8_t do_MIB_FeMBMS(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_
LTE_BCCH_BCH_Message_MBMS_t
*
mib_fembms
=&
carrier
->
mib_fembms
;
uint8_t
sfn
=
(
uint8_t
)((
frame
>>
2
)
&
0xff
);
uint16_t
*
spare
=
calloc
(
1
,
sizeof
(
uint16_t
));
uint16_t
*
additionalNonMBSFNSubframes
=
calloc
(
1
,
sizeof
(
uint16_t
));
if
(
spare
==
NULL
||
additionalNonMBSFNSubframes
==
NULL
)
abort
();
if
(
spare
==
NULL
)
abort
();
switch
(
N_RB_DL
)
{
case
6
:
...
...
@@ -217,7 +216,7 @@ uint8_t do_MIB_FeMBMS(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_
break
;
default:
AssertFatal
(
1
==
0
,
"Unknown dl_Bandwidth %
d
\n
"
,
N_RB_DL
);
AssertFatal
(
1
==
0
,
"Unknown dl_Bandwidth %
u
\n
"
,
N_RB_DL
);
}
LOG_I
(
RRC
,
"[MIB] systemBandwidth %x, additional non MBMS subframes %x, sfn %x
\n
"
,
...
...
@@ -287,7 +286,7 @@ uint8_t do_MIB(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_t phich
break
;
default:
AssertFatal
(
1
==
0
,
"Unknown dl_Bandwidth %
d
\n
"
,
N_RB_DL
);
AssertFatal
(
1
==
0
,
"Unknown dl_Bandwidth %
u
\n
"
,
N_RB_DL
);
}
AssertFatal
(
phich_Resource
<=
LTE_PHICH_Config__phich_Resource_two
,
"Illegal phich_Resource
\n
"
);
...
...
@@ -1021,7 +1020,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
sib1_1310
->
bandwidthReducedAccessRelatedInfo_r13
->
fdd_DownlinkOrTddSubframeBitmapBR_r13
=
calloc
(
1
,
sizeof
(
struct
LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__fdd_DownlinkOrTddSubframeBitmapBR_r13
));
memset
(
sib1_1310
->
bandwidthReducedAccessRelatedInfo_r13
->
fdd_DownlinkOrTddSubframeBitmapBR_r13
,
0
,
sizeof
(
s
izeof
(
struct
LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__fdd_DownlinkOrTddSubframeBitmapBR_r13
)
));
sizeof
(
s
truct
LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__fdd_DownlinkOrTddSubframeBitmapBR_r13
));
if
(
*
configuration
->
fdd_DownlinkOrTddSubframeBitmapBR_r13
[
CC_id
])
{
sib1_1310
->
bandwidthReducedAccessRelatedInfo_r13
->
fdd_DownlinkOrTddSubframeBitmapBR_r13
->
present
...
...
@@ -1183,7 +1182,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier,
sib1_1310
->
bandwidthReducedAccessRelatedInfo_r13
->
fdd_DownlinkOrTddSubframeBitmapBR_r13
=
calloc
(
1
,
sizeof
(
struct
LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__fdd_DownlinkOrTddSubframeBitmapBR_r13
));
memset
(
sib1_1310
->
bandwidthReducedAccessRelatedInfo_r13
->
fdd_DownlinkOrTddSubframeBitmapBR_r13
,
0
,
sizeof
(
s
izeof
(
struct
LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__fdd_DownlinkOrTddSubframeBitmapBR_r13
)
));
sizeof
(
s
truct
LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__fdd_DownlinkOrTddSubframeBitmapBR_r13
));
sib1_1310
->
bandwidthReducedAccessRelatedInfo_r13
->
fdd_DownlinkOrTddSubframeBitmapBR_r13
->
present
=
LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__fdd_DownlinkOrTddSubframeBitmapBR_r13_PR_subframePattern10_r13
;
sib1_1310
->
bandwidthReducedAccessRelatedInfo_r13
->
fdd_DownlinkOrTddSubframeBitmapBR_r13
->
choice
.
subframePattern10_r13
.
buf
=
calloc
(
2
,
sizeof
(
uint8_t
));
...
...
targets/RT/USER/lte-hwlat2.c
View file @
58f62a41
...
...
@@ -1197,7 +1197,7 @@ void histogram_save_in_csv( histo_time_t *histo , char *file_sufix)
fprintf
(
fp
,
"%d-%.0f;%u
\n
"
,
min_val
,
histo
[
i
].
max
,
histo
[
i
].
count
);
min_val
=
histo
[
i
].
max
;
}
free
(
csv_filename
);
fclose
(
fp
);
}
...
...
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